omp packages

gxw2-libraries1.1.0

Pi skill routing GX Works 2 Structured Text tasks to the bundled Coolmay AlarmManager, ModbusDriver, TimeControl and Utils manuals.

serhioromano Published 7 days ago MIT ~275 downloads/mo

Untested on omp

This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

Coolmay GX Works 2 Libraries

Библиотеки Structured Text (ST) для ПЛК Mitsubishi FX / Coolmay FX3G в среде GX Works 2 (FX3U, FX3G, FX3S, FX5U).

Репозиторий содержит готовые переиспользуемые библиотеки: документацию для конечного пользователя, скомпилированные файлы .sul для установки в GX Works 2, исходные тексты (где есть) и проект-компилятор compiler.gxw, в котором все библиотеки собираются вместе и проверяются на ошибки.


Состав библиотек

Библиотека Назначение Документация Требует другие библиотеки
AlarmManager Управление авариями и событиями: регистрация, фильтрация по процессу и важности, защёлкивание, задержка срабатывания, управление зуммером, упаковка состояний для HMI libraries/AlarmManager/AlarmManager.md TimeControl
Utils Полезные функции и функциональные блоки общего назначения libraries/Utils/Utils.md —
TimeControl Таймеры с шагом 50 мс / 10 мс — замена функции TIME() из CoDeSys libraries/TimeControl/TimeControl.md Utils
ModbusDriver Драйвер Modbus RTU (master / slave) для портов 2 и 3 libraries/ModbusDriver/Modbus.md Utils, TimeControl (ticker 50 мс)
Easing Функции плавного изменения величины: ease-in, ease-out, ease-in-out libraries/Easing.md —
PumpControl Управление группами насосов (каскад до 9 насосов, поддержание давления, ротация по наработке) libraries/PumpControl.md Utils

AlarmManager

Полнофункциональная система аварий и событий. Хранилище аварий (AM_ALARMS, AM_EVENTS) и константы ёмкости (c_AM_ALARMS_NUM, c_AM_EVENTS_NUM) объявляет само приложение в глобальных метках проекта — библиотека не резервирует память за вас, размер хранилища подстраивается под задачу.

Основные блоки: FB_AM_INIT (настройка свойств аварии), FB_AM_SET (регистрация условия), FB_AM_ORISON, FB_AM_HAS_ALARMS, FB_AM_IS_BLOCK, FB_AM_BUZZER (зуммер), FB_AM_RESET, FB_AM_EV / FB_AM_EVENT_RESET (события), FB_AM_PACK_ALARMS / FB_AM_PACK_EVENTS (упаковка состояний в регистры D/R или в биты M для HMI), F_AM_DELAY_OUT.

Utils

Набор готовых функций: ISBON/DISBON (проверка бита), SETB/DSETB, RSTB/DRSTB, SRB/DSRB, регуляторы HYST/HYST_COOL, счётчики наработки WORK_LEFT/WORK_LEFT_TIME, INCN, SHIFT, L02_SET_IP, VALVE_3P, масштабирование SCALE/DSCALE/SCALE_NL.

TimeControl

Собственный тикер (аналог TIME() из CoDeSys): глобальная переменная TCO_DINT_50 считает 50-мс интервалы от запуска ПЛК (запас ~3,4 года). Функции преобразования: TCO_50_TO_SEC, TCO_50_TO_100MS, TCO_50_TO_MS, TCO_50_TO_MIN, MIN_TO_TCO_50, SEC_TO_TCO_50, TCO_50_DIFF; блоки TCO_50_BLINK, FB_TCO10; программы тикера PRG_TCO_TICKER_50 / PRG_TCO_TICKER_10.

Важно: перед использованием TimeControl нужно настроить тикер — запустить программу PRG_TCO_TICKER_50 (или PRG_TCO_TICKER_10) в проекте. Это описано в TimeControl.md.

ModbusDriver

Драйвер Modbus RTU для Coolmay FX3G: настройка порта MB_PORT_SETTINGS, инициализация slave/master MB_SLAVE_INIT_PORT2/3, MB_MASTER_INIT_PORT2/3, главный блок обмена MB_PROCESS_50 (работает по 50-мс тикеру TimeControl). Документация на английском и русском. Требует установки UtilsV4.sul и TimeControlV2.sul (см. требования в документации).

Easing

Функции плавного изменения значений от точки N к точке N1 за заданное время. Применяются в позиционировании (разгон/торможение), в управлении насосами фонтанов, в плавном прогреве нагревателей и т. п.

PumpControl

Управление группой насосов: блок Cascade_d поддерживает до 9 насосов, добавляет/убирает насосы по нижнему и верхнему давлению, автоматически ротирует насосы для выравнивания наработки, контролирует температуру и аварии.


Файлы репозитория

gxw2-libraries/
├── compiler.gxw              # Проект-компилятор: собирает все библиотеки и проверяет на ошибки
├── README.md                 # Этот файл — общее описание репозитория
├── libraries/                # Все библиотеки
│   ├── AlarmManager/         #   ├── AlarmManager.md / .pdf — документация
│   │   ├── AlarmManager.sul  #   │   скомпилированная библиотека для GX Works 2
│   │   ├── CHANGELOG.md      #   │   история изменений
│   │   ├── AGENT.md          #   │   заметки для AI-агента (внутренняя документация)
│   │   ├── POU/              #   │   исходные тексты: .iecst (код) + .csv (метки)
│   │   └── img/              #   │   изображения для документации
│   ├── ModbusDriver/         #   ├── Modbus.md/.pdf, Modbus.sul
│   ├── TimeControl/          #   ├── TimeControl.md/.pdf, TimeControl.sul
│   ├── Utils/                #   ├── Utils.md/.pdf, Utils.sul
│   ├── Easing.md/.pdf        #   ├── Easing (документация и .sul лежат в корне libraries/)
│   └── PumpControl.md/.pdf   #   └── PumpControl
├── skills/gxw2-libraries/    # Навык для AI-агента: SKILL.md + документация и изображения
├── scripts/sync-skill.mjs    # Генератор содержимого навыка из libraries/
├── package.json              # Манифест пакета/навыка (pi.skills)
└── .pi/, .vscode/            # Служебные файлы для разработки (см. ниже)

Назначение файлов внутри библиотеки

Файл / папка Назначение
<Имя>.sul Готовая библиотека для установки в GX Works 2. Именно этот файл подключается в рабочий проект.
<Имя>.md Документация для конечного пользователя: описание блоков, переменных, примеры.
<Имя>.pdf Та же документация в PDF.
CHANGELOG.md История версий библиотеки.
AGENT.md Заметки для AI-агента (внутренняя документация; не для конечных пользователей).
POU/ Исходные тексты: .iecst (код на Structured Text) + .csv (метки для импорта в GX Works 2).
img/ Изображения, на которые ссылается документация.

Важно: исходные тексты (POU/) переведены на новые принципы у четырёх библиотек: AlarmManager, ModbusDriver, TimeControl и Utils. Easing и PumpControl поставляются как готовый .sul + документация.


Как установить библиотеку в GX Works 2

  1. Скопируйте нужный файл <Имя>.sul на компьютер, где установлен GX Works 2.
  2. В GX Works 2 откройте Library Manager (меню Project → Library или панель библиотек) и установите файл .sul.
  3. Библиотека появится в списке библиотек проекта; её функциональные блоки и функции станут доступны в окне Library.
  4. Если библиотека имеет зависимости (см. таблицу выше), установите их в том же порядке (например, для ModbusDriver сначала Utils и TimeControl).
  5. Для TimeControl дополнительно запустите программу тикера PRG_TCO_TICKER_50 (или PRG_TCO_TICKER_10) — см. TimeControl.md.

Навык для AI-агента gxw2-libraries

Навык skills/gxw2-libraries/ помогает агенту, работающему с gxw2-st, выбрать нужное руководство: AlarmManager — аварии и события, ModbusDriver — Modbus RTU, TimeControl — время и тикеры, Utils — вспомогательные функции. Вместе с навыком устанавливаются руководства по всем четырём библиотекам и изображения из них. Файлы .sul в навык не входят: пользователь устанавливает библиотеки в GX Works 2 самостоятельно.

Путь в навыке Содержимое
SKILL.md Краткие условия выбора руководства
references/<Имя>.md Копии пользовательской документации четырёх библиотек (для ModbusDriver источник — libraries/ModbusDriver/Modbus.md)
references/img/<Имя>/ Изображения, на которые ссылается документация

Установка навыка:

pi install git:github.com/Serhioromano/gxw2-libraries

Если пакет опубликован в npm — pi install npm:gxw2-libraries.

Содержимое references/ генерируется из libraries/ скриптом scripts/sync-skill.mjs. После правок документации или её изображений обновите навык:

npm run sync-skill    # пересобрать копии в навыке
npm run check-skill   # проверить, что копии актуальны

Править файлы внутри skills/gxw2-libraries/references/ вручную нельзя — изменения затрутся при следующей синхронизации.


Новые принципы разработки библиотек

При написании новых библиотек (и при доработке AlarmManager) соблюдаются следующие правила. Они же действуют в проекте-компиляторе.

  • Платформа: только Mitsubishi FX в GX Works 2 (FX3U, FX3G, FX3S, FX5U); целевой ПЛК — Coolmay FX3G.
  • Язык: Structured Text (ST); переменные описываются в файлах .csv для редактора меток GX Works 2.
  • Префиксы имён POU (только заглавные):
    • F_ — функции, FB_ — функциональные блоки, ST_ — структуры, GVL_ — глобальные переменные, PRG_ — программы.
  • Каждый POU — это пара файлов: <Имя>.iecst (код) + <Имя>.csv (метки). Менять один файл без другого нельзя.
  • Комментарии: только (* ... *). Строчные // и фигурные { } комментарии в GX Works 2 не поддерживаются.
  • Файлы .csv кодируются в UTF-16LE (формат GX Works 2).
  • Экземпляры FB объявляются в стиле CamelCase с префиксом fb (например, fbAMInit : FB_AM_INIT).
  • Константы — префикс c_ (c_AM_ERROR), глобальные переменные — префикс g_ (g_xSystemReady).
  • Структура проекта из трёх программ: PRG_INIT (разовый запуск, выполняется по импульсу M8002), PRG_MAIN (бизнес-логика), PRG_PROCESS (диагностика, аварии, передача данных). Флаг M8002 задаётся в настройках задачи программы, а не в коде.
  • Хранилище данных объявляет приложение (модель пользовательского хранилища): например, AlarmManager использует глобальные массивы AM_ALARMS / AM_EVENTS и константы c_AM_ALARMS_NUM / c_AM_EVENTS_NUM, объявленные в проекте.

Проект-компилятор compiler.gxw

compiler.gxw — это единый проект GX Works 2 для сборки и проверки библиотек. В него подключены все библиотеки (как компоненты .col), чтобы:

  • компилировать их вместе и сразу видеть ошибки;
  • запускать тестовые программы и проверять работу библиотек на практике.

Что подключено в проект

Компонент Что это
AlarmManger Библиотека AlarmManager (так она называется внутри GX Works 2 — историческое имя хранилища).
TimeControl Библиотека TimeControl.
UtilsV5 Библиотека Utils (версия 5).

Тестовые программы проекта

Программа Что проверяет
PRG_AM_TEST Дымовой тест AlarmManager: регистрирует 3 аварии и 4 события, прогоняет все блоки библиотеки (init, set, orison, reset, has-alarms, is-block, buzzer, pack, events), упаковывает состояния в R6000 / D6000 / M6000 / D6100 / M6100….
PRG_TCO_TICKER_50 Тикер TimeControl с шагом 50 мс.
PRG_TCO_TICKER_10 Тикер TimeControl с шагом 10 мс.
PRG_TEST_TCO_50 Тест функций TimeControl.

Исходные тексты тестов лежат в репозитории рядом с библиотеками (например, libraries/AlarmManager/POU/PRG_AM_TEST.iecst / .csv).

Как пользоваться

  1. Откройте compiler.gxw в GX Works 2.
  2. Выполните компиляцию проекта — проверьте, что в окне Output нет ошибок.
  3. Запустите нужную тестовую программу (переведите проект в режим RUN или используйте симуляцию).
  4. Для PRG_AM_TEST: принудительно задайте входные условия (xCondAlarm0…2, xCondEvent0…3, xReset, xEventReset) и наблюдайте результаты в Device Monitor — так проверяется поведение блоков.
  5. Любую найденную ошибку исправляйте в исходных текстах библиотеки (libraries/AlarmManager/POU/), затем пересобирайте проект.

Что пока НЕ входит в проект-компилятор

ModbusDriver, Easing и PumpControl подключены как отдельные библиотеки в свои рабочие проекты, но в compiler.gxw их компонентов пока нет — их тестовые программы появятся в проекте по мере перевода этих библиотек на новые принципы.

Примечание: внутри GX Works 2 компонент AlarmManager называется AlarmManger (опечатка в имени хранилища, заложенная исторически). Не путайте: это та же библиотека AlarmManager.


Служебные файлы репозитория

  • .pi/ — конфигурация агента разработки: системный промпт (SYSTEM.md, APPEND_SYSTEM.md), навыки (skills/), правила защиты (defender.yaml). Конечному пользователю не нужны.
  • .vscode/ — настройки VS Code для генерации PDF-документации из .md (расширение Markdown PDF).

Как обновляется документация

  • .md — основной источник документации, пишется вручную.
  • .pdf — генерируется из .md (расширение VS Code Markdown PDF, см. .vscode/settings.json).
  • CHANGELOG.md — ведётся при каждом изменении библиотеки.

Если PDF не создаётся: «Chromium could not be started»

Расширение Markdown PDF выбирает браузер в таком порядке: markdown-pdf.executablePath → системный Chrome/Edge → автоскачивание Chrome. Если в системе есть только Microsoft Edge, экспорт падает:

Hint: Chromium could not be started. Set a valid Chromium path or enable auto-download.
Error: Failed to launch the browser process:  Code: 0

Причина: обычный Edge передаёт управление своим фоновым процессам (startup boost) и сразу завершается с кодом 0 — Puppeteer остаётся без управляемого браузера. Поэтому «обновите Edge / перезагрузка» помогает лишь до следующего запуска Edge. Журнал работы расширения: %APPDATA%\Code\logs\<сессия>\window1\exthost\yzane.markdown-pdf\Markdown PDF.log.

Решение — отдельный Chrome for Testing (он не участвует в обычном сёрфинге, поэтому передачи управления не происходит):

npx @puppeteer/browsers install chrome@stable --path "$env:LOCALAPPDATA\ChromeForTesting"

Затем прописать полученный путь в настройках пользователя VS Code (%APPDATA%\Code\User\settings.json), а не в настройках репозитория, т.к. путь машинозависимый:

"markdown-pdf.executablePath": "C:\\Users\\<user>\\AppData\\Local\\ChromeForTesting\\chrome\\win64-<версия>\\chrome-win64\\chrome.exe"

Важно: если settings.json правится из WSL (через /mnt/c/...), уже запущенный VS Code может не заметить изменение — в логе так и будет executablePath: (not set). Признак того, что настройка подхватилась: в логе executablePath: C:\...chrome.exe и Chromium: ... (source: user-setting). Если этого нет — перезагрузите окно: Ctrl+Shift+P → Developer: Reload Window.

Подсветка синтаксиса ST в PDF

Код в PDF подсвечивает highlight.js v11 (стиль выбирается настройкой markdown-pdf.highlightStyle: github.css, monokai.css, base16/solarized-dark.css и т.п.; по умолчанию — tomorrow.css). В highlight.js нет языка IEC 61131-3, поэтому блоки ```iecst выводились как обычный текст (только фон, без цветов). Лечится регистрацией грамматики highlightjs-structured-text внутри установленного расширения:

npm run patch-markdown-pdf            # пропатчить все найденные установки markdown-pdf
npm run check-markdown-pdf            # только проверить статус
npm run patch-markdown-pdf -- --revert  # откатить

Что делает скрипт scripts/patch-markdown-pdf.mjs:

  • копирует грамматику scripts/vendor/hljs-iecst.js в <расширение>/dist/hljs-iecst.js;
  • добавляет в buildHighlightCallback() бандла dist/extension.js строку регистрации языка iecst (плюс алиасы stl, scl, structured-text);
  • сохраняет бэкап dist/extension.js.orig, проверяет результат node --check и откатывается при ошибке.

Патч ставится поверх установленного расширения, поэтому после каждого обновления markdown-pdf его нужно применять заново (npm run patch-markdown-pdf). После патча перезагрузите окно VS Code (Developer: Reload Window). Сами .md менять не нужно — теги ```iecst остаются едиными и для PDF, и для редактора (vscode-st), и для GitHub.