c#ascii协议问题

c#ascii协议问题,c#,serial-port,ascii,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.wri

我有一个程序,通过串口向设备发送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)
//例如消息ABC
字节[]消息=新字节[5];
msg[0]=0x02;
msg[1]=0x41;
msg[2]=0x42;
msg[3]=0x43;
msg[4]=0x04;
编写(消息,0,消息长度)

这个设备是一个监视器。代码只是一个例子。没有心跳信号,只有对发送的正确消息或错误消息的响应。设置为标准9600-8-N-1。“针2和针3之间的回形针(TX和RX)。”是的,我知道电缆可以工作,因为它与工作的产品软件使用的电缆相同。我收到了我寄的东西。我使用了一个虚拟com程序,一切似乎都正常。“6字节,但仅初始化前5个字节。”抱歉,输入错误

SerialPort.DtrEnable和RtsEnable属性设置为true。在c#中默认为启用。我已经尝试了超级终端,但也没有得到任何回应。我已发送\r和\n,但运气不好。

这应该会有所帮助。通过C#中的赋值,我不确定十六进制和字节之间是否存在适当的固有等级。这可能是你问题的根源

设备心跳信号

设备是否发送
DC2
DLE
响应(心跳)?如果是这样,请尝试使用基本9600-8-N-1设置在超级终端中打开COM端口,然后查看是否有任何结果。当您尝试发送命令时,是否有任何
STX
SYN
ETX
命令发回?我不确定您尝试与之通信的硬件的命令集实现

检查COM端口操作

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

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

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

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

这应该会有所帮助。通过C#中的赋值,我不确定十六进制和字节之间是否存在适当的固有等级。这可能是你问题的根源

设备心跳信号

设备是否发送
DC2
DLE
响应(心跳)?如果是这样,请尝试使用基本9600-8-N-1设置在超级终端中打开COM端口,然后查看是否有任何结果。当您尝试发送命令时,是否有任何
STX
SYN
ETX
命令发回?我不确定您尝试与之通信的硬件的命令集实现

检查COM端口操作

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

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

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


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

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

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


严肃地说:如果一个程序工作,而你的程序不工作,那么肯定会有一些不同。

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

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


严肃地说:如果一个程序工作,而你的程序不工作,那肯定有一些不同。

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

如前所述,修复数组大小。虽然它可能不会有帮助,但STX字符确保垃圾被扔掉


检查Windows超级终端小程序的基本硬件是否正常。您可以通过键入Ctrl+B、ABC、Ctrl+D来发送您试图发送的消息到目前为止,最常见的错误是忘记打开硬件握手信号。如果设备认为主机已关闭,则不会发送任何内容。确保将SerialPort.DtrEnable和RtsEnable属性设置为true

如前所述,修复数组大小。虽然它可能不会有帮助,但STX字符确保垃圾被扔掉


检查Windows超级终端小程序的基本硬件是否正常。您可以通过键入Ctrl+B、ABC、Ctrl+D来发送要发送的消息,正如其他人所建议的那样,最好使用某种终端软件检查发送和接收的内容。我已经成功地使用了“”--它可以很好地显示ascii或二进制/十六进制视图。

正如其他人所建议的,它是