やること
Excel通信コマンド送受信アドイン「Sequence Maker」を計測機器なしで楽しむ。
【EXCEL】Sequence Makerの計測結果のテキスト書出し #Excel - Qiita でちょっとトリッキーな使い方をしていたので、もう少し一般的な使い方を行う。
事前準備:仮想インターフェイス
計測機器がなくても動作確認の出来る仮想インターフェイスを利用する。仮想インターフェイスについては毎度おなじみのSequence Makerさんの以下の記事をご参照ください。
Sequence Makerの仮想インターフェイスを使う #Excel - Qiita
Sub virtualcommand_set()
Dim automationObject As Object
Set automationObject = Application.COMAddIns("Sequence Maker").Object
Dim virtualCommand As Variant
Set virtualCommand = automationObject.CreateVirtualCommand()
Dim result As Long
Dim CommandNo As Long
Dim InterfaceNo As Long
InterfaceNo = 1
For CommandNo = 1 To 100
virtualCommand.Command = ":" & CommandNo & "_TestCMD?"
virtualCommand.Response = CommandNo
result = automationObject.SetVirtualCommand(virtualCommand, InterfaceNo, CommandNo)
If result <> 0 Then
Exit Sub
End If
Next
For CommandNo = 1 To 100
result = automationObject.GetVirtualCommand(virtualCommand, InterfaceNo, CommandNo)
If result <> 0 Then
Exit Sub
End If
Cells(CommandNo, InterfaceNo) = virtualCommand.Command
Cells(CommandNo, InterfaceNo + 1) = virtualCommand.Response
Next
End Sub
実行するとインターフェイス#1にコマンドを設定し、設定した内容をA列にコマンド、B列に応答を表示する。
簡易調整もどきで楽しむ
- 目標値 セルF3
- 初期値 セルG3
セルE4に「=":"&G3&"_TestCMD?"」としているので、セルG3は1から100までの整数を設定する。
使用するマクロはとりあえず以下のようなものを用意。
Sub 値比較してG3変更()
Dim valueF3 As Variant
Dim valueF4 As Variant
Dim valueG3 As Variant
' セルF3, F4, G3の値を取得
valueF3 = Range("F3").Value
valueF4 = Range("F4").Value
valueG3 = Range("G3").Value
' 値を比較してG3を変更
If valueF4 > valueF3 Then
Range("G3").Value = valueG3 - 1 ' F4 > F3 の場合、G3を-1する
ElseIf valueF4 < valueF3 Then
Range("G3").Value = valueG3 + 1 ' F4 < F3 の場合、G3を+1する
End If
End Sub
defaultだと、上書きの確認のPopUpが1度出るかと思います。また、終了は停止ボタンを押してください。
おまけ:計測機器なしで使えるもの
マニュアルのサンプルプログラムをもとにご紹介。1行~5行に結果を表示します。
Sub command_test()
Dim i As Single
Dim j As Single
' Sequence Maker COMアドインオブジェクトの取得方法
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("Sequence Maker")
Set automationObject = addIn.Object
'=> Set automationObject = Application.COMAddIns("Sequence Maker").Object
' 0.Application.COMAddIns("Sequence Maker").説明
MsgBox addIn.Description
' 1.Sequence Makerのバージョン番号の取得
i = 1
j = 0
Cells(i, j + 1) = "バージョン"
j = j + 1
Cells(i, j + 1).NumberFormat = "@" ' 文字列に設定
Cells(i, j + 1) = automationObject.GetVersion()
' 2.カメラデバイス名の取得
i = 2
j = 0
Cells(i, j + 1) = "カメラ"
Dim cameraDeviceName() As String
cameraDeviceName = automationObject.GetCameraDeviceName()
If UBound(cameraDeviceName) < 0 Then
Cells(i, j + 2) = "カメラデバイスなし"
Else
For j = LBound(cameraDeviceName) To UBound(cameraDeviceName)
Cells(i, j + 2) = cameraDeviceName(j)
Next j
End If
' 3.CONTECデジタル入出力デバイス名の取得
i = 3
j = 0
Cells(i, j + 1) = "CONTECデバイス"
Dim contecDigitalIoDeviceName() As String
contecDigitalIoDeviceName = automationObject.GetContecDigitalIoDeviceName()
If UBound(contecDigitalIoDeviceName) < 0 Then
Cells(i, j + 2) = "CONTECデジタル入出力デバイスなし"
Else
For j = LBound(contecDigitalIoDeviceName) To UBound(contecDigitalIoDeviceName)
Cells(i, j + 2) = contecDigitalIoDeviceName(j)
Next j
End If
' 4.VISAアドレスの取得
i = 4
j = 0
Cells(i, j + 1) = "VISA"
Dim visaAddress() As String
visaAddress = automationObject.GetVisaAddress()
If UBound(visaAddress) < 0 Then
Cells(i, j + 2) = "VISAアドレス取得できず"
Else
For j = LBound(visaAddress) To UBound(visaAddress)
Cells(i, j + 2) = visaAddress(j)
Next j
End If
' 5.COMポート名の取得
i = 5
j = 0
Cells(i, j + 1) = "COMポート"
Dim comPortName() As String
comPortName = automationObject.GetComPortName()
If UBound(comPortName) < 0 Then
Cells(i, j + 2) = "COMポート名の取得できず"
Else
For j = LBound(comPortName) To UBound(comPortName)
Cells(i, j + 2) = comPortName(j)
Next j
End If
End Sub