c# modbus RTU CRC16校验和计算

校验和算法:

1) 预置 1 个 16 位的寄存器为十六进制FFFF(即全为 1) , 称此寄存器为 CRC寄存器。

2) 把第一个 8 位二进制数据 (通信信息帧的第一个字节) 与 16 位的 CRC寄存器的低 8 位相异或, 把结果放于 CRC寄存器。

3) 把 CRC 寄存器的内容右移一位( 朝低位)用 0 填补最高位, 并检查右移后的移出位。

4) 如果移出位为 0, 重复第 3 步 ( 再次右移一位); 如果移出位为 1, CRC 寄存器与多项式A001 ( 1010 0000 0000 0001) 进行异或。

5) 重复步骤 3 和步骤 4, 直到右移 8 次,这样整个8位数据全部进行了处理。

6) 重复步骤 2 到步骤 5, 进行通信信息帧下一个字节的处理。

7) 将该通信信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换。

8) 最后得到的 CRC寄存器内容即为 CRC码。

代码:

static ushort CRC16(byte[] pDataBytes)
        {
            ushort crc = 0xffff;
            ushort polynom = 0xA001;

            for (int i = 0; i < pDataBytes.Length; i++)
            {
                crc ^= pDataBytes[i];
                for (int j = 0; j < 8; j++)
                {
                    if ((crc & 0x01) == 0x01)
                    {
                        crc >>= 1;
                        crc ^= polynom;
                    }
                    else
                    {
                        crc >>= 1;
                    }
                }
            }

            return crc;
        }

代码解释:

1、if ((crc & 0x01) == 0x01) 这行代码即是判断最后一位是0还是1

2、^符号为异或位运算,参加运算的两个位,如果这两个位的值相同,则异或的结果为0。如果值不同,则结果为1

如:1^1=0,1^0=1

3、>>符号是位右移符号,将二进制表示的位整体向右移动。如:1111向右移动一位后就变成了0111。

4、&符号是逻辑与运算符号,两个二进制位的值相同,则运算结果为1,不同为0

 

 

 

 

 

 

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ModModbusModbus RTModbus RTUModbus RTU CRCModbus RTU CRCModbus RTU CRC 是一Modbus RTU CRC 是一种Modbus RTU CRC 是一种用Modbus RTU CRC 是一种用于Modbus RTU CRC 是一种用于数据Modbus RTU CRC 是一种用于数据通Modbus RTU CRC 是一种用于数据通信Modbus RTU CRC 是一种用于数据通信校Modbus RTU CRC 是一种用于数据通信校验Modbus RTU CRC 是一种用于数据通信校验的Modbus RTU CRC 是一种用于数据通信校验的机Modbus RTU CRC 是一种用于数据通信校验的机制Modbus RTU CRC 是一种用于数据通信校验的机制,Modbus RTU CRC 是一种用于数据通信校验的机制,可以Modbus RTU CRC 是一种用于数据通信校验的机制,可以检Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRCModbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC)Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据传Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据传输Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据传输的Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据传输的准Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据传输的准确Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据传输的准确性Modbus RTU CRC 是一种用于数据通信校验的机制,可以检测数据传输过程中发生的差错或损坏情况。该机制使用循环冗余校验 (CRC) 算法对数据进行校验,以确保数据传输的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值