如下是检测串口是否存在,是否被占用的代码:
Option Explicit
Dim a As Integer
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.InBufferSize = 1024
Shape1.FillStyle = 0
OpenPortNum
End Sub
Private Sub OpenPortNum()
On Error GoTo uerror
For a = 1 To 16
MSComm1.CommPort = a
MSComm1.PortOpen = True
If MSComm1.PortOpen = True Then
Print "可用Com号= "; a
MSComm1.PortOpen = False
End If
Next
Exit Sub
uerror:
Print "出错或占用Com号= "; a
Resume Next
End Sub
如要探测某个COM口是否有数据输入则需在打开某个串口后,用OnComm事件来接收.
错误消息(MS Comm 控件)
下表列出 MSComm 控件可以捕获的错误:
常数 值 描述
comInvalidPropertyValue 380 无效属性值
comSetNotSupported 383 属性为只读
comGetNotSupported 394 属性为只读
comPortOpen 8000 端口打开时操作不合法
8001 超时值必须大于 0
comPortInvalid 8002 无效端口号
8003 属性只在运行时有效
8004 属性在运行时为只读
comPortAlreadyOpen 8005 端口已经打开
8006 设备标识符无效或不支持该标识符
8007 不支持设备的波特率
8008 指定的字节大小无效
8009 缺省参数错误
8010 硬件不可用(被其它设备锁定)
8011 函数不能分配队列
comNoOpen 8012 设备没有打开
8013 设备已经打开
8014 不能使用 comm 通知
comSetCommStateFailed 8015 不能设置 comm 状态
8016 不能设置 comm 事件屏蔽
comPortNotOpen 8018 仅当端口打开时操作才有效
8019 设备忙
comReadError 8020 读 comm 设备错误
comDCBError 8021 为该端口检索设备控制块时的内部错误
直接在打开,如果返回错误就是了
在打开操作之前先用 on error goto err语句说明出错跳到err标号处。
在err标号处 用msgbox显示 出错内容:
例如:MsgBox err.Description, vbExclamation + vbOKOnly, "提示信息"
如果端口是打开的,然后读取MSComm1.InBufferCount的值不为0就表示有数据。也可直接取数据MSComm1.Input。
看书