1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

CodeSys 3.5 и структуры данных

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Ответить

Автор темы
askaev
здесь недавно
здесь недавно
Сообщения: 40
Зарегистрирован: 25 июн 2014, 16:29
Имя: Максим
Страна: Россия
город/регион: Каменск-Шахтинский
Поблагодарили: 3 раза

CodeSys 3.5 и структуры данных

Сообщение askaev »

У меня есть несколько аналоговых модулей ввода. В программе я хочу обращаться к их каналам строкой вида

Код: Выделить всё

var := data.module[m].channel[c].parameter;
,
где var -- какая-либо переменная, data -- блок данных, module -- массив модулей, channel -- массив каналов в модуле, parameter -- параметр канала, m и c -- элементы массивов. m -- элемент массива модулей, c -- элемент массива каналов в модуле.

В TIA Portal для этого я обычно создаю блок данных data с module как array[lo..hi] of struct в котором создаю channel как array[lo..hi] of struct в котором создаю параметры, например value как real и state как uint. Здесь value -- измеренное значение в канале, а state -- состояние аналогового канала. Всё понятно, всё прозрачно.

Как и где реализовать такую же структуру в CodeSys 3.5?

Joshua
здесь недавно
здесь недавно
Сообщения: 76
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 9 раз

CodeSys 3.5 и структуры данных

Сообщение Joshua »

Попробуйте так:
Создаёте две структуры, Application - > Добавить объект - > DUT
Для канала

Код: Выделить всё

TYPE chantype :
STRUCT
    parameter : INT;
END_STRUCT
END_TYPE
Для модуля

Код: Выделить всё

TYPE moduletype :
STRUCT
    channel : ARRAY [0..1] OF chantype;
END_STRUCT
END_TYPE
Создаёте глобальный блок переменных Data

Код: Выделить всё

{attribute 'qualified_only'}
VAR_GLOBAL
    module : ARRAY [0..1] OF moduletype;
END_VAR
Можете обращаться к нужному параметру.

Код: Выделить всё

m := 0;
c := 1;
myvar := Data.module[m].channel[c].parameter;

leon78
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 34 раза
Поблагодарили: 110 раз

CodeSys 3.5 и структуры данных

Сообщение leon78 »

Можно без moduletype:

Код: Выделить всё

{attribute 'qualified_only'}
VAR_GLOBAL
    module : ARRAY [0..1] OF ARRAY [0..1] OF chantype;
END_VAR
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»