c#ascii协议问题

时间:2009-12-04 16:39:26

标签: c# serial-port ascii

我有一个程序通过串口向设备发送ASCII命令。该程序是一个演示,并没有做我想要的。

我只是想让设备在c#中做出回应,而我却得不到任何回报。 所有串口设置都正确。 我发送与演示软件完全相同的消息。

//e.g message <STX>ABC<EOT>

byte[] msg = new byte[5];

msg[0] = 0x02;
msg[1] = 0x41;
msg[2] = 0x42;
msg[3] = 0x43;
msg[4] = 0x04;
comport.write(msg, 0,msg.length)

该设备是一台显示器。代码只是一个例子。没有心跳只是对发送的正确消息或错误消息的响应。设置为标准9600-8-N-1。 “引脚2和3之间的回形针(TX和RX)。”是的,我知道电缆的工作原理,因为它与产品软件一起使用。并且我回到我发送的东西。我使用了虚拟com程序,一切似乎都没问题。 “6个字节,但仅初始化前5个。”抱歉错字。

将SerialPort.DtrEnable和RtsEnable属性设置为true。默认情况下在c#中打开。我已经尝试过超级终端,我也没有得到回应。我发送了\ r和\ n没有运气。

6 个答案:

答案 0 :(得分:2)

C# Tutorial on Serial Port Communication应该可以提供帮助。我不确定在C#中通过赋值在Hex和Byte之间是否存在适当的内在种姓。这可能是您问题的根源。

设备心跳

设备是否发送DC2DLE响应(心跳)?如果是这样,尝试使用基本的9600-8-N-1设置在Hyperterminal中打开一个COM端口,看看你是否得到任何东西。您尝试发送命令时是否发回了STXSYNETX命令?我不确定您尝试与之通信的硬件的命令集实现。

检查COM端口操作

您是否检查过您的COM端口是否正常工作?您可以通过在引脚2和3(TX和RX)之间插入回形针来创建环回。这将环回您的COM端口,在Hyper终端中,您可以打开该COM端口并键入。角色会回应。

您还可以使用一个名为com0com的软件来创建虚拟COM端口,以便在实际发送之前测试您发送的内容。

它提供了通过nullmodem连接链接的成对虚拟COM端口。然后,您可以使用您喜欢的终端应用程序或任何您喜欢的方式将数据发送到一个COM端口并从另一个端口接收

如果没有更具体的信息,我们将抓住稻草。

答案 1 :(得分:1)

您正在分配和发送6个字节,但只初始化前5个。

另外,根据你所写的内容,你正在做的一切都正确,就像演示程序一样。对?然后我只能看到一个解决方案:设备正拉着你的腿!

说真的:如果一个程序有效,而你没有,那就必须有所不同。

答案 2 :(得分:1)

到目前为止,最常见的错误是忘记打开硬件握手信号。如果设备认为主机已关闭,则设备不会发送任何内容。确保将SerialPort.DtrEnable和RtsEnable属性设置为true。

如前所述,修复数组大小。虽然它可能无济于事,但STX角色可以确保抛弃垃圾。

使用Windows Hyperterminal applet检查基本硬件是否正常。您可以通过键入Ctrl + B,ABC,Ctrl + D

发送您尝试传输的消息

答案 3 :(得分:0)

正如其他人所建议的那样,最好用某种终端软件检查发送和接收的内容。我已成功使用“realterm” - 它具有很好的ascii或二进制/十六进制视图显示。

答案 4 :(得分:0)

由于您使用的是ASCII,因此另一个问题可能是您没有发送正确的行终止字符。有些设备需要\r和其他\n。确保您正确设置。

答案 5 :(得分:0)

该设备是一台显示器。代码只是一个例子。 没有心跳只是对发送的正确消息或错误消息的响应。 设置为标准9600-8-N-1。 “引脚2和3之间的回形针(TX和RX)。”是的,我知道电缆的工作原理,因为它与产品软件一起使用。并且我回到我发送的东西。我使用了虚拟com程序,一切似乎都没问题。 “6个字节,但仅初始化前5个。”抱歉错字。

将SerialPort.DtrEnable和RtsEnable属性设置为true。默认情况下在c#中打开。 我已经尝试过超级终端,我也没有得到回应。 我发送了\ r和\ n没有运气。