【VBA】ReadIEEEBlock命令が使えない GPIBの計測機器の画面をBMPで出力

[プログラミング]Infiniiumを使っていますが、オシロの画面をPCに取り込むコマンドはありますか? | Keysight (formerly Agilent’s Electronic Measurement)
[プログラミング]InfiniiVisionシリーズ用のリモートプログラムを作成中です。画面の画像を、画像ファイルとして取り込む事は可能ですか? | Keysight (formerly Agilent’s Electronic Measurement)
BMP Windows bitmap | Keysight (formerly Agilent’s Electronic Measurement)

スペクトラムアナライザやオシロスコープと言ったGPIBの計測機器の画面をBMPで出力することが VISA-COMライブラリを使っていると可能なのですが。上記のサイトの様に
ReadIEEEBlock を使って返ってきたバイナリデータを読み取ろうとするとオートメーションエラー
-2147418113(8000ffff) になってしまうらしい・ω・

Dim byteData() As Byte
Dim Scope As New VisaComLib.FormattedIO488
Dim RM As New VisaComLib.ResourceManager
Scope.IO = RM.Open("GPIB0::8::INSTR") 
Scope.IO.Timeout = 30000 'Timeout 30sec
Scope.WriteString "DL2" 'Delimiter EOI only
Scope.WriteString "BMP?" ' Bitmap output
byteData = Scope.ReadString() ' Bitmap as String
Scope.WriteString "DL0" 'Delimiter CR/LF/EOI

例えば、こんな感じで ReadString で読みだすと、
処理は進むのだが、データは当然破壊されて、ファイルに出力しても正常なBMPファイルにはならない
で、どうしたかと言うと

Dim fileNum
Dim I As Long
Dim byteBuffer As Byte
Dim byteData() As Byte
Dim Scope As New VisaComLib.FormattedIO488
Dim RM As New VisaComLib.ResourceManager
Scope.IO = RM.Open("GPIB0::8::INSTR") 

Scope.IO.Timeout = 30000 'Timeout 30sec
Scope.WriteString "DL2" 'Delimiter EOI only
Scope.WriteString "BMP?" ' Bitmap output
byteData = Scope.IO.Read(384000) ' Bitmap as String
Scope.WriteString "DL0" 'Delimiter CR/LF/EOI
Scope.IO.Close

fileNum = FreeFile
Open "C:\Users\User\Desktop\test.bmp" For Binary As #fileNum
For I = 0 To UBound(byteData)
byteBuffer = byteData(I)
Put #fileNum, I + 1, byteBuffer
Next I
Close #fileNum

IO.Read だと読めるらしい(・ω・) 
ちなみに、大概BMP機器は画面出力時のBMPサイズが決まっているので、それを最大値で指定すればOK

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です