首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET SerialPort类(C#)在旧系统上的行为是否有所不同?

.NET SerialPort类(C#)在旧系统上的行为是否有所不同?
EN

Stack Overflow用户
提问于 2014-11-10 00:15:55
回答 1查看 425关注 0票数 0

我有一个相对较短的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,就像它应该返回的一样,但是当第一个数据包被发送时,没有更多的回复……无确认或确认。

EN

回答 1

Stack Overflow用户

发布于 2014-11-12 20:31:45

以防任何人遇到类似的问题;我的问题是我使用了USB转串行转换器。这导致计时变得一团糟。我解决这个问题的方法是订阅SerialPortDataReceived事件,然后使用serialport.ReadExisting()获取事件处理程序中的数据(这也会清除接收缓冲区)。因此,线程将大致执行以下操作:

Send data ->等待DataReceive触发->处理数据->重复。

只要确保在等待循环中设置超时即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26830255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档