C#发送数据到串口,出错:给定的端口名称未以 COM/com 开头或未解析为有效的串行端口

Alan_pft 2009-05-18 11:57:55
我用VS2005 写WINFORM
用System.IO.Ports;
SerialPort _comPort = new SerialPort();来发串口数据
打开串口代码如下:
//设置串口参数
_comPort.BaudRate = 9600;
_comPort.DataBits = 8;
_comPort.StopBits = System.IO.Ports.StopBits.One;
_comPort.Parity = System.IO.Ports.Parity.None;
_comPort.PortName = "COM1";
_comPort.RtsEnable = true;
try
{
_comPort.Open();
}
catch (ArgumentException ex)
{
MessageBox.Show(ex.ToString());
}
-----------------
执行到
_comPort.Open();异常:
System.ArgumentException:给定的端口名称未以 COM/com 开头或未解析为有效的串行端口.
看这错误好象是说我的_comPort.PortName 值不是用COM开头定义而出错.
代码不变,我拿去其他电脑A(WIN XP SP3,系统和我电脑一样,同一张碟所装)上测试,可以打开COM1,无错.
代码我换成COM2,在本机可以成功打开,无错
-----------
但是拿去客户的服务器上却和我电脑一样报同样的错!所以必须解决.
客户电脑是WIN SERVER 2003 系统
我的是XP SP3,我测试的电脑A系统和我的一样,并且是同一张碟装的,机子配置也是一样!

这个错误在网上根本搜不到,请教如何解决?谢谢
...全文
3034 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztzname 2011-04-07
  • 打赏
  • 举报
回复
结贴了也顶一下,我今天就遇到这样的问题了,我还奇怪那,以前用的好好的,这次就不行了,谁知道是Adobe打印机占用了COM1端口。
Alan_pft 2009-12-04
  • 打赏
  • 举报
回复
我才发现我原来没结贴啊,抱歉抱歉!!
方法解决了,是端口被驱动占用了,把打印驱动指向的端口改成其他就可以了
任国明 2009-05-19
  • 打赏
  • 举报
回复
1、先确认你机子上是否有COM1串口。
2、如果有COM1,下载一个串口调试工具,查看其状态,如果占用着,可以直接将其释放。
3、上面的代码是有问题的,在调用_comPort.Open()之前,需要先查看其开启状态,如果被占用,调用close()方法将其关闭:
if(_comPort.IsOpen)
{
_comPort.Close();
}
灯火斑斓 2009-05-19
  • 打赏
  • 举报
回复
COM口都是独享资源,谁优先打开占用,谁就独享,后面要使用的就不能再打开使用了。既然你可以通过COM1打印东西,应该说你的COM1口是好的,检查是否电脑一开机就被打印机打开使用了?
Alan_pft 2009-05-19
  • 打赏
  • 举报
回复
今天早上,我又在公司另外两台电脑上测试,他们的COM1属性直接没改,比如,比特率是115200,但因为我的程序里把他改成9600了.
经过测试,在另外两台电脑上可以正常打开串口....
如果实在不行我下午得重新还原系统看看了
Alan_pft 2009-05-19
  • 打赏
  • 举报
回复
回3,4楼,我用COM1直接连打印机驱动,是可以打印的.
Alan_pft 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Yali8 的回复:]
对于串口通信,串口的参数配置,应该放在一个配置文件中(INI文件或XML文件)(这才是好的设计方式),每次运行时,从配置文件中获取参数再进行设置。你的代码没有错误,但你代码是要求所有的电脑的串口都应该是COM1,这显然是不对的,你出问题的电脑,一定是COM1有问题。因此,你应该把COM口名称,波特率,数据位,停止位,校验位等等全部放到配置文件中,根据不同的电脑来作设置(对于你的情况,可能只有COM口不一样)。可以从…
[/Quote]


COM的属性,我全部照着改了,我的机子还是会出错.
我知道我自身机子问题,所以现在问一下有什么办法可以解决吗?
白云在上 2009-05-18
  • 打赏
  • 举报
回复
有没有COM1串口?
rqx110 2009-05-18
  • 打赏
  • 举报
回复
COM1口坏掉了吧
灯火斑斓 2009-05-18
  • 打赏
  • 举报
回复
对于串口通信,串口的参数配置,应该放在一个配置文件中(INI文件或XML文件)(这才是好的设计方式),每次运行时,从配置文件中获取参数再进行设置。你的代码没有错误,但你代码是要求所有的电脑的串口都应该是COM1,这显然是不对的,你出问题的电脑,一定是COM1有问题。因此,你应该把COM口名称,波特率,数据位,停止位,校验位等等全部放到配置文件中,根据不同的电脑来作设置(对于你的情况,可能只有COM口不一样)。可以从“设备管理器”的“端口”查询每台电脑可使用的串口名称。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧