上位扫描下位机,我的理解是,上位机发出一个命令,下位机返回来。然后自动显示在combo里面。用的是MODBUS协议
想法一:那就加个定时器,假如在1S后没数据就表示没设备,如果有数据返回,在combo里面显示“仪表1”“仪表2”……
想法二:编个waitrs()程序,如果收不到结尾值并且超时则执行下面的程序,不在继续等待下去
高手帮忙一下吧,实在是编不出来
想法一:那就加个定时器,假如在1S后没数据就表示没设备,如果有数据返回,在combo里面显示“仪表1”“仪表2”……
想法二:编个waitrs()程序,如果收不到结尾值并且超时则执行下面的程序,不在继续等待下去
高手帮忙一下吧,实在是编不出来
Dim count As Integer
Dim send(7) As Byte '定义发送数组
Dim crc(2) As Byte
If scanaddP < 31 Then
send(0) = scanaddP
scanaddP = scanaddP + 1
Else: scanaddP = 0
End If
send(1) = &H3
send(2) = &H0
send(3) = &H0
send(4) = &H0
send(5) = &HA
Call CRC16(send(), 5, crc())
send(6) = crc(1)
send(7) = crc(0)
MSComm.Output = send
End Sub关于对仪表的测试,我写了个程序。模拟串口也确实收到了。对于接收。想写和以上类似的程序,不会写了。555~请高人指点。
Private Sub Timer_Add_Timer()
Dim receive(7) As Byte '定义接收数组
Combo_Meter.AddItem
End Sub
'4118采样值读入
'--------------------------------------------------------------------------------Function Read4118(ComStrb As String, delaytime As Single) As Single
Dim valuestr As String
Dim WZstart As Integer
Dim WZend As Integer
Dim i As Integer
On Error GoTo cwzydz
Read4118 = 0
For i = 1 To Len(ComStrb)
cyzb = cyzb + Asc(Mid$(ComStrb, i, 1))
Next
cyzb = cyzb And &HFF
ComStrb = ComStrb + Hex$(cyzb) + Chr$(13)
InitCom
Com.MSComm1.Output = ComStrb
delay (delaytime)
valuestr = Com.MSComm1.Input
valuestr = Trim$(valuestr)
If (Left$(valuestr, 1) <> ">") And (Right(valuestr, 1) <> Chr$(13)) Then
Exit Function
Else
WZstart = InStr(1, valuestr, ">")
WZend = InStr(1, valuestr, Chr$(13))
If (WZstart > 0) And (WZend > 0) Then
If WZstart <> WZend Then
Read4118 = (Mid$(valuestr, WZstart + 1, WZend - 4))
Else
Read4118 = 0
End If
End If
End If
cwzydz:
End Function