Данные повреждаются во время передачи через последовательный порт
Я разрабатываю программу для связи со старой системой. Я использую 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 ответ
Я думаю, что messageStr
строка, и вы видите проблемы с кодировкой. Вы явно указали кодировку UTF-8, так что это то, что вы получаете - но я подозреваю, что это не то, что вы действительно хотите.
Вы показали двоичные данные, поэтому я предполагаю, что вы действительно хотите отправить именно эти двоичные данные - в этом случае вы должны использовать Write(byte[], int, int)
перегрузки.
Если вы действительно хотите писать текстовые данные, вам, вероятно, просто нужно выбрать правильную кодировку, но вам нужно будет предоставить нам больше информации, чтобы мы могли сделать правильный выбор.