发送意外的RS232值

时间:2012-05-23 12:53:28

标签: c# serial-port

用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的内容,并且它们是正确的。我只能断定监控程序是错误的,但是当我用它来监控以相同BAUD速率运行的其他软件时 - 它会正确监控。

其他人有同样的问题吗?

1 个答案:

答案 0 :(得分:3)

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

我个人鼓励你尽可能地使用二进制数据来简化事情 - 但a5被转换为3f的原因几乎肯定是由于Encoding属性SerialPort,默认为ASCII。值0xA5不存在于ASCII中,因此它被转换为'?'代替。

如果真正意味着是文本,那么适当地更改编码 - 但如果它意味着是二进制数据,那么请使用二进制API(以字节和字节为单位)数组而不是字符,字符数组和字符串)。