Pyads считывает значение при уведомлении: когда произошел цикл TwinCat
Я хотел бы прочитать некоторые значения из SPS, написанного в TwinCat 3 по маршруту ADS с pyads. Значения должны быть прочитаны, когда цикл произошел. В моем скрипте Python я сначала получаю время цикла моего SPS. Я определил время для чтения (5000 мс), с учетом времени чтения и обнаруженного времени цикла (10 мс), я вычисляю количество значений для чтения.
В цикле while я хочу прочитать определенное количество значений.
В коде это выглядит примерно так:
plc = pyads.Connection('172.18.51.64.1.1', 851)
plc.open()
cycle_time = plc.read_by_name('Main.lrCycleTime', pyads.PLCTYPE_LREAL)
time_to_read = 5000 #milliseconds
values_to_read = int(time_to_read/cycle_time)
count = 0
read_values = []
while count < values_to_read:
count += 1
array_PLC = plc.read_by_name('Main.arrNumbers', pyads.PLCTYPE_ARR_LREAL(2))
read_values.append(array_PLC)
Когда я делаю это, я просто опрашиваю некоторые ценности. Это означает, что каждое значение существует несколько раз, и я не читаю предопределенные 5000 мс.
Кто-нибудь знаком с библиотекой pyads? Есть ли какие-либо возможности получить своего рода уведомление, когда произошел цикл? Я не хочу устанавливать таймер в скрипте Python. Просто чтобы не пропустить цикл, пока я читаю.
1 ответ
TwinCat Ads предоставляет функциональность для получения уведомлений. Вы можете добавить / настроить уведомление для получения значения переменной в разных точках (каждый цикл, при изменении...).
pyads просто оборачивает TwinCatAds.Dll и предоставляет более удобный интерфейс Python, как сказано в документации.
Смотрите этот образец для уведомления