代码之家  ›  专栏  ›  技术社区  ›  Jon B

无法在.NET中打开串行端口

  •  8
  • Jon B  · 技术社区  · 16 年前

    SerialPort.Open() .

    错误是:

    参数名称:portName

    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。


    更多信息

    我使用了Process Explorer并确认没有使用\Device\Serial0。


    我安装了一个USB串行适配器(COM3),工作正常。去想想吧。COM1一定有问题。

    4 回复  |  直到 16 年前
        1
  •  5
  •   NoonKnight    14 年前

    我也有这个问题。结果我有一个打印机设置,可以使用我试图打开的COM端口。当我把打印机换成使用另一个端口后,端口就打开了。

        2
  •  1
  •   Pherrymason    16 年前

    试着用符号\.\COMX代替COMX。 确保转义字符: “\\.\COM1”

    编辑:Wops,因此将转义为my\SO它应该如下所示(ommit spaces):

        3
  •  1
  •   SwDevMan81    16 年前

    您可以尝试设置端口的属性,而不是使用构造函数。

    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();
    

    我也遇到了串行通信和微软主动同步的问题。我不确定您是否运行了这个,但它可能值得一试来终止它(任务管理器中的进程名是wcescomm.exe文件). 希望有帮助。

    你也可以尝试使用Marshal.GetLastWin32Error()看看低水平的东西是否引起了问题?我不确定这是否能给你更多的信息。

        4
  •  1
  •   Community Mohan Dere    9 年前

    可能是某个应用程序在后台运行,很可能是打开了你的端口(见下图) question ).

    Process Explorer 使用“查找句柄或DLL”在“查找”菜单中查找打开com端口的进程。以我为例假脱机SV.exe始终使用COM1、COM3端口。所以我用了另一个com端口(COM2)祝你好运!