Страница 1 из 2

Работа таймера в функциональном блоке

Добавлено: 25 июн 2018, 16:40
TamTam
Здравствуйте.
Только учусь.
Возник вопрос с работой таймера в функциональном блоке.
Задача для примера. Есть 2 насоса: рабочий и резервный. Накидал ФБ. Вставил в программу 2 экземпляра. Но почему-то таймер работает только в первом дата блоке. во втором сразу значение таймера 0. Что я не так делаю никак не пойму. Буду признателен если разжуете.
Ошибка на рисунке второй контакт реле должен быть контактом таймера. Но это не суть.

Re: Работа таймера в функциональном блоке

Добавлено: 25 июн 2018, 23:53
mr_Frodo
а где второй дата блок для второго экземпляра FB?

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 02:03
Михайло
1. #"Таймер контроля" - это переменная типа TEMP или STAT?
2. Как называется второй таймер? У него другое имя?
mr_Frodo писал(а):а где второй дата блок для второго экземпляра FB?
Здесь используются бездатаблочные варианты таймеров.

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 08:53
TamTam
Михайло писал(а):1. #"Таймер контроля" - это переменная типа TEMP или STAT?
2. Как называется второй таймер? У него другое имя?
mr_Frodo писал(а):а где второй дата блок для второго экземпляра FB?
Здесь используются бездатаблочные варианты таймеров.
Рад что подключились.
1.#"Таймер контроля" - это переменная типа STAT. Объявлена внутри ФБ.
2.Таймер только один. Внутри ФБ. Я так понимаю в DB таймеру компилятор должен присвоить свой номер. Или я не правильно понимаю?
3. Второй дата блок на этой картинке не вставлял.

Пример привел по быстрому, чтобы разобрать принцип как работает таймер внутри ФБ и как надо включать ФБ в OB1, если несколько экземпляров этих ФБ.
У меня 3 группы насосов по основному и резервному в каждой. Написан один ФБ1 "контроль насоса".
В OB1 в одном нетворке вставил 2 экземпляра этого ФБ1 параллельно, с блоком данных DB1 и DB2. Этот нетворк назвал контроль работы насосов группы 1. То же самое для группы 2 и 3.
Таймеры работают только в блоках которые идут первыми, например, DB1 (далее DB3 и DB5). Если смотреть состояние переменных в онлайне, то в DB1 "таймер контроля" имеет уставку 10 сек. А в DB2 все значения сразу 0.

При работе программы получается, что я запускаю основной насос. таймер отсчитывает 10 секунд и если нет сигнала от реле давления срабатывает команда переход на резерв. А во втором экземпляре таймер уже с уставкой 0 и сразу срабатывает переход на резерв, т.к. таймер не дает задержку.

На самом деле у меня в программе несколько таймеров в ФБ. Все они ведут себя одинаково.

Может экземпляры ФБ в разные нетворки вставлять?

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 08:54
Andrey.wys
Михайло писал(а): Здесь используются бездатаблочные варианты таймеров.
А можно подробнее? Если 2 насоса, то и вызывать фбшку надо с разными дбшками. А дбшка одна.
TamTam, покажите OB1.
Попробуйте использовать IEC таймеры (SFB4).

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 10:38
Михайло
Каждый таймер должен иметь отдельную область памяти, чтобы хранить своё состояние (уставку preset time - PT и сколько осталось elapsed time - ET). Если вы хотите, чтобы по сути один и тот же таймер в FB работал в двух местах, то вы должны выделить этим FB два разных места для хранения состояния, в том числе для хранения состояния таймера. А место для хранения состояния FB - это и есть прикрепленная к нему DB.

Кратче: если вы пишете одну FB, но используете её несколько раз одновременно (параллельно), то прикрепляйте к ней разные DB.

p.s. Вроде вы это правило соблюдаете. Но ещё попробуйте откомпилировать DB2. Такое может быть: не сделана компиляция = не выделена память, нули.

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 12:10
TamTam
Сейчас проверил работу моего примера программы в симуляторе. Все работает правильно. Таймеры запускаются и отсчитывают уставку каждый в своем блоке.

В моей основной программе так не работает. Сделал скрин состояния дата блоков одного ФБ.
Слева дата блок имеет уставки таймеров, а тот который либо все нули, либо только некоторые поля имеют значения. Почему так?
Где-то я что-то не так нажал :cry:

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 12:35
mr_Frodo
Повторяю, не вижу в дереве программы дб, относящиеся к вызываемых экземплярах фб.

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 12:45
TamTam
mr_Frodo писал(а):Повторяю, не вижу в дереве программы дб, относящиеся к вызываемых экземплярах фб.
Я же начинающий. Некоторая терминология мне не до конца понятна. Здесь видно? С уважением.

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 12:50
Andrey.wys
Еще раз покажите fb3

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 13:29
TamTam
У-упс, коллеги.
Я сам запутался и Вас похоже путаю. Я еще раз проверю свой "шедевр" и позже отпишусь.
Грешу на работу таймеров, а получается где-то у меня в программе сбрасываются выходы.

Re: Работа таймера в функциональном блоке

Добавлено: 26 июн 2018, 18:09
mr_Frodo
TamTam писал(а):
mr_Frodo писал(а):Повторяю, не вижу в дереве программы дб, относящиеся к вызываемых экземплярах фб.
Я же начинающий. Некоторая терминология мне не до конца понятна. Здесь видно? С уважением.
Теперь видно, удовлетворён. Все в порядке.
В первой картинке этого состава программы не было.

Re: Работа таймера в функциональном блоке

Добавлено: 29 июн 2018, 12:19
TamTam
С вашей помощью разобрался. Таймеры в вызываемых экземплярах работают правильно.
Причина была в программе. Сигнал авария дублировался, поэтому второй экземпляр не запускался.
Решено. Я накосячил.

Здесь же спрошу второй вопрос.
Есть датчик давления в магистрали с выходом 4-20 мА. Подключен на вход с адресом %IW130. В программе подаю его значение на вход блока Norm_X (MIN=0, MAX=27648).
Далее с выхода блока NORM подаю на вход блока SCALE_X (MIN=0, MAX=10 бар). С выхода блока SCALE получаю тег "Давление".
Тэг "Давление" выведен на панель KTP600_Basic_mono.

Когда в трубе есть давление все хорошо, давление отображается. А когда насосы отключены, то получается сигнал с датчика меньше 4 мА. Значение входа отрицательно %IW130=-500. И соответственно тег "Давление" тоже отрицательно -0,2 бар.
На панели в поле вывода отображаются решетки. Как сделать чтобы отображалось 0? А то выглядит как обрыв датчика.
По справке TIA вроде написано, что если значение на входе блока меньше MIN, то значение на выходе блока должно равняться значению MIN.

Re: Работа таймера в функциональном блоке

Добавлено: 29 июн 2018, 13:36
Михайло
В проекте WinCC для KTP в настройках того элемента IO_Field надо вместо 99.9 указать формат s99.9, где s - это знак.

Re: Работа таймера в функциональном блоке

Добавлено: 30 июн 2018, 17:13
mr_Frodo
А (
L Давление
L 0.0
>= R
)
JCN NEX0
L 0.0
T Давление
NEX0: NOP0
Если Давление меньше 0, то оно переписывается нулем.

Re: Работа таймера в функциональном блоке

Добавлено: 30 июн 2018, 18:12
Михайло
Метрологически некорректно так делать.

Re: Работа таймера в функциональном блоке

Добавлено: 30 июн 2018, 18:17
mr_Frodo
Почему? Если фактически - это некорректная работа датчика.
И ещё... в блоке скалирования нет переключателя в виде бита для работы только в положительном диапазоне измерений?

Re: Работа таймера в функциональном блоке

Добавлено: 30 июн 2018, 18:23
mr_Frodo
TamTam писал(а): По справке TIA вроде написано, что если значение на входе блока меньше MIN, то значение на выходе блока должно равняться значению MIN.
Я вот про это...

Re: Работа таймера в функциональном блоке

Добавлено: 30 июн 2018, 18:26
Михайло
mr_Frodo писал(а):Если фактически - это некорректная работа датчика.
Корректная работа. Все токовые датчики по стандарту должны выдавать сигналы от 3,7 мА до 23 мА (примерно такой диапазон по моей памяти), т.е. с небольшим перегрузом, а то с игнорированием перегрузок как-то некрасиво выходит...

Re: Работа таймера в функциональном блоке

Добавлено: 14 июл 2018, 10:16
Ka3ax
Andrey.wys писал(а):
Михайло писал(а):
Попробуйте использовать IEC таймеры (SFB4).
мне уже на примере s7 classic разжевывали насчет мультиэкземпярного применения таймеров,
в tia на те же грабли наступаю, возможно, кто на примере IEC таймера покажет как мультиэкземплярно таймеры применять,
не понятно, что делать с DB IEC_Timer.
Основные принципы бы.

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