Ala*_* M. 0 .net c# serial-port
我正在尝试在 C# 中打开 COM 端口,但收到 IO 异常并显示错误消息:
\n\n\n\n\n参数不正确
\n
我看到这篇文章:SerialPort.Open() --IOException \xe2\x80\x94 \xe2\x80\x9c参数不正确。\xe2\x80\x9d \
n描述了相同的问题,但设置RtsEnable为true没有解决我的问题(没有改变)。
这是我的代码:
\n\ncmp_Comport.PortName = "COM6";\ncmp_Comport.BaudRate = 9600;\ncmp_Comport.Parity = Parity.None;\ncmp_Comport.StopBits = StopBits.One;\ncmp_Comport.DataBits = 8;\ncmp_Comport.Handshake = Handshake.None;\ncmp_Comport.RtsEnable = true;\ncmp_Comport.DataReceived += new SerialDataReceivedEventHandler(CMP_DadaReceived);\ncmp_Comport.Open(); // ==> Causes exception\nRun Code Online (Sandbox Code Playgroud)\n\n这是完整的异常堆栈跟踪:
\n\n\n\n\n在 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
\n
\n 在 System.IO.Ports.InternalResources.WinIOError()
\n 在 System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity 奇偶校验, Int32 dataBits、StopBits stopBits、布尔discardNull)
\n 在 System.IO.Ports.SerialStream..ctor(String portName、Int32 baudRate、Parity 奇偶校验、Int32 dataBits、StopBits stopBits、Int32 readTimeout、Int32 writeTimeout、Handshake 握手、Boolean dtrEnable、布尔 rtsEnable、布尔 DiscardNull、字节 parityReplace)
\n 位于 System.IO.Ports.SerialPort.Open()
\n 位于 C:...\\MyProject\\Comport 中的 MyProject.Comport.CMP_Open(Int32 ind, String& error) .cs:第 83 行
请注意,在另一个软件(例如Hercules)中,相同的端口打开得很好。
\n小智 5
此异常通常发生在没有底层物理 RS232 实现的虚拟(例如 USB)COM 端口上。此类端口不管理状态位,因此当尝试设置串行端口的通信参数时,该SerialPort.Open()方法会引发错误 87“参数不正确”。IOException
System.IO.Ports.SerialPort类不支持这种情况,但您可以使用其他实现。
例如,使用SerialPortStream库(也可在NuGet中使用),您可以使用SerialPortStream.OpenDirect()以下方法打开串行 COM 端口,而无需设置通信参数:
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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)