質問編集履歴
2
自己解決の部分を追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -177,4 +177,36 @@
|
|
177
177
|
|
178
178
|
### 補足情報(FW/ツールのバージョンなど)
|
179
179
|
Visual Studio2013
|
180
|
-
KI-VISA
|
180
|
+
KI-VISA
|
181
|
+
|
182
|
+
### 自己解決方法
|
183
|
+
読み照らしながらC++で電圧値をプログラムから通信で変更することができました。
|
184
|
+
そのソースです。
|
185
|
+
|
186
|
+
|
187
|
+
#include "stdafx.h"
|
188
|
+
//タイプライブラリの作成
|
189
|
+
|
190
|
+
int _tmain(int argc, _TCHAR* argv[])
|
191
|
+
{
|
192
|
+
IMessagePtr spMsg; //スマート・ポインタ IMessagePtr型でCOMインターフェースを宣言、呼び出しを自動化している
|
193
|
+
CoInitializeEx(NULL, COINIT_MULTITHREADED); //COMを使うための宣言
|
194
|
+
HRESULT hr;
|
195
|
+
IResourceManager3Ptr spRM;
|
196
|
+
hr = spRM.CreateInstance(CLSID_ResourceManager); //CreateInstance()メソッドを使ってリソース・マネージャを作成
|
197
|
+
|
198
|
+
|
199
|
+
spMsg = spRM->Open(L"TCPIP::192.168.11.2::inst0::INSTR", NO_LOCK, 0, L""); //インターフェースの参照
|
200
|
+
SAFEARRAY* pSA = NULL;
|
201
|
+
|
202
|
+
pSA = spRM->FindRsrc(L"TCPIP?* INSTR");
|
203
|
+
int r;
|
204
|
+
r = spMsg->WriteString(L"OUTP 0 \n");
|
205
|
+
r = spMsg->WriteString(L"VOLT 10.0 \n");
|
206
|
+
r = spMsg->WriteString(L"CURR 5.0 \n");
|
207
|
+
r = spMsg->WriteString(L"OUTP 1 \n");
|
208
|
+
|
209
|
+
|
210
|
+
spMsg->Close(); //閉じる
|
211
|
+
return 0;
|
212
|
+
}
|
1
新しくプログラムを書きました
title
CHANGED
File without changes
|
body
CHANGED
@@ -130,9 +130,51 @@
|
|
130
130
|
|
131
131
|
}
|
132
132
|
```
|
133
|
+
```C++
|
134
|
+
#import "C:\Program Files\IVI Foundation\VISA\VisaCom64\GlobMgr.DLL" no_namespace named_guids
|
133
135
|
|
136
|
+
IMessagePtr spMsg;
|
137
|
+
IMessage* pMsg = NULL;
|
134
138
|
|
139
|
+
HRESULT hr;
|
140
|
+
IResourceManager3Ptr spRM;
|
141
|
+
hr = spRM.CreateInstance(CLSID_ResourceManager);
|
135
142
|
|
143
|
+
IMessagePtr spMsg;
|
144
|
+
spMsg = spRM->Open(L"TCPIP::192.168.11.2::inst0::INSTR", NO_LOCK, 0, L"");
|
145
|
+
|
146
|
+
SAFEARRAY* pSA = NULL;
|
147
|
+
try {
|
148
|
+
pSA = spRM->FindRsrc(L"?*INSTR");
|
149
|
+
r = spmsg->WriteString(L"CURR 20.0\n");
|
150
|
+
r = spmsg->WriteString(L"VOLT 5.5\n");
|
151
|
+
|
152
|
+
}
|
153
|
+
catch (_com_error e) {
|
154
|
+
//エラー・コードとメッセージは_com_error クラスのメンバー関数から取得できる
|
155
|
+
HRESULT hr = e.Error();
|
156
|
+
_bstr_t strDescription = e.Description();
|
157
|
+
}
|
158
|
+
if (pSA) {
|
159
|
+
|
160
|
+
BSTR* rgElems = NULL;
|
161
|
+
::SafeArrayAccessData(pSA, (PVOID*)&rgElems);
|
162
|
+
ASSERT(rgElems);
|
163
|
+
LONG lLBound, lUBound;
|
164
|
+
::SafeArrayGetLBound(pSA, 1, &lLBound);
|
165
|
+
::SafeArrayGetUBound(pSA, 1, &lUBound);
|
166
|
+
for (long lNdx = lLBound; lNdx <= lUBound; lNdx++) {
|
167
|
+
_bstr_t strFound = rgElems[lNdx];
|
168
|
+
}
|
169
|
+
::SafeArrayUnaccessData(pSA);
|
170
|
+
::SafeArrayDestroyData(pSA);
|
171
|
+
}
|
172
|
+
|
173
|
+
|
174
|
+
spMsg->Close();
|
175
|
+
|
176
|
+
```
|
177
|
+
|
136
178
|
### 補足情報(FW/ツールのバージョンなど)
|
137
179
|
Visual Studio2013
|
138
180
|
KI-VISA
|