2014-10-29 3 views
2

Я использую C# и .NET 4.5, с компилятором/IDE Visual Studio 2012, чтобы открывать и взаимодействовать с последовательным портом. Мой код предназначен для подключения к преобразователю квадратурного сигнала QSB от US Digital.C# .NET последовательный порт подключается, не читает и не пишет

Вот код, который я использую, чтобы открыть порт и подключиться.

this.Port = new SerialPort(); 

this.Port.BaudRate = 230400; 
this.Port.PortName = "COM9"; 
this.Port.Parity = Parity.None; 
this.Port.Handshake = Handshake.None; 
this.Port.DataBits = 8; 
this.Port.StopBits = StopBits.One; 

this.Port.Open(); 

Установка точки останова сразу после this.Port.Open() позволяет мне проверить, что последовательный порт действительно подключен. В другом разделе кода, следующий вызывается в ответ на нажатие кнопки:

this.Port.WriteLine("W168"); 

Эта команда * должна вызвать мое оборудование плести двигатель, и на самом деле это делает, если я отправить команду, используя замазку, или используя написанный мной сценарий Python (оба используют точно такие же настройки, что и код C#). Но ничего не происходит. Я могу открыть порт в Putty или Python и выполнить команду с ожидаемыми результатами, а затем запустить мой код C# и ничего не произойдет.

Я пропустил что-то особенное C#, которое мешает этому работать?

Для чего это стоит, вот мой код рабочего Python:

ser = serial.Serial("COM9", 230400, timeout=1) 
ser.write(b"W168\n") 

Ссылка на pySerial документации: http://pyserial.sourceforge.net/pyserial_api.html#classes

Значения по умолчанию для полей, указанных в C# код, но не упоминается в вызове питона выше являются:

  • bytesize = 8
  • четности = нет
  • = один спотовый бит
  • XONXOFF = ложные
  • rtscts = ложные
  • dsrdtr = ложь
+1

Есть две вещи, которые вы можете попробовать. Во-первых, поскольку у вас нет рукопожатия, вам нужно изменить эти два значения: 'this.Port.DtrEnable = true;' и 'this.Port.RtsEnable = true;'. Во-вторых, вы можете уменьшить скорость передачи до более стандартной суммы, например 9600, чтобы узнать, возможно ли подключение. – Ckrempp

+1

Я переключил скорость передачи на аппаратное обеспечение на 115200 (самый высокий стандарт на большинстве последовательных портов), связанный с Putty, чтобы проверить, что он работает, а затем попытался с C#. Нет. НО, ваше предложение разрешить работу Dtr и Rts. :-D Спасибо, я часами стучал головой по этой проблеме. –

+0

Приветствую вас, я знаю, что у меня была аналогичная проблема с последовательными портами, и это сводилось к одному из этих двух решений. – Ckrempp

ответ

3

При работе с последовательными портами в C# есть одна вещь, чтобы всегда помнить при установлении соединения. Если установить значение квитирующего никто так:

this.Port.Handshake = Handshake.None; 

Затем вам нужно установить еще несколько параметров, а также для подключения будет завершено, и они:

this.Port.DtrEnable = true; 
this.Port.RtsEnable = true; 

reaso является потому что Dtrenable означает следующее:

Готовность терминала данных сигнала DTR()

MSDN объясняет, что означает, DTR, как это:

Data Terminal Ready (DTR) обычно включается во время XON/XOFF программное обеспечение рукопожатия и запрос отправки/очистки для отправки (RTS/CTS) аппаратного подтверждения связи и модемную связь.

Rtsenable означает следующее:

Запрос на передачу сигнала (RTS)

MSDN объясняет, что означает, что РТС, как это:

запрос на передачу (RTS) сигнал обычно используется в аппаратном квитировании «Запрос на отправку/очистка для отправки» (RTS/CTS).

Вместе эти два параметра обрабатывают рукопожатие связи последовательного порта без необходимости определять его между ведущим и ведомым.

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