我试图通过使用.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。
答案 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)
另一个问题是,你有正确的电缆吗?分线盒非常适合验证接线。