如何通过rs232与秤进行通信

我试图通过使用.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,现在一切正常。

我编写了很多权重,通常如果你甚至没有得到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.

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

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

如果你在写作

 port.Write("5"); 

然后你发送一个二进制53( ASCII图表 )在ASCII图表上看到Dec 5是如何查询而Dec 53是char’5’?

试试这个:

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