Данные повреждаются при передаче через последовательный порт - PullRequest
1 голос
/ 17 августа 2011

Я разрабатываю программу для связи со старой системой. Я использую 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 Ответ

4 голосов
/ 17 августа 2011

Я предполагаю, что messageStr - это строка, и вы видите проблемы с кодировкой. Вы явно указали кодировку UTF-8, так что это то, что вы получаете - но я подозреваю это не то, что вы действительно хотите.

Вы показали двоичные данные, поэтому я предполагаю, что вы действительно хотите отправить именно эти двоичные данные - в этом случае вы должны использовать перегрузку Write(byte[], int, int).

Если вы действительно хотите писать текстовые данные, вам, вероятно, нужно просто выбрать правильную кодировку - но вам нужно будет предоставить нам больше информации, чтобы мы могли помочь вам сделать правильный выбор.

...