Python通过串行端口写为十六进制而不是ASCII

时间:2019-05-29 00:12:16

标签: python python-3.x pyserial modbus

我正在尝试通过pyserial从使用ModBus协议的仪器中轮询数据。我需要知道如何防止pyserial在ascii中发送命令。

这是我所做的:

  1. 使用RealTerm,我连接到仪器并发送了此命令,然后单击“以数字发送”:0x33 0x03 0x9D 0xA4 0x00 0x02 0xAE 0x56。以数字形式发送此行能够正确轮询数据:33 03 04 BE CE 5C A8 94 99;例如,“ BE CE 5C A8”翻译为-0.4030,这是仪器在屏幕上显示的数字。

  2. 使用RealTerm和相同的命令,如果我单击“发送为ASCII”,则轮询的数据将不正确:30 F8 04 33 CC 44 A0 04 48 16 78 B0 04 85 DA,这与仪器屏幕上显示的数字无关。

  3. 回到Python和pyserial,当我尝试使用serial.write(“ 0x33 0x03 0x9D 0xA4 0x00 0x02 0xAE 0x56”)通过串行端口进行写操作时,得到的数据与步骤2中的相同。 p>

因此,在我看来,serial.write()以ASCII格式发送命令。有谁知道我如何以类似于RealTerm步骤1的方式发送此数据?

1 个答案:

答案 0 :(得分:0)

您可以使用字节或字节数组:

msg = bytes.fromhex("33 03 9D A4 00 02 AE 56")
serial.write(msg)