在 VB.net 中使用适用于 IBM PCXT 的电缆 LC-RS9 RS232 9 针与 SAG105 METTLER TOLEDO 进行通信

问题描述 投票:0回答:2

我正在尝试在 VB.net 中对 SAG105 METTLER TOLEDO 进行编码,该 SAG105 METTLER TOLEDO 使用 IBM PCXT 的电缆 LC-RS9 RS232 9 针连接到 PC。我在互联网上进行了研究,但无法找到可以帮助我使用 VB.net 将数据发送到体重秤设备的模板代码。我查看了串行端口的代码,但由于这是 IBM PCXT 的 RS-232,因此这种串行端口方法不起作用。我联系了该公司,因为我没有任何规模文档,不幸的是他们说他们没有该设备的任何模板代码。

有人可以通过引导我访问正确的网站或分享您的一些知识来帮助我开始打开通信渠道并发送基本命令吗?我已经花了好几天的时间在这上面,但没有任何进展。

提前非常感谢

我设法找到了一个不错的 VB 代码,可以工作,但是我遇到了一些问题。所以我将使用的命令是“Z”-将刻度设置为零,“SIR”连续读取不稳定值,“S”获得稳定值,“SI”-读取一次不稳定值。

但是,我遇到的问题是发送命令的例程运行一次,但接收命令运行两次。当它第一次运行时,我得到正确的值,但第二次我得到 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

请有人看一下这个并告诉我为什么会出现上述问题

vb.net command serial-communication weighting
2个回答
0
投票

SAG105 的协议似乎是 MT-SICS 标准接口命令集

使用我们的 Docklight 软件(即使有免费评估版),您可以轻松地在带有标准 USB 转 RS232 插头的“现代”PC 上进行尝试。

该协议似乎由非常简单的文本命令组成,因此向 SAG105 发送以下文本命令应该返回当前余额值:

I2<CR><LF>

“CR”= 回车,ASCII 十进制代码 13。“LF”= 换行,ASCII 十进制代码 10。

我无法找到 SAGE105 的标准 COM 参数(例如 9600 波特、8 个数据位、1 个停止位、无奇偶校验),但也许您已经拥有此信息,并且可以通过以下方式将其设置为特定于应用程序的设置:你的旧应用程序。如果您知道 RS232 设置,我实际上可以向您发送一个 Docklight 的小示例项目,以便手动与 SAG105 对话。

在 .NET 中,一旦您确认设置和您使用的协议命令是正确的,这种基于文本的简单协议应该很容易实现。


0
投票

嗯,很旧的帖子希望你能帮助我...... 我正在研究天平(XP402)的雾化,想知道您的代码是否可以工作。我正在使用 Visual Basic .net(基本)以及首选语言。我希望你能与我分享一些代码谢谢!!!

© www.soinside.com 2019 - 2024. All rights reserved.