Тема оформления
Beremiz
Обзор и установка
Beremiz IDE — программа для компьютера, в которой вы создаёте логику управления оборудованием, загружаете её в WT32 и наблюдаете за выполнением.
Worker Beremiz — прошивка для WT32, которая исполняет созданную программу. В этом режиме WT32 работает как ПЛК — программируемый логический контроллер. Программа ПЛК написана на Structured Text (ST), текстовом языке автоматизации.
Совместимый комплект
Beremiz IDE 1.1.69 + Worker Beremiz 1.1.211, Foundation 1.1.122. Совместимый BIN уже включён в папку firmware дистрибутива IDE. Скачать комплект.
Возможности
- Structured Text, программы, функции, функциональные блоки и пользовательские типы.
- Загрузка PLC-проекта по сети, запуск, остановка и наблюдение за значениями.
- Отладочные листы, принуждение значений и выбор Debug для экземпляров.
- Modbus RTU/TCP, Siemens S7 Client, MQTT и сетевые функции — через соответствующие блоки.
Порядок запуска
- Установите Worker, если на устройстве установлена другая прошивка.
- Установите Beremiz IDE из раздела загрузок.
- Создайте проект, укажите адрес и пароль.
- Соберите и загрузите программу.
- Подключитесь к отладке.
Работа программы на устройстве не требует постоянно открытой IDE. При переходе на другой Worker PLC-программа не выполняется.
Далее: начало работы с Beremiz →
Начало работы с Beremiz
Начните с готового проекта: загрузите его в WT32, проверьте мигание индикатора и откройте значения переменных. После этого добавляйте свою логику управления и блоки обмена данными.
- Создайте проект из готового шаблона.
- Укажите IP устройства и пароль Web-доступа.
- Соберите и загрузите PLC-программу.
- Подключитесь к PLC и откройте мониторинг.
Подготовка устройства
Для исполнения проекта необходимы действующая лицензия и Worker Beremiz. Worker устанавливается через Web-интерфейс устройства, PLC-программа загружается из IDE.
Совместимые версии
Текущий комплект — IDE 1.1.69 и Worker Beremiz 1.1.211. Совместимый Worker находится в папке firmware установленного Beremiz. Foundation остаётся версии 1.1.122; для обычной загрузки PLC-проекта его не перепрошивают.
Перед обновлением сохраните всю папку проекта. После перехода со старого Worker пересоберите и загрузите PLC-программу новой IDE: прошивка Worker и PLC-пакет обновляются отдельно.
Главное окно и панели
На иллюстрациях используется учебный проект «Насос». Адрес 192.168.220.101 приведён для примера; в своём проекте укажите адрес своего устройства.
| Область | Для чего нужна |
|---|---|
| Дерево проекта · слева сверху | Типы данных, функции, функциональные блоки, программы и ресурсы. |
| Дерево экземпляров · слева снизу | Переменные конкретного экземпляра программы/FB. Отсюда переменные переносят в отладочный лист. |
| Редактор · по центру | Таблица объявлений и ST-код. |
| Библиотеки / Отладчик · справа | Справа доступны блоки и функции текущей ESP32/ST-сборки. Вкладка «Отладчик» — наблюдение за значениями. |
| Поиск / Консоль / Лог ПЛК · снизу | Результаты поиска, сборки, загрузки и сообщения контроллера. |
| Строка состояния | Состояние связи, режим PLC, нагрузка канала отладки и красный флаг FORCE при активном принуждении. |

Настройка рабочего пространства
Перетаскивайте границу между объявлениями и кодом, чтобы изменить высоту секций. Ширина колонок меняется перетаскиванием границ их заголовков. Эти настройки хранятся в проекте отдельно для редакторов POU, UDT, глобальных переменных и ресурсов.
| Кнопка | Команда | Как использовать |
|---|---|---|
| Таблица переменных | Показать или скрыть объявления активного ST-редактора. Ctrl+1 или Ctrl+NumPad1. | |
| Нижняя панель | Показать или скрыть консоль, поиск и лог PLC. Ctrl+2 или Ctrl+NumPad2. | |
| Полный экран | Переключить полноэкранный вид. Shift+F12. |
Панель справа переключается через меню Вид → Правая панель: Библиотеки/Отладчик. Чтобы восстановить общую компоновку, используйте команду сброса расположения панелей в меню «Вид».
Кнопки верхней панели

| Кнопка | Команда | Как использовать |
|---|---|---|
| Новый проект | Создать проект в выбранной папке. Ctrl+N. | |
| Открыть проект | Выбрать папку существующего проекта с plc.xml. Ctrl+O. | |
| Сохранить | Записать изменения проекта. Ctrl+S. | |
| Сохранить как | Сохранить проект в другой папке. | |
| Печать | Распечатать содержимое редактора. | |
| Web-интерфейс устройства | Открыть в браузере устройство по адресу проекта. Прошивка не загружается автоматически. | |
| Сайт Beremiz | Страница Beremiz на rumiz.ru с описанием и загрузками. | |
| Отменить | Отменить последнее редактирование. Ctrl+Z. | |
| Повторить | Вернуть отменённое действие. Ctrl+Y. | |
| Вырезать | Перенести выделенное в буфер обмена. Ctrl+X. | |
| Копировать | Скопировать выделенный текст. На объекте дерева проекта копируется его имя. Ctrl+C. | |
| Вставить | Вставить содержимое буфера в активный редактор или таблицу. Ctrl+V. | |
| Поиск в текущей области | Ctrl+F: искать в активном ST-редакторе или таблице. | |
| Поиск в проекте | Ctrl+Shift+F: искать во всём проекте, результаты — в нижней панели. |
| Кнопка | Команда | Как использовать |
|---|---|---|
| Подключиться к ПЛК | Подключиться по адресу проекта для мониторинга, отладки и сравнения актуальности. | |
| Собрать | F5: собрать PLC-пакет в папке build без загрузки в контроллер. | |
| Загрузить в ESP | F6: собрать PLC-программу, передать её по сети и активировать на устройстве. | |
| Очистить сборку | Удалить результаты локальной сборки. | |
| Списки I/O | Открыть меню сохранённых отладочных листов или создать новый. Работа с листами. | |
| Полный лог | Открыть подробный лог последней сборки или загрузки. |
После подключения к PLC
При подключении очки имеют светло-зелёный фон. Команды Run/Stop/Reset доступны в зависимости от состояния устройства. Две Web-кнопки находятся после печати и отделены разделителями.
| Кнопка | Команда | Как использовать |
|---|---|---|
| Отключиться от ПЛК | Завершить соединение IDE. Это не команда остановки PLC-программы. | |
| Запустить ПЛК | Запустить активную программу из состояния STOP. | |
| Остановить ПЛК | Остановить выполнение PLC-программы. Для продолжения служит команда «Запустить ПЛК», доступная в остановленном состоянии. | |
| Перезапустить ПЛК | Перезагрузить устройство. Связь временно разрывается; после запуска подключитесь снова. |
Сборка, загрузка и очистка блокируются на время активной отладки. Для изменения программы завершите подключение, внесите изменения и выполните загрузку. Кнопки вставки IF/CASE/FOR/WHILE и REGION описаны в разделе ST-редактора.
Создание и сохранение проекта
- Выберите Файл → Новый и укажите пустую папку проекта.
- Откройте
main: шаблон содержит блокBlinkи ресурс с экземпляром программы. - Задайте адрес WT32 и пароль, сохраните проект.
Стартовая программа
D3 мигает через экземпляр Blink. D4 показывает, есть ли хотя бы одна принудительно заданная переменная.
// Мигание D3
clock_500ms(setTime := T#500ms, out => BOARD_LED_D3);
// D4 включён, пока в программе есть активное принуждение
BOARD_LED_D4 := FORCE;| Имя | Класс / тип | Назначение |
|---|---|---|
| clock_500ms | LOCAL / Blink | Экземпляр мигающего блока; setTime — интервал переключения выхода. |
| BOARD_LED_D3 / BOARD_LED_D4 | EXT / BOOL | Управление пользовательскими светодиодами; адрес вручную не задаётся. |
| FORCE | EXT / BOOL | Системный признак активного принуждения. Только чтение; добавление в отладочный лист запрещено. |

Период задачи определяет частоту запуска. Он не равен максимальному времени выполнения. Программа должна быть назначена задаче, а FB — вызван из выполняемого кода.
Для переноса копируйте всю папку: plc.xml — программа, beremiz.xml — настройки, editor_layout.json — компоновка, io_control_lists — отладочные листы, а также дополнительные файлы проекта.
IP-адрес и подключение WT32
1. Адрес самого устройства
Ethernet, Wi-Fi, DHCP и статический IP настраиваются в Web-интерфейсе устройства.
2. Адрес, к которому обращается IDE
В настройках проекта выберите целевую платформу WT32. Укажите один адрес устройства в URI Location и DeviceHost.

| Поле | Пример | Назначение |
|---|---|---|
| URI Location | WT32://192.168.1.20 | Адрес подключения для мониторинга и отладки. |
| DeviceHost | 192.168.1.20 | Адрес устройства без префикса протокола; используется при загрузке. |
| WebPassword | 12345 | Пароль Web-интерфейса устройства. Заводское значение 12345. |
| Целевая платформа | WT32 | Профиль сборки для устройства с ядром Rumiz ESP32. |
После смены IP устройства обновите URI Location и DeviceHost. Адреса Modbus/S7-серверов и MQTT-брокера задаются в соответствующих блоках программы.
POU, функции и типы данных
POU — программный объект: программа, функция или функциональный блок. UDT — созданный пользователем тип данных, например структура с показаниями датчика. В дереве проекта слева вы создаёте и открываете эти объекты.
| Объект | Когда использовать |
|---|---|
| Программа (Program) | Циклическая логика; экземпляр назначается задаче в ресурсе. |
| Функциональный блок (FB) | Логика с собственной памятью. Объявите переменную-экземпляр типа этого FB и вызывайте её из кода. Каждый экземпляр имеет своё состояние. |
| Функция (Function) | Вычисление возвращаемого значения по входным аргументам. |
| Пользовательский тип (UDT) | Структура, массив или псевдоним типа для объявления данных. |
| Конфигурация / ресурс | Глобальные данные, задачи и экземпляры программ. |
Блок и экземпляр различаются. Блок описывает логику, а экземпляр хранит её отдельное состояние. Например, два экземпляра одного таймера отсчитывают время независимо друг от друга.
Один щелчок выбирает объект; двойной щелчок открывает редактор, независимо от открытых вкладок. F2 начинает переименование с выделенным целиком именем. Первый символ заменяет выделенное; Enter подтверждает, Esc отменяет. Ctrl+C на объекте копирует имя.


Обращение к полю структуры: motor.state; к полю элемента массива: motors[0].state.

Объявления и таблицы переменных

| Колонка | Что задаётся |
|---|---|
| Имя | Идентификатор переменной или экземпляра FB. |
| Класс | LOCAL — локальная; IN/OUT/IN_OUT — интерфейс POU; EXT — ссылка на глобальную переменную. |
| Тип | BOOL, INT/UINT, DINT/UDINT, REAL, TIME, UDT, массив или FB. |
| Адрес | Адрес привязки; для обычной локальной переменной оставьте пустым. |
| Исходное | Начальное значение поддерживаемого типа: 1, 10, T#500ms. Белая заблокированная ячейка означает, что единая инициализация здесь недоступна. |
| Квалификатор | Дополнительные свойства объявления, доступные для выбранного класса. |
| Debug | Включение переменной в отладочную карту. После изменения флага пересоберите и загрузите программу. |
| Описание | Назначение переменной. |
Тип можно вводить прямо в ячейку. Правый щелчок открывает выбор типов и операции буфера обмена. Для внешней переменной имя и тип должны совпадать с глобальным объявлением; служебные BOARD_LED_D3, BOARD_LED_D4 и FORCE предоставляются платформой.

Исходное глобальной переменной задаётся у её владельца, не у EXT. Для глобальных переменных RETAIN отключён.
Исходные значения
Колонка Исходное задаёт значение инициализации. Это не текущее значение ПЛК и не Force: изменение начинает действовать после сборки и загрузки соответствующей программы.
| Тип | Пример | Правило |
|---|---|---|
| BOOL | 0, 1, FALSE, TRUE | Логическое значение: только 0/1 или FALSE/TRUE. |
| INT / UINT | -12 / 120 | Учитываются знак и диапазон типа; UINT не принимает отрицательные значения. |
| DINT / UDINT | -100000 / 100000 | Значение должно помещаться в объявленный тип. |
| REAL / LREAL | 23.5 | Десятичный разделитель — точка. |
| BYTE / WORD / DWORD / LWORD | 16#2A | Запись с основанием удобна для битовых масок. |
| TIME | T#2s, T#500ms | Тип времени с единицей измерения, не просто число. |
| DT | DT#2026-09-14-12:00:00 | Дата и время, не длительность. |
| Псевдоним / поддиапазон | Значение базового типа | Проверяется базовый скалярный тип и границы поддиапазона. |
Белые заблокированные ячейки
Нельзя задать единое исходное значение экземпляру FB (TON, Blink и другим), целой структуре, массиву или STRING. Такие поля белые, но не редактируются. У EXT и IN_OUT исходное также недоступно.
У поддерживаемых скалярных полей UDT исходные задаются в редакторе типа. Например, у PumpStatus допустимо Temperature = 23.5, но нельзя записать T#2s в строку всей структуры Status.
Недопустимое значение — ошибка
Случайный текст в UINT, время вместо числа или выход за диапазон препятствуют сборке. Сообщение ошибки объявления позволяет перейти к нужному POU и ячейке. Исправьте значение и соберите заново.
Сохранение данных · RETAIN
RETAIN сохраняет выбранные данные между перезапусками контроллера. У поддерживаемого локального объявления выберите Retain в колонке «Квалификатор», затем пересоберите и загрузите проект.
В учебном примере TotalStarts — UDINT, исходное 7, квалификатор Retain. При наличии подходящего сохранённого состояния восстанавливается оно; иначе используется исходное значение.
- Задайте отличимое значение, например 1234, и проверьте его через мониторинг.
- Снимите Force, если применяли его; логика не должна сразу перезаписывать проверяемую переменную.
- Дайте контроллеру время сохранить данные, перезапустите и снова подключитесь.
- Сравните RETAIN и обычную переменную: последняя после инициализации не обязана сохранять прежнее значение.
Снятие питания и штатная перезагрузка различаются
Фоновое сохранение выполняется с интервалом около 5 секунд; штатная перезагрузка дополнительно сохраняет состояние. После отключения питания восстанавливается последняя записанная копия RETAIN. Перед отключением дождитесь фонового сохранения нужных значений.
Для глобальных переменных выбор RETAIN отключён. Изменение структуры или замена программы — отдельный случай: не используйте RETAIN как единственную резервную копию важных настроек.
MQTT-параметр RETAIN_FLAG хранит сообщение на брокере и не связан с RETAIN переменных ПЛК.
Редактор ST-кода
Автодополнение предлагает имена переменных, поля UDT и параметры экземпляров FB. Для доступа к полям введите точку после имени объекта.

| Кнопка | Команда | Как использовать |
|---|---|---|
| IF | Вставить условие IF…THEN…END_IF. | |
| CASE | Вставить выбор CASE…OF…END_CASE. | |
| FOR | Вставить цикл FOR…DO…END_FOR. | |
| WHILE | Вставить цикл WHILE…DO…END_WHILE. | |
| Комментарий | Вставить многострочный комментарий (* … *). Однострочные // также поддерживаются. | |
| Создать REGION | Выделите строки и нажмите кнопку. Регион объединяет сворачиваемый участок кода. Ctrl+Alt+R. | |
| Удалить REGION | Удалить оболочку региона в текущей строке, сохранив код. Ctrl+Alt+Shift+R. |
Ctrl+F — поиск в текущей области, Ctrl+Shift+F — по проекту. Выбор области поиска.
В логическом контексте допускаются 0 и 1 наряду с FALSE и TRUE: в присваиваниях BOOL, сравнениях, условиях и входах FB. Это не разрешение подставлять любое число вместо BOOL.
Pump(Enable := 1, Temperature := Temperature, SetPoint := 30.0);
IF (Pump.Alarm = 0) AND (Enable = 1) THEN
Counter := Counter + 1;
END_IF;Циклы и сетевой обмен
Ограничивайте число итераций FOR/WHILE. Не ожидайте сетевого ответа внутри цикла ST: протокольные блоки работают асинхронно; результат доступен через их выходы состояния.
Поиск в коде, таблице и проекте
Текущая область · Ctrl+F
- Щёлкните в ST-коде или нужной таблице.
- Нажмите Ctrl+F или первую лупу верхней панели.
- Проверьте «Область поиска»: редактор ST или конкретная таблица.
- Введите запрос. Кнопка «Поиск» переводит к следующему совпадению; направление и дополнительные параметры задаются в этом же окне.


Поиск в таблицах охватывает и вложенные поля пользовательских структур. Если ищете объявление, сначала выберите таблицу, а не область кода.
Заново открытое окно начинает с пустого запроса. Закрытие окна снимает поисковую подсветку; подсветка ошибок компиляции — отдельный механизм.
Локальная замена
В актуальной IDE окно Ctrl+F содержит также замену — в ST и таблицах переменных, типов и глобальных переменных. Поиск начинается от текущего курсора или выбранной ячейки; ручное перемещение меняет начальную позицию. После последовательной замены выделяется следующая цель. При отсутствии совпадений показывается «Совпадений не найдено».
В таблицах действуют обычные проверки значений и штатное переименование с обновлением обращений. Вложенные поля общего типа нельзя менять через таблицу его использования: откройте определение типа. Снимки выше относятся к прежнему виду окна без новых элементов замены.
Весь проект · Ctrl+Shift+F
Вторая лупа запускает поиск в проекте. Он нужен, когда неизвестен блок с нужным именем, описанием или кодом. Результаты появляются на вкладке «Поиск» внизу; двойной щелчок открывает найденное место.
Библиотеки и вставка шаблонов
Панель «Библиотеки» содержит стандартные функции, преобразования типов, таймеры, операции и группу ESP. Меню Вставка POU добавляет готовые пользовательские FB с объявлениями, примером кода и регионом «ОПИСАНИЕ».

Вставленный шаблон становится исходным кодом проекта и не обновляется автоматически при установке новой IDE. При переходе на новую версию сверяйте старый блок со свежим шаблоном, особенно адресацию Modbus.
| Шаблон | Назначение | Настройка |
|---|---|---|
| Modbus RTU Master | Опрос ведомых RS-485 | Modbus RTU |
| Modbus RTU Slave | Предоставление локальных данных мастеру | Modbus RTU |
| Modbus TCP Server | Предоставление данных сетевым клиентам | Modbus TCP |
| Modbus TCP Client | Опрос внешних TCP-серверов | Modbus TCP |
| Siemens S7 Client | Чтение/запись DB S7-контроллера | Siemens S7 |
| MQTT Client | Брокер, публикации, подписки и LWT | MQTT |
| Проверка интернета | TCP-проверка заданного сервера | Сеть и время |
| Время из интернета | Синхронизация NTP | Сеть и время |
Как включить вставленный FB в программу
- Выберите шаблон в меню и задайте имя нового POU.
- Откройте его регион «ОПИСАНИЕ», настройте адреса, периоды, разрешения и диапазоны.
- В main добавьте локальную переменную типа вставленного FB, например
modbus : ModbusTCPClient, и вызовmodbus();в ST-коде. - Соберите и загрузите проект; проверьте статус соединения и каждой операции.
Blink в стартовом проекте переключает выход через заданный setTime. RISE и FALL из ESP обнаруживают фронт и спад сигнала; для TEMP нужна отдельная BOOL-переменная памяти на каждый независимый сигнал.
IF RISE(SIG := command, TEMP := previousCommand) THEN
counter := counter + 1;
END_IF;Сборка и загрузка в контроллер
- Сохраните проект; проверьте URI, DeviceHost и WebPassword.
- Нажмите Собрать. Ошибки и показатели памяти выводятся в консоль.
- Нажмите Загрузить в ESP и дождитесь сообщения «PLC-программа загружена и активирована».
- Подключитесь к PLC, проверьте актуальность и наблюдаемые значения.
| Сообщение / показатель | Что означает |
|---|---|
| Сборка прошла успешно | PLC-пакет сформирован локально. |
| PLC-программа загружена и активирована | Устройство приняло и активировало пакет. |
| PLC-пакет | Размер программы и оставшееся место в лимите пакета. |
| RAM данных | Объём пользовательских данных PLC. Это не вся оперативная память устройства. |
| RAM устройства после активации | Свободная динамическая память и крупнейший свободный блок. |
| activation_no_mem | Недостаточно памяти для активации. Контроллер остаётся в STOP. |
Ограничения памяти
Лимит PLC-пакета — 1 МБ, RAM данных — 33 КБ. Сетевые службы и дополнительные таблицы протоколов расходуют память устройства отдельно; их расход не входит в показатель RAM данных.
При нехватке памяти для запуска появляется сообщение: «ПЛК остановлен: недостаточно оперативной памяти для запуска проекта. Уменьшите размер проекта.» Уменьшите массивы и набор одновременно используемых протокольных служб, затем повторите загрузку.
При передаче нового проекта выполнение старого прекращается. Пока загрузка не завершена, отладка недоступна. Если связь оборвалась, восстановите её, проверьте состояние устройства и повторите загрузку; начало передачи ещё не означает успешную активацию.
Подробности сборки и загрузки доступны по кнопке Полный лог.
Максимальное время цикла и STOP
В Конфигурации → WT32 задаются максимальное время выполнения цикла в миллисекундах и действие при превышении.
| Настройка | Поведение |
|---|---|
| Максимальное время = 0 | Контроль выключен: нет записи о превышении этого лимита и остановки по нему. Это допустимое специальное значение, а не предел 0 мс. |
| Максимальное время > 0 | Длительность выполнения сравнивается с заданным пределом в миллисекундах. |
| Только запись в журнал | Превышение фиксируется, программа продолжает работу. |
| Останов с записью в журнал | ПЛК переходит в STOP, причина фиксируется в журнале. |
Для остановки нужны положительный предел и действие остановки. После изменения настроек пересоберите и загрузите программу. Журнал доступен в Web-интерфейсе устройства.
Период задачи — другая настройка
Период задаёт частоту запуска задачи, а максимальное время — допустимую длительность выполнения. Например, задача запускается каждые 100 мс, обычно исполняется за 8 мс, предел установлен 50 мс: обычный цикл его не превышает.
Период задачи: T#100ms
Максимальное время выполнения: 50 мс
Действие при превышении: выбрать в конфигурацииПодбирайте предел по измерениям своего проекта с запасом на ожидаемую нагрузку. Слишком малое значение приведёт к частым записям или остановкам; 0 полностью отключает контроль.
Состояние STOP подключённого контроллера отображается жирной красной мигающей надписью внизу слева рядом с FORCE. Прежде чем нажать «Запустить», выясните причину остановки.
Подключение и мониторинг
Совместимость IDE и Worker
IDE проверяет, установлен ли совместимый Worker Beremiz перед работой с устройством. При несовместимости подключение, отладка, управление и загрузка PLC-программы запрещаются; причина выводится в консоль на русском синим цветом.
Установите через Web-интерфейс соответствующий Worker из папки firmware вашего комплекта Beremiz. Пересоберите и загрузите PLC-проект. Worker Remote COM / конвертер Modbus TCP ↔ RTU не заменяет Worker Beremiz.
Открытие значений
- Убедитесь, что на устройстве активна нужная PLC-программа.
- Нажмите «Подключиться к ПЛК» — кнопку со значком очков. После подключения у значка светло-зелёный фон.
- В дереве экземпляров выберите выполняемый экземпляр программы или FB и откройте его отладочный просмотр через значок очков.
- Наблюдайте значения в ST-просмотре или отладочном листе.
| Режим | Что доступно |
|---|---|
| Редактирование | Изменение объявлений и ST-кода, сборка и загрузка. |
| Подключение к PLC | Состояние устройства, команды Run/Stop/Reset, сравнение актуальности объектов. |
| Отладочный просмотр экземпляра | Текущие значения конкретного экземпляра, цветовое отображение BOOL и наблюдение числовых значений. |
| I/O Control | Выбранный набор переменных, принудительные значения и группировка строк. |
В ST-мониторинге BOOL обозначаются цветом; числовые значения показываются рядом с именем. Звёздочка перед отладочным значением означает принуждение. Если значение недоступно, проверяйте Debug в объявлении, выбранный экземпляр и совпадение программы с контроллером.
Если программа не совпала
Подключение может показать состояние PLC и индикаторы актуальности, даже когда локальная программа отличается. Сообщение «Latest build does not match» означает, что значения переменных нельзя надёжно сопоставить с открытым на компьютере кодом. Сначала загрузите нужный проект либо откройте соответствующий проект на компьютере.
При обрыве связи
IDE выходит из отладки, значения отображаются как N/A. После восстановления сети повторно нажмите кнопку подключения.
Нагрузка канала в нижней строке показывает нагрузку отладочного обмена, а не загрузку CPU PLC. Если она растёт, уменьшите число наблюдаемых переменных, закройте лишние листы и отладочные вкладки.
Выбор Debug и наследование
Колонка Debug определяет, какие переменные включать в отладочные данные PLC-программы. Изменение выбора требует новой сборки и загрузки: уже работающий пакет сам от щелчка не меняется.
Блок и его экземпляр
В объявлении блока задаётся исходный выбор. В месте использования экземпляра можно переопределить его отдельно — другой экземпляр этого же блока не обязан иметь такой же выбор.
| Вид ячейки | Значение |
|---|---|
| Бледная галочка | Собственного значения нет; от блока наследуется «включено». |
| Бледный пустой квадрат | Собственного значения нет; от блока наследуется «выключено». |
| Контрастная галочка | Для экземпляра явно включено. |
| Контрастный пустой квадрат | Для экземпляра явно выключено. |
| Смешанное состояние составного поля | Вложенные элементы выбраны не одинаково. |
Собственное значение экземпляра имеет приоритет над наследованием. Поэтому просто снять галочку — значит явно выключить Debug, а не вернуться к настройке блока.
Изменить или вернуть наследование
- Раскройте экземпляр в таблице объявлений.
- Щелчком или пробелом задайте собственное значение.
- Чтобы убрать переопределение, выделите ячейку Debug и нажмите Delete.
- Для составного поля сбрасываются также вложенные переопределения.
Чтобы открыть подсказку по управлению флажками, наведите курсор на заголовок колонки Debug.

Раскрытие структур и блоков
Открытый треугольник раскрытия в таблице подсвечивается ярко-синим. Это обозначение раскрытой строки, а не признак включённой отладки.

После изменения выбора
Сохраните проект, завершите подключение отладки, соберите и загрузите программу, затем подключитесь снова. Выбор Debug учитывается при проверке актуальности. Не включённая в пакет переменная не становится доступной для наблюдения только от добавления её в отладочный лист.
См. также: подключение и мониторинг, листы I/O Control.
Актуальность блоков и UDT
При подключении слева от программных объектов и пользовательских типов появляются признаки сравнения с активной программой контроллера. Так можно заметить, что проект на компьютере отличается от программы, которая сейчас выполняется на устройстве.
Причина состояния показана в подсказке объекта. После отключения индикаторы сравнения с ПЛК исчезают.
| Обозначение | Состояние | Что делать |
|---|---|---|
| Актуален | Код, объявления и зависимости совпадают с активным PLC-пакетом. | |
| Изменён объект | Отличается собственное содержимое: код, объявление, описание, комментарий или пробел. | |
| Изменилась зависимость | Сам объект тот же, но изменился используемый FB, функция, UDT или другая зависимость, в том числе вложенная. | |
| Отсутствует в PLC | Объект есть в локальном проекте, но отсутствует в метаданных активного пакета. | |
| Нет достоверных данных | Пакет не содержит нужных сведений либо сравнение этого объекта не поддерживается. |
Какие изменения учитываются
Выбор Debug, включая переопределения в экземпляре, также учитывается при сравнении программы. Для нового выбора требуется собрать и загрузить новый пакет.
Индикатор возле имени проекта объединяет актуальность его блоков и типов: изменение объекта видно даже при свёрнутом дереве. Это не проверка совпадения всех настроек портов, подключения или конфигурации устройства.
| Изменение | Сам объект | Его потребители |
|---|---|---|
| Описание POU, переменной или поля UDT | Изменён | Остаются актуальными, если других отличий нет. |
| Комментарий, пробел, перенос строки, оформление REGION | Изменён | Не меняются при неизменном смысле кода. |
| Исполняемый код, структура/тип данных, значимое исходное значение | Изменён | Изменение зависимости распространяется по используемой цепочке. |
| Размер окна или ширина колонки | Не меняется | Не меняются. |
Правило одинаково для функций, функциональных блоков, программ и пользовательских типов. Описание типа влияет на актуальность самого типа, но не его неизменённых потребителей. Старый пакет без сведений о точном исходном содержимом нужно пересобрать и загрузить новой IDE.
Пример: UDT «Датчик» используется внутри UDT «Узел», тот — в FB «Линия», а FB вызывается из main. Изменение типа поля «Датчика» затрагивает всю эту цепочку. Независимый блок остаётся актуальным.
Как актуализировать программу
Сохраните изменения, отключитесь от отладки, загрузите программу и подключитесь снова.
Отладочные листы I/O Control
Отладочный лист — сохранённый список переменных для наблюдения и проверки. Соберите в нём, например, команды и состояния одного насоса, чтобы видеть их вместе, не переключаясь между блоками.
Создать лист и добавить переменные
- Нажмите Списки I/O и создайте лист с понятным именем.
- Откройте нужный экземпляр программы в левом нижнем дереве. Раскройте FB, UDT или массив до конкретной переменной.
- Перетащите переменную из дерева экземпляров в окно листа.
- Расположите строки и разделители, затем нажмите Save.
Состав листа можно готовить без подключения. Сохранённые листы, их переименование и удаление доступны через Списки I/O.

| Элемент | Действие |
|---|---|
| Save | Сохранить состав, порядок строк и комментарии. Звёздочка означает несохранённые изменения. |
| Маркер :: | Перетащить строку или разделитель на другое место. |
| Separator + | Добавить разделительную линию. |
| Маленькая ручка | Редактировать комментарий переменной или подпись разделителя. |
| Белое поле | Ввести желаемое значение для Force; сам ввод ещё не применяет принуждение. |
| Поле фактического значения | Значение от контроллера; ширина соответствует полю ввода. |
| Force / ON/OFF | Применить принуждение числа / BOOL. |
| Release | Снять принуждение. |
| X | Удалить строку вместе с её комментарием. |
Комментарии и подписи разделителей
Нажмите ручку рядом с переменной или на разделителе, введите текст и подтвердите OK. Комментарий переменной отображается зелёным. Точечные линии между подписью и полями сохраняются.

Корзина в конце поля очищает текст, не закрывая окно. OK применяет изменение, Cancel отменяет. После подтверждения нажмите Save в листе.
Комментарий принадлежит переменной
Перестановка строк не переносит комментарий к соседям. При удалении переменной из листа комментарий удаляется. Если переименовать объект командой IDE, его строки остаются связанными с ним. Удаление объекта и создание нового с тем же именем не равнозначно переименованию. После изменения проекта сохраните лист и проверьте его состав перед применением Force.
Двойной щелчок по имени переменной открывает выбор цвета имени. Комментарий остаётся зелёным. Сохраните оформление кнопкой Save.
Принуждение значений · Force
Force удерживает переменную в заданном значении вместо результата PLC-логики до снятия принуждения командой Release.
- Подключитесь к соответствующей программе PLC и откройте лист.
- Для числовой переменной введите значение подходящего типа и нажмите Force. Для BOOL используется ON/OFF.
- Проверьте состояние строки и красную надпись FORCE в строке состояния IDE.
- По окончании проверки нажмите Release у принудительно заданных переменных.
| Элемент | Значение |
|---|---|
| Force / ON/OFF | Принудительно задать числовую переменную / BOOL. |
| Release | Снять принуждение; дальнейшее значение задаёт обычная логика программы. |
| Красная надпись FORCE | На контроллере есть хотя бы одна переменная с принудительным значением. |
| Служебная FORCE | BOOL только для чтения. Её нельзя присваивать, принуждать или добавлять в отладочный лист. |
| BOARD_LED_D4 := FORCE | В стартовом проекте D4 повторяет общий признак принуждения. |
Завершение проверки
Закрытие листа не снимает Force. После обрыва связи восстановите соединение, проверьте флаг FORCE и снимите принуждение командой Release.
Modbus: функции и адресация
Modbus позволяет читать показания и записывать команды в приборы. Перед настройкой найдите в руководстве прибора таблицу регистров: нужные адреса, типы данных и разрешённые операции. FC — код операции; транзакция — один настроенный запрос чтения или записи.
| FC | Операция | Количество за запрос |
|---|---|---|
| 01 / 02 | Чтение Coils / Discrete Inputs | 1–2000 бит |
| 03 / 04 | Чтение Holding / Input Registers | 1–125 регистров |
| 05 / 06 | Запись одного Coil / Holding Register | 1 элемент |
| 15 / 16 | Запись нескольких Coils / Holding Registers | 1–1968 бит / 1–123 регистра |
| 22 | Масочная запись Holding Register (AND_MASK, OR_MASK) | 1 регистр |
| 23 | Запись и чтение Holding Registers одним запросом | Запись: 1–121; чтение: 1–125 регистров |
Задавайте FC явно по таблице. Если используется FC = 0, операция определяется параметром MODE: 0 — FC03, остальные значения — FC16.
Адреса начинаются с нуля
В REMOTE_START и SLAVE_START задаётся адрес протокола. Первому Holding Register «40001» обычно соответствует адрес 0; нумерацию уточняйте в руководстве прибора.
| AREA | Область | Доступ по Modbus |
|---|---|---|
| 0 | Coils — дискретные команды | Чтение и запись |
| 1 | Discrete Inputs — дискретные состояния | Чтение |
| 2 | Holding Registers — регистры | Чтение и запись |
| 3 | Input Registers — измерения | Чтение |
Ограничение «только чтение» относится к удалённому Modbus-клиенту. PLC-программа заполняет свои DI и IR. Один регистр — 16 бит; для REAL/DINT согласуйте с прибором порядок двух регистров и преобразование данных.
Буферы, битовые области и составная транзакция
Coils и DI упакованы по 16 бит в слово. Для бита N: индекс слова N / 16, маска SHL(WORD#1, N MOD 16). Удобнее обращаться по номеру бита через RS485_MB_TABLE_RW или MBTCP_TABLE_RW.
В FC23 чтение задают REMOTE_START (в RTU — SLAVE_START), BUF_START, TR_LEN. Запись задают отдельно: WRITE_REMOTE_START, WRITE_BUF_START, WRITE_LEN. Оба диапазона обязаны помещаться в таблицы.
FC22 использует AND_MASK и OR_MASK. Новое значение регистра: (старое AND AND_MASK) OR (OR_MASK AND NOT AND_MASK).
Диагностика транзакций: STATUS и ERR_CODE
| STATUS | Значение |
|---|---|
| 0 | Ожидание или транзакция отключена. |
| 1 | Обмен выполнен успешно. |
| 2 | Тайм-аут: нет ответа за SET_TIMEOUT. |
| 3 | Недопустимый адрес (Illegal Address). |
| 4 | Повреждённый либо несогласованный ответ. |
| 5 | Внутренняя или другая ошибка. |
| 10 | Illegal Function — устройство не поддерживает функцию. |
| 11 | Illegal Data Value — недопустимое значение. |
| 12 | Slave Device Failure — отказ устройства. |
| 13 | Acknowledge — запрос принят, обработка не завершена. |
| 14 | Slave Device Busy — устройство занято. |
| 15 | Memory Parity Error. |
| 16 | Gateway Path Unavailable. |
| 17 | Gateway Target Failed to Respond. |
| 18 | Выбранный интерфейс недоступен. |
После успешной настройки при STATUS 0/1 значение ERR_CODE равно 0; при ошибке обмена ERR_CODE повторяет STATUS. До регистрации транзакции ERR_CODE относится к проверке параметров:
| ERR_CODE | Причина |
|---|---|
| 0 | Параметры приняты |
| 1 | Нет свободного слота транзакции |
| 2 | Неверный PORT (RTU) или CLIENT_ID (TCP) |
| 3 | Неподдерживаемый FC |
| 4 | Неверный SLAVE_ID / UNIT_ID или недопустимый broadcast |
| 5 | Нулевая длина |
| 6 | BUF_START вне таблицы |
| 7 | Локальный диапазон вышел за таблицу |
| 8 | Превышен предел функции Modbus |
| 9 | Неверные WRITE_* параметры FC23 |
Ведомый/сервер возвращает Modbus exception: 01 — функция, 02 — адрес, 03 — длина/значение, 04 — внутренняя ошибка. Это коды ответа протокола, их не следует путать с STATUS блока.
Modbus RTU · Master / Slave
Master (мастер) отправляет запросы приборам, Slave (ведомый) отвечает на запросы. Выберите Master, чтобы WT32 опрашивал, например, счётчик. Выберите Slave, чтобы другой контроллер получал данные WT32.
На одной физической линии RS-485 работает один мастер. Устройства должны иметь одинаковые параметры линии и разные адреса ведомых.
| Параметр | Настройка |
|---|---|
| PORT | Логический порт: 1 = A, 2 = B. Доступные линии зависят от аппаратного исполнения. |
| BAUD / DATA_BITS / PARITY / STOP_BITS | Например 57600 / 8 / 0 / 1 = 57600 8N1. PARITY: 0 — нет, 1 — чётная, 2 — нечётная. Параметры одинаковы у всех участников линии. |
| MASTER_EN / SLAVE_EN | Включение нужной роли на порту. На одной линии работает один мастер. |
| SLAVE_ID | Адрес ведомого 1–247. В транзакции мастера 0 — broadcast только для FC05/06/15/16/22, без ответа. |
| READ_FREQ_MS / WRITE_FREQ_MS | Периоды циклических чтений и записей мастера, в мс. |
| SLAVE_START / BUF_START / TR_LEN | Удалённый адрес / локальное начало / число битов или регистров транзакции. |
| SET_TIMEOUT | Ожидание ответа на транзакцию, в мс. |
| SLAVE_START / SLAVE_LEN у Slave | Первый внешний адрес и длина доступного окна; его начало отображается в локальный индекс 0. |
| FORCE_TAKEOVER / CLEAR_STATUS | Запрос на применение режима порта / импульс сброса сохранённого статуса. FORCE_TAKEOVER не связан с принудительными значениями отладчика. |
Мастер: опрос внешнего прибора

- Вставьте Modbus RTU Master, объявите экземпляр этого FB в main и вызывайте его каждый цикл.
- В вызове
RS485_MB_MASTERзадайте линию и периоды. - Для каждого диапазона добавьте экземпляр
RS485_MB_ADD_TR. Задайте FC, адрес ведомого, удалённый и локальный диапазоны. - После загрузки проверяйте APPLIED/ERROR у мастера и STATUS у каждой транзакции. Успешное чтение обновляет локальный буфер.
Ведомый: доступ к данным вашего PLC
Где задаётся адрес ведомого
В RS485_MB_SLAVE параметр SLAVE_ID — собственный адрес вашего ведомого. В RS485_MB_ADD_TR это адрес внешнего прибора, который опрашивает мастер. CLIENT_ID из Modbus TCP — номер соединения, не адрес RTU-прибора.
- Вставьте Modbus RTU Slave, задайте линию, уникальный SLAVE_ID и адресное окно.
- Заполняйте в программе локальные таблицы MB_A_* (или MB_B_*). Подключите внешний мастер с теми же параметрами линии.
- Для проверки начните с FC03 и одного регистра. Затем добавьте нужные области Coils, DI и IR.
Ёмкость таблиц и статусы RTU
Мастер располагает 8 слотами транзакций. На порт: MB_A_HR[0..255], MB_A_IR[0..255], MB_A_COILS[0..124] и MB_A_DI[0..124] (по 2000 бит). Для B — префикс MB_B_. Запрос должен помещаться одновременно в адресное окно и в таблицу выбранной области.
Для RS485_MB_TABLE_RW задайте PORT, AREA и INDEX — локальный номер бита/регистра.
| Поле | Расшифровка |
|---|---|
| ERR_CODE Master/Slave | 0 — норма; 3 — линия/адрес; 5 — внутренняя ошибка; 18 — RS-485 занят другим режимом; 65535 — неверный PORT. |
| STATUS_WORD (hex) | 0001/0002 — применён A/B; 0004/0008 — ошибка A/B; 0040/0080 — A Master/Slave; 0100/0200 — B Master/Slave; 0400/0800 — настроен A/B. Маски 0010/0020 зарезервированы. |
| APPLIED / ERROR | Относятся к выбранному PORT, а STATUS_WORD содержит общие биты обоих портов. |
Modbus TCP · Client / Server
Modbus TCP передаёт запросы по Ethernet или Wi-Fi. Client (клиент) обращается к другому устройству, Server (сервер) отвечает на запросы. Используйте клиент для чтения показаний сетевого прибора, сервер — для доступа внешней программы к данным WT32.
| Параметр | Настройка |
|---|---|
| CLIENT_ID | Независимый канал 0–3; у клиента и его транзакций должен совпадать. |
| IP1..IP4 / TCP_PORT | Адрес удалённого сервера по октетам / порт; 0 или 502 означает стандартный порт 502. |
| INTERFACE | AUTO (0) — сначала доступный Ethernet, затем Wi-Fi; ETH (1) — Ethernet; WIFI (2) — Wi-Fi. |
| UNIT_ID | Идентификатор Modbus 0–255. Для шлюза TCP↔RTU обычно соответствует адресу RTU-ведомого. |
| READ_FREQ_MS / WRITE_FREQ_MS | Периоды чтения/записи выбранного канала, мс. |
| REMOTE_START / BUF_START / TR_LEN | Первый адрес сервера / абсолютный индекс общего клиентского буфера / число элементов. |
| SET_TIMEOUT | Ожидание ответа транзакции, мс. |
| MAX_CLIENTS у Server | Число одновременных подключений: от 1 до 6, по умолчанию 2. Увеличение требует дополнительной RAM. |
| SLAVE_START / SLAVE_LEN у Server | Внешнее адресное окно сервера; его начало соответствует локальному индексу 0. |
Клиент: читать или записывать внешний сервер

- Вставьте Modbus TCP Client. В
MBTCP_CLIENTзадайте CLIENT_ID, IP, порт и интерфейс. - Настройте экземпляры
MBTCP_ADD_TR: одинаковый CLIENT_ID, нужные FC, UNIT_ID и диапазоны. - Вызывайте FB из main. После загрузки проверьте
CONNECTEDиSTATUS = 1у транзакций. - Чтение обновляет MBTCP_C_*. Для записи сначала заполните локальный буфер; обмен выполнится автоматически по заданному периоду.
// Пример внутри вставленного ModbusTCPClient.
tcpClient(CLIENT_ID := 0, ENABLE := TRUE,
IP1 := 192, IP2 := 168, IP3 := 1, IP4 := 50,
INTERFACE := AUTO, TCP_PORT := 502,
READ_FREQ_MS := 100, WRITE_FREQ_MS := 200,
CLEAR_STATUS := FALSE);
tcpRead(CLIENT_ID := 0, ENABLE := TRUE, FC := 3,
UNIT_ID := 1, REMOTE_START := 0,
BUF_START := 0, TR_LEN := 5, SET_TIMEOUT := 500);
// Результат: общие MBTCP_C_HR[0..4].CLIENT_ID — не UNIT_ID / SLAVE_ID
CLIENT_ID в MBTCP_CLIENT выбирает соединение 0–3; у его MBTCP_ADD_TR укажите тот же номер. Адрес устройства Modbus задаётся отдельно: UNIT_ID в MBTCP_ADD_TR. Для шлюза TCP↔RTU это обычно адрес ведомого за шлюзом. В RTU он называется SLAVE_ID.
Общие буферы всех TCP-клиентов
| Область | Ёмкость | Адресация |
|---|---|---|
| MBTCP_C_HR / MBTCP_C_IR | По 512 UINT: [0..511] | BUF_START и INDEX — абсолютный номер регистра. |
| MBTCP_C_COILS / MBTCP_C_DI | По 8000 бит, упакованных в 500 UINT | BUF_START и INDEX — номер бита; прямой доступ к массиву — номер слова. |
Клиенты используют общие таблицы данных, без автоматического разделения на участки. Один клиент может использовать всю таблицу. Пользователь сам исключает пересечения диапазонов всех чтений и записей, включая WRITE_BUF_START у FC23.
// Два независимых соединения, одна таблица результатов:
// LOGO, CLIENT_ID=0: BUF_START=0, TR_LEN=11 -> MBTCP_C_HR[0..10]
// Датчик, CLIENT_ID=1: REMOTE_START=30, BUF_START=30, TR_LEN=1
// Результат датчика -> MBTCP_C_HR[30], НЕ [158].После обновления старого проекта
Общие буферы поддерживаются начиная с Worker Beremiz 1.1.160. Для текущего комплекта используйте Worker 1.1.211 и пересоберите проект в IDE 1.1.69. Проверьте смещения: CLIENT_ID не прибавляет собственный диапазон. Ёмкость общей таблицы не отменяет предельную длину одного запроса FC.
Сервер: предоставить данные вашего PLC

- Вставьте Modbus TCP Server, задайте TCP_PORT, UNIT_ID и окно данных в
MBTCP_SERVER. - Заполняйте MBTCP_S_* из программы. Удалённому клиенту задайте IP вашего устройства и порт сервера.
- Сервер принимает подключения через Ethernet и Wi-Fi; число одновременных соединений задаёт
MAX_CLIENTS(по умолчанию 2, от 1 до 6). Учитывайте общую нагрузку программы и остальных протоколов, проверяйте фактическую RAM в мониторинге.
Ёмкость таблиц, переподключение и диагностика TCP
Клиент: 4 соединения, до 8 транзакций на соединение, всего 32. HR, IR, Coils и DI общие для всех соединений.
Сервер: MBTCP_S_HR[0..511], MBTCP_S_IR[0..511], Coils/DI по 2000 бит. SLAVE_LEN не больше 2000, но HR/IR всё равно ограничены 512 регистрами.
MBTCP_TABLE_RW: SIDE = 0 — сервер, SIDE = 1 — клиент. AREA выбирает область, INDEX — абсолютный индекс её таблицы. CLIENT_ID не выбирает отдельный диапазон памяти.
При обрыве связи клиент восстанавливает соединение, пока ENABLE = TRUE. В ETH/WIFI альтернативный интерфейс не выбирается. Состояние соединения — CONNECTED, результат последней транзакции — STATUS.
| Блок | Расшифровка |
|---|---|
| MBTCP_CLIENT · STATUS_WORD (hex) | 0001 — применён; 0002 — ошибка; 0004 — соединение; 0008 — настроен. Биты относятся к CLIENT_ID. |
| MBTCP_CLIENT · ERR_CODE | 0 — норма; 2 — тайм-аут; 3 — IP/адрес; 4 — ответ; 5 — сеть/внутренняя ошибка; 6 — CLIENT_ID; 7 — INTERFACE; 18 — интерфейс недоступен. |
| MBTCP_SERVER · STATUS_WORD (hex) | 0001 — сервер применён; 0002 — клиент применён; 0004/0008 — ошибка сервера/клиента; 0010 — сервер запущен; 0020 — клиент подключён; 0040/0080 — сервер/клиент настроен. Клиентские биты общие: хотя бы один канал. |
| MBTCP_SERVER · ERR_CODE | 0 — норма; 3 — нулевая длина окна; 5 — ошибка сокета, привязки порта, listen или внутренняя ошибка. |
Siemens S7 Client

Шаблон Siemens S7 Client содержит соединение S7_CLIENT и транзакции S7_ADD_TR. WT32 читает и записывает данные внешнего контроллера Siemens S7. DB — блок данных в памяти S7-контроллера; его номер и расположение нужных значений уточните в проекте этого контроллера.
- В настройках S7-контроллера разрешите PUT/GET и используйте DB с отключённым оптимизированным доступом.
- Вставьте шаблон, задайте IP контроллера, порт 102, RACK и SLOT. Для S7-1200 в примере используются 0 и 1.
- У транзакции задайте DB_NUMBER, MODE (0 — чтение, 1 — запись), REMOTE_START, BUF_START, TR_LEN и SET_TIMEOUT.
- Разрешите соединение флагом
s7Enable. Запись в шаблоне включается отдельно —s7WriteEnable.
Адресация S7
REMOTE_START — смещение в DB в байтах. TR_LEN — число UINT по два байта. Буфер S7_C_BYTES имеет тип UINT. Например, REMOTE_START = 4 и TR_LEN = 2 — чтение четырёх байт DB, начиная с байта 4.
| Поле | Назначение |
|---|---|
| CLIENT_ID / INTERFACE | Канал 0–3 / AUTO, ETH или WIFI. До 8 транзакций на клиента. |
| READ_FREQ_MS / WRITE_FREQ_MS | Периоды чтения/записи; в шаблоне 100 / 500 мс. |
| S7_C_BYTES[0..511] | Общий UINT-буфер; каждому клиенту соответствует участок по 128 элементов. BUF_START задаётся внутри канала. |
| CONNECTED / STATUS / ERR_CODE | Соединение / результат отдельной транзакции / причина ошибки. |
Статусы S7
| STATUS | Значение |
|---|---|
| 0 / 1 | Ожидание / успешно |
| 2 / 3 / 4 / 5 | Тайм-аут / адрес / ответ / другая ошибка |
| 18 | Интерфейс недоступен |
| 20 | Не установлено TCP-соединение |
| 21 | Ошибка ISO-on-TCP / COTP |
| 22 | Не согласован S7-сеанс |
| 23 | S7-контроллер вернул ошибку операции |
| 24 | Операция S7 не поддерживается |
S7_CLIENT: STATUS_WORD 16#0001 — применён, 0002 — ошибка, 0004 — соединение, 0008 — настроен. ERR_CODE 6 — CLIENT_ID, 7 — INTERFACE. У транзакции ERR_CODE = 0 при STATUS 0/1, иначе повторяет ошибочный STATUS; ERR_CODE = 1 при нехватке слотов.
MQTT · публикации, подписки, LWT

MQTT передаёт сообщения через брокер — сервер, который принимает и доставляет их подписчикам. Топик — имя канала сообщений, например boiler/temperature. Публикация отправляет значение в топик, подписка получает его.
Шаблон MQTT Client объединяет MQTT_CLIENT, MQTT_PUBLISH и MQTT_SUBSCRIBE. У связанных блоков одинаковый CLIENT_ID. Доступны два клиента (0–1), до 8 публикаций и до 8 подписок.
- Укажите брокер: URL вида
mqtt://host:1883, DNS-имя HOST либо IP1..IP4. Приоритет: URL → HOST → IP; порт в URL имеет приоритет над TCP_PORT. - Выберите INTERFACE и задайте USERNAME/PASSWORD, если брокер требует авторизацию. При пустом CLIENT_NAME устройство формирует имя по MAC.
- Для публикации задайте TOPIC, PAYLOAD, QOS (0/1), RETAIN_FLAG. ENABLE запускает отправку при включении, фронте FALSE → TRUE и изменении параметров публикации.
- Для подписки задайте TOPIC, QOS и ENABLE. Последнее принятое сообщение доступно на выходе PAYLOAD.
| Параметр | Назначение |
|---|---|
| KEEPALIVE_SEC | 10–600 секунд: допустимый интервал тишины соединения. |
| RECONNECT_MS | Пауза перед повторным подключением, мс. |
| CLEAN_SESSION | TRUE — начать чистую сессию. |
| RETAIN_FLAG | Сохранить последнюю публикацию на брокере для новых подписчиков. |
| WILL_ENABLE / WILL_TOPIC / WILL_PAYLOAD | Включение Last Will, топик и сообщение при аварийной потере связи. |
| WILL_QOS / WILL_RETAIN | QoS 0/1 и сохранение Last Will на брокере. |
| CLEAR_STATUS | Импульс TRUE для сброса сохранённого кода ошибки. |
Статус online / offline через LWT
RETAIN_FLAG и WILL_RETAIN относятся к брокеру, а не к энергонезависимой памяти PLC-переменных.
Задайте WILL_PAYLOAD = offline и WILL_RETAIN = TRUE. В тот же топик публикуйте online, связав ENABLE публикации с mqttClient.CONNECTED. При потере клиента брокер отправит offline; задержка обнаружения зависит от Keep Alive.
// Одинаковый топик у Will и обычной публикации:
// wt32/<ID_вашего_устройства>/service/status
// MQTT_CLIENT: WILL_ENABLE := TRUE,
// WILL_PAYLOAD := 'offline', WILL_RETAIN := TRUE
mqttPubStatus(CLIENT_ID := 0,
ENABLE := mqttClient.CONNECTED,
TOPIC := 'wt32/device01/service/status',
PAYLOAD := 'online', QOS := 0, RETAIN_FLAG := TRUE);В шаблоне используется mqtt:// без шифрования TLS. Подключайтесь через доверенную сеть или защищённое сетевое соединение.
Статусы MQTT
| ERR_CODE | Значение |
|---|---|
| 0 / 1 | Ожидание или нет ошибок / операция успешна |
| 2 | Ожидание сети |
| 3 / 4 | Не удалось подключиться / брокер отклонил соединение |
| 5 / 6 | Ошибка сокета / протокола |
| 7 | Недопустимая конфигурация |
| 8 / 9 | Тайм-аут / клиент не подключён |
STATUS публикации/подписки: 0 — ожидание/отключено; 1 — успешно; 2 — выполняется; 3 — нет подключения; 4 — тайм-аут; 5 — ошибка операции; 6 — конфигурация. Если закончились слоты, ERR_CODE = 1 при STATUS = 0 — это не успех.
STATUS_WORD клиента (hex): 0001 — применён, 0002 — ошибка, 0004 — соединение, 0008 — настроен. Биты относятся к выбранному CLIENT_ID.
Проверка сети и время NTP
Проверка интернета · INTERNET_CHECK
Вставьте «Проверка интернета», чтобы программа могла реагировать на потерю связи с нужным сервером. Блок проверяет доступность указанного IP-адреса и TCP-порта, не задерживая выполнение остальной программы.
ONLINE подтверждает доступность выбранной цели, не всего интернета. Если проверяемый сервис не отвечает, проверьте его адрес и порт, а не только состояние кабеля или Wi-Fi.
| Параметр | Значение |
|---|---|
| ENABLE / INTERFACE | Разрешение проверки / AUTO, ETH или WIFI. |
| IP1..IP4 / TCP_PORT | Проверяемый сервер и открытый TCP-порт. |
| CHECK_FREQ_MS | Период не менее 10000 мс. |
| TIMEOUT_MS | Тайм-аут одной проверки. |
| ONLINE / CHECKING | Цель доступна / выполняется проверка. |
Время из интернета · INTERNET_TIME

NTP — протокол получения точного времени от сетевого сервера. Вставьте «Время из интернета». Задайте основной и два резервных NTP-сервера, интерфейс, TIMEOUT_MS и период SYNC_INTERVAL_MS (не менее 15000 мс). TZ_OFFSET_MIN = 180 задаёт UTC+3. Стандартный UDP-порт — 123.
При SYNCED = TRUE время доступно через YEAR, MONTH, DAY, HOUR, MINUTE, SEC и NOW_DT.
Статусы проверки сети и времени
| Блок | ERR_CODE |
|---|---|
| INTERNET_CHECK | 0 — ожидание; 1 — успешно; 2 — проверка; 3 — интерфейс недоступен; 4 — тайм-аут; 5 — TCP-соединение не установлено; 7 — конфигурация. |
| INTERNET_TIME | 0 — ожидание; 1 — успешно; 2 — ожидание сети; 3 — тайм-аут; 4 — все NTP-серверы недоступны; 5 — DNS; 6 — некорректный NTP-ответ; 7 — конфигурация. |
STATUS_WORD (hex) обоих блоков: 0001 — применён, 0002 — ошибка, 0010 — настроен. Для INTERNET_CHECK: 0004 — ONLINE, 0008 — CHECKING. Для INTERNET_TIME: 0004 — SYNCED, 0008 — ожидание сети/ответа.
Диагностика и частые вопросы
Переход от сообщения к исходному месту
Двойной щелчок по ошибке ST в консоли открывает нужный блок и строку; ошибка объявления ведёт к таблице и ячейке, даже если открыт другой POU. Исправьте данные и повторите сборку. После исправления подсветка объявления снимается.
У сетевого отказа, несовместимого Worker или нехватки памяти при активации нет строки ST: проверяйте настройки, версии и журнал устройства.
| Симптом | Что проверить |
|---|---|
| Не подключается к PLC | Web-доступность устройства, URI/DeviceHost, пароль, запущенный Worker Beremiz и активную PLC-программу. |
| Несовместимый Worker | Установите Worker Beremiz из firmware вашего комплекта IDE, затем пересоберите и загрузите проект. |
| Нет записи о превышении при лимите 0 | 0 выключает контроль. Нужны положительный предел, выбранное действие и загрузка пересобранного проекта. |
| Белое поле «Исходное» не редактируется | У этого типа или класса единая инициализация не поддерживается. Скалярные поля структуры задаются в редакторе типа. |
| Перемешались данные Modbus TCP клиентов | BUF_START/TR_LEN всех клиентов: буферы общие, автоматического разделения нет. |
| Не ищет в таблице | Щёлкните таблицу до Ctrl+F и проверьте область поиска в окне. |
| Latest build does not match | Открыт ли проект, соответствующий программе PLC. Если нужен локальный вариант — выполните его сборку и загрузку. |
| N/A вместо значения | Связь, совпадение программы, конкретный экземпляр и Debug в объявлении. |
| Объект оранжевый, хотя его не редактировали | Зависимости: используемые FB, функции, UDT, массивы и глобальные объявления. |
| Серый вопрос у актуальности | Поддержку метаданных текущими версиями IDE/Worker и наличие сведений в активном пакете. |
| Нет значения Modbus / S7 | CONNECTED, затем STATUS отдельной транзакции; далее адрес, длину, локальный буфер и тайм-аут. |
| Соединение есть, но прибор возвращает ошибку | FC и разрешённую область, нумерацию с нуля, UNIT_ID/SLAVE_ID и предел длины запроса. |
| MQTT подключён, но нет новой публикации | TOPIC, CLIENT_ID, фронт ENABLE или изменение PAYLOAD/параметров публикации. |
| Внешняя переменная не найдена | Глобальное объявление, точное имя и совпадение типов с EXT. |
| Недостаточно RAM / activation_no_mem | Размер массивов, структур и таблиц; показатели сборки и свободную RAM устройства. |
Для диагностики зафиксируйте версии IDE и Worker, последнее выполненное действие, полный лог и точный STATUS/ERR_CODE проблемного блока. Встроенный регион «ОПИСАНИЕ» шаблона содержит расшифровки для его версии.
Рабочий порядок
- Перед загрузкой проверьте адрес устройства и параметры обмена. Соберите проект и убедитесь, что программа помещается в доступную память.
- После загрузки подключитесь к устройству, проверьте индикаторы актуальности, значения переменных и STATUS операций обмена.
- Перед завершением отладки снимите принудительные значения кнопкой Release. Сохраните отладочные листы и резервную копию папки проекта.
Настройка Ethernet, Wi-Fi, пароля, лицензии и обновление Worker описаны отдельно в инструкции к Web-интерфейсу. Удалённый COM-порт и преобразование Modbus TCP ↔ RTU — в инструкции Remote COM / конвертер Modbus TCP ↔ RTU.
Что нового в 1.1.69
Актуальный опубликованный комплект: Beremiz IDE 1.1.69 + Worker Beremiz 1.1.211. Скачать комплект.
Что важно в текущей версии
- Исправлено копирование ST-текста через Ctrl+C и контекстное меню при конфликте доступа к буферу обмена Windows.
- После компиляции выводятся проценты занятой RAM для Ethernet, Wi-Fi и обоих интерфейсов, а также ориентировочный диапазон времени цикла. Это три расчётных сценария, а не перечень включённых сетей. Основной процент относится к обоим интерфейсам.
- В мониторинге показываются фактическая занятость RAM и время цикла. Прогноз не гарантирует пиковую нагрузку; если операция пока не поддерживается моделью времени, IDE сообщает, что данных для расчёта недостаточно.
- STOP останавливает пользовательскую программу и её коммуникационные службы. Управление устройством остаётся доступным. При нехватке памяти выводится понятная причина остановки.
- Добавлена кнопка полной перезагрузки контроллера. Улучшена работа RETAIN и освобождение ресурсов при замене PLC-программы.
- В Web-интерфейсе Worker Beremiz цветом выделены состояния Ethernet/Wi-Fi и заголовки Wi-Fi-сетей; во вкладке «Сервис» доступен подтверждаемый сброс заводских настроек с сохранением лицензии.
- У Modbus TCP Server появился параметр
MAX_CLIENTS: по умолчанию 2, допустимо от 1 до 6. Больше соединений требуют больше памяти; предел одного протокола не означает, что все протоколы одновременно выдержат свои максимумы.
После обновления Worker пересоберите и загрузите PLC-проект новой IDE. Совместимый BIN 1.1.211 находится в папке firmware комплекта.
Другие возможности IDE
- Выбор Debug: наследование от блока и независимое переопределение экземпляра; Delete возвращает наследование.
- Актуальность: учитывается выбор Debug; общий индикатор у имени проекта позволяет заметить изменения при свёрнутом дереве.
- Открытые треугольники в таблицах выделяются синим.
- Локальные поиск и замена работают в ST и таблицах объявлений.
- F5 — собрать; F6 — собрать и загрузить.
- Привязки отладочных листов сохраняются при переименовании объектов командами IDE.