1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/fangguanlin-SParamTest

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
SendFormatV_1_0.bas 6.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
fangguanlin Отправлено 07.08.2014 07:58 1e69034
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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/fangguanlin-SParamTest.git
git@api.gitlife.ru:oschina-mirror/fangguanlin-SParamTest.git
oschina-mirror
fangguanlin-SParamTest
fangguanlin-SParamTest
master