【VB.NET】MT-SICSでメトラー・トレド 電子天秤から重量を取得

パソコン

どうも、もももです!

VB.NETでメトラー・トレドの電子天秤からMT-SICSコマンドで重量を取得する方法について紹介します。

構成イメージ

接続構成

天秤とPCは上図の通り接続しました。

PC側にD-SUBポートが無かったためUSBに変換して接続しています。

使用機器は以下の通りです。

  • 電子天秤:メトラー「ME104」
  • RS232Cケーブル:次項の通り作成
  • RS232C-USB変換ケーブル:BUFFALO「BSUSRC0610BS」
  • PC:Windows10 Pro

RS232Cインターフェース 配線

RS232Cケーブルの結線イメージは上図の通りです。

ケーブルは自分ではんだ付けして作成しても良いですし、面倒な方はミスミで購入することも可能です。(※ミスミ 結線パターンのST3が該当)

サンプルプログラム

Imports System.IO.Ports
Public Class Form1

    Dim _serialPort As SerialPort
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim portName As String = "COM1"
        Dim baudRate As Integer = 9600
        Dim parity As Parity = Parity.None
        Dim dataBits As Integer = 8
        Dim stopBits As StopBits = StopBits.One

        _serialPort = New SerialPort(portName, baudRate, parity, dataBits, stopBits)
        _serialPort.Open()
    End Sub

    Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
        _serialPort.Close()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '安定重量要求コマンド送信
        Dim cmd As String = "S " + vbCrLf
        'cmd: "S " & vbCrLf
        _serialPort.WriteLine(cmd)

        '1秒待機
        System.Threading.Thread.Sleep(1000)

        '応答データ受信
        Dim data = _serialPort.ReadExisting
        For i = 0 To 10
            '末尾チェック
            If data.Substring(data.Length - 2, 2) = vbCrLf Then
                'data: "---- METTLER TOLEDO ----" & vbCrLf & "ES" & vbCrLf & "S S    10.0000 g" & vbCrLf

                Dim dataArray = data.Split(" ")
                'dataArray(0): "----"
                'dataArray(1): "METTLER"
                'dataArray(2): "TOLEDO"
                'dataArray(3): "----" & vbCrLf & "ES" & vbCrLf & "S"
                'dataArray(4): "S"
                'dataArray(5): ""
                'dataArray(6): ""
                'dataArray(7): ""
                'dataArray(8): "10.0000"
                'dataArray(9): "g" & vbCrLf

                Me.Label1.Text = dataArray(dataArray.Length - 2)
                Exit Sub
            End If
            System.Threading.Thread.Sleep(1000)
            data += _serialPort.ReadExisting
        Next i
        MessageBox.Show("受信タイムオーバー")
    End Sub
End Class

コード解説

上記は「重量取得」ボタンを押下すると、天秤に対して安定重量を要求するコマンドを送信し、応答データから重量を抜き出してラベルに表示するサンプルプログラムです。

・フォーム ロードイベント(5~14行)

画面起動時にシリアル通信を確立します。

Dim portName As String = “COM1″の「COM1」の部分はご自身の環境のCOM番号に変更して下さい。

・フォーム クローズドイベント(16~18行)

画面終了時にシリアル通信をクローズします。

・重量取得ボタン クリックイベント(20~55行)

安定重量を要求するコマンドを送信し、応答データから重量を抜き出してラベルに表示します。

※コード中のコメント部分は変数の内部データを表しています。

コマンド送信部では安定重量を要求する「S」コマンドを送信しています。

応答データ受信部では末尾に改行コード(vbCrLf)が確認できるまでデータの受信を行い、受信データから重量を抜き出してラベルに表示します。

10サイクルで受信が完了しない場合はタイムオーバーとしています。

まとめ

VB.NETでメトラー・トレドの電子天秤からMT-SICSコマンドで重量を取得する方法についてまとめました。

今回初めてRS232Cケーブルを用いてシリアル通信を行ったのですが、通信相手毎にRS232Cケーブルの結線方法を合わせる必要があると知らなかったので、手元にあった結線内容不明のケーブルで悪戦苦闘しました(笑)

コメント

タイトルとURLをコピーしました