gxw2-libraries1.1.0
Pi skill routing GX Works 2 Structured Text tasks to the bundled Coolmay AlarmManager, ModbusDriver, TimeControl and Utils manuals.
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.
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
- Скопируйте нужный файл
<Имя>.sulна компьютер, где установлен GX Works 2. - В GX Works 2 откройте Library Manager (меню Project → Library или панель библиотек) и установите файл
.sul. - Библиотека появится в списке библиотек проекта; её функциональные блоки и функции станут доступны в окне Library.
- Если библиотека имеет зависимости (см. таблицу выше), установите их в том же порядке (например, для ModbusDriver сначала Utils и TimeControl).
- Для 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).
Как пользоваться
- Откройте
compiler.gxwв GX Works 2. - Выполните компиляцию проекта — проверьте, что в окне Output нет ошибок.
- Запустите нужную тестовую программу (переведите проект в режим RUN или используйте симуляцию).
- Для
PRG_AM_TEST: принудительно задайте входные условия (xCondAlarm0…2,xCondEvent0…3,xReset,xEventReset) и наблюдайте результаты в Device Monitor — так проверяется поведение блоков. - Любую найденную ошибку исправляйте в исходных текстах библиотеки (
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.