Показано с 1 по 3 из 3

Тема: Массив структур 2 уровня

  1. #1

    По умолчанию Массив структур 2 уровня

    Добрый день!
    Заказчик попросил сделать сохранение параметров для процесса. Можно назвать рецептами.
    Много тем на форуме как сделать это. Но ...
    Можно сделать структуру
    Код:
    TYPE DISPENSER :
    STRUCT
       параметр1 : INT;
       параметр2 : REAL;
       ...
       параметрN : INT;   
    END_STRUCT
    END_TYPE
    и объявить в RETAIN переменные, например, для каждого узла:
    Код:
    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 объявления недопустимы!)...
    Пришла идея для каждого рецепта выделить общие части и на каждую из них сделать свою структуру, а сами рецепты запихнуть в массив.
    И как бы получается массив структур структур (не буду описывать все структуры, думаю будет понятно, что мы их объявим в соответствующей области по всем правилам руководства):
    Код:
    TYPE FORMULATION :
    STRUCT
    	WorkTimeHour		:USINT;
    	WorkTimeMinute	:USINT;
    	Formation			:USINT;
    	CZDispenser		:DISPENSER;
    	BZDispenser		:DISPENSER;
    	FZMixer			:WORKMODEL;
    	FZTemp			:WORKMODEL;
    	MZMixer			:WORKMODEL;
    END_STRUCT
    END_TYPE
    А затем в RETAIN объявляем массив:
    Код:
    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
    Жду вопросов и предложений.

  2. #2

    По умолчанию

    Попробовал - вроде нет ошибок:
    Вложения Вложения

  3. #3

    По умолчанию

    Спасибо за ответ! Не много не то, но натолкнули на мысль.
    В справке есть фраза по поводу ошибки:
    3760 "Неверное начальное значение"
    Используйте для инициализации значение, совместимое с типом переменной. Изменяя объявление, воспользуйтесь диалогом объявлений переменных (Shift/F2 или 'Edit''Autodeclare').
    Так вот при 'Autodeclare' используя помощник все получилось.
    Результатом является следующая запись:
    Код:
    GroupRecipes : ARRAY[0..3] OF FORMULATION := (WorkTimeHour:= 1, WorkTimeMinute:= 2, Formation:= 3, stCZDispenser:=(Mixing:=12));
    Компиляция прошла успешно.
    Тема закрыта.

Похожие темы

  1. Стековая панель. Передача данных обратно в массив структур
    от Андрей Косоротов в разделе Master SCADA 4D
    Ответов: 0
    Последнее сообщение: 16.10.2022, 18:24
  2. Массивы структур
    от BSA в разделе ПЛК1хх [М02]
    Ответов: 2
    Последнее сообщение: 14.12.2021, 15:10
  3. Сортировка структур
    от ДаниилСПб в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 05.11.2020, 14:10
  4. ПЛК 110, модбас и массивы структур.
    от lttn в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 7
    Последнее сообщение: 17.10.2019, 22:01
  5. modbus и массив структур
    от lttn в разделе Master SCADA 3
    Ответов: 6
    Последнее сообщение: 20.06.2019, 12:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •