Чтение катушки и регистров хранения одновременно с использованием pymodbus3
У меня есть рабочий код, который может непрерывно считывать состояние катушки с помощью библиотеки pymodbus3. Код выглядит примерно так. Это адаптировано из базового примера и служит для поиска изменения статуса катушки (адрес 0x01) на "1" и выполнения задачи в соответствии с требованиями в обязательном порядке.
def run_server():
# ----------------------------------------------------------------------- #
# initialize your data store
# ----------------------------------------------------------------------- #
store = ModbusSlaveContext(
di=ModbusSequentialDataBlock(0, [17]*100),
co=ModbusSequentialDataBlock(0, [17]*100),
hr=ModbusSequentialDataBlock(0, [17]*100),
ir=ModbusSequentialDataBlock(0, [17]*100))
context = ModbusServerContext(slaves=store, single=True)
interval = 3
server = ModbusTcpServer(context, identity=identity, address=('0.0.0.0', 1502))
t = threading.Thread(target=server.serve_forever,name='server connection')
t.start()
loop = LoopingCall(f=updatevalues, a=server)
loop.start(interval, now=True)
reactor.run()
def updatevalues(a):
rfuncode = 1
wfuncode = 5
slave_id = 0x01
address = 0x02
contxt = a.context[slave_id]
values = contxt.get_values(rfuncode, address, count=1)
print(values[0])
#below part is checking the coil status whether its 0 or 1 and perform the necessary task
if(values[0]==1 or values[0]==17):
#Do my stuff if this case is satisfied
#reset the coil back to "0" after the task is performed
values = [0]
contxt.set_values(wfuncode, address, values)
if __name__ == "__main__":
run_server()
Теперь мне нужно также контролировать регистры временного хранения (например, адрес 400001) параллельно и читать значение. Поскольку регистры хранения уже инициализированы в функции run_server(), я думаю, мне не нужно там ничего делать. Но я не уверен, что делать в функции updatevalues (a), чтобы можно было отслеживать регистр временного хранения.
Спасибо за помощь.