2014-12-27 1 views
0

Я использовал twisted.internet.protocol.ClientCreator с успехом, чтобы получить «клиент» объект в качестве результата от отложенного обратного вызова:Pymodbus: Могу ли я получить объект клиента из ModbusClientFactory (как с protocol.ClientCreator)

deferred = protocol.ClientCreator(reactor, ModbusClientProtocol).connectTCP("localhost", 502) 

Я хочу реорганизовать свой код, чтобы вместо этого использовать twisted.internet.protocol.ReconnectingClientFactory. Как я понимаю, pymodbus.client.async.ModbusClientFactory уже наследуется от ReconnectingClientFactory. Есть ли способ, чтобы получить объект клиента, как один из ClientCreator после вызова:

reactor.connectTCP("localhost", 502, ModbusClientFactory()) 

Я хочу выполнить циклические чтения холдингового регистра-запросы через Modbus и не придется беспокоиться о повторном подключении после потерянных соединений себя , Должен ли я подкласс ModbusClientFactory? Если да, может ли кто-нибудь опубликовать короткий пример, показывающий, как выполнять запросы read_holding_registers в методе класса?

ответ

1

Если вы использовали endpoints вместо методов реактора, вы могли бы построить соответствующую конечную точку вокруг ModbusClientFactory и получить Deferred, который был запущен с его протоколом.

+0

Спасибо за подсказку. Однако в документах twistes указано: _ .. некоторые функции (например, автоматическое повторное подключение) еще не были повторно реализованы с конечными точками. _ [Link] (https://twistedmatrix.com/documents/current/core/howto /clients.html#clientfactory) – cbergmiller

+0

'ClientCreator' не реализует автоматическое повторное подключение - это' ReconnectingClientFactory' :). Однако вы можете легко реализовать пересоединение, наблюдая за 'connectionLost' в своем« Протоколе ». – Glyph

+0

Если вы заинтересованы в отслеживании прогресса по этому конкретному недостатку, обратитесь, пожалуйста, сюда: https://twistedmatrix.com/trac/ticket/4735 – Glyph

Смежные вопросы