11/09/2014

The given port name does not start with COM/com or does not resolve to a valid serial port.

一般来说,不管是什么样的串口(硬件形成真实存在的/软件虚拟的VSP——Virtual Serial Port),不同的编程语言对其操作应该不会有太大的问题。但是也有例外,如下文。

一直以来使用com0com软件虚拟串口,然后编程对其操作都没有出现过什么问题,今天换用C#写一个简单的小程序测试一下,结果出现问题了,具体表现就是:只要选择的串口是com0com虚拟出来的默认名称的串口(如CNCA0),在执行open方法时都会提示
The given port name does not start with COM/com or does not resolve to a valid serial port.
谷歌一下,针对这种出错提示,大致有两种解决方法:

1.若端口名称是正常的形式(以COM开头的),可能是分配的端口号已被其他设备占用,由于串口资源的独占性,所以这种端口暂时不能再被其他应用访问,更改端口设定即可。

参考:http://stackoverflow.com/questions/11605429/c-sharp-serialportopen-method-throws-argumentexception-because-of-port-name

2.若端口名称不是正常的形式(不是以COM开头的,如com0com虚拟出来的端口号默认就是CNCA*、CNCB*),由于C#的SerialPort类的open方法在执行时会对端口名称作进一步的检查,发现不是以“COM”开头的就直接throw上面的exception。而对名称的这一点要求一般不会引起大家的注意。

解决办法:在com0com中更改虚拟端口号为COM开头且暂时未被系统使用的名称即可。

参考:http://stackoverflow.com/questions/18230826/c-sharp-opening-a-virtual-serial-port-throws-argumentexception


---附:---
1.com0com (开源免费的VSP):http://com0com.sourceforge.net/
2..NET SerialPort Woes(作者提到System.IO.Ports.SerialPort目前是有点buggy!!!):http://zachsaw.blogspot.com/2010/07/net-serialport-woes.html

10 comments: