最后两位是生成的校验码,前面是原码
# -*- coding: utf-8 -*- #activate py37_tfgpu1131_keras215_opencv341 from binascii import * # 安装pip3 install --no-cache-dir -U crcmod import crcmod #生成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) # print(str_list) if len(str_list) == 5: str_list.insert(2, '0') # 位数不足补0,因为一般最少是5个 crc_data = "".join(str_list) #用""把数组的每一位结合起来 组成新的字符串 # print(crc_data) read = read.strip() + ' ' + crc_data[4:] + ' ' + crc_data[2:4] #把源代码和crc校验码连接起来 # print('CRC16校验:', crc_data[4:] + ' ' + crc_data[2:4]) print(read) return read if __name__ == '__main__': crc16Add("78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 00 30 00 31 00 32 00 33 00 34 00 35") #78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 00 30 00 31 00 32 00 33 00 34 00 35 B8 83 crc16Add("78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 06 01 0C 00 CE D2 B0 AE D6 D0 BA BD C8 ED BC FE") #78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 06 01 0C 00 CE D2 B0 AE D6 D0 BA BD C8 ED BC FE 45 8C
https://www.23bei.com/tool-59.html CRC-16(Modbus)
78开始 校验位结束