您的位置:程序门 -> vb -> com/dcom/com+



port already open 提示


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


port already open 提示[无满意答案结贴,结贴人:tanzhiwei]
发表于:2007-09-14 18:42:17 楼主
本人不懂串行通信方面的编程,发觉程序可以控制机器的运动,   程序也可以读取及发送数据给机器,感到极大兴趣。想学习学习。。。

公司有一台机器,连着一台电脑,电脑通过com1和此机器连接,用的软件是vb写的。
我猜用的是mscomm控件。
软件一般运行正常,但有时关了软件后,再开启,就会出现port   already   open   提示,
应该是com1被占用后没有释放的提示。我重启电脑,重启机器,再运行有时还是这样的提示,如何办呢?
是不是应该在程序上加上
...
if   mscomm1.portopen   =   true   then      

  mscomm1.portopen   =   false    

end   if  
mscomm1.portopen   =   true   '先关了,再打开,就可保证不出现此错误?
...


对于程序是出现的错误提示:port   already   open,我是这样做的(重启不行的前提条件下):
先在硬件管理器中禁有com1,重启,再启用com1,打开程序,就可以运行了.

------------------------------------------

本人只是此方面的菜鸟,想学习,请高手们带带呀,谢谢了.


发表于:2007-09-14 19:02:071楼 得分:0
if   mscomm1.portopen   =   true   then      

  mscomm1.portopen   =   false

end   if
这么写没错,就是有点罗嗦

改成:if   mscomm1.portopen   then   mscomm1.portopen   =   false
看着比较舒服
发表于:2007-09-14 19:55:472楼 得分:0
thanks

加了这段代码:

  if   mscomm1.portopen   then   mscomm1.portopen   =   false

是不是port   already   open就没有了?
发表于:2007-09-15 18:34:493楼 得分:0
我查了很多资料,发觉,程序自己申请打开的串口,一定要在程序退出时自己关闭它,否则可能出现再次运行或别的程序使用到相应的串口(com1   或   com2)时,就会出现port   already   open的错误,别的程序是不能强行关闭这个串口的(听说能,但挺麻烦的)
所以在程序中,应该捕获这个port   already   open这个错误,否则让系统捕获,你的程序就异常退出了。

------------------------------------------------------------------------
on   error   goto   aa
mscomm1.settings   =   "9600,n,8,1 "   '9600波特,无奇偶校验,8位数据,一个停止位
mscomm1.inputlen   =   0   '读入整个缓冲区
mscomm1.commport   =   1   '串口1   com1
mscomm1.portopen   =   true   '打开端口
...

aa:

if   err.number   =   8005   then   msgbox   "串口已经被别的程序占用 "

end   sub



快速检索

最新资讯
热门点击