![]() |
1
4
这是正常的、预期的、不可避免的行为。在TCP上的数据也可能发生这种情况。对于串行接口来说,这只是一个无休止的字节流。应用程序负责将这些字节重新打包成数据包。 如果数据包边界的位置很重要,并且您无法通过查看接收到的数据来判断数据包边界的位置,那么您可能需要重新考虑数据的格式,以便 可以 告诉包边界在哪里。
那个字符的十六进制值是多少?查看是否设置
|
![]() |
2
3
在较低的级别,串行端口可以决定何时触发数据接收事件。它可能会在“满”包到达之前决定这样做。但是,看起来您的预期数据集中有一个终止符字符。如果是这样,您可以执行以下操作(注意,我已经更改了您的serialport分配以避免语法混乱:
其中,terminator是包含终止字符的字符串。然后可以使用serialport.readline()(如果适用,还可以使用serialport.writeline())。这至少对你的第一个问题有帮助。 |
![]() |
3
3
我已经做了很多win32串行端口编程,但是对.net只做了一点,所以请接受我的建议。
正如其他人所说,这是完全正常的。根据DCE侧的设备类型,您可能需要自己重新包装。我不知道你连接了什么类型的设备,所以我不能说更多。 如果要获取更多数据,可以尝试以下操作:
如果你对排队的事很好奇,那就去看看吧。 PortMon from SysInternals 这是一个免费的应用程序,可以在您通过线路传输数据时窥探您的COM端口。这似乎是技术性的,但实际上你只需要看看irp-mj-write和irp-mj-read命令,在这行中你可以看到字节长度和通过线路发送的数据。通过这个,您应该能够知道问题是.NET serialport对象,还是设备正在通过该行发送“”。
它看起来适合于基于事件的数据接收方法。 |