Ответ PyModbus RTU получен, даже если нет соединения - PullRequest
0 голосов
/ 26 июня 2018

Я использую PyModbus на Linkit MK7688, который подключен к Arduino UNO с помощью MAX485.Ниже приведен мой код для записи в катушку.

from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import logging

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

client = ModbusClient(method='rtu', port='/dev/ttyS1', timeout=2000, baudrate=9600)

client.debug=True
print(client)
response = client.write_coil(1, True, unit=1)

Я пытаюсь это сделать, не подключив ничего по Modbus.В этой настройке я отключил Arduino и не ожидаю ответа на запрос записи.Однако в журнале отладки я вижу, что транзакция завершена.Это неправильно, так как я не получил никакого ответа на .write_coil().Если где-то происходит петля, как я могу ее обнаружить?

Ценю ваш ответ.

2018-06-26 03:56:53,331 MainThread      DEBUG    sync           :405      Serial client intialising
2018-06-26 03:56:53,337 MainThread      DEBUG    sync           :42       Initializing...
ModbusSerialClient(rtu baud[9600])
2018-06-26 03:56:53,344 MainThread      DEBUG    transaction    :107      Current transaction state - IDLE
2018-06-26 03:56:53,347 MainThread      DEBUG    transaction    :111      Running transaction 1
2018-06-26 03:56:53,350 MainThread      DEBUG    transaction    :201      SEND: 0x1 0x5 0x0 0x1 0xff 0x0 0xdd 0xfa
2018-06-26 03:56:53,352 MainThread      DEBUG    sync           :77       New Transaction state 'SENDING'
2018-06-26 03:56:53,358 MainThread      DEBUG    transaction    :204      Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
2018-06-26 03:56:53,371 MainThread      DEBUG    sync           :554      Finished reading socket....
2018-06-26 03:56:53,374 MainThread      DEBUG    sync           :554      Finished reading socket....
2018-06-26 03:56:53,376 MainThread      DEBUG    transaction    :279      Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
2018-06-26 03:56:53,379 MainThread      DEBUG    transaction    :209      RECV: 0x1 0x5 0x0 0x1 0xff 0x0 0xdd 0xfa
2018-06-26 03:56:53,382 MainThread      DEBUG    rtu_framer     :175      Getting Frame - 0x5 0x0 0x1 0xff 0x0
2018-06-26 03:56:53,385 MainThread      DEBUG    factory        :246      Factory Response[WriteSingleCoilResponse: 5]
2018-06-26 03:56:53,388 MainThread      DEBUG    rtu_framer     :110      Frame advanced, resetting header!!
2018-06-26 03:56:53,390 MainThread      DEBUG    transaction    :410      Adding transaction 1
2018-06-26 03:56:53,393 MainThread      DEBUG    transaction    :420      Getting transaction 1
2018-06-26 03:56:53,397 MainThread      DEBUG    transaction    :175      Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'

1 Ответ

0 голосов
/ 26 июня 2018

Зависит от функции записи.Многие программы Modbus позволяют вам указать, хотите ли вы сделать запись или запись с обратной записью.PyModbus просто записывает данные в катушку, не пытаясь прочитать их обратно.Это означает, что он просто отправляет сообщение по 485 строкам, не проверяя, действительно ли оно написано.

Дает ли вы ошибку времени ожидания при .read_coil()?

Кроме того, параметр времени ожидания указывается в секундах.Ваше значение 2000 означает время ожидания 33 минут.

...