1

因 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);

在调用之前,我已经在断点中检查了 cmdBuffer 的内容,serialPort.Write它们是正确的。我只能断定监控程序是错误的,但是当我使用它来监控以相同波特率运行的其他软件时 - 它可以正确监控。

其他人有同样的问题吗?

4

1 回答 1

3

您正在处理characters,但您已将值表示为bytes

我个人鼓励您尽可能使用二进制数据,以简化事情 - 但a5转换为的原因3f几乎可以肯定是由于默认为 ASCII的Encoding属性。SerialPortASCII 中不存在值 0xA5,因此将其转换为“?” 反而。

如果这确实是文本,那么适当地更改编码 - 但如果它是二进制数据,则使用二进制 API(它处理字节和字节数组而不是字符、字符数组和字符串)。

于 2012-05-23T12:59:03.327 回答