在通过串行端口传输期间数据被破坏

时间:2011-08-17 12:40:38

标签: c# serial-port communication

我正在开发一个与旧系统通信的程序。我为此使用System.IO.Ports.SerialPort。问题是当我发送更长的消息时,消息已经损坏了。我使用行侦听器并获得以下结果

我发送的内容

aa 01 00 00 12 03 06 18 02 c1 94 02 c1 94 00 00 00 00 00 00 00 00 00 00 00 00 1e fd 

我得到了什么

c2 aa 01 00 00 12 03 06 18 02 c3 81 c2 94 02 c3 81 c2 94 00 00 00 00 00 00 00 00 00 00 00 00 1e c3 bd

我正在使用的代码是

_comPort.Encoding = new UTF8Encoding();
_comPort.PortName = PortName;  //Com1
_comPort.BaudRate = BaudRate;  //9600
_comPort.StopBits = StopBits;  //1
_comPort.DataBits = DataBits;  //8
_comPort.Parity   = Parity;    //None
_comPort.Open();

_comPort.Write(messageStr);

为什么数据已损坏,我该如何解决?

1 个答案:

答案 0 :(得分:4)

我的猜测是messageStr是一个字符串,你会看到编码问题。你明确指定了UTF-8编码,这就是你得到的 - 但我怀疑这不是你真正想要的。

您已经显示了二进制数据,因此我假设您确实想要准确发送二进制数据 - 在这种情况下,您应该使用Write(byte[], int, int)重载。

如果确实想要编写文本数据,您可能只需要选择正确的编码 - 但是您需要向我们提供更多信息,以帮助您做出正确的选择。< / p>