通过pyseri发送十六进制(Modbus数据包)故障

2024-04-20 02:57:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在向串行设备(电压传感器)发送以下十六进制代码0x01 0x03 0x00 0x00 0x00 0x01 0x0a0x84时遇到一些问题,该设备将使用Python和pyserial返回当前电压的int。我的代码如下:

import serial
import time

ser = serial.Serial(
port=1,
baudrate=38400,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.EIGHTBITS,
timeout=0,
xonxoff=0,
rtscts=0)    

ByteStringToSend = "\x01\x03\x00\x00\x00\x01\x0a\x84"
ser.write(ByteStringToSend)
time.sleep(1)
RecievedData = ""
while ser.inWaiting() > 0:
    RecievedData = ser.read(1)
return RecievedData

问题是Python似乎是将每个字节作为一个单独的数据包发送,请参见下面的图像从串行监视器

http://www.centralinfo.com.au/images/SerialOutput.png处的图像

前8个字节(00-07)来自python应用程序(注意不同包的颜色不同),接下来的8个字节(08-0f)是一个VB.net版应用程序发送相同的数据工作。在

我的问题是,如何发送上述8个十六进制字节,使其在一个数据包(Modbus协议)中,根据vb.net版应用程序?在

用于比较的VB代码:

^{pr2}$

提前谢谢你的时间 克里斯


Tags: 代码图像import应用程序字节timeserial数据包
1条回答
网友
1楼 · 发布于 2024-04-20 02:57:45

您的VB应用程序启用XON/XOFF协议,而python应用程序没有。如果没有启用XON/XOFF,我怀疑您的python应用程序在发送之前在每个字节之间等待一定的时间,因此接收设备将每个字节视为一个单独的“包”。在

相关问题 更多 >