区为2字节
.InputMode = comInputModeBinary ‘设置接收数据模式为二进制形式
.InputLen = 1 ‘设置Input 一次从接收缓冲读取字节数为1
.SThreshold = 1 ‘设置Output 一次从发送缓冲读取字节数为1
.InBufferCount = 0 ‘清除接收缓冲区
.OutBufferCount = 0 ‘清除发送缓冲区
For i=1 to 8
Wmax(i) = -99 ‘最大值赋初值
Wmin(i) = 99 ‘最小值赋初值
Next i
w = 0 ‘数据个数计数器清零
.RThreshold = 1 ‘设置接收一个字节产生OnComm事件
On Error Resume Next ‘改变错误处理的方式。
Err.Clear
If .PortOpen = False Then ‘判断通信口是否打开
.PortOpen = True ‘打开通信口
If Err Then ‘错误处理
MsgBox "串口通信无效"
Exit Sub
End If
End If
End With
End Sub
为了达到实时数据采集目的,实时数据采集处理程序采用MSComm事件驱动方式。MSComm1_OnComm 的事件处理程序只处理comEvReceive事件,首先判断帧数据的开始字节,关闭OnComm接收事件,然后接收数据字节,将压缩BCD进行还原转换,再接收符号字节,判断数据符号,判断数据最大最小值,最后打开OnComm接收事件,等待下一次OnComm事件产生:
Private Sub MSComm1_OnComm()
With MSComm1
Select Case .CommEvent ‘判断MSComm1通讯事件
Case comEvReceive ‘收到Rthreshold个字节产生的接收事件
av = .Input ‘读取一个接收字节
ab(1) = av(0) ‘转换保存到字节数据类型数组
If ab(1) = 170 Then ‘判断是否为数据开始标志,0FAH=170
.RThreshold = 0 ‘关闭OnComm事件接收
W=W+1 ‘计数器加1
av = .Input ‘读取通道状态字节
ab(0) = av(0) ‘转换保存到字节数据类型数
For i = 1 To 8 ‘通道状态数组复位
TD(i) = False
Next i
cn = 2 ‘帧长度赋初值,一个开始字,一个状态字
If ab(0) >= 128 Then ‘判断第八通状态
TD(8) = True ‘第八道是真
ab(0) = ab(0) - 128 ‘第7位置零
cn = cn + 3 ‘帧长度加3个字节
End If
If ab(0) >= 64 Then ‘判断第七通状态
TD(7) = True ‘第七道是真
ab(0) = ab(0) - 64 ‘第6位置零
cn = cn + 3 ‘帧长度加3个字节
End If
If ab(0) >= 32 Then ‘判断第六通状态
TD(6) = True ‘第六道是真
ab(0) = ab(0) - 32 ‘第5位置零
cn = cn + 3 ‘帧长度加3个字节
End If
If ab(0) >= 16 Then ‘判断第五通状态
TD(5) = True ‘第五道是真
ab(0) = ab(0) - 16 ‘第4位置零
cn = cn + 3 ‘帧长度加3个字节
End If
If ab(0) >= 8 Then ‘判断第四通状态
TD(4) = True ‘第四道是真
ab(0) = ab(0) - 8 ‘第3位置零
cn = cn + 3 ‘帧长度加3个字节
End If
If ab(0) >= 4 Then ‘判断第三通状态
TD(3) = True ‘第三道是真
ab(0) = ab(0) - 4 ‘第2位置零
cn = cn + 3 ‘帧长度加