PDA

Просмотр полной версии : Создание энергонезависемых переменных (шаблон)



shamilnizaev@mail.ru
16.11.2018, 09:11
Подскажите, необходимо так же иметь переменные (уставки) которые записываются в энергонезависемую память. Данные переменные являются входами ФБ.
Сделал следующее:
- создал POU (ST) описал функциональный блок (входы, выходы, переменные), выполняемую программу.
- создал список GVL , описал переменные которые я хочу хранить в энергонезависемой памяти (RETAIN).
- связал PLC_PRG и POU

Все работает нормально. Но возникает вопрос, если у меня таких ФБ может быть 10 - 20 или больше, мне необходимо бдет описывать каждый раз в GVL переменные которые я хочу хранить в энергонезависемой памяти и добавлять отличительный индекс ? (например HH_TIR1, HH_TIR2 и т.д.)

Возможно ли мммм это сделать как и с POU (где я описал входы и выходы). То есть создать шаблон ФБ, в котором кроме временных переменных будут описаны Энерегонезависемые.
А потом при добавлении элемента в PLC_PRG создавать экземпляр POU ФБ (например А1, А2, А3 и т.д.) и вот появились энергонезависемые переменные к которым можно обращаться A1.HH_TIR1 и т.д.

Евгений Кислов
16.11.2018, 09:20
Такой вариант возможен, но имеет недостаток - если в ФБ есть хотя бы одна RETAIN-переменная, то каждый экземпляр блока помещается в RETAIN область.
RETAIN-память (который, например, на СПК207/1xx не очень много) в этом случае может быть израсходована крайне быстро.

shamilnizaev@mail.ru
16.11.2018, 09:24
Такой вариант возможен, но имеет недостаток - если в ФБ есть хотя бы одна RETAIN-переменная, то каждый экземпляр блока помещается в RETAIN область.
RETAIN-память (который, например, на СПК207/1xx не очень много) в этом случае может быть израсходована крайне быстро.
А как поступить ? Неужели все в глобальные переменные ? (но глобальные переменные) и описывать все отдельно ? Как поступаете Вы ?

Евгений Кислов
16.11.2018, 09:29
RETAIN-переменные можно объявить и в PLC_PRG.
В вашем случае можно создать массив:



VAR RETAIN
arHhTir: ARRAY [1..20] OF REAL;
END_VAR


И в коде обращаться к его элементам:



arHhTir[1] := 11.22;


Памяти это не сэкономит, но будет удобнее.

Vlad_doc
01.11.2019, 19:38
Добрый день..имеем тип данных как структура из множества Bool, Int, Real, в программе переменные этого типа...необходимо сделать retain в каждой такой переменной два поля..один Bool, другой Int. Возможно и как правильно оформить.

Евгений Кислов
02.11.2019, 13:09
Сделать ретейнами только отдельные поля структуры не получится - только всю структуру целиком.