考虑此功能,该功能构造一个数据包并通过USB串行将其发送到can总线:
def _write_to_can(id, data):
num_bytes=len(data)
send_buf = bytearray([0xAA,0xE0|num_bytes,])
for byte in reversed(id):
send_buf.append(byte)
for byte in data:
send_buf.append(byte)
send_buf.append(0x55)
print(send_buf)
#serial.write(send_buf)
这两个简单的测试输入:
_write_to_can(bytes.fromhex("1F 01 10 51"), bytes.fromhex("85 15 08 01"))
_write_to_can([0x1F,0x01,0x10,0x51], [0x85,0x15,0x08,0x01])
如果运行(python3),似乎会输出相同的字节数组(至少对我来说是如此):
bytearray(b'\xaa\xe4Q\x10\x01\x1f\x85\x15\x08\x01U')
bytearray(b'\xaa\xe4Q\x10\x01\x1f\x85\x15\x08\x01U')
但是只有第一个可以正常工作-另一端的设备可以响应,而第二个则没有任何反应。我是python和整个串行二进制十六进制的新手,所以我一定犯了一些非常愚蠢的错误?