我有一个相对较短的C#程序,它使用以下格式通过RS232端口提供数据:
'STX'标题'校验和''ETX'
'STX'data1'Checksum''ETX'
'STX'......'校验和''ETX'
'STX'dataN'Checksum''ETB'
接收端应该在收到ETX / ETB时回复ACK或NAK字节。
在Windows 7 64位的计算机上运行良好。
然而,在Win XP 32机器上启动程序时遇到了问题,因为我已经构建了程序来定位.NET 4.5版(显然不支持那个版本的Win XP)。
我将其更改为目标.NET版本4,现在程序启动就好了。但接收端不再响应ACK或NAK,只是第一次(在发送数据文件头时)。 我打印出控制台上的字节缓冲区,在ETX字节应该是的地方有一个向上箭头带有基础符号(↨),它告诉我它根本不会发送一个ETX。
有什么奇怪之处在于它在Windows 7机器上工作正常,并且第一个传输(标头)就像它应该的那样返回一个ACK,但是当第一个数据包被发送时,没有更多的回复...没有ACK或NAK。
答案 0 :(得分:1)
如果有人遇到类似的问题;我的问题是我使用USB转串口转换器。它导致时间变得混乱。我要解决的问题是订阅SerialPort
的{{1}}事件,然后使用DataReceived
获取事件处理程序内的数据(这也会清除接收缓冲区) )。所以线程大致会这样做:
发送数据 - > 等待DataReceive触发 - >处理数据 - >重复。
请务必在等待循环中设置超时。