
我在全局脚本里建了一个类,使用打包协议PackProtocol()的时候却提示我类型不匹配
Class protocol
Public DEVICE_ID '设备号
Public PROTOCOL_NUMBER '功能代码
Public DATA_NUM '数据个数
Private DATA_BUFFER(10) '传输数据,11个数据
'初始化变量
Public Sub Class_Initialize()
Dim i
DEVICE_ID = CLng(0)
PROTOCOL_NUMBER = CByte(0)
DATA_NUM = CByte(0)
For i = 0 To 10
DATA_BUFFER(i) = CByte(0)
Next
End Sub
'读取数据
Public Property Get CRCArray(Byval i)
CRCArray = DATA_BUFFER(i)
End Property
'写入数据
Public Property Let CRCArray(Byval i, Byval vNewValue)
DATA_BUFFER(i) = vNewValue
End Property
'crc校验
Private Function Crc16(data(), data_len)
Dim crc_md
Dim i
Dim Flag
Dim mov_data
Dim hh
Dim ReturnData(1)
mov_data = 128
crc_md = 0
For i = 0 To (data_len - 1)
For Flag = 0 To 7
hh = (crc_md And 32768)
If hh <> 0 Then
crc_md = crc_md * 2
crc_md = crc_md Mod 65536
crc_md = crc_md Xor 4129
Else
crc_md = crc_md * 2
crc_md = crc_md Mod 65536
End If
hh = 0
hh = data(i) And mov_data
If hh <> 0 Then crc_md = crc_md Xor 4129
mov_data = mov_data 2
If mov_data = 0 Then mov_data = 128
Next
Next
ReturnData(0) = CByte(crc_md Mod 256) 'CRC低位
ReturnData(1) = CByte(crc_md 256) 'CRC高位
Crc16 = ReturnData
End Function
'打包协议
Public Function PackProtocol()
Dim send_protocol()
Redim send_protocol(5 + DATA_NUM)'定义协议数组(6+数据个数)
Dim crc_line()
Dim i
send_protocol(0) = CByte(DEVICE_ID Mod 256) '设备号
send_protocol(1) = CByte(DEVICE_ID 256)
send_protocol(2) = PROTOCOL_NUMBER '功能代码
send_protocol(3) = DATA_NUM '数据个数
If DATA_NUM <> 0 Then '数据内容
For i = 0 To DATA_NUM - 1
send_protocol(4 + i) = DATA_BUFFER(i)
Next
End If
crc_line = Crc16(send_protocol, (4 + DATA_NUM)) '校验码
send_protocol(4 + DATA_NUM) = crc_line(0)
send_protocol(5 + DATA_NUM) = crc_line(1)
PackProtocol = CByte(send_protocol) '整个协议数据
End Function
Public Function DivideProtocol(re_data())
Dim MyData()
Dim i
Dim nLen
nLen = (UBound(re_data) - LBound(re_data) + 1) '计算接收到的数据个数
MyData = Crc16(re_data, (nLen - 2)) '计算校验码
If (MyData(0) = CInt(re_data(nLen - 2)) And MyData(1) = CInt(re_data(nLen - 1))) Then '验证校验码是否正确
DEVICE_ID = CInt(re_data(1) * 256 + re_data(0)) '提取设备号
PROTOCOL_NUMBER = re_data(2) '提取功能代码
DATA_NUM = re_data(3) '提取数据个数
If nLen > 6 Then '如果有数据,就提取数据
For i = 0 To (nLen - 6) - 1
DATA_BUFFER(i) = re_data(4 + i)
Next
End If
DivideProtocol = True '返回值
Else
DivideProtocol = False
End If
End Function
End Class