本文校验使用crcmod库
使用前请安装: pip install crcmod
关于CRC16,mkCrcFun 中的设置参考下表
http://crcmod.sourceforge.net/crcmod.predefined.html#predefined-crc-algorithms
根据如上设置对应的mkCrcFun传入值,代码如下
from binascii import *
from crcmod import *
# CRC16-MODBUS
def crc16Add(read):
crc16 =crcmod.mkCrcFun(0x18005,rev=True,initCrc=0xFFFF,xorOut=0x0000)
data = read.replace(" ","")
readcrcout=hex(crc16(unhexlify(data))).upper()
str_list = list(readcrcout)
if len(str_list) < 6:
str_list.insert(2, '0'*(6-len(str_list))) # 位数不足补0
crc_data = "".join(str_list)
print(crc_data)
read = read.strip()+' '+crc_data[4:]+' '+crc_data[2:4]
print('CRC16校验:',crc_data[4:]+' '+crc_data[2:4])
print('增加Modbus CRC16校验:>>>',read)
return read
if __name__ == '__main__':
crc16Add("01 03 08 00 01 00 01 00 01 00 01")
crc16Add("ff")
运行结果如下:
0XD728
CRC16校验: 28 D7
增加Modbus CRC16校验:>>> 01 03 08 00 01 00 01 00 01 00 01 28 D7
0X00FF
CRC16校验: FF 00
增加Modbus CRC16校验:>>> ff FF 00
以上.