Введение. Сетевая специфика высокоскоростной маркировки в АСУ ТП

В автоматизации современных упаковочных линий и конвейерных систем ключевую роль играет сквозная передача данных. Интеграция принтеров-аппликаторов в конвейерные комплексы АСУ ТП требует не просто релейного управления (сигналов запуска и состояния), а полноценного обмена динамическими данными в реальном времени. Современный маркиратор обязан принимать от управляющего ПЛК переменные текстовые поля (номера партий, даты, время, вес), коды DataMatrix верификации систем цифровой прослеживаемости, а также возвращать детальную телеметрию, информацию о расходе риббона и коды внутренних аппаратных ошибок.

Однако на этапе проектирования систем автоматизации инженеры часто сталкиваются со спецификой интерфейсов оборудования различных вендоров. Характерным примером является задача сопряжения принтера-аппликатора Videojet 9560 Front of Pack (FOP) с промышленными контроллерами семейства Siemens SIMATIC S7-1500 в среде разработки TIA Portal v17.

Внутренняя управляющая электроника принтеров Videojet 9560 и операционная система CLARiTY нативно спроектированы под промышленный протокол EtherNet/IP™ (стандарт группы ODVA). Физический Ethernet-разъём на материнской плате принтера ориентирован на стек EtherNet/IP и не оснащён специализированными интегральными схемами (ASIC), необходимыми для прямой обработки телеграмм реального времени PROFINET IO на канальном уровне (Layer 2, EtherType 0x8892). Поддержка PROFINET® в этой серии маркираторов реализована на уровне программной эмуляции. Для её физического развёртывания в топологии промышленной сети требуется промежуточный аппаратный модуль преобразования интерфейсов — Videojet PROFINET Module (P/N 430860), функционирующий на базе промышленного шлюза Hilscher netTAP 151.

Данная статья представляет собой исчерпывающий технический регламент, подробно описывающий сетевую архитектуру сопряжения, внутреннюю логику работы интерфейсного моста, структуры данных и пошаговую пусконаладку обмена в среде TIA Portal v17.

1. Аппаратная структура интерфейсного моста Hilscher netTAP 151

Полноценное сопряжение двух гетерогенных промышленных сетей реального времени осуществляется за счёт применения промышленного шлюза netTAP 151 (модификация NT 151-RE-RE) компании Hilscher. Это устройство берёт на себя всю вычислительную нагрузку по взаимной трансформации протоколов, обеспечивая прозрачный и детерминированный обмен данными. Шлюз netTAP 151 построен на базе специализированного сетевого процессора netX. Его аппаратная архитектура спроектирована для циклического обмена.

Физические интерфейсы и элементы управления устройства

  • Монтажное исполнение: компактный пластиковый корпус с креплением на стандартную 35-мм DIN-рейку для размещения внутри электротехнических шкафов управления конвейерной линией.
  • Сетевые порты: прибор оснащён двумя независимыми Ethernet-разъёмами RJ-45. Один из них конфигурируется как ведомое устройство PROFINET (PROFINET IO Device / Slave) и подключается к сети контроллера Siemens S7-1500. Второй настраивается как ведущее устройство EtherNet/IP (EtherNet/IP Scanner / Master) и коммутируется с принтером.
  • Порт Mini-USB: расположен на лицевой панели шлюза, предназначен для подключения инженерной станции (ноутбука) с целью первоначальной прошивки и конфигурирования внутренних шлюзовых таблиц в специализированном программном обеспечении Sycon.net.
  • Слот карты памяти (Memory Card): разъём для SD-карты, на которой сохраняется текущая микропрограмма и копия конфигурационного проекта. При необходимости горячей замены шлюза на линии достаточно переставить карту памяти в аналогичный прибор, что исключает необходимость повторного использования ПК.

Механизм циклического прохождения данных

В процессе работы сетевой мост организует непрерывный двунаправленный конвейер данных:

[ПЛК Siemens S7-1500] <--- (PROFINET IO) ---> [Шлюз netTAP 151] <--- (EtherNet/IP) ---> [Принтер Videojet 9560]

  1. Центральный процессор Siemens S7-1500 в рамках своего скан-цикла формирует выходной массив байт (управляющие команды, динамические строки этикетки) и транслирует его шлюзу по сети PROFINET IO.
  2. Шлюз netTAP 151 на аппаратном уровне принимает телеграмму PROFINET, очищает её от специфических заголовков протокола Siemens, перепаковывает полезную нагрузку (Payload) в структуру пакета EtherNet/IP и отправляет в сетевой стек принтера.
  3. Операционная система CLARiTY принтера Videojet 9560 принимает пакет EtherNet/IP, дешифрует его, актуализирует переменные в макете этикетки и инициирует печать.
  4. В обратном направлении принтер формирует циклический пакет обратной связи (биты готовности, счётчики, коды аварий) по EtherNet/IP и возвращает его шлюзу.
  5. Шлюз транслирует эти байты обратно в стек PROFINET, делая их доступными для чтения контроллером S7-1500.

Минимальное время полного цикла прохождения пакета составляет 32 миллисекунды (параметр minDeviceInterval="32" в файле GSDML). Для контроллера Siemens вся эта цепочка преобразований прозрачна: шлюз видится в TIA Portal как стандартная распределённая станция ввода-вывода PROFINET IO.

2. Варианты аппаратной конфигурации сетей

В промышленной практике сопряжение EtherNet/IP-маркиратора с PROFINET-контроллером может быть реализовано несколькими путями, в зависимости от имеющейся на объекте аппаратной базы.

Вариант А. Настройка чистого промышленного шлюза Hilscher netTAP 151

Если используется не брендированный готовый модуль Videojet, а универсальный шлюз Hilscher netTAP 151 (NT 151-RE-RE), его необходимо предварительно подготовить с помощью инженерной утилиты Sycon.net:

  1. Подключить ПК к порту Mini-USB шлюза.
  2. Загрузить в устройство прошивку, обеспечивающую преобразование EtherNet/IP Scanner to PROFINET IO Device.
  3. Импортировать в базу данных Sycon.net файл конфигурации принтера vj9560.eds (Electronic Data Sheet, поставляемый в комплекте софта принтера).
  4. Сформировать таблицу сканирования (Scanlist), прописав в ней точный IP-адрес принтера и жёстко зафиксировав длину циклического ввода (128 байт) и вывода (476 или 896 байт).

После этого шлюз готов к интеграции в проект Siemens.

Вариант Б. Использование шлюзов-конвертеров сторонних производителей

Задача сквозного перекладывания байт из буфера EtherNet/IP в PROFINET IO может быть решена с помощью альтернативных промышленных конвертеров, поддерживающих режим EtherNet/IP Scanner на одном порту и PROFINET IO Device на другом:

  • ODOT Automation: конвертеры протоколов (например, серии ODOT-PNMO2), конфигурируемые через собственное ПО для сопряжения со сторонними EtherNet/IP-устройствами на основании их EDS-файлов.
  • SST Automation / Rt-Автоматизация: промышленные шлюзы серии GT200-PN-EC, обеспечивающие аналогичную детерминированную трансляцию массивов данных реального времени.

При использовании альтернативных шлюзов базовый алгоритм работы в TIA Portal v17 остаётся прежним, меняется лишь файл описания устройства (GSDML), который импортируется в базу данных Siemens.

3. Ревизии протокола обмена и структура памяти (Rev AA vs Rev AB)

При интеграции Videojet 9560 в TIA Portal v17 критически важно сопоставить конфигурацию памяти в ПЛК с текущей версией встроенного программного обеспечения маркиратора. Существует две ревизии официального протокола связи PROFINET: Revision AA (октябрь 2023 года) и Revision AB (декабрь 2025 года). Они имеют принципиальные различия в объёмах резервируемого адресного пространства.

Направление данных Ревизия Rev AA (октябрь 2023) Ревизия Rev AB (декабрь 2025)
Входной буфер (PLC Input) Строго 128 байт (Bytes 0–127) Строго 128 байт (Bytes 0–127)
Выходной буфер (PLC Output) Строго 896 байт (Bytes 0–895) Строго 476 байт (Bytes 0–475)

Минимизация рисков рассинхронизации буфера

Если в аппаратной конфигурации TIA Portal v17 выделить под выходные данные шлюза монолитный блок размером 896 байт (по спецификации Rev AA), а реальный встроенный софт принтера работает по новой ревизии Rev AB (ожидающей строго 476 байт), циклический обмен будет заблокирован сетевым процессором шлюза с генерацией ошибки Submodule configuration error. В случае частичного прохождения пакетов произойдёт критическое смещение адресов тегов (Offset): биты команд управления попадут в область символьных массивов текстовых полей.

Рекомендация: перед началом сборки аппаратной спецификации в TIA Portal необходимо зайти в диагностическое меню принтера с экрана CLARiTY и проверить текущую ревизию протокола обмена, зашитую в контроллер принтера.

4. Пошаговое руководство по конфигурированию в TIA Portal v17

Ниже приведена детальная инженерная процедура пусконаладки сетевого обмена для контроллера Siemens S7-1500 в среде TIA Portal v17 на основе шлюза Hilscher netTAP 151 и карты памяти ревизии Rev AA (128 байт ввода / 896 байт вывода).

Шаг 4.1. Импорт файла описания устройства (GSDML)

  1. Поместите конфигурационный файл GSDML-V2.31-Hilscher-netTAP 151-NT 151-RE-RE#PNS-20170206.xml в рабочую папку на инженерной станции.
  2. В эту же папку обязательно сохраните сопутствующий графический файл иконки прибора GSDML-V2.31-Hilscher-netTAP 151-NT 151-RE-RE#PNS-20170206.bmp. Изображение должно быть строго в формате BMP с 256-цветной (8-битной) палитрой и иметь разрешение 50×50 или 70×50 пикселей. Нарушение битности палитры приведёт к отказу TIA Portal импортировать аппаратный профиль.
  3. Запустите TIA Portal v17 и откройте проект АСУ ТП.
  4. В верхнем меню выберите: Options → Manage general station description files (GSD).
  5. В поле Source path укажите путь к созданной папке. Среда отсканирует файлы и выведет имя шлюза Hilscher в список.
  6. Отметьте строку галочкой, нажмите Install, дождитесь окончания компиляции каталога и нажмите Close.

Шаг 4.2. Добавление и сетевое связывание узла в Network View

  1. В левом дереве проекта дважды кликните на пункт Devices & Networks и выберите вкладку Network View (Сетевая топология).
  2. В правом окне каталога оборудования Hardware Catalog перейдите по пути: other field devices → PROFINET IO → Gateway → Hilscher Gesellschaft für Systemautomation mbh → netTAP 151 → NT 151-RE-RE/PNS.
  3. Выделите модель шлюза версии V1.0 – V1.x, зажмите левую кнопку мыши и перетащите устройство на рабочее поле схемы сетей.
  4. Кликните на зелёный квадратный разъём PROFINET-интерфейса шлюза и, не отпуская кнопку, протяните линию к PROFINET-порту контроллера Siemens S7-1500.
  5. Нажмите на текстовую ссылку Not assigned на серой подложке шлюза и в выпадающем списке выберите мастер-контроллер (например, PLC_1.PROFINET interface_1) для создания логической IO-связи.

Шаг 4.3. Назначение PROFINET-имени прибора по протоколу DCP

  1. Выделите шлюз на схеме сети, откройте его свойства (Properties → General → PROFINET interface → Ethernet addresses).
  2. В поле PROFINET device name введите имя, заложенное в проектной документации маркиратора (по умолчанию: vj9560 или videojetio, буквы строго строчные, без спецсимволов).
  3. Ниже в поле IP protocol пропишите статический IP-адрес для шлюза в подсети контроллера (например, 192.168.1.100, маска 255.255.255.0).
  4. Подключите ноутбук к физической сети PROFINET конвейера.
  5. В TIA Portal перейдите в меню Online → Accessible devices и убедитесь, что шлюз Hilscher обнаруживается по своему заводскому MAC-адресу.
  6. Вернитесь в Network View, кликните правой кнопкой мыши на иконку шлюза и выберите команду Assign device name.
  7. В открывшемся окне выберите сетевой адаптер вашего ПК, нажмите Update list, выделите обнаруженный шлюз и нажмите кнопку Assign name. Имя vj9560 запишется в энергонезависимую память процессора шлюза, что подтверждается изменением индикации системного светодиода устройства.

Шаг 4.4. Сборка конфигурации слотов ввода-вывода в Device View

Так как шлюз netTAP является универсальной платформой, его аппаратная таблица слотов изначально пуста. Её необходимо набрать вручную из стандартных блоков Hilscher, представленных в каталоге оборудования.

  1. В окне Network View дважды щёлкните на изображение шлюза — программа откроет окно Device View.
  2. В нижней части экрана развернётся таблица распределения слотов — Device Overview.
  3. В правом окне Hardware Catalog откройте список доступных подмодулей шлюза.
  4. Формирование выходного буфера (Output — 896 байт):
    • В Slot 1 поместите модуль 256 Bytes Output. Система автоматически выделит адреса ПЛК (например, %QB100 – %QB355).
    • В Slot 2 поместите второй модуль 256 Bytes Output (адреса %QB356 – %QB611).
    • В Slot 3 поместите третий модуль 256 Bytes Output (адреса %QB612 – %QB867).
    • В Slot 4 поместите модуль 128 Bytes Output (адреса %QB868 – %QB995).

    Контрольная сумма вывода: 256 + 256 + 256 + 128 = 896 байт.

  5. Формирование входного буфера (Input — 128 байт):
    • В Slot 5 перетащите из каталога модуль 128 Bytes Input. Ему присвоится диапазон входных адресов ПЛК (например, %IB100 – %IB227).
  6. Выделите ПЛК в дереве проекта, нажмите кнопку Compile на панели инструментов (Hardware (complete rebuild)). Сборка аппаратного конфига должна завершиться успешно, без ошибок.

5. Карта распределения адресов (Data Mapping) и теги ПЛК

Для реализации логики управления упаковочным комплексом в ПЛК S7-1500 создаётся специализированная таблица переменных (PLC Tags), структура и смещения которой должны строго соответствовать официальной спецификации Videojet протокола Rev AA.

5.1. Область ввода: входные сигналы от маркиратора в ПЛК Siemens (128 байт)

Диапазон памяти (начинается с базового адреса %IB100) служит для непрерывного мониторинга состояния принтера-аппликатора.

Смещение PLC Tag Тип Назначение
Байт 0VJ_In_Printer_StatusBYTEСистемный статус: 0 — Offline, 1 — Starting up, 2 — Running, 3 — Shutdown, 4 — Fault, 5 — Warning.
Байт 1VJ_In_Print_Complete_CounterBYTEЦиклический счётчик: инкрементируется на +1 после каждого успешного нанесения этикетки (1…255, далее сброс в 0).
Байт 2VJ_In_Trigger_AcknowledgeBYTEПодтверждение триггера: принтер зафиксировал импульс от датчика продукта или программную команду.
Байт 3VJ_In_Command_In_ProgressBYTEФлаг взведён в 1, пока прибор занят обработкой команды.
Байт 4VJ_In_Command_ExecutedBYTEЭхо-номер: сюда принтер дублирует ID последней успешно обработанной команды.
Байт 5VJ_In_Command_ResponseBYTEКод ответа: 0x7F — успех, 0xFF — критический сбой, 0x7C — файл не найден.
Байты 8–11VJ_In_Job_Name_LengthDINTДлина символьной строки имени текущего шаблона.
Байты 12–43VJ_In_Job_Name_DataSTRINGТекстовый массив с именем активного шаблона маркировки.
Байт 44VJ_In_Errors_CountUSINTКоличество активных критических ошибок.
Байты 46–47VJ_In_Current_Error_IDUINTКод активной аварии (обрыв риббона, отсутствие сжатого воздуха).
Байт 48VJ_In_Warnings_CountUSINTКоличество активных предупреждений.
Байты 50–51VJ_In_Current_Warning_IDINTКод предупреждения (низкий уровень рулона этикеток).
Байты 52–63VJ_In_Mechanical_AdjustmentsINTСмещение по осям X/Y, угол поворота, уровень затемнения печати.
Байты 64–95VJ_In_Performance_MetricsINT / SINTМетрики производительности (скорость протяжки подложки, текущая производительность линии).
Байты 96–127VJ_In_Consumables_StateBYTE / SINTОстаток этикеточной ленты и риббона в процентах (0–100%).

5.2. Область вывода: управляющие команды из ПЛК в маркиратор (896 байт)

Выходной буфер (в нашем примере начинается с адреса %QB100) служит для передачи управляющих импульсов и динамических строк данных.

Смещение PLC Tag Тип Назначение
Байт 0VJ_Out_Command_IDBYTEКод команды: 0x01 — OSSTARTUP, 0x03 — OSRUNNING, 0x05 — PRINT (программный триггер), 0x06 — CLAALR (дистанционный сброс ошибок), 0x0B — LDJOB (загрузка шаблона).
Байты 1–2VJ_Out_Clear_Alarm_IDINTКонкретный код ошибки, которую ПЛК пытается квитировать дистанционно.
Байты 4–15VJ_Out_AdjustmentsINTДистанционная корректировка смещения печати по X/Y и интенсивности нагрева термоголовки.
Байты 20–23VJ_Out_Select_Job_LengthDINTДлина строки имени шаблона этикетки, который ПЛК требует загрузить.
Байты 24–55VJ_Out_Select_Job_StringSTRINGИмя этикетки (например, Etik_Coffee_250). При подаче команды 0x0B принтер переключится на этот макет.
Байты 56–59VJ_Out_Field_1_Name_LengthDINTДлина имени первого переменного текстового поля.
Байты 60–71VJ_Out_Field_1_Name_DataSTRINGСистемное имя тега внутри разметки шаблона (например, Partia_Num).
Байты 72–75VJ_Out_Field_1_Value_LengthDINTДлина передаваемого значения для первого поля.
Байты 76–115VJ_Out_Field_1_Value_DataSTRINGДинамический текст поля 1 (например, номер варки: P-0045/26).
Байты 116–655VJ_Out_Short_Fields_2_to_10STRUCTНабор дублирующих полей для коротких переменных (дата упаковки, вес нетто, ID линии).
Байты 656–895VJ_Out_Long_Fields_1_and_2STRUCTДлинные буферы (до 100 символов) для кодов маркировки национальной прослеживаемости, составных штрихкодов и DataMatrix.

6. Алгоритм управления обменом данными. Командная последовательность (Sequencing)

Специфика интерфейса CLARiTY принтера Videojet 9560 исключает возможность статического управления через постоянные уровни сигналов (логическую «1» на битах). Вся пусконаладка логики в ПЛК Siemens S7-1500 строится на базе командного секвенирования (Command Sequencing) со строгим двусторонним квитированием (Handshake). Попытка записать команду без предварительного согласования приведёт к блокировке обмена.

  1. Верификация исходного состояния шины. Программа ПЛК должна убедиться, что управляющий регистр VJ_Out_Command_ID равен 0x00 (команда NOOP — нет операции). Если там удерживается старое значение, шлюз заблокирует новую транзакцию.
  2. Проверка готовности исполнительного устройства. Программа анализирует входной тег VJ_In_Command_In_Progress. Значение должно быть строго равно 0. Если флаг равен 1, маркиратор занят внутренней обработкой данных, и подача новой команды запрещена.
  3. Наполнение выходных информационных регистров. ПЛК записывает аргументы команды. Для смены макета: в поле VJ_Out_Select_Job_Length вносится длина имени файла (например, 14), а в строковый массив VJ_Out_Select_Job_String записывается точное имя шаблона — Label_Milk_05L.
  4. Активация триггера команды. ПЛК записывает код команды 0x0B (LDJOB) в управляющий байт VJ_Out_Command_ID. Это действие является импульсом к началу транзакции.
  5. Контроль квитирования (Handshake от принтера). Программа ПЛК ожидает реакции. Как только принтер считывает команду, он взводит входной флаг VJ_In_Command_In_Progress в 1. ПЛК фиксирует этот переход и приостанавливает дальнейшие действия, пока принтер выгружает старый макет из памяти и инициализирует новый файл.
  6. Завершение операции на стороне маркиратора. По окончании загрузки шаблона принтер сбрасывает флаг VJ_In_Command_In_Progress обратно в 0, одновременно записывая эхо-код 0x0B в байт VJ_In_Command_Executed и статус завершения операции в регистр VJ_In_Command_Response.
  7. Анализ кода ответа. ПЛК считывает байт VJ_In_Command_Response. Значение 0x7F подтверждает успешное выполнение. 0xFF сигнализирует об ошибке, 0x7C — что файл с таким именем отсутствует в памяти прибора. При кодах, отличных от 0x7F, программа ПЛК должна остановить конвейер и сгенерировать аварийное сообщение на панели оператора.
  8. Сброс триггера. После фиксации и анализа ответа программа ПЛК обнуляет выходной тег VJ_Out_Command_ID (записывает 0x00), завершая транзакцию и подготавливая сетевой буфер к следующему циклу обмена.

7. Физическое подключение и коммутация кабелей на линии

Успешный запуск циклического PROFINET-обмена требует жёсткого соблюдения правил аппаратной коммутации кабелей непосредственно на интерфейсной панели маркиратора Videojet 9560. Нарушение правил подключения портов является частой причиной сбоев, при которых устройство пингуется по TCP/IP, но не переходит в рабочий режим PROFINET IO.

На материнской плате принтера распаяно два независимых разъёма RJ-45, каждый из которых имеет строгое функциональное назначение:

  • Port 8 (Ethernet): стандартный сетевой интерфейс. Предназначен для подключения к локальной заводской сети общего уровня, присвоения IP-адреса, проверки связи через командную строку (Ping) и сопряжения с диагностическим софтом CLARiTYConfig.
  • Port 9 (Ethernet POE): разъём с поддержкой технологии Power over Ethernet. Строго в этот порт должен подключаться сетевой кабель, идущий от шлюза-конвертера netTAP 151. Через этот разъём шлюз одновременно получает электропитание от цепей принтера и осуществляет высокоскоростной циклический опрос регистров по нативному для маркиратора протоколу EtherNet/IP.

Если кабель от шлюза (или напрямую от ПЛК Siemens) ошибочно скоммутировать в Port 8, сетевой процессор принтера не сможет запустить внутренний алгоритм эмуляции: ползунок ProfinetEnabled = 1: Yes в меню CLARiTY выдаст ошибку, и система навсегда останется в неактивном состоянии (ProfinetState = Disabled).

8. Программный листинг алгоритма управления на языке SCL

Для автоматизации описанного в разделе 6 механизма двустороннего квитирования ниже представлен готовый программный код функционального блока управления на языке SCL (Structured Control Language), оптимизированный для выполнения в контроллерах Siemens S7-1500 в среде TIA Portal v17.

FUNCTION_BLOCK "FB_Videojet_9560_Control"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1

VAR_INPUT
    i_Execute_LDJOB   : Bool;          // Команда на смену макета этикетки
    i_Job_Name        : String[32];    // Имя вызываемого файла этикетки
    i_Field_1_Name    : String[12];    // Имя динамического поля (например, 'Lot_Num')
    i_Field_1_Value   : String[40];    // Текст для печати (например, 'Партия_123')
END_VAR

VAR_OUTPUT
    o_Ready           : Bool;          // Шлюз и принтер готовы к приёму команд
    o_Done            : Bool;          // Команда успешно выполнена (получен 0x7F)
    o_Error           : Bool;          // Флаг критической ошибки обмена
    o_Status_Code     : Byte;          // Текущий код ответа от маркиратора
END_VAR

VAR
    s_Step            : Int := 0;      // Шаг внутреннего автомата состояний
    s_Edge_Trigger    : Bool;          // Флаг фиксации фронта входной команды
END_VAR

VAR_EXTERNAL
    // Привязка к физическим адресам I/O (шаг 4.4)
    VJ_In_Printer_Status        AT %IB100 : Byte;
    VJ_In_Command_In_Progress   AT %IB103 : Byte;
    VJ_In_Command_Executed      AT %IB104 : Byte;
    VJ_In_Command_Response      AT %IB105 : Byte;
    VJ_Out_Command_ID           AT %QB100 : Byte;
    VJ_Out_Select_Job_Length    AT %QD120 : Dint;
    VJ_Out_Select_Job_String    AT %QB124 : String[32];
    VJ_Out_Field_1_Name_Length  AT %QD156 : Dint;
    VJ_Out_Field_1_Name_Data    AT %QB160 : String[12];
    VJ_Out_Field_1_Value_Length AT %QD172 : Dint;
    VJ_Out_Field_1_Value_Data   AT %QB176 : String[40];
END_VAR

BEGIN
    // Определение базовой готовности маркиратора
    IF #VJ_In_Printer_Status = 2
       AND #VJ_In_Command_In_Progress = 0
       AND #s_Step = 0 THEN
        #o_Ready := TRUE;
        #o_Error := FALSE;
    ELSE
        #o_Ready := FALSE;
    END_IF;

    // Автомат состояний обработки командной последовательности
    CASE #s_Step OF
        0:  // Шаг 0: Ожидание фронта команды на смену макета
            #o_Done := FALSE;
            IF #i_Execute_LDJOB AND NOT #s_Edge_Trigger AND #o_Ready THEN
                #s_Edge_Trigger := TRUE;
                #s_Step := 1;
            END_IF;

        1:  // Шаг 1: Наполнение аргументов и активация триггера
            #VJ_Out_Select_Job_Length := LEN(#i_Job_Name);
            #VJ_Out_Select_Job_String := #i_Job_Name;
            #VJ_Out_Field_1_Name_Length := LEN(#i_Field_1_Name);
            #VJ_Out_Field_1_Name_Data := #i_Field_1_Name;
            #VJ_Out_Field_1_Value_Length := LEN(#i_Field_1_Value);
            #VJ_Out_Field_1_Value_Data := #i_Field_1_Value;
            #VJ_Out_Command_ID := 16#0B;   // LDJOB
            #s_Step := 2;

        2:  // Шаг 2: Ожидание квитирования от принтера
            IF #VJ_In_Command_In_Progress = 1 THEN
                #s_Step := 3;
            END_IF;

        3:  // Шаг 3: Ожидание завершения обработки и анализ ответа
            IF #VJ_In_Command_In_Progress = 0 THEN
                #o_Status_Code := #VJ_In_Command_Response;
                IF #VJ_In_Command_Response = 16#7F THEN
                    #o_Done := TRUE;
                    #o_Error := FALSE;
                ELSE
                    #o_Done := FALSE;
                    #o_Error := TRUE;
                END_IF;
                #VJ_Out_Command_ID := 16#00;
                #s_Step := 4;
            END_IF;

        4:  // Шаг 4: Возврат в исходное состояние
            IF NOT #i_Execute_LDJOB THEN
                #s_Edge_Trigger := FALSE;
                #s_Step := 0;
            END_IF;
    END_CASE;
END_FUNCTION_BLOCK

Данный программный блок полностью автономен, защищает буферы обмена от некорректной перезаписи тегов и обеспечивает жёсткий контроль выполнения команд на конвейерной линии.

Важное уведомление об ограничении ответственности

Представленный в данной статье технический регламент, побайтовые карты распределения адресов, алгоритмы секвенирования и примеры программного кода на языке SCL носят исключительно информационно-ознакомительный характер. Они отражают базовые инженерные принципы интеграции оборудования на основе заводской документации Videojet ревизии Rev AA.

Поскольку реальные условия на производственных объектах могут отличаться (включая версии встроенного программного обеспечения маркираторов, конфигурацию центральных процессоров Siemens S7-1500, топологию сети и требования к безопасности линий), компания-автор и редакция издания не несут ответственности за любые прямые или косвенные убытки, остановку конвейерных линий, повреждение оборудования или программные сбои, возникшие в результате использования данных материалов.

Профильные специалисты, инженеры АСУ ТП и программисты ПЛК на стороне заказчика обязаны самостоятельно провести аудит параметров конкретного оборудования, синтаксическую проверку кода в среде TIA Portal v17 перед его компиляцией, а также осуществить предварительное тестирование алгоритмов на безопасном стенде до загрузки проекта в работающий промышленный контроллер линии.

Антон Субботин
Антон Субботин
Учредитель и главный редактор

Более 20 лет опыта в сфере промышленной автоматизации. Руководил проектами по цифровизации производств, маркировке товаров и внедрению упаковочных решений в российском и международном секторах.

Частые вопросы о сопряжении EtherNet/IP и PROFINET

Почему Videojet 9560 требует внешнего шлюза для PROFINET?

Внутренняя электроника Videojet 9560 и ОС CLARiTY нативно спроектированы под EtherNet/IP (стандарт ODVA). Физический Ethernet-разъём на материнской плате не оснащён специализированным ASIC для обработки телеграмм PROFINET IO на канальном уровне (EtherType 0x8892). Поддержка PROFINET в этой серии реализована программной эмуляцией, и для физического развёртывания требуется промежуточный модуль преобразования интерфейсов — Videojet PROFINET Module (P/N 430860) на базе промышленного шлюза Hilscher netTAP 151.

В чём разница между ревизиями протокола Rev AA и Rev AB?

Обе ревизии используют входной буфер 128 байт (PLC Input, Bytes 0–127). Различие — в объёме выходного буфера: Rev AA (октябрь 2023) требует строго 896 байт (Bytes 0–895), а Rev AB (декабрь 2025) — строго 476 байт (Bytes 0–475). Если в TIA Portal выделить 896 байт под Rev AA, а принтер работает по Rev AB, циклический обмен блокируется с ошибкой Submodule configuration error, либо происходит критическое смещение адресов тегов: биты команд управления попадают в область символьных массивов текстовых полей.

Какое минимальное время цикла PROFINET у шлюза netTAP 151?

Минимальное время полного цикла прохождения пакета от ПЛК через шлюз до принтера и обратно составляет 32 миллисекунды. Этот параметр задаётся в файле описания устройства GSDML как minDeviceInterval="32". Для контроллера Siemens вся цепочка преобразований прозрачна: шлюз виден в TIA Portal как стандартная распределённая станция ввода-вывода PROFINET IO.

Почему принтер пингуется, но PROFINET не работает?

На материнской плате Videojet 9560 распаяно два независимых RJ-45: Port 8 (стандартный Ethernet) предназначен для локальной заводской сети и CLARiTYConfig, а Port 9 (Ethernet POE) — для питания шлюза и циклического EtherNet/IP-обмена. Если кабель от шлюза ошибочно скоммутировать в Port 8, сетевой процессор принтера не запустит внутренний алгоритм эмуляции: параметр ProfinetEnabled выдаст ошибку, а ProfinetState останется в состоянии Disabled, хотя ICMP-пинги будут проходить.

Зачем нужна командная последовательность (sequencing) и квитирование?

Специфика интерфейса CLARiTY исключает статическое управление через постоянные уровни сигналов. Вся логика строится на восьмишаговой командной последовательности со строгим двусторонним квитированием: проверка исходного состояния (Command_ID = 0x00), проверка готовности принтера (Command_In_Progress = 0), заполнение аргументов, запись кода команды (например, 0x0B для LDJOB), ожидание перехода флага In_Progress в 1, ожидание сброса флага, анализ кода ответа (0x7F — успех, 0xFF — ошибка, 0x7C — файл не найден), обнуление Command_ID.