teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

自己解決の部分を追記しました

2018/08/19 01:07

投稿

ryop9982
ryop9982

スコア15

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

新しくプログラムを書きました

2018/08/19 01:07

投稿

ryop9982
ryop9982

スコア15

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