平时工作中经常使用到CRC16 Modbus的校验码,下面我就写一下我平时使用的校验函数。
输入00 01 02 03
输出00 01 02 03 10 85
def crc16(read):
crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xFFFF, xorOut=0x0000)
data = read.replace(" ", "")
readcrcout = hex(crc16(unhexlify(data))).upper()
str_list = list(readcrcout)
# print(str_list)
if len(str_list) == 5:
str_list.insert(2, '0')
crc_data = "".join(str_list)
read = read.strip() + ' ' + crc_data[4:] + ' ' + crc_data[2:4]
return read
与在线工具输出一致。