У меня есть вопрос относительно меток tkinter и pymodbus. Сценарий таков: я пытаюсь создать графический интерфейс, посредством которого программа подключается к «последовательному клиенту» или «ведомому» устройству и, по сути, опрашивает регистры последовательных клиентов. Я пытаюсь прочитать эти регистры и отобразить их на метке tkinter, что мне удалось сделать! Тем не менее, я хотел бы развить эту концепцию и обновлять метки каждую секунду. Рассматриваемые регистры являются датчиками, поэтому я хотел бы зафиксировать их по мере их изменения и отобразить в графическом интерфейсе. Пока это упрощенная версия того, что уже сделано.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from pymodbus.client.sync import ModbusSerialClient
client = ModbusSerialClient(
port = "COM14",
startbit=1,
databits=8,
parity = "N",
stopbits=2,
errorcheck = "crc",
baudrate=38400,
method = "RTU",
timeout=3)
root = Tk()
root.geometry("500x350")
res = client.read_holding_registers(address=50, count=1, unit=1)
value_1 = DoubleVar()
value_1.set(res.registers)
value_label = ttk.Label(root, textvariable = value_1, font = ("Arial", 25, "bold"))
value_label.place(x = 50, y = 50)
root.mainloop()
На данный момент программа подключается к рассматриваемому датчику и берет значение из регистра при загрузке программы, есть ли способ, чтобы она опрашивала значение каждую секунду и обновляла?
Заранее спасибо.






Вы можете использовать .after() для выполнения функции для опроса регистра каждую секунду:
...
value_1 = DoubleVar()
value_label = ttk.Label(root, textvariable=value_1, font=("Arial", 25, "bold"))
value_label.place(x=50, y=50)
def poll_register():
res = client.read_holding_registers(address=50, count=1, unit=1)
value_1.set(res.registers)
# call poll_register() again one second later
root.after(1000, poll_register)
poll_register() # start polling register
...