关于python中socket如何与硬件设备通信发送16进制指令并做crc16校验

1.需求说明

现有硬件设备arm,上有网板,通过socket客户端发送指令与接收数据并做crc校验,指令类型"01 24 3F 4D EC"等组合的16进制数据,且指令也需要做crc校验,并附加到指令后面。

2.python如何做crc校验

def crc16(data, length):
    my_data = bytearray(2)
    xda = 0xFFFF
    x_poly = 0xA001
    for z in range(length):
        xda ^= data[z]
        for j in range(8):
            x_bit = int(xda & 0x01)
            xda >>= 1
            if x_bit == 1:
                xda ^= x_poly
    my_data[0] = xda & 0xFF
    my_data[1] = xda >> 8
    return my_data

此代码是从C转换过来的,所以可以很好的与底层硬件切合。

3.如何发送指令并使用crc16函数

SendStr = '01 24'
hexValuesSplit = SendStr.split(' ')
bs = bytearray(4)  #一般是1024,不过为了数据整洁,确定大小后可以直接设置大小
i = 0
for my_hex in hexValuesSplit:
    if my_hex != "":
        value = int(my_hex, 16)
        bs[i] = value
        i += 1
tempB = crc16(bs, i)  # 获取校验结果
bs[i] = tempB[0]
bs[i + 1] = tempB[1]
i = i + 2  # 这个是记录数据长度,有时候需要发送
for item in bs:
    print(hex(item))  # 最后两位是校验结果 0x0 0x3b
socket.send(bs)  # 发送

 

你可能感兴趣的:(python,socket,硬件通信,16进制指令)