PDA

Просмотр полной версии : Непонятки с TON



olegsv
08.06.2011, 13:35
Изучаю потихоньку CoDeSys.Разбираюсь с таймерами.
наткнулся на непонятный трабл. Из двух последовательно запускаемых
таймеров один никак не хочет начинать отсчет,хотя .M, .StartTime, .IN, .PT, - устанавливаются, а отсчет .ET не идет.

может кто объяснит почему Вар1 примера не работает, а Вар.2 работает.
а то уже совсем загнался, как говорится толи лыжи не едут толи...... :(

capzap
08.06.2011, 13:54
этот таймер работает по изменению с 1 в 0, так что вход IN должен как минимум перейти в состояние true затем обязательно в false, а если этот вход установить в одно из двух состоянии то работать не будет

olegsv
08.06.2011, 13:59
этот таймер работает по изменению с 1 в 0, так что вход IN должен как минимум перейти в состояние true затем обязательно в false, а если этот вход установить в одно из двух состоянии то работать не будет

так и есть.
см. Вар2. отличие тольк в том, что включение/выключение вынесено и делается через переменную.
и он работает.

capzap
08.06.2011, 14:54
:) нет возможности посмотреть пример,выхожу с телефона. Не могли бы выложить скрин Вашего неработающего кода. Для мониторинга я бы параллельно к IN добавил CTU чтобы понять сколько импульсов поступило

Логвиненко Андрей
08.06.2011, 18:45
Таймер TON это функциональный блок.Экземпляр функционального блока есть программа. Чтобы программа выполнила какие либо действия, её нужно вызывать на исполнение, что и сделано во втором варианте.
В первом варианте таймер вызывается только по условиям. Чтобы отслеживать изменение выходных переменных таймера, его надо вызывать в каждом цикле. В первом варианте достаточно в конце дописать операторы:
TON_K();TON_Pipe();

olegsv
08.06.2011, 19:03
Тоесть получается что конструкция: if TON_K.Q Then ...
не считается вызовом
и корректно делать так:
TON_K(); ...... if TON_K.Q Then .......
при каждом проходе?

Логвиненко Андрей
08.06.2011, 19:18
TON_K.Q это переменная Q типа BOOL экземпляра функционального блока, переменные экземпляров ФБ сохраняются между вызовами и доступны для чтения. Чтобы переменные изменились, надо вызвать экземпляр ФБ на исполнение. Входные переменные, не заданные явно при вызове, сохраняют предыдущее значение.
Для отслеживания работы таймера его надо вызывать в каждом цикле, а потом анализировать значение выходов.

olegsv
08.06.2011, 19:27
Спасибо.
просто как то непревычно.
Своя специфика есть у каждого сфта, просто надо привыкать.