SerialPort.Open()-参数不正确

时间:2018-12-23 14:58:23

标签: c# .net serial-port

我正在尝试在C#中打开COM端口,但出现错误消息:IO异常:

  

参数不正确

我看到了这篇文章:SerialPort.Open() --IOException — “The parameter is incorrect.”
其中描述了相同的问题,但是将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,布尔型null)
  在System.IO.Ports.SerialStream..ctor处(String portName,Int32 baudRate,奇偶校验,Int32 dataBits,StopBits stopBits,Int32 readTimeout,Int32 writeTimeout,握手握手,布尔dtrEnable,布尔rtsEnable,布尔dropNull,字节parityReull />   在System.IO.Ports.SerialPort.Open()处
  在C:... \ MyProject \ Comport.cs:line 83的MyProject.Comport.CMP_Open(Int32 ind,String&error)中

请注意,在其他软件中,例如Hercules,打开相同的端口即可。

1 个答案:

答案 0 :(得分:1)

此异常通常发生在没有基础物理RS232实现的虚拟(例如USB)COM端口上。这样的端口不管理状态位,因此,当尝试为串行端口设置通信参数时,SerialPort.Open()方法会引发IOException并出现错误87“参数不正确”。

System.IO.Ports.SerialPort类不支持这种情况,但是您可以使用其他实现。

例如,使用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);
                }
            }
        }
    }
}