ESA: CREW функция смещения адресов «Offset»

Автоматические системы управления технологическим оборудованием с каждым годом работают с возрастающими объемами данных поступающих с датчиков и ис полнительных механизмов по цифровым протоколам (fieldbus & industrial ethernet).

Сейчас на уровне программ управляющих контроллеров информация уже достаточно структурирована за счет распространённости использования функциональных блоков и структур данных. Но без специальных инструментов и функций использование этих данных (переменных, тэгов) в средах создания человек-машинного интерфейса (HMI) делает процесс создания и отладки проектов чрезвычайно трудоемким.

В этой статье мы рассмотрим одну из функций CREW для работы с большим количеством однотипных переменных для ПЛК с прямой адресацией.

Функция Offset

С обновлением 3.0 в Crew Editor (для панелей оператора, панельных контроллеров и SCADA) была добавлена новая функция смещения «Offset» для работы с переменными в подключенных устройствах. С помощью данной функции пользователь может работать с данными из разных структур (массивов), указывая начальный адрес и индекс.

Например, у нас есть 8 различных электроприводов и для каждого из них необходимо отображать следующую структуру переменных:

8 электроприводов подключенных к 1 контроллеру и панели оператора
8 электроприводов подключенных к 1 контроллеру и панели оператора

  • MotorName (Имя двигателя)                                :String
  • Application (Применение)                                     :String
  • Speed (Скорость)                                                    :Integer
  • Voltage (Напряжение)                                             :Integer
  • Current (Ток)                                                            :Integer
  • Working time (Время работы)                                :date
  • Last maintenance (Последнее обслуживание)   :date
  • Next maintenance (Следующее обслуживание) :date

В контроллере структуры с данными двигателей располагаются в следующих адресных пространствах:

  • 1-й двигатель  :100 адрес
  • 2-й двигатель :200 адрес
  • ….
  • 8-й двигатель :800 адрес

Внутри каждого адресного пространства данные располагаются с одинаковым смещением относительно начального адреса. Ниже приведен пример распределения адресов одного двигателя:

  • Имя двигателя                       :101 (100+1)
  • Применение                           :102 (100+2)
  • Скорость                                :103 (100+3)
  • Напряжение                           :104 (100+4)
  • Ток                                           :105 (100+5)
  • Время работы                        :106 (100+6)
  • Последнее обслуживание   :107 (100+7)
  • Следующее обслуживание :108 (100+8)

Обычно пользователь должен создать в проекте 8 переменных (Tag) для каждого двигателя. Общее количество для 8 двигателей 64 переменных (Tag).

При использовании функции смещения общее количество переменных уменьшается до 9.

Список 9 переменных в разделе «Tags» Crew
Список 9 переменных в разделе «Tags» Crew

Создание переменных Offset

Необходимо создать 8 переменных параметров двигателей и 1 переменная смещения (OffsetTag).

  • Имя двигателя                        :1+OffsetTag
  • Применение                            :2+OffsetTag
  • Скорость                                 :3+OffsetTag
  • Напряжение                            :4+OffsetTag
  • Ток                                           :5+OffsetTag
  • Время работы                        :6+OffsetTag
  • Последнее обслуживание   :7+OffsetTag
  • Следующее обслуживание :8+OffsetTag

Переменная смещения «OffsetTag» принимает следующие значения 100, 200, 800. В переменной смещения «Offsettag» задается значение адреса.

Настройка переменной двигателя Current(ток) в CREW
Настройка переменной двигателя Current(ток)

Настройка функции смещения для переменной выполняется в окне «Value String». Данное окно открывается по нажатию значка редактирования, расположенного справа от поля задания адреса переменной (Address).

Настройка функции смещения переменной в CREW
Настройка функции смещения переменной в CREW

Value – значение индекса в структуре данных (массиве), Offset – значение начального адреса структуры (массива). В свойстве Offset задана ссылка на переменную смещения Offsettag, которая содержит значение адреса.

Настройки переменной Offsettag (переменная смещения) в CREW
Настройки переменной Offsettag (переменная смещения) в CREW

В данном примере «Offsettag» является внутренней переменной, которой можно делать присвоение значения (100, 200 и т.д.), например, при нажатии кнопок (пролистывание списка) на экране отображения этих данных. Но «Offsettag» может быть переменной в устройстве и получать значение адреса из программы ПЛК.

Как видно из настроек переменных, данная функция существенно сокращает траффик сетевого опроса контроллера, что позволяет более оперативно получать текущие данные или опрашивать больше число устройств.

Помимо функции Offset, для упрощения создания проектов и структурирования данных, обратите внимание на переменные типа Indexed, возможности работы со структурами данных Codesys\Twincat, функции косвенной и динамической адресации переменных для контроллеров, поддерживающих символьные тэги.