Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在串行端口上以十六进制而非ASCII写入_Python_Python 3.x_Pyserial_Modbus - Fatal编程技术网

Python在串行端口上以十六进制而非ASCII写入

Python在串行端口上以十六进制而非ASCII写入,python,python-3.x,pyserial,modbus,Python,Python 3.x,Pyserial,Modbus,我试图通过pyserial从使用ModBus协议的仪器中轮询数据。我需要知道如何防止pyserial以ascii格式发送命令 以下是我所做的: 使用RealTerm,我连接到仪器并发送此命令,然后点击“发送为数字”:0x33 0x03 0x9D 0xA4 0x00 0x02 0xAE 0x56。以数字形式发送此行可以正确轮询数据:33 03 04 BE CE 5C A8 94 99;例如,“BE CE 5C A8”转换为-0.4030,这是仪器在其屏幕上显示的数字 使用RealTerm和相同的命

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

以下是我所做的:

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

  • 使用RealTerm和相同的命令,如果我点击“以ASCII发送”,轮询的数据将不正确:30 F8 04 33 CC 44 A0 04 48 16 78 B0 04 85 DA,我无法将其与仪器屏幕上显示的数字联系起来

  • 回到Python和pyserial,当我尝试使用serial.write(“0x33 0x03 0x9D 0xA4 0x00 0x02 0xAE 0x56”)在串行端口上进行写入时,我得到了与步骤2中相同的数据


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

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

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

    可能重复的感谢亚当!我现在无法使用仪器来测试你的方法,但我有一个问题。python代码从json文件(配置文件)读取msg,我对json文件不太熟悉,但我知道它无法处理python命令,因此将这两行代码放入json文件将抛出错误(我说得对吗?)。由于msg=b'3\x03\x9d\xa4\x00\x02\xaeV',您知道我应该如何准确地将其写入json文件吗?