IBM PCXT 用のケーブル LC-RS9 RS232 9 ピンを使用して PC に接続されている SAG105 METTLER TOLEDO を VB.net でコーディングしようとしています。インターネットで調査しましたが、VB.net を使用して体重計デバイスにデータを送信するのに役立つテンプレート コードを見つけることができませんでした。シリアルポートのコードを見てみたのですが、これはIBM PCXT用のRS-232なので、このシリアルポート方式はうまくいきませんでした。スケールに関するドキュメントがなかったため、会社に連絡しましたが、残念ながら、デバイスのテンプレート コードはないとのことでした。
通信チャネルを開き、基本的なコマンドを送信する方法を教えてください。適切な Web サイトに誘導したり、知識を共有したりしてください。私はすでにこれに何日も費やしていますが、どこにも行っていません。
よろしくお願いします
動作する VB のまともなコードを見つけることができましたが、いくつか問題があります。したがって、使用するコマンドは、「Z」-スケールをゼロに設定し、「SIR」は不安定な値を継続的に読み取り、「S」は安定した値を取得し、「SI」-不安定な値を1回読み取ります。
ただし、私が抱えている問題は、コマンドを送信するルーチンが 1 回実行されますが、受信コマンドが 2 回実行されることです。初めて実行すると正しい値が得られますが、2 回目には ES が発生します (天びんがコマンドを認識しなかった構文エラーを意味します)。これを見るのにいくつかの休憩を入れました。
私のコードは次のとおりです。
Dim myWeight As String, myWeightValue As Single
Delegate Sub SerialDataIn()
Public myDelegate As SerialDataIn
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
CloseSerialPort() ' Close the port
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'This opens the serial Port
OpenSerialPort()
'Assign the delegate for the Serial Communications handling
myDelegate = New SerialDataIn(AddressOf SerialDataInProc)
End Sub
'HANDLE SERIAL PORT COMMUNICATIONS IN TO THE PC FROM THE BALANCE:
Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
'Get the weight value string from the balance
myWeight = SerialPort1.ReadLine
'Call a new Thread Procedure
Me.Invoke(myDelegate)
End Sub
'The delegate...
Sub SerialDataInProc()
'Display the received string in the text box
Me.TextBox1.Text = myWeight
'If any string is received that is not prefixed with an 'S' then it is not a weight value, so don't try to process the value
If myWeight.Substring(0, 1) <> "S" Then GoTo HopIt
'Convert the string received from the balance into a value
myWeightValue = Convert.ToSingle(myWeight.Substring(4, 10))
'If the weight on the balance exceeds 50g then reset the balance (stop data transmission) and display the message "Stopped"
If myWeightValue > 50 Then
SerialPortOut("@")
MsgBox("Stopped")
End If
HopIt:
End Sub
'Write any command to the balance port
Sub SerialPortOut(ByVal myText)
Try
SerialPort1.WriteLine(myText & vbCrLf)
Catch ex As Exception
MsgBox("Transmission to Serial Port Failed. Error: " & Err.Description, MsgBoxStyle.Critical, "Comms Failed")
End Try
End Sub
'Send the Balance the SIR Command (Send current weight value and repeat) if the [SEND SIR] button has been pressed
'Send the @ Command to the balance (Cancels all previous commands, so resets the balance and stops data transmission) if the [Send @] button is clicked
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonReset.Click, ButtonStart.Click
Select Case sender.name
Case Is = "ButtonReset"
SerialPortOut("@")
Case Is = "ButtonStart"
SerialPortOut("S")
End Select
End Sub
'Set the serial Port Parameters and open the Port
Private Sub OpenSerialPort()
With SerialPort1
.PortName = "Com1"
.BaudRate = 9600
.DataBits = 8
.Parity = IO.Ports.Parity.None
.StopBits = IO.Ports.StopBits.One
.Handshake = IO.Ports.Handshake.XOnXOff
Try
.Open()
Catch ex As Exception
MsgBox("Could not open the Serial Port! Error: " & Err.Description, MsgBoxStyle.Critical, "Port Error")
End Try
End With
End Sub
'Close the Serial Port
Private Sub CloseSerialPort()
SerialPort1.Close()
End Sub
誰かがこれを見て、上記の問題が発生している理由を教えてください。