2010-10-13 2 views
0

Я использую класс C# SerialPort для записи в мой COM-порт. Странно, что я могу получить данные из порта просто отлично - он отправляет данные, которые я ожидаю. Однако я не могу отправить данные в порт. Любые данные, которые я отправляю, сразу же возвращаются ко мне как новые данные, поступающие из порта. Я ожидаю команду «Готово», но вместо этого возвращает данные, которые я только что отправил. Он отлично работает с Windows HyperTerminal, но этот код просто не работает.Ошибки C# с командами SerialPort WriteLine

Я использую 9600, 8-N-1 без контроля потока.

Я в основном с помощью кода из этой статьи:

Я инстанцирую мой порт с этим

comPort.BaudRate = int.Parse(_baudRate); //BaudRate 
comPort.DataBits = int.Parse(_dataBits); //DataBits 
comPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), _stopBits); //StopBits 
comPort.Parity = (Parity)Enum.Parse(typeof(Parity), _parity); //Parity 
comPort.PortName = _portName; //PortName 
comPort.Handshake = Handshake.None; 
comPort.ReadTimeout = 2000; 
comPort.RtsEnable = true; 
//now open the port 
comPort.Open(); 

И запись только с помощью comport.write (строка) и я также использовал порт, через .writeline (строка) с тем же результатом.

В чем основное отличие этого кода от простого ванильного HyperTerminal, которое может заставить их действовать по-другому?

+0

Извините, что подразумевает ссылку на статью, что большинство из этого было получено: http://www.dreamincode.net/forums/topic/35775-serial-port-communication-in-c%23/ –

ответ

2

Я наткнулся на этот ответ, который не во многих примерах кода. Суть в том, что вы должны включить возврат каретки с каждой записью порта. Я использую:

comport.write(string) 

Но это должно было быть

comport.write(string+"\r\n") 

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

Смежные вопросы