如何通过rs232与秤进行通信

时间:2011-08-25 09:52:44

标签: c# serial-port scale

我试图通过使用.net中的SerialPort类使我的C#应用​​程序通过rs232与数字秤进行通信。不幸的是,我无法从规模中得到任何反馈。

这是一个TSCALE TSQSP量表,显然它正在使用CAS通信协议。根据我对CAS协议的理解,我需要发送“ENQ”等待“ACK”然后发送“DC1”来获取信息,但是在发送“ENQ”后我没有得到任何回复。这是我的代码。有没有人有相同通信协议的规模经验?

非常感谢您的帮助

public partial class Form1 : Form
{
    private SerialPort port = new SerialPort("COM6", 4800, Parity.None, 8, StopBits.One);

    public Form1()
    {
        InitializeComponent();

        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        port.Open();            
    }

    private void button1_Click(object sender, EventArgs e)
    {            
        port.Write("ENQ");

    }

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        this.textBox1.Text = port.ReadExisting();
    }      
}

感谢大家的帮助,所有的答案都很有帮助,我终于能够让它发挥作用了。首先,我发现我没有正确设置比例,你也是对的,我应该发送05H。现在一切正常,thx。

3 个答案:

答案 0 :(得分:4)

我编写了很多权重,通常如果你甚至没有得到ENQ的响应,那是因为你没有正确设置SerialPort。 100%确保正确设置波特率,数据位,停止位和奇偶校验。

我要做的是下载LookRS232。它是一个通过COM端口进行通信的程序。安装完成后,使用我们的设置打开COM端口,然后将ENQ直接写入COM端口。为了让它首先在这里工作,测试很多设置会更容易。然后,当您开始工作时,请使用您程序中完全相同的设置。

编辑 - 在这里增加了来自HANS PASSANT的一些重要信息 - 最重要的是ENQ是ASCII值5,而不是一个字符串

port.Write("ENQ");

ENQ,ACK和DC1是控制代码,而不是字符串。使用ASCII表来了解代码。修正:

port.Write(5);

您还应该打开硬件握手信号,许多设备使用它来确保机器已通电并准备好接收数据。所以他们知道他们收到的是真实数据,而不是噪音。修正:

port.Open();            
port.DtrEnable = true;
port.RtsEnable = true;

如果您仍然遇到问题,测试与HyperTerminal或Putty等其他程序的连接总是一个好主意。使用键盘上的Ctrl键生成控制代码。 ENQ是Ctrl + E,DC1是Ctrl + Q。

答案 1 :(得分:2)

如果您需要发送ENQ,则需要发送二进制5,而不是字符串5。

如果你正在写

port.Write("5");

然后你发送一个二进制53(ASCII Chart) 请参阅ASCII图表,Dec 5是查询,Dec 53是char'5'?

试试这个:

byte [] Buff = new byte[1];
        Buff[0] = 0x05;
        port.Write(Buff, 0, 1);

答案 2 :(得分:1)

另一个问题是,你有正确的电缆吗?分线盒非常适合验证接线。