EXCEL如何实现CRC16-MODBUS的计算

1、创建启用宏的EXCEL文件,一般文件后缀为*.xlsm。

2、选择   开发工具 ---   Visual Basic。(如果没有,那就去找找相关文章,如何调出开发工具,相关文章很多)

3、创建模块

4、输入代码(最核心)

Function CalculateCRC(inputHex As String) As String
    Dim i As Integer
    Dim j As Integer
    Dim crc As Integer
    Dim crcLowByte As Byte
    Dim crcHighByte As Byte
    
    crc = &HFFFF
                
    For i = 1 To Len(inputHex) Step 2
        crc = crc Xor Val("&H" & Mid(inputHex, i, 2))
        For j = 1 To 8
            If (crc And 1) = 1 Then
                crc = ((crc And &HFFFF&) \ 2) Xor &HA001
                
            Else
                crc = (crc And &HFFFF&) \ 2
            End If
        Next j
    Next i
    

    crcLowByte = crc And &HFF
    crcHighByte = (crc And &HFF00&) \ &H100

    CalculateCRC = Right("00" & Hex(crcHighByte), 2) & Right("00" & Hex(crcLowByte), 2)
End Function

代码复杂度不高,最关键的核心是EXCEL的VB没有无符号类型的数据类型,所以需要对数据进行特殊处理,否则移位运算会出错,得到的结果不是预期想要的数据,简单的crc = crc \ 2是不行的。

5、回到EXCEL表,在单元格输入=CalculateCRC("12345678"),即可计算出0x12 0x34 0x56 0x78的CRC16-MODBUS的校验值。“12345678”可以直接取其他单元格的16进制字符串数据。(基础代码只适合偶数的字符串,对于奇数的字符串,没有做补零处理,需要自行处理。)

附件资源为其他作者利用EXCEL现成公式实现的CRC16计算。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值