Добрый день!
Заказчик попросил сделать сохранение параметров для процесса. Можно назвать рецептами.
Много тем на форуме как сделать это. Но ...
Можно сделать структуру
и объявить в RETAIN переменные, например, для каждого узла:Код:TYPE DISPENSER : STRUCT параметр1 : INT; параметр2 : REAL; ... параметрN : INT; END_STRUCT END_TYPE
Это работает все классно.Код:VAR_GLOBAL RETAIN CZDispenser:DISPENSER:= (Mixing:= 10, Hours:= 2, Minutes:= 10, Liters:= 1.0, WorkCycle:= FALSE); MZDispenser:DISPENSER:= (Mixing:= 10, Hours:= 2, Minutes:= 10, Liters:= 1.0, WorkCycle:= FALSE); END_VAR
В справке естьПришла идея для каждого рецепта выделить общие части и на каждую из них сделать свою структуру, а сами рецепты запихнуть в массив....Вложенные структуры допускаются. Единственное ограничение заключается в запрете размещения элементов структуры по прямым адресам (AT объявления недопустимы!)...
И как бы получается массив структур структур (не буду описывать все структуры, думаю будет понятно, что мы их объявим в соответствующей области по всем правилам руководства):
А затем в RETAIN объявляем массив:Код:TYPE FORMULATION : STRUCT WorkTimeHour :USINT; WorkTimeMinute :USINT; Formation :USINT; CZDispenser :DISPENSER; BZDispenser :DISPENSER; FZMixer :WORKMODEL; FZTemp :WORKMODEL; MZMixer :WORKMODEL; END_STRUCT END_TYPE
Можно добавлять рецепты, можно добавлять узлы при проведении ПРН.Код:GroupRecipes : ARRAY[0..3] OF FORMULATION;
Но вот инициализация при такой структуре выдает ошибку №3760 Неверное начальное значение. При этом 1ые 3 параметра компиляцию проходят, но как только доходит до структуры - ошибка.
С учетом того, что синтаксис CoDeSys 2.3 отличается от CoDeSys 3.5, то совет из одной из тем о использовании квадратных скобок не подошел.
По разному пытался описать(создавал переменные такого же подтипа, через точку и т.д.), но ошибка при компиляции.
Не нашел ни в руководстве , ни на форуме как правильно это делать.
Если кто-то сталкивался с такой проблемой направьте.
Версия CoDeSys 2.3 v 2.3.9.68 Oct 19 2021
Жду вопросов и предложений.


Ответить с цитированием