0

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

誰かがこれを見て、上記の問題が発生している理由を教えてください。

4

1 に答える 1

0

SAG105 のプロトコルはMT-SICS Standard Interface Command Setのようです

Docklight ソフトウェアを使用すると (無料の評価版でも)、標準の USB-to-RS232 プラグを備えた「最新の」PC で簡単に試すことができます。

プロトコルは非常に単純なテキスト コマンドで構成されているようです。そのため、次のテキスト コマンドを SAG105 に送信すると、現在のバランス値が返されます。

I2<CR><LF>

"CR" = キャリッジ リターン、ASCII 10 進数コード 13 および "LF" = ライン フィード、ASCII 10 進数コード 10。

SAGE105 の標準 COM パラメータ (例: 9600 ボー、8 データ ビット、1 ストップ ビット、パリティなし) を見つけることができませんでしたが、おそらくこの情報は既にお持ちで、いずれにせよ、アプリケーション固有の設定に設定されている可能性があります。古いアプリケーション。RS232 の設定がわかれば、Docklight が SAG105 と手動で対話するための小さなサンプル プロジェクトを実際にお送りできます。

.NET 内では、このようなテキスト ベースの単純なプロトコルは、使用している設定とプロトコル コマンドが正しいことを確認すれば、簡単に実装できます。

于 2015-10-20T20:44:13.207 に答える