SerialPort.Open () - неверный параметр - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь открыть COM-порт в C #, но получаю IO Exception с сообщением об ошибке:

Неверный параметр

Iвидел это сообщение: SerialPort.Open () --IOException - «Неверный параметр».
, который описывает ту же проблему, но установка RtsEnable в true не решила мою проблему (ничего не изменилось).

Вот мой код:

cmp_Comport.PortName = "COM6";
cmp_Comport.BaudRate = 9600;
cmp_Comport.Parity = Parity.None;
cmp_Comport.StopBits = StopBits.One;
cmp_Comport.DataBits = 8;
cmp_Comport.Handshake = Handshake.None;
cmp_Comport.RtsEnable = true;
cmp_Comport.DataReceived += new SerialDataReceivedEventHandler(CMP_DadaReceived);
cmp_Comport.Open(); // ==> Causes exception

Вот полная трассировка стека исключений:

в System.IO.Ports.InternalResources.WinIOError (Int32 errorCode, String str)
в System.IO.Ports.InternalResources.WinIOError ()
в System.IO.Ports.SerialStream.InitializeDCB (Int32 baudRate, контроль четности, Int32 dataBits, StopBits stopBits, логический discardNull)
at System.IO.Ports.SerialStream..ctor (String portName, Int32 baudRate, контроль четности, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, рукопожатие, квитирование, логическое значение dtrEnable, логическое значение rtsEnable, логическое значение Discard, логическое значение DiscardБайт parityReplace)
в System.IO.Ports.SerialPort.Open ()
в MyProject.Comport.CMP_Open (Int32 ind, String & error) в C: ... \ MyProject \ Comport.cs: строка 83

Обратите внимание, что в другом программном обеспечении, например, Hercules , тот же порт открывается очень хорошо.

1 Ответ

0 голосов
/ 13 марта 2019

Это исключение часто происходит с виртуальными (например, USB) COM-портами, которые не имеют базовой физической реализации RS232.Такие порты не управляют битами состояния, и из-за этого метод SerialPort.Open() вызывает IOException с ошибкой 87 "Параметр неверен" при попытке установить параметры связи для последовательного порта.

System.IO.Ports.SerialPort classне поддерживает этот случай, но есть и другие реализации, которые вы можете использовать.

Например, с библиотекой SerialPortStream (также доступной в NuGet ) вы можете открыть последовательныйCOM-порт без настройки параметров связи с использованием метода SerialPortStream.OpenDirect():

namespace Vurdalakov
{
    using System;
    using RJCP.IO.Ports;

    class Program
    {
        static void Main(String[] args)
        {
            using (var serialPort = new SerialPortStream("COM1"))
            {
                serialPort.OpenDirect();

                while (serialPort.IsOpen)
                {
                    var ch = (Char)serialPort.ReadChar();
                    Console.Write(ch);
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...