我有一个相对较短的C#程序,它使用以下格式通过RS232端口提供数据:
'ETX‘标头'Checksum’‘ETX’
'ETX‘data1’校验和‘’ETX‘
‘'STX’...‘'Checksum’'ETX‘
‘'STX’dataN‘校验和’'ETB‘
接收端应该在接收到ETX/ETB时用ACK或NAK字节进行应答。
这在安装了64位Windows 7的计算机上运行良好。
然而,在Win XP 32计算机上启动该程序时出现了一个问题,因为我将该程序构建为针对.NET 4.5版(该版本的Win XP显然不支持该版本)。
我将其改为目标.NET版本4,现在程序启动得很好。但接收端不再使用ACK或NAKs进行响应,仅在第一次响应时(在发送数据文件头时)。我在控制台上打印出了字节缓冲区,在ETX字节应该在的地方有一个带有基本符号(↨)的向上向下箭头,它告诉我不知何故根本没有发送ETX。
奇怪的是,它在Windows7机器上工作得很好,第一次传输(报头)返回一个ACK,就像它应该返回的一样,但是当第一个数据包被发送时,没有更多的回复……无确认或确认。
发布于 2014-11-12 20:31:45
以防任何人遇到类似的问题;我的问题是我使用了USB转串行转换器。这导致计时变得一团糟。我解决这个问题的方法是订阅SerialPort
的DataReceived
事件,然后使用serialport.ReadExisting()
获取事件处理程序中的数据(这也会清除接收缓冲区)。因此,线程将大致执行以下操作:
Send data ->等待DataReceive触发->处理数据->重复。
只要确保在等待循环中设置超时即可。
https://stackoverflow.com/questions/26830255
复制相似问题