想问问各位大牛们,应该怎么解决这个问题
我在串口通信中应用,就是就几个字节的16进制数据,需要加上CRC校验码之后再发送
help me
谢谢
16 个解决方案
#2
谢谢楼上的
可我需要的是应用于串口通信的啊
就是有几个字节的十六进制数据,然后进行CRC(CCITT)的校验
可我需要的是应用于串口通信的啊
就是有几个字节的十六进制数据,然后进行CRC(CCITT)的校验
#3
Option Explicit
'CRC校验函数
Function CRC16(Coun() As Byte) As Long
Dim intBit, intTemp As Integer
Dim lonCRC As Long
Dim intCnt As Long
lonCRC = &HFFFF&
For intCnt = 0 To UBound(Coun) - 2
lonCRC = lonCRC Xor Coun(intCnt)
For intBit = 0 To 7
intTemp = lonCRC Mod 2
lonCRC = lonCRC \ 2
If intTemp = 1 Then
lonCRC = lonCRC Xor &HA001&
End If
Next intBit
Next intCnt
CRC16 = lonCRC
End Function
Private Sub Command1_Click()
Dim longCRC As Long '定义校验变量
Dim aa(7) As Byte '定义动态数组
aa(0) = &H1 '地址
aa(1) = &H3 '功能码 读
aa(2) = &H0 '起始地址
aa(3) = &HA
aa(4) = &H0 '数据点数
aa(5) = &H8
longCRC = CRC16(aa) 'CRC校验
aa(UBound(aa) - 1) = longCRC Mod 256
aa(UBound(aa)) = longCRC \ 256
MSComm1.OutBufferCount = 0 '清空输出寄存器
MSComm1.Output = aa '发送
End Sub
Private Sub Form_Load()
MSComm1.PortOpen = True
End Sub
#5
谢谢zdingyun
我还是自己先试试看
看上面的帖子,多项式还是&HA001
而CCITT的标准是反相多项式为&H8408
我还是自己先试试看
看上面的帖子,多项式还是&HA001
而CCITT的标准是反相多项式为&H8408
#6
该代码执行结果与COMMIX的CRC16(MODBUSRTU)检验输出相同
#7
我眼花了.....不好意思-_-b
#8
唉,今天试了一下上面的程序,好象还是不行啊
我的十六进制数据为 07 15 12 34 56 78 00,看网上最通用的那个程序,用&H8408为反相多项式代替&HA001
算得结果为15 48
也不知道正确与否
希望各位帮帮我
我的十六进制数据为 07 15 12 34 56 78 00,看网上最通用的那个程序,用&H8408为反相多项式代替&HA001
算得结果为15 48
也不知道正确与否
希望各位帮帮我
#9
LZ,下午网上搜索以下,CRC(CCITT)校验的内容能解决问题的没有.
再DING下,期待高手出现.
#10
唉,我也是很无助啊,急切需要人帮助
谢谢楼上的
谢谢楼上的
#12
#13
#14
#15
谢谢各位的解答,问题已解决。
#16
楼主 我现在要做一个CRC8的校验 也是VB中的 能帮下忙嘛
#1
#2
谢谢楼上的
可我需要的是应用于串口通信的啊
就是有几个字节的十六进制数据,然后进行CRC(CCITT)的校验
可我需要的是应用于串口通信的啊
就是有几个字节的十六进制数据,然后进行CRC(CCITT)的校验
#3
Option Explicit
'CRC校验函数
Function CRC16(Coun() As Byte) As Long
Dim intBit, intTemp As Integer
Dim lonCRC As Long
Dim intCnt As Long
lonCRC = &HFFFF&
For intCnt = 0 To UBound(Coun) - 2
lonCRC = lonCRC Xor Coun(intCnt)
For intBit = 0 To 7
intTemp = lonCRC Mod 2
lonCRC = lonCRC \ 2
If intTemp = 1 Then
lonCRC = lonCRC Xor &HA001&
End If
Next intBit
Next intCnt
CRC16 = lonCRC
End Function
Private Sub Command1_Click()
Dim longCRC As Long '定义校验变量
Dim aa(7) As Byte '定义动态数组
aa(0) = &H1 '地址
aa(1) = &H3 '功能码 读
aa(2) = &H0 '起始地址
aa(3) = &HA
aa(4) = &H0 '数据点数
aa(5) = &H8
longCRC = CRC16(aa) 'CRC校验
aa(UBound(aa) - 1) = longCRC Mod 256
aa(UBound(aa)) = longCRC \ 256
MSComm1.OutBufferCount = 0 '清空输出寄存器
MSComm1.Output = aa '发送
End Sub
Private Sub Form_Load()
MSComm1.PortOpen = True
End Sub
#4
#5
谢谢zdingyun
我还是自己先试试看
看上面的帖子,多项式还是&HA001
而CCITT的标准是反相多项式为&H8408
我还是自己先试试看
看上面的帖子,多项式还是&HA001
而CCITT的标准是反相多项式为&H8408
#6
该代码执行结果与COMMIX的CRC16(MODBUSRTU)检验输出相同
#7
我眼花了.....不好意思-_-b
#8
唉,今天试了一下上面的程序,好象还是不行啊
我的十六进制数据为 07 15 12 34 56 78 00,看网上最通用的那个程序,用&H8408为反相多项式代替&HA001
算得结果为15 48
也不知道正确与否
希望各位帮帮我
我的十六进制数据为 07 15 12 34 56 78 00,看网上最通用的那个程序,用&H8408为反相多项式代替&HA001
算得结果为15 48
也不知道正确与否
希望各位帮帮我
#9
LZ,下午网上搜索以下,CRC(CCITT)校验的内容能解决问题的没有.
再DING下,期待高手出现.
#10
唉,我也是很无助啊,急切需要人帮助
谢谢楼上的
谢谢楼上的
#11
#12
#13
#14
#15
谢谢各位的解答,问题已解决。
#16
楼主 我现在要做一个CRC8的校验 也是VB中的 能帮下忙嘛