关于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)  # 发送

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值