Pymodbus RTU [Errno 25] Не подходит ioctl для устройства - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь установить клиент Modbus RTU на моем Raspberry Pi 4, который разговаривает с синхронным сервером modbus, доступным в примерах pymodbus (https://pymodbus.readthedocs.io/en/latest/source/example/synchronous_client.html). Я настроил сервер следующим образом:

# RTU:
    StartSerialServer(context, framer=ModbusRtuFramer, identity=identity,
                      port='/dev/ttyAMA0', timeout=.5, baudrate=9600)

Что делает мой клиент:

from pymodbus.pdu import ModbusRequest
from pymodbus.client.sync import ModbusSerialClient
from pymodbus.transaction import ModbusRtuFramer
import time
import logging

### Logs
FORMAT = ('%(asctime)-15s %(threadName)-15s '
      '%(levelname)-8s %(module)-15s:%(lineno)-8s % 
(message)s')
logging.basicConfig(format=FORMAT)
log = logging.getLogger()
log.setLevel(logging.DEBUG)

### Modbus RTU stuff
client = ModbusSerialClient(method='rtu', port='/dev/ttyAMA0', baudrate=9600, timeout=.5, parity='N')
client.connect()
client.write_registers(1, 1, unit=1)
client.close()

Что я вижу в консоли сервера:

    2020-03-24 00:08:14,189 MainThread      DEBUG    sync           :46       Client Connected [/dev/ttyAMA0:/dev/ttyAMA0]
    2020-03-24 00:08:14,190 MainThread      DEBUG    sync           :580      Started thread to serve client

Журналы клиента:

   2020-03-24 00:09:53,937 MainThread      DEBUG    transaction    :115      Current transaction state - IDLE
   2020-03-24 00:09:53,938 MainThread      DEBUG    transaction    :120      Running transaction 1
   2020-03-24 00:09:53,939 MainThread      DEBUG    transaction    :219      SEND: 0x1 0x10 0x0 0x1 0x0 0x1 0x2 0x0 0x1 0x66 0x41
   2020-03-24 00:09:53,939 MainThread      DEBUG    sync           :75       New Transaction state 'SENDING'
   2020-03-24 00:09:53,940 MainThread      DEBUG    transaction    :238      Transaction failed. ([Errno 25] Inappropriate ioctl for device) 
   2020-03-24 00:09:53,941 MainThread      DEBUG    rtu_framer     :235      Frame - [b''] not ready
   2020-03-24 00:09:53,941 MainThread      DEBUG    transaction    :394      Getting transaction 1
   2020-03-24 00:09:53,942 MainThread      DEBUG    transaction    :193      Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'

Меня действительно смущает сообщение об ошибке:

[Errno 25] Inappropriate ioctl for device

До этого момента в журналах показывалось то, что я ожидал (похоже, я могу подключиться, и отправка правильно), но я не могу понять, что происходит с этим сообщением об ошибке. На стороне сервера ничего не происходит в окне терминала. Я убедился, что с помощью

sudo raspi-config

можно отключить оболочку и ядро ​​от последовательного соединения.

Есть идеи о том, в чем проблема? Ty

...