Слияние кода завершено, страница обновится автоматически
Attribute VB_Name = "SendFormatV_1_0"
Option Explicit
'先高位后低位
Type Data_Type
'11+n
Begin(1) As Byte '2
Mode As Byte '1
Address As Byte '1
Command(1) As Byte '2
DataLen As Byte '1
Data() As Byte 'n
CheckSum(1) As Byte '2
EndFlag(1) As Byte '2
End Type
'要发送的数据,Command中包含数据
Function SendCom2Bytes(Command As String) As Byte()
Dim mySend() As Byte, readyData() As Byte, i As Integer, j As Integer
j = 0
i = 0
Dim tmp() As String
Dim lastLen As Integer
Dim newLen As Integer
Dim resultCrc() As Byte
tmp = Split(Command, " ")
ReDim mySend(UBound(tmp) + 2)
mySend(0) = Val("&H" + tmp(0)) 'mode
mySend(1) = Val("&H" + tmp(1)) 'address
mySend(2) = Val("&H" + tmp(2)) 'command
mySend(3) = Val("&H" + tmp(3)) 'command
mySend(4) = Val("&H" + tmp(4)) 'data length
'send.Data = myData
lastLen = 11 + mySend(4)
newLen = lastLen
'命令检查
If mySend(4) <> UBound(tmp) - 4 Then
MsgBox "发送数据格式错误", , "错误"
Exit Function
End If
For i = 0 To mySend(4) - 1
mySend(i + 5) = CByte(Val("&h" + tmp(5 + i)))
Next i
resultCrc = CRC_ITU1(mySend())
mySend(UBound(mySend) - 1) = resultCrc(1)
mySend(UBound(mySend)) = resultCrc(0) '(resultCrc And &HFF00) \ &H100 And &HFF
'新长度计算
For i = 0 To UBound(mySend)
If mySend(i) = &H7E Then
newLen = newLen + 1
ElseIf mySend(i) = &H7F Then
newLen = newLen + 1
End If
Next i
ReDim readyData(newLen - 1)
'数据定型
readyData(j) = &H7E
j = j + 1
readyData(j) = &H7E
j = j + 1
For i = 0 To UBound(mySend)
If mySend(i) = &H7E Then
readyData(j) = &H7D
j = j + 1
readyData(j) = &H7E
j = j + 1
ElseIf mySend(i) = &H7F Then
readyData(j) = &H7D
j = j + 1
readyData(j) = &H7F
j = j + 1
Else
readyData(j) = mySend(i)
j = j + 1
End If
Next i
readyData(newLen - 2) = &H7F
readyData(newLen - 1) = &H7F
SendCom2Bytes = readyData
End Function
'Command的中只包含了数据长度,sendData是要发送的数据
Function SendComData2Bytes(Command As String, SendData() As Byte) As Byte()
Dim mySend() As Byte, readyData() As Byte, i As Integer, j As Integer
j = 0
i = 0
Dim tmp() As String
Dim lastLen As Integer
Dim newLen As Integer
Dim resultCrc() As Byte
tmp = Split(Command, " ")
'+2CRC
ReDim mySend(UBound(tmp) + UBound(SendData) + 1 + 2)
mySend(0) = Val("&H" + tmp(0)) 'mode
mySend(1) = Val("&H" + tmp(1)) 'address
mySend(2) = Val("&H" + tmp(2)) 'command
mySend(3) = Val("&H" + tmp(3)) 'command
mySend(4) = Val("&H" + tmp(4)) 'data length
'数据格式+data长度-1
'2+1+2+2+1+2+2
lastLen = 11 + Val("&H" + tmp(4))
newLen = lastLen
'命令检查,数据是否OK
If mySend(4) <> UBound(SendData) + 1 Then
MsgBox "发送数据格式错误", , "错误"
Exit Function
End If
'赋值
For i = 0 To UBound(SendData)
mySend(i + 5) = SendData(i)
Next i
resultCrc = CRC_ITU1(mySend())
mySend(UBound(mySend) - 1) = resultCrc(1) 'resultCrc And &HFF
mySend(UBound(mySend)) = resultCrc(0) '(resultCrc And &HFF00) \ &H100 And &HFF
'新长度计算
For i = 0 To UBound(mySend)
If mySend(i) = &H7E Then
newLen = newLen + 1
ElseIf mySend(i) = &H7F Then
newLen = newLen + 1
End If
Next i
ReDim readyData(newLen - 1)
'数据定型
readyData(j) = &H7E
j = j + 1
readyData(j) = &H7E
j = j + 1
For i = 0 To UBound(mySend)
If mySend(i) = &H7E Then
readyData(j) = &H7D
j = j + 1
readyData(j) = &H7E
j = j + 1
ElseIf mySend(i) = &H7F Then
readyData(j) = &H7D
j = j + 1
readyData(j) = &H7F
j = j + 1
Else
readyData(j) = mySend(i)
j = j + 1
End If
Next i
readyData(newLen - 2) = &H7F
readyData(newLen - 1) = &H7F
SendComData2Bytes = readyData
End Function
Function SendBytes2Bytes(SendData() As Byte) As Byte()
Dim newLen As Integer, lastLen As Integer
Dim resultCrc() As Byte
Dim i As Integer, j As Integer
'2head,2tail
lastLen = UBound(SendData) + 2 + 2
newLen = lastLen
Dim readyData() As Byte
resultCrc = CRC_ITU1(SendData())
SendData(UBound(SendData) - 1) = resultCrc(1) 'resultCrc And &HFF
SendData(UBound(SendData)) = resultCrc(0) ' (resultCrc And &HFF00) \ &H100 And &HFF
'新长度计算
For i = 0 To UBound(SendData)
If SendData(i) = &H7D Or SendData(i) = &H7E Or SendData(i) = &H7F Then
newLen = newLen + 1
End If
Next i
ReDim readyData(newLen)
j = 0
readyData(j) = &H7E
j = j + 1
readyData(j) = &H7E
j = j + 1
For i = 0 To UBound(SendData)
If SendData(i) = &H7D Then
readyData(j) = &H7D
j = j + 1
readyData(j) = &H7D
ElseIf SendData(i) = &H7E Then
readyData(j) = &H7D
j = j + 1
readyData(j) = &H7E
ElseIf SendData(i) = &H7F Then
readyData(j) = &H7D
j = j + 1
readyData(j) = &H7F
Else
readyData(j) = SendData(i)
End If
j = j + 1
Next i
readyData(newLen - 1) = &H7F
readyData(newLen) = &H7F
SendBytes2Bytes = readyData
End Function
Function ReciveBytes2Data(SendData() As Byte) As Byte()
Dim i As Integer
Dim j As Integer
Dim istop As Integer
Dim readyData() As Byte
Dim Size As Integer
Size = UBound(SendData)
istop = Size - 2
i = 2
For i = 2 To istop
If SendData(i) = &H7D Then
If SendData(i + 1) = &H7E Or SendData(i + 1) = &H7F Or SendData(i + 1) = &H7D Then
Size = Size - 1
i = i + 1
End If
End If
Next i
ReDim readyData(Size - 4)
j = 0
For i = 2 To istop
If SendData(i) = &H7D Then
If SendData(i + 1) = &H7F Then
readyData(j) = &H7F
i = i + 1
ElseIf SendData(i + 1) = &H7E Then
readyData(j) = &H7E
i = i + 1
ElseIf SendData(i + 1) = &H7D Then
readyData(j) = &H7D
i = i + 1
End If
Else
readyData(j) = SendData(i)
End If
j = j + 1
Next i
ReciveBytes2Data = readyData
End Function
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )