Невозможно открыть последовательный порт в .NET - PullRequest
8 голосов
/ 19 ноября 2009

Я пытаюсь открыть COM1, но получаю странную ошибку каждый раз, когда звоню SerialPort.Open().

Ошибка:

Указанное имя порта не начинается с COM / com или не разрешается в допустимый последовательный порт. Имя параметра: имя_порта

Код очень прост:

SerialPort port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
port.Handshake = Handshake.RequestToSend;
port.Open();

Если я позвоню SerialPort.GetPortNames(), он вернет один порт с именем «COM1».

Я подтвердил, что у меня есть «COM1» на моем компьютере, и я не использую его в других приложениях. Когда я запускаю код на другом компьютере, он работает. Моя система работает под управлением Windows Vista. Версия .NET - 2.0.

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


Подробнее

Я использовал Process Explorer и подтвердил, что ничто не использует \ Device \ Serial0.


Обход

Я установил USB-последовательный адаптер (COM3), и он работает нормально. Пойди разберись. Должна быть проблема с COM1.

Ответы [ 4 ]

5 голосов
/ 11 сентября 2012

У меня тоже была эта проблема. Оказалось, что у меня есть принтер, настроенный на использование COM-порта, который я пытался открыть. После того, как я изменил принтер, чтобы использовать другой порт, порт открылся просто отлично.

1 голос
/ 23 февраля 2017

Может быть, какое-то приложение, работающее в фоновом режиме, вероятно, открыло ваш порт (см. вопрос ).

Скачать Process Explorer и использовать «Найти дескриптор или DLL» в меню «Найти», чтобы найти процесс с открытым com-портом. В моем случае spoolsv.exe всегда использует порт COM1, COM3. поэтому я использовал другой COM-порт (COM2) удачи!

1 голос
/ 19 ноября 2009

Вы можете попробовать настроить свойства порта, а не использовать конструктор.

mPort = new System.IO.Ports.SerialPort();
if(mPort.IsOpen)
{
   mPort.Close();
}
mPort.PortName = "COM1";
mPort.BaudRate = 19200;
mPort.Parity = Parity.None;
mPort.DataBits = 8;
mPort.StopBits = StopBits.One;
mPort.Handshake = Handshake.RequestToSend; // Handshake.None;
mPort.Open();

У меня также возникли проблемы с последовательными коммуникациями и Microsoft Active Sync. Я не уверен, работает он у вас или нет, но, возможно, стоит убить его (имя процесса в диспетчере задач - wcescomm.exe). Надеюсь, это поможет.

Вы также можете попробовать использовать Marshal.GetLastWin32Error (), чтобы увидеть, не вызывает ли проблема какой-то низкий уровень? Я не уверен, что это даст вам больше информации.

1 голос
/ 19 ноября 2009

Попробуйте использовать обозначение \. \ COMX вместо просто COMX. Убедитесь, что вы избегаете символов: "\\. \ COM1"

Редактировать: Wops, ТАК, ускользает от моего \, так что должно быть так (пропустить пробелы): "\ \ \ \. \ \ COM1"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...