Я использую 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 = ложь
Есть две вещи, которые вы можете попробовать. Во-первых, поскольку у вас нет рукопожатия, вам нужно изменить эти два значения: 'this.Port.DtrEnable = true;' и 'this.Port.RtsEnable = true;'. Во-вторых, вы можете уменьшить скорость передачи до более стандартной суммы, например 9600, чтобы узнать, возможно ли подключение. – Ckrempp
Я переключил скорость передачи на аппаратное обеспечение на 115200 (самый высокий стандарт на большинстве последовательных портов), связанный с Putty, чтобы проверить, что он работает, а затем попытался с C#. Нет. НО, ваше предложение разрешить работу Dtr и Rts. :-D Спасибо, я часами стучал головой по этой проблеме. –
Приветствую вас, я знаю, что у меня была аналогичная проблема с последовательными портами, и это сводилось к одному из этих двух решений. – Ckrempp