구성된 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직렬 클라이언트와 직렬 클라이언트 사이에 이러한 유형의 정렬 오류가 발생할 수 있는 원인 과 특정 전송 속도를 강제하는 방법 에 대한 아이디어가 있습니까 ?

관련 정보