PDA

Просмотр полной версии : Экземпляры ФБ



k501
24.11.2019, 21:19
Нужна помощь. В моей программе 20 экземпляров функциональных блоков (А1,А2....А20). Необходимо добавить еще с десяток экземпляров ФБ, но при компиляции получаю ошибку "...уменьшите количество используемых данных". Действительно, число используемых данных приближается к 131072 байт. Контроллер ОВЕН 110.60.L. Вопрос: как обойти это ограничение и дописать программу? "Один функциональный блок может иметь произвольное число экземпляров"_цитата.:confused:

capzap
24.11.2019, 21:23
20 экземпляров функциональных блоков

сложно понять без наглядности что Вы имеете ввиду, т.е. у Вас 100 ФБ и у каждого 20 экземпляров или как?

capzap
25.11.2019, 21:48
PLC_PRG.AO1_3 экземпляр AO1_3
PLC_PRG.AO1_7 экземпляр AO1_3

а AO1_1: AO1_1 то что выделено по содержимому кода совпадает с выделенным AO1_5: AO1_3?

melky
26.11.2019, 23:35
не смотрел, некогда. каждый FB резервирует под себя память, а функции не резервируют, выполнили действия и выгрузились. может стоит посмотреть в реализации в эту сторону ?

krollcbas
27.11.2019, 06:36
k501, если бы мне достался Ваш проект, то скорее всего бы сразу переделал на ST. Ушли бы эти нагромождения из FB автоматически.
Однако проект Ваш, а моя цель попробовать что-то посоветовать что бы как то улучшить картину.
1. Таймеры. Возможно ли оптимизировать? Сократить? Смотрите картинку.
45823
FB VVERX. Вы используете три экземпляра блоков TON, с близким временем. TON1 работает сразу при вызове блока и дает Вам 0,8 секунд.
Точно надо столько? Может убрать из кода первый и выше где-то пустить, где уже вызывается этот экземпляр?
Коробит жутко. Один таймер ИМХО хватит. Лучше не TON, а TP. Отработало, отключилось. Условие перехода TP.Q в ноль (N переход).
2. А обязательно ли TON вообще? Взять конструкцию по добавлению целочисленной INT переменной. Добрала до нужной константы, сброс и переход. Правда подбирать число придется. Не всегда удобно, но облегчит код заметно.
3. Вызовы всяких там "A02_1". Ну они же похожи все как братья. Какая высокая цель так делать? Приведите к универсальному виду. желательно к одному, и просто не используйте то, что не нужно. Сделайте FB параметрируемым (отключайте ненужное)
45824
4. Всякие там "SLIV40s". Я может смотрел невнимательно, но какая в них разница? Время? Сделайте один, а время как параметр на ножку.

Вообще смотрю я на LAD как он тут по Step7-мовски безмозгло организован. Людей жалко прям. Ну не программисты они, электрики. Так зачем так измываться то?
Вот эти нити (строки) нафига нужны в данном языке? Schneider Electric вон заботится о людях - ссылка (http://lapshinvr.ru/articals/goryachee-rezervirovanie-m580.html).
45825
5. Если Вы уйдете от этого мягко сказать "неудачного" LAD ну пусть в CFC, то там код упростится однозначно. Не нужно будет лепить столько временных переменных.
6. Посмотрел состав выходных сигналов и еще пуще расстроился. Там же совсем немного сигналов. Зачем столько всего? Может нужно как-то программу продумать?

На мой взгляд у Вас примитивная задача и тут вагон возможности для оптимизации.

Валенок
27.11.2019, 16:54
Тоже посмотрел. Большую часть выше сказали.
Если не любите st, то тут лучше бы sfc а не сfc подошел исходя из смысла задачи

melky
27.11.2019, 21:15
простите, а какая разница на каком языке программа ? для FB без разницы, из какого языка вызов, объявили FB, значит память под него выделилась.

krollcbas
27.11.2019, 22:37
melky, открой, глянь там программа состоит из 10 или примерно выходов. Код создан так, что "масло масляное". Там не нужно столько FB. Просто LAD в той реализации как в Codesys для данной задачи подходит плохо.
Понятно для парня, но для контроллера - муть.