当串口被占用后如何才能实现再判断下一个口是否可用?

hisungao 2013-02-25 10:45:17
我想判断当前口是否可用的时候,如果当前口被打开占用后,发现用For循环的时候,不论i如何增加,实际上.CommPort = i始终是固定为当前已经占用打开的串口上,不管之后的串口是否真实存在.比如说是串口2被占用打开了,那么继续从i=3开始的判断.CommPort都是固定在2口上,Err.Number也始终是8005,非要先关闭串口2之后再循环不存在的串口才会报8002
如果是这样的话,当其它程序使用了串口后我还想判断可以使用的串口怎么才能避免这种情况?先管点其它程序的所使用的串口号似乎不太合适.

With MSComm1
On Error Resume Next
If 通信端口 = 0 Then
For i = 1 To 8
'i = 1
.CommPort = i
.PortOpen = True
If Err.Number = 0 Then
读取 = "DD2C"
Call 转换.校检(读取)
buf(0) = &HAA
buf(1) = &HD1
buf(2) = &H22
buf(3) = Val("&h" & 校检1)
buf(4) = Val("&h" & 校检2)
buf(5) = &HBB
MSComm1.Output = buf
End If
If Err.Number = 0 Then MSComm1.PortOpen = False
Next
End With
...全文
293 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliai 2013-02-25
  • 打赏
  • 举报
回复
当打开占用时,可先关闭。在重新设置新的参数。
贝隆 2013-02-25
  • 打赏
  • 举报
回复
判断串口打开与否应该这样判断 if mscomm1.portopen then '端口打开的 else '端口未打开 endif
hisungao 2013-02-25
  • 打赏
  • 举报
回复
同时请问是不是一个事件里面只能有一个On Error?我怎么使用两个的话也只能一个起作用,到下一个错误发生的时候还是会给出程序错误.
hisungao 2013-02-25
  • 打赏
  • 举报
回复
还有个问题就是,比如说我大USB串口为4,当我开始检测4口还没有执行mscomm1.portopen=True这句,调试时查看mscomm1.portopen确定为False,但我再用串口调试工具查看4口确是被打开了的,为什么呢?
of123 2013-02-25
  • 打赏
  • 举报
回复
直接去读注册表,可以得知有哪些物理端口。
hisungao 2013-02-25
  • 打赏
  • 举报
回复
上面的只能知道串口是否被打开,但不知道串口是否存在,非要执行mscomm1.portopen=True那么它不会判断串口是否存在,而我这个USB转串口在程序启动后再插上去,调试的时候那么就成了8002找不到串口存在,到下一个串口检测的时候它就成了8005,串口是被打开了的,并且串口固定到了上一个串口好不再更改了.又是怪了.

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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