2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EXCEL】計測機器なしでSequence Makerを楽しむ

Posted at

やること

 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列に応答を表示する。
20250311_233410.jpg

簡易調整もどきで楽しむ

20250311_234228.jpg

  • 目標値 セル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
2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?