我正在尝试在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,打开相同的端口即可。
答案 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);
}
}
}
}
}