どうも、もももです!
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ケーブルの結線方法を合わせる必要があると知らなかったので、手元にあった結線内容不明のケーブルで悪戦苦闘しました(笑)
コメント
私は、フリーソフトであるEasyComを使って、エクセルで天秤やpH計をコントロールして測定値をエクセルのセルに貼り付けています。
新しい機種では天秤の通信端子がUSBになっており、これでデータを取得する方法を考える必要がありそうです。