配置的 Pymodbus 波特率与 /dev/ttySX 不同

配置的 Pymodbus 波特率与 /dev/ttySX 不同

我正在编写一个 modbus 客户端来读取传感器。我有一个可以在 Windows 上正常工作的代码(具有多个波特率)。但是,在 Linux 上运行时,波特率不正确。我正在使用pymodbus==3.1.0.

我尝试制作一个最小的工作示例,但波特率设置正确。此代码与设备代码之间的唯一区别是GuiProcess运行 python tkiner gui,它允许选择设备。

from pymodbus.pdu import ModbusRequest
from pymodbus.client import ModbusSerialClient
from pymodbus.transaction import ModbusRtuFramer
from pymodbus.exceptions import ModbusIOException
import time
import multiprocessing

MODUBS_REGISTER_READ_BLOCK = 100

# Communication process 
def COMProcess():
    client = ModbusSerialClient(
            method = 'rtu'
            ,port= "/dev/ttyS0"
            ,baudrate=19200
            ,parity = 'N'
            ,stopbits=1
            ,bytesize=8
            ,timeout=0.1
            ,RetryOnEmpty = True
            ,RetryOnInvalid = True
        )

    connection = client.connect()
    time.sleep(2)

    while(1):
        rr = client.read_holding_registers(0 ,MODUBS_REGISTER_READ_BLOCK,slave=0x12)
        time.sleep(1)

    client.close()

# Communication process 
def GuiProcess():
    while(1):
        time.sleep(1)
        # In the real scenario a tkinter gui is running here
        print("elapsed 1 sec")

# Start multiple thread, one for GUI and another for COM
p1 =  multiprocessing.Process(target= COMProcess )
p2 =  multiprocessing.Process(target= GuiProcess )

p1.start()
p2.start()

p1.join()
p2.join()

在真实设备中,如果我打印客户端信息,则它似乎配置正确。然而,消息以 9600 波特率物理发送(用示波器测量)。

ModbusSerialClient(<pymodbus.framer.rtu_framer.ModbusRtuFramer object at 0x7fc3749c6f20> baud[19200])

pymodbus关于什么可能导致串行客户端和串行客户端之间出现这种类型的错位的任何想法/dev/ttyS0以及如何强制特定的波特率?

相关内容