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, как сказано в документации.

Смотрите этот образец для уведомления

Другие вопросы по тегам