帧格式:68 xx xx xx xx xx xx 68 xx xx xx ...... xx 16
头 8位地址 命令序号 头 控制码 数据长度 数据域 校验码 结束程序:
Dim DataLong As Integer ' 整个数据帧长度
Dim i As Integer, intCount As Integer, j As Integer, w As Integer ' 循环变量
Dim v As Variant
Dim sum As Variant
Dim v1 As Variant '数据长度
Dim rd() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
'------------------------------------------------------------------------------------------------------
DataLong = CInt(v1) + 13 '整包的数据长度,数据长度加上起始位、终端地址、主站地址、
'数据长度位、控制码、帧校验位和结束位
ReDim s(DataLong)DoIf MSComm1.InBufferCount > 0 Thenv = MSComm1.Input
rd = v '每次都是rd(0)
's(0) = rd(0)
Else
If i = 100 Then Exit Sub
End If
Loop Until rd(0) = &H68s(0) = &H68If s(0) = &H68 Then'MSComm1.RThreshold = 0 '关闭接收
If MSComm1.InBufferCount > 0 Thenw = 0w = w + 1v = MSComm1.Input
rd = v
s(1) = rd(0)v = MSComm1.Input
rd = v
s(2) = rd(0)v = MSComm1.Input
rd = v
s(3) = rd(0)v = MSComm1.Input
rd = v
s(4) = rd(0)v = MSComm1.Input
rd = v
s(5) = rd(0)v = MSComm1.Input
rd = v
s(6) = rd(0)v = MSComm1.Input
rd = v
s(7) = rd(0)v = MSComm1.Input
rd = v
s(8) = rd(0)v = MSComm1.Input
rd = v
s(9) = rd(0)v = MSComm1.Input
rd = v
s(10) = rd(0)End IfIf rd(0) = &H68 And rd(7) = &H68 Thenj = 12 '从数据开始Do
If MSComm1.InBufferCount > 0 Thenv = MSComm1.Input
rd = v
s(j) = rd(0)j = j + 1 '计数器加1End IfLoop Until j = DataLong - 13End IfIf s(DataLong - 1) <> &H16 Then Exit Subsum = &H0For j = 0 To DataLong - 2 '从起始位开始到数据域减去最后的结束位和校验和位
..........指点指点sum = s(j) + sumNext jsum = sum Mod 256 '256模和
If sum = s(DataLong - 2) Then '判断校验和
....................
高手们指点指点吧!这样分析不晓得对不对?我快疯了.
头 8位地址 命令序号 头 控制码 数据长度 数据域 校验码 结束程序:
Dim DataLong As Integer ' 整个数据帧长度
Dim i As Integer, intCount As Integer, j As Integer, w As Integer ' 循环变量
Dim v As Variant
Dim sum As Variant
Dim v1 As Variant '数据长度
Dim rd() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
'------------------------------------------------------------------------------------------------------
DataLong = CInt(v1) + 13 '整包的数据长度,数据长度加上起始位、终端地址、主站地址、
'数据长度位、控制码、帧校验位和结束位
ReDim s(DataLong)DoIf MSComm1.InBufferCount > 0 Thenv = MSComm1.Input
rd = v '每次都是rd(0)
's(0) = rd(0)
Else
If i = 100 Then Exit Sub
End If
Loop Until rd(0) = &H68s(0) = &H68If s(0) = &H68 Then'MSComm1.RThreshold = 0 '关闭接收
If MSComm1.InBufferCount > 0 Thenw = 0w = w + 1v = MSComm1.Input
rd = v
s(1) = rd(0)v = MSComm1.Input
rd = v
s(2) = rd(0)v = MSComm1.Input
rd = v
s(3) = rd(0)v = MSComm1.Input
rd = v
s(4) = rd(0)v = MSComm1.Input
rd = v
s(5) = rd(0)v = MSComm1.Input
rd = v
s(6) = rd(0)v = MSComm1.Input
rd = v
s(7) = rd(0)v = MSComm1.Input
rd = v
s(8) = rd(0)v = MSComm1.Input
rd = v
s(9) = rd(0)v = MSComm1.Input
rd = v
s(10) = rd(0)End IfIf rd(0) = &H68 And rd(7) = &H68 Thenj = 12 '从数据开始Do
If MSComm1.InBufferCount > 0 Thenv = MSComm1.Input
rd = v
s(j) = rd(0)j = j + 1 '计数器加1End IfLoop Until j = DataLong - 13End IfIf s(DataLong - 1) <> &H16 Then Exit Subsum = &H0For j = 0 To DataLong - 2 '从起始位开始到数据域减去最后的结束位和校验和位
..........指点指点sum = s(j) + sumNext jsum = sum Mod 256 '256模和
If sum = s(DataLong - 2) Then '判断校验和
....................
高手们指点指点吧!这样分析不晓得对不对?我快疯了.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货