产品中心
IC693MDL340E
[开始]按钮的Click事件处理程序主要是对MSComm1控制的参数初始化设置,程序中大部分参数在设计时可在MSComm1控制的属性窗口中设置:
Private Sub Command1_Click() '开始按钮
With MSComm1
mPort=2 '使用COM2
.Setting="9600,N,8,1" '设置通信口参数
.InBufferSize=40 '设置MSComm1接收缓冲区为40字节
.OutBufferSize=2 '设置MSComm1发送缓冲区为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 mEvent '判断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 '帧长度加3个字节
End If
If ab(0) >= 2 Then '判断第二通状态
TD(2) = True '第二道是真
ab(0) = ab(0) - 2 '第0位置零
cn = cn + 3 '帧长度加3个字节
End If
If ab(0) >= 1 Then '判断第一通状态
TD(1) = True '第一道是真
cn = cn + 3 '帧长度加3个字节
End If
For i = 1 To 8 '
If TD(i) = True Then
av = .Input '读取第一个数据字节(BCD码高位字节)
ab(2) = av(0) '转换保存到字节数据类型数组
av = .Input '读取第二个数据字节(BCD码低位字节)
ROSEMOUNT TRANSMITTER 1151DP4S12S2B1 REMOTE FLG 686IN07
ROSEMOUNT 3051CA1A22A1AS1E5 W/ 1199WNB05SSCW50LA000
ROSEMOUNT DIETERICH STANDARD PNT10S007HADS0S00003A1A
ROSEMOUNT PRESSURE TRANSMITTER 3051-CG3A22A1AS0E5M5QP
ROSEMOUNT PRESSURE TRANSMITTER 3051-CG3A22A1AS05M5E5QP
ROSEMOUNT 1151DP3E12
NEW ROSEMOUNT 3051 DIFFERENTIAL PRESSURE TRANSMITTER
NEW ROSEMOUNT 3051 GAGE PRESSURE TRANSMITTER
USED FOXBORO/ROSEMOUNT TRANSMITTER 823DP-D3S1NM2-M
NEW ROSEMOUNT 444RL1U1D2E5 TEMPERATURE TRANSMITTER
Rosemount 3051 Protection Terminal Block Kit 14Pcs
Rosemount 248 Temp Transmitter C/W 68 Sensor&Thermowell
ROSEMOUNT 3051 GAUGE PRESSURE TRANSMITTER 601IN4
Rosemount 1151 Smart Pressure Transmitter, 0-200#
NEW ROSEMOUNT 3051 PRESSURE TRANSMITTER 0 - 1000 IN H20
ROSEMOUNT 1151DP4E2292B4 PRESSURE TRANSMITTER
NEW Rosemount 03031-3023-0042 0303130230042
ROSEMOUNT 44RL3U1A2E5 NNB
ROSEMOUNT 8712H SMART FAMILY MAG. FLOWMETER TRANSMITTE
Rosemount 0183P13J2N00N045E5 Sensor 0183*6632742 New
Rosemount 0183P13J2N00N040E5 Sensor 0183*6740184 New
ROSEMOUNT MAGNETIC FLOWTUBE
ROSEMOUNT PRESSURE TRANSMITTER 3051
ROSEMOUNT 1151 PRESSURE TRANSMITTER 1151GP6E22M1B1 ALPH
NEW ROSEMOUNT TEMPERATURE TRANSMITTER 444TK3U1A2E5 ALPH
Rosemount Temperature Transmitter 444TK1U1B2NA
NEW ROSEMOUNT 1151DP3E22 PRESSURE TRANSMITTER
Rosemount Smart Family 8700 Magnetic Flow Transmitter
NEW Rosemount Temperature Probe Model 79 Conection Head
Rosemount 444RL1U1A1E5 Temperature Transmitter New
NEW ROSEMOUNT 2024D2A22A0I1B4 TRANSMITTER
NEW ROSEMOUNT 2024 D2A22A2I1B4 TRANSMITTER
ROSEMOUNT TANK SPUD 01199-0061-0001 *NEW*
New Rosemount Model 79 Field Connection Heads Pair NR
ROSEMOUNT TEMPERATURE PROBES
ROSEMOUNT Temp.Sensor CAMCO 1/2"T-304 79-325-2; *B8
Rosemount 644 Intrinsically Safe Temperature Transmitte