Странная работа блоков FB и автоматически присвоенных таймеров

Andy_V
Сообщения: 205
Зарегистрирован: 19 окт 2011, 17:21

Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение Andy_V »

Всем привет.
ПЛК — SE, создал 3 типа FB для дальнейших их неоднократных вставок в основную программу. Каждый FB содержит от 1-го до 4-х внутренних таймера, ни вход ни выход в/из блока по этим таймерам не делаю. Естественно, при вставке FB таймер назначается автоматически. Также в теле основной программы также есть несколько таймеров, которые также назначаются автоматически. В итоге, при компиляции у меня возникала ошибка 400, я ее долго вычислял и понял, что у меня не хватает свободного распределения таймеров. Но как то странно они у меня распределились: от T0 до T74 и потом от Т120 до Т123. Т.е. от Т75 до Т119 — пусто. И как только я вставляю FB, который содержит внутри себя всего лишь один таймер, программа не компилируется, убираю этот FB — все нормально.
В связи с этим вопросы:
1. Почему программа не использует область T75 — T119?
2. В меню Device Resource Allocation я могу поставить распределение 100 мс таймеров от 0 до 127, почему не дает поставить больше?
3. Как это можно обойти?

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение bayk »

Потому, что это ограничение для fb.
Даю совет, который мне дал матёрый программист, когда я только начинал : если что-то можно сделать на счётчиках, делай это на счётчиках, даже таймеры!
Поэтому я все фб стараюсь делать на счётчиках, поскольку в фб при наладке лазить особо не нужно. Он должен отрабатывать всегда и наверняка. И это экономит таймера в основной программе, где с ними значительно удобнее

Andy_V
Сообщения: 205
Зарегистрирован: 19 окт 2011, 17:21

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение Andy_V »

bayk писал(а):
01 сен 2020, 15:48
Потому, что это ограничение для fb.
Даю совет, который мне дал матёрый программист, когда я только начинал : если что-то можно сделать на счётчиках, делай это на счётчиках, даже таймеры!
Поэтому я все фб стараюсь делать на счётчиках, поскольку в фб при наладке лазить особо не нужно. Он должен отрабатывать всегда и наверняка. И это экономит таймера в основной программе, где с ними значительно удобнее
По поводу счетчиков - наверно, сейчас простой блок переделал на конструкции M1013 и inc. Сделал компиляцию, много таймеров естественно ушло, но оставшиеся опять распределились непонятным образом, т.е. не с Т0 по Т40, скажем, а идет сплошняком, потом большой пропуск и последние на Т124 и Т125.
Не понятно, что значит ограничение для FB?

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение tvent »

Andy_V писал(а):
01 сен 2020, 15:33
Как это можно обойти?
Что вам мешает назначать таймеры самому и явно?
И еще.
FB по факту это подпрограммы, поэтому нужно учитывать, что: T184~T199 are the only timers that can be used in subroutines or interrupts. Generals timers used in subroutines and interrupts will not work if the subroutines or interrupts are not executing.

Andy_V
Сообщения: 205
Зарегистрирован: 19 окт 2011, 17:21

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение Andy_V »

tvent писал(а):
01 сен 2020, 21:08
Andy_V писал(а):
01 сен 2020, 15:33
Как это можно обойти?
Что вам мешает назначать таймеры самому и явно?
И еще.
FB по факту это подпрограммы, поэтому нужно учитывать, что: T184~T199 are the only timers that can be used in subroutines or interrupts. Generals timers used in subroutines and interrupts will not work if the subroutines or interrupts are not executing.
Поясните, что значит самому и явно. В том то и смысл FB, чтобы не заморачиваться при многократной его вставке с адресацией или я чего то не понимаю? По Т184-Т199 понятно, но почему он дает только до Т127, когда можно было бы до Т184? И кстати, Т127 он вообще 1 мсек таймер и было бы точно заморочка, если бы его система выбрала.

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение tvent »

Andy_V писал(а):
02 сен 2020, 07:45
Поясните, что значит самому и явно.
TMR T130 D10
Andy_V писал(а):
02 сен 2020, 07:45
В том то и смысл FB, чтобы не заморачиваться при многократной его вставке с адресацией или я чего то не понимаю?
Смысл FB в структурном программировании. В частности, в многократном вызове FB, как подпрограммы с передачей параметров/условий ее исполнения.
Вы, насколько я понял, используете FB для генерации и вставки кусков программного кода((

Andy_V
Сообщения: 205
Зарегистрирован: 19 окт 2011, 17:21

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение Andy_V »

tvent писал(а):
02 сен 2020, 08:42
Вы, насколько я понял, используете FB для генерации и вставки кусков программного кода((
Ух, не программист я по природе. Но да, сделал один раз блок FB, потом его многократно вставляю в разные части программы.

Andy_V
Сообщения: 205
Зарегистрирован: 19 окт 2011, 17:21

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение Andy_V »

Попробовал сделать таймера в явном виде внутри FB, присвоил Т0, Т1, Т2, Т4. Ставлю FB в программу, вижу действительно они и заняты. Ставлю второй такой же FB и таймеры занимают эти же адреса T0-T4. Так это ж работать то будет, когда FB должны работать не пересекаясь между собой?

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение tvent »

Andy_V писал(а):
02 сен 2020, 10:24
Так это ж работать то будет, когда FB должны работать не пересекаясь между собой?
Если эти FB выполняются строго последовательно, то без проблем. Например в шаговом реле - Step Ladder Instruction STL, RET

Andy_V
Сообщения: 205
Зарегистрирован: 19 окт 2011, 17:21

Re: Странная работа блоков FB и автоматически присвоенных таймеров

Сообщение Andy_V »

tvent писал(а):
02 сен 2020, 13:47
Если эти FB выполняются строго последовательно, то без проблем. Например в шаговом реле - Step Ladder Instruction STL, RET
Ну хоть так...
Спасибо большое за помощь.

Ответить