发送意外的 RS232 值
本文关键字:RS232 意外 | 更新日期: 2023-09-27 18:35:10
用
RS232编程问题撕裂我的头发。
我有一个 char[7] 缓冲区,其中包含一些字符,我正在将其写入串行端口。我正在使用串行端口监视器程序来监视端口的传入和传出。
我发送到端口的缓冲区包含
a5 00 01 00 0b 4a
当我进入监视器程序时,监视器程序指示它可以看到:
3f 00 01 00 0b 4a
因此,标头字符要么被监视错误,要么在退出程序的途中被更改。
我很困惑,不知道如何解决这个问题。
这是我用来填充缓冲区的代码。
char[]cmdBuffer=createCommandBuffer(0, 4, 1);
cmdBuffer[4] = Convert.ToChar(what);
placeChecksums(cmdBuffer);
serialPort.Write(cmdBuffer, 0, cmdBuffer.Length);
在调用serialPort.Write
之前,我已经在断点中检查了cmdBuffer的内容,它们是正确的。我只能得出结论,监视器程序是错误的,但是当我使用它来监视以相同波特率运行的其他软件时 - 它会正确监视。
还有其他人有同样的问题吗?
您正在处理字符,但您已将值表示为字节。
我个人鼓励您在任何地方使用二进制数据,以简化事情 - 但a5
被转换为3f
的原因几乎可以肯定是由于 SerialPort
的Encoding
属性,默认为 ASCII。ASCII 中不存在值 0xA5,因此将其转换为"?"。
如果这真的是文本,那么适当地更改编码 - 但如果它是二进制数据,那么使用二进制 API(处理字节和字节数组而不是字符、字符数组和字符串)。