Allen-Bradley Recipe Management with UDT Arrays and an HMI Edit Interface — figure 1

Управление рецептами Allen-Bradley с массивами UDT и интерфейсом редактирования на HMI

Научитесь создавать редактирование рецептов на базе HMI для AB Logix 5000 с использованием массивов UDT и инструкций COP для постоянного хранения параметров.

Работа с рецептами на платформах Logix наиболее эффективна, когда HMI никогда не записывает данные напрямую в исторический массив. Надёжный шаблон использует три тега: Recipe_Storage как массив UDT длиной 50, Recipe_Display как один экземпляр UDT для экрана оператора и Recipe_Index как DINT, определяющий, какой сохранённый рецепт отображается в структуре отображения. Инструкции копирования (COP) перемещают данные при изменении индекса и повторно при сохранении, поэтому оператор всегда редактирует буфер-копию, а архив остаётся согласованным после циклов питания.

Управление рецептами Allen-Bradley с массивами UDT и интерфейсом редактирования HMI — рисунок 1 Монитор тегов Logix, показывающий Recipe_Storage[50], Recipe_Display и Recipe_Index, используемые для редактирования рецептов через HMI.

Определите UDT один раз, включив все необходимые процессу уставки — температуры, таймеры, скорости, коды продуктов и маски межблокировок, — а затем создайте Recipe_Storage как UDT[50]. Recipe_Display должен иметь точно такой же тип UDT, а не представлять собой набор слабо связанных атомарных тегов. Однородные типы упрощают расчёт длины COP и предотвращают незаметное усечение данных при последующем добавлении членов.

Ограничение индекса и путь загрузки

Ограничьте Recipe_Index включительно диапазоном от 0 до 49 до выполнения любой COP. Индекс без ограничения, полученный из объекта числового ввода, может вызвать ошибку COP или обратиться к неопределённой области памяти — в зависимости от того, как в проекте обрабатываются границы массива. При изменении Recipe_Index по переднему фронту (или при явном нажатии кнопки Load) скопируйте Recipe_Storage[Recipe_Index] в Recipe_Display. HMI должен обращаться только к членам Recipe_Display. Это единственное правило устраняет гонки, при которых два экрана записывают разные элементы массива, пока оператор продолжает изменять значения.

// Структура псевдокода
if Recipe_Index < 0 then Recipe_Index := 0;
if Recipe_Index > 49 then Recipe_Index := 49;

if IndexChanged or LoadPressed then
    COP(Recipe_Storage[Recipe_Index], Recipe_Display, 1);

if SavePressed then
    COP(Recipe_Display, Recipe_Storage[Recipe_Index], 1);
Управление рецептами Allen-Bradley с массивами UDT и интерфейсом редактирования HMI — рисунок 2 Экран рецептов HMI, обращающийся только к Recipe_Display; действия Load/Save запускают процедуры COP в контроллере.

Путь сохранения, хранение и поведение при загрузке проекта

При сохранении скопируйте Recipe_Display обратно в Recipe_Storage[Recipe_Index]. Поскольку Recipe_Storage находится среди тегов контроллера, значения сохраняются после отключения и включения питания, если проект настроен на обычное сохранение тегов. Данные также сохраняются при загрузке проекта, если выбрать сохранение значений тегов; считайте этот флажок частью стандартной операционной процедуры работы с рецептами, а не необязным удобством. Операторы должны понимать, что загрузка проекта с включённым параметром «reinitialize tags» сотрёт тщательно настроенные рецепты, если не существует резервной копии вне контроллера.

К рабочим процессам импорта CSV следует относиться скептически. Многие утилиты HMI или Excel-to-tag создают имена тегов, но ненадёжно обновляют значения членов вложенных UDT, особенно если заголовки столбцов отличаются от имён членов UDT. Предпочтительнее использовать явную процедуру импорта с проверкой каждого поля либо повторно загружать проверенный экспорт L5X/тегов после массового редактирования. Не следует считать, что зелёный баннер «импорт завершён» означает, что Recipe_Storage[n].Setpoint теперь равен значению ячейки электронной таблицы.

Тег Тип Привязка к HMI? Назначение
Recipe_Storage UDT[50] Нет Энергонезависимый архив рецептов
Recipe_Display UDT Только да Буфер редактирования оператора
Recipe_Index DINT Да (селектор) Активный слот 0–49

Рекомендации по интерфейсу HMI

  • Предусмотрите дискретные кнопки Load и Save с импульсной активацией, обрабатываемые в контроллере, а не прямую запись в массив с панели.
  • Отображайте ограниченный индекс и доступное только для чтения поле «сохранённое имя», скопированное из UDT отображения, чтобы оператор мог подтвердить активный слот.
  • Запрещайте Save, пока машина работает в цикле, если члены рецепта влияют на уставки движения или температуры в середине партии.
  • Регистрируйте события Save вместе с идентификатором оператора и индексом для обеспечения прослеживаемости на регулируемых производственных линиях.

Проверка границ индекса и сохранения при загрузке проекта

Проверьте работу, загрузив слот 0, изменив контрольное значение в Recipe_Display, сохранив его, переключив индекс на 1, а затем вернувшись к 0 и снова выполнив загрузку. Контрольное значение должно появиться снова только в том случае, если Save действительно выполнилась. Выполните перезапуск контроллера и убедитесь, что Recipe_Storage по-прежнему содержит это значение. Введите с HMI индекс за пределами диапазона и проверьте ограничение. Выполните импорт CSV в резервной системе и сравните содержимое каждого члена с файлом, прежде чем использовать этот путь в производстве.

Не привязывайте панель к Recipe_Storage[Recipe_Index].Member. Косвенная адресация HMI к массивам сложнее для аудита и может привести к записи не в тот слот, если тег индекса и экран обновляются с разной частотой. Шаблон с Display UDT легко масштабируется при последующем расширении UDT, добавлении уровней безопасности или переносе той же модели рецептов между несколькими ячейками систем PLC и PAC, использующими общий рабочий процесс оператора.

Об авторе

Mark Townsend | Ведущий инженер по автоматизации — системы Allen-Bradley

Mark Townsend — ведущий инженер по автоматизации с более чем 18-летним опытом работы с платформами Allen-Bradley, включая ControlLogix, CompactLogix и устаревшие SLC-500. В его повседневную работу входят разработка логики RSLogix / Studio 5000 и запуск HMI FactoryTalk View на устаревающих и смешанных парках оборудования.

Управление рецептами Allen-Bradley с массивами UDT и интерфейсом редактирования на HMI

Научитесь создавать редактирование рецептов на базе HMI для AB Logix 5000 с использованием массивов UDT и инструкций COP для постоянного хранения параметров.

Работа с рецептами на платформах Logix наиболее эффективна, когда HMI никогда не записывает данные напрямую в исторический массив. Надёжный шаблон использует три тега: Recipe_Storage как массив UDT длиной 50, Recipe_Display как один экземпляр UDT для экрана оператора и Recipe_Index как DINT, определяющий, какой сохранённый рецепт отображается в структуре отображения. Инструкции копирования (COP) перемещают данные при изменении индекса и повторно при сохранении, поэтому оператор всегда редактирует буфер-копию, а архив остаётся согласованным после циклов питания.

Управление рецептами Allen-Bradley с массивами UDT и интерфейсом редактирования HMI — рисунок 1 Монитор тегов Logix, показывающий Recipe_Storage[50], Recipe_Display и Recipe_Index, используемые для редактирования рецептов через HMI.

Определите UDT один раз, включив все необходимые процессу уставки — температуры, таймеры, скорости, коды продуктов и маски межблокировок, — а затем создайте Recipe_Storage как UDT[50]. Recipe_Display должен иметь точно такой же тип UDT, а не представлять собой набор слабо связанных атомарных тегов. Однородные типы упрощают расчёт длины COP и предотвращают незаметное усечение данных при последующем добавлении членов.

Ограничение индекса и путь загрузки

Ограничьте Recipe_Index включительно диапазоном от 0 до 49 до выполнения любой COP. Индекс без ограничения, полученный из объекта числового ввода, может вызвать ошибку COP или обратиться к неопределённой области памяти — в зависимости от того, как в проекте обрабатываются границы массива. При изменении Recipe_Index по переднему фронту (или при явном нажатии кнопки Load) скопируйте Recipe_Storage[Recipe_Index] в Recipe_Display. HMI должен обращаться только к членам Recipe_Display. Это единственное правило устраняет гонки, при которых два экрана записывают разные элементы массива, пока оператор продолжает изменять значения.

// Структура псевдокода
if Recipe_Index < 0 then Recipe_Index := 0;
if Recipe_Index > 49 then Recipe_Index := 49;

if IndexChanged or LoadPressed then
    COP(Recipe_Storage[Recipe_Index], Recipe_Display, 1);

if SavePressed then
    COP(Recipe_Display, Recipe_Storage[Recipe_Index], 1);
Управление рецептами Allen-Bradley с массивами UDT и интерфейсом редактирования HMI — рисунок 2 Экран рецептов HMI, обращающийся только к Recipe_Display; действия Load/Save запускают процедуры COP в контроллере.

Путь сохранения, хранение и поведение при загрузке проекта

При сохранении скопируйте Recipe_Display обратно в Recipe_Storage[Recipe_Index]. Поскольку Recipe_Storage находится среди тегов контроллера, значения сохраняются после отключения и включения питания, если проект настроен на обычное сохранение тегов. Данные также сохраняются при загрузке проекта, если выбрать сохранение значений тегов; считайте этот флажок частью стандартной операционной процедуры работы с рецептами, а не необязным удобством. Операторы должны понимать, что загрузка проекта с включённым параметром «reinitialize tags» сотрёт тщательно настроенные рецепты, если не существует резервной копии вне контроллера.

К рабочим процессам импорта CSV следует относиться скептически. Многие утилиты HMI или Excel-to-tag создают имена тегов, но ненадёжно обновляют значения членов вложенных UDT, особенно если заголовки столбцов отличаются от имён членов UDT. Предпочтительнее использовать явную процедуру импорта с проверкой каждого поля либо повторно загружать проверенный экспорт L5X/тегов после массового редактирования. Не следует считать, что зелёный баннер «импорт завершён» означает, что Recipe_Storage[n].Setpoint теперь равен значению ячейки электронной таблицы.

Тег Тип Привязка к HMI? Назначение
Recipe_Storage UDT[50] Нет Энергонезависимый архив рецептов
Recipe_Display UDT Только да Буфер редактирования оператора
Recipe_Index DINT Да (селектор) Активный слот 0–49

Рекомендации по интерфейсу HMI

  • Предусмотрите дискретные кнопки Load и Save с импульсной активацией, обрабатываемые в контроллере, а не прямую запись в массив с панели.
  • Отображайте ограниченный индекс и доступное только для чтения поле «сохранённое имя», скопированное из UDT отображения, чтобы оператор мог подтвердить активный слот.
  • Запрещайте Save, пока машина работает в цикле, если члены рецепта влияют на уставки движения или температуры в середине партии.
  • Регистрируйте события Save вместе с идентификатором оператора и индексом для обеспечения прослеживаемости на регулируемых производственных линиях.

Проверка границ индекса и сохранения при загрузке проекта

Проверьте работу, загрузив слот 0, изменив контрольное значение в Recipe_Display, сохранив его, переключив индекс на 1, а затем вернувшись к 0 и снова выполнив загрузку. Контрольное значение должно появиться снова только в том случае, если Save действительно выполнилась. Выполните перезапуск контроллера и убедитесь, что Recipe_Storage по-прежнему содержит это значение. Введите с HMI индекс за пределами диапазона и проверьте ограничение. Выполните импорт CSV в резервной системе и сравните содержимое каждого члена с файлом, прежде чем использовать этот путь в производстве.

Не привязывайте панель к Recipe_Storage[Recipe_Index].Member. Косвенная адресация HMI к массивам сложнее для аудита и может привести к записи не в тот слот, если тег индекса и экран обновляются с разной частотой. Шаблон с Display UDT легко масштабируется при последующем расширении UDT, добавлении уровней безопасности или переносе той же модели рецептов между несколькими ячейками систем PLC и PAC, использующими общий рабочий процесс оператора.

Об авторе

Mark Townsend | Ведущий инженер по автоматизации — системы Allen-Bradley

Mark Townsend — ведущий инженер по автоматизации с более чем 18-летним опытом работы с платформами Allen-Bradley, включая ControlLogix, CompactLogix и устаревшие SLC-500. В его повседневную работу входят разработка логики RSLogix / Studio 5000 и запуск HMI FactoryTalk View на устаревающих и смешанных парках оборудования.

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

Обратите внимание, комментарии должны быть одобрены перед публикацией.