Перейти к содержанию

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 и сетевые функции — через соответствующие блоки.

Порядок запуска ​

  1. Установите Worker, если на устройстве установлена другая прошивка.
  2. Установите Beremiz IDE из раздела загрузок.
  3. Создайте проект, укажите адрес и пароль.
  4. Соберите и загрузите программу.
  5. Подключитесь к отладке.

Работа программы на устройстве не требует постоянно открытой IDE. При переходе на другой Worker PLC-программа не выполняется.

Далее: начало работы с Beremiz →

Начало работы с Beremiz ​

Начните с готового проекта: загрузите его в WT32, проверьте мигание индикатора и откройте значения переменных. После этого добавляйте свою логику управления и блоки обмена данными.

  1. Создайте проект из готового шаблона.
  2. Укажите IP устройства и пароль Web-доступа.
  3. Соберите и загрузите PLC-программу.
  4. Подключитесь к 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 при активном принуждении.
Главное окно Beremiz
Главное окно BeremizГлавное окно: дерево проекта и экземпляров, объявления, ST-код и библиотеки. Нижняя панель скрыта для работы с кодомBeremiz IDE 1.1.57

Настройка рабочего пространства ​

Перетаскивайте границу между объявлениями и кодом, чтобы изменить высоту секций. Ширина колонок меняется перетаскиванием границ их заголовков. Эти настройки хранятся в проекте отдельно для редакторов POU, UDT, глобальных переменных и ресурсов.

КнопкаКомандаКак использовать
Таблица переменныхТаблица переменныхПоказать или скрыть объявления активного ST-редактора. Ctrl+1 или Ctrl+NumPad1.
Нижняя панельНижняя панельПоказать или скрыть консоль, поиск и лог PLC. Ctrl+2 или Ctrl+NumPad2.
Полный экранПолный экранПереключить полноэкранный вид. Shift+F12.

Панель справа переключается через меню Вид → Правая панель: Библиотеки/Отладчик. Чтобы восстановить общую компоновку, используйте команду сброса расположения панелей в меню «Вид».

Кнопки верхней панели ​

Верхняя панель IDE 1.1.57: недоступные команды показаны серым
Верхняя панель IDE 1.1.57: недоступные команды показаны серымВерхняя панель IDE 1.1.57: недоступные команды показаны серымBeremiz IDE 1.1.57
КнопкаКомандаКак использовать
Новый проектНовый проектСоздать проект в выбранной папке. Ctrl+N.
Открыть проектОткрыть проектВыбрать папку существующего проекта с plc.xml. Ctrl+O.
СохранитьСохранитьЗаписать изменения проекта. Ctrl+S.
Сохранить какСохранить какСохранить проект в другой папке.
ПечатьПечатьРаспечатать содержимое редактора.
Web-интерфейс устройстваWeb-интерфейс устройстваОткрыть в браузере устройство по адресу проекта. Прошивка не загружается автоматически.
Сайт BeremizСайт BeremizСтраница Beremiz на rumiz.ru с описанием и загрузками.
ОтменитьОтменитьОтменить последнее редактирование. Ctrl+Z.
ПовторитьПовторитьВернуть отменённое действие. Ctrl+Y.
ВырезатьВырезатьПеренести выделенное в буфер обмена. Ctrl+X.
КопироватьКопироватьСкопировать выделенный текст. На объекте дерева проекта копируется его имя. Ctrl+C.
ВставитьВставитьВставить содержимое буфера в активный редактор или таблицу. Ctrl+V.
Поиск в текущей областиПоиск в текущей областиCtrl+F: искать в активном ST-редакторе или таблице.
Поиск в проектеПоиск в проектеCtrl+Shift+F: искать во всём проекте, результаты — в нижней панели.
КнопкаКомандаКак использовать
Подключиться к ПЛКПодключиться к ПЛКПодключиться по адресу проекта для мониторинга, отладки и сравнения актуальности.
СобратьСобратьF5: собрать PLC-пакет в папке build без загрузки в контроллер.
Загрузить в ESPЗагрузить в ESPF6: собрать PLC-программу, передать её по сети и активировать на устройстве.
Очистить сборкуОчистить сборкуУдалить результаты локальной сборки.
Списки I/OСписки I/OОткрыть меню сохранённых отладочных листов или создать новый. Работа с листами.
Полный логПолный логОткрыть подробный лог последней сборки или загрузки.

После подключения к PLC ​

При подключении очки имеют светло-зелёный фон. Команды Run/Stop/Reset доступны в зависимости от состояния устройства. Две Web-кнопки находятся после печати и отделены разделителями.

КнопкаКомандаКак использовать
Отключиться от ПЛКОтключиться от ПЛКЗавершить соединение IDE. Это не команда остановки PLC-программы.
Запустить ПЛКЗапустить ПЛКЗапустить активную программу из состояния STOP.
Остановить ПЛКОстановить ПЛКОстановить выполнение PLC-программы. Для продолжения служит команда «Запустить ПЛК», доступная в остановленном состоянии.
Перезапустить ПЛКПерезапустить ПЛКПерезагрузить устройство. Связь временно разрывается; после запуска подключитесь снова.

Сборка, загрузка и очистка блокируются на время активной отладки. Для изменения программы завершите подключение, внесите изменения и выполните загрузку. Кнопки вставки IF/CASE/FOR/WHILE и REGION описаны в разделе ST-редактора.

Создание и сохранение проекта ​

  1. Выберите Файл → Новый и укажите пустую папку проекта.
  2. Откройте main: шаблон содержит блок Blink и ресурс с экземпляром программы.
  3. Задайте адрес WT32 и пароль, сохраните проект.

Стартовая программа ​

D3 мигает через экземпляр Blink. D4 показывает, есть ли хотя бы одна принудительно заданная переменная.

// Мигание D3
clock_500ms(setTime := T#500ms, out => BOARD_LED_D3);

// D4 включён, пока в программе есть активное принуждение
BOARD_LED_D4 := FORCE;
ИмяКласс / типНазначение
clock_500msLOCAL / BlinkЭкземпляр мигающего блока; setTime — интервал переключения выхода.
BOARD_LED_D3 / BOARD_LED_D4EXT / BOOLУправление пользовательскими светодиодами; адрес вручную не задаётся.
FORCEEXT / BOOLСистемный признак активного принуждения. Только чтение; добавление в отладочный лист запрещено.
resource1: периодическая задача с интервалом T#100ms
resource1: периодическая задача с интервалом T#100msresource1: периодическая задача с интервалом T#100msBeremiz IDE 1.1.57

Период задачи определяет частоту запуска. Он не равен максимальному времени выполнения. Программа должна быть назначена задаче, а 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.

Конфигурация: IP устройства, пароль и контроль длительности цикла
Конфигурация: IP устройства, пароль и контроль длительности циклаКонфигурация: IP устройства, пароль и контроль длительности циклаBeremiz IDE 1.1.57
ПолеПримерНазначение
URI LocationWT32://192.168.1.20Адрес подключения для мониторинга и отладки.
DeviceHost192.168.1.20Адрес устройства без префикса протокола; используется при загрузке.
WebPassword12345Пароль 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 на объекте копирует имя.

F2: прежнее имя выделено целиком для замены
F2: прежнее имя выделено целиком для заменыF2: прежнее имя выделено целиком для заменыBeremiz IDE 1.1.57
PumpStatus: разные типы полей структуры, описания и исходные значения
PumpStatus: разные типы полей структуры, описания и исходные значенияPumpStatus: разные типы полей структуры, описания и исходные значенияBeremiz IDE 1.1.57

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

PumpControl: интерфейс блока, таймер TON и логика задержки включения
PumpControl: интерфейс блока, таймер TON и логика задержки включенияPumpControl: интерфейс блока, таймер TON и логика задержки включенияBeremiz IDE 1.1.57

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

main: скалярные значения, экземпляры блоков, структура и сохраняемый счётчик
main: скалярные значения, экземпляры блоков, структура и сохраняемый счётчикmain: скалярные значения, экземпляры блоков, структура и сохраняемый счётчикBeremiz IDE 1.1.57
КолонкаЧто задаётся
ИмяИдентификатор переменной или экземпляра 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 предоставляются платформой.

Таблица глобальных переменных
Таблица глобальных переменныхГлобальные значения объявляются в своей таблице; в POU используются через EXTBeremiz IDE 1.1.57

Исходное глобальной переменной задаётся у её владельца, не у EXT. Для глобальных переменных RETAIN отключён.

Исходные значения ​

Колонка Исходное задаёт значение инициализации. Это не текущее значение ПЛК и не Force: изменение начинает действовать после сборки и загрузки соответствующей программы.

ТипПримерПравило
BOOL0, 1, FALSE, TRUEЛогическое значение: только 0/1 или FALSE/TRUE.
INT / UINT-12 / 120Учитываются знак и диапазон типа; UINT не принимает отрицательные значения.
DINT / UDINT-100000 / 100000Значение должно помещаться в объявленный тип.
REAL / LREAL23.5Десятичный разделитель — точка.
BYTE / WORD / DWORD / LWORD16#2AЗапись с основанием удобна для битовых масок.
TIMET#2s, T#500msТип времени с единицей измерения, не просто число.
DTDT#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. При наличии подходящего сохранённого состояния восстанавливается оно; иначе используется исходное значение.

  1. Задайте отличимое значение, например 1234, и проверьте его через мониторинг.
  2. Снимите Force, если применяли его; логика не должна сразу перезаписывать проверяемую переменную.
  3. Дайте контроллеру время сохранить данные, перезапустите и снова подключитесь.
  4. Сравните RETAIN и обычную переменную: последняя после инициализации не обязана сохранять прежнее значение.

Снятие питания и штатная перезагрузка различаются

Фоновое сохранение выполняется с интервалом около 5 секунд; штатная перезагрузка дополнительно сохраняет состояние. После отключения питания восстанавливается последняя записанная копия RETAIN. Перед отключением дождитесь фонового сохранения нужных значений.

Для глобальных переменных выбор RETAIN отключён. Изменение структуры или замена программы — отдельный случай: не используйте RETAIN как единственную резервную копию важных настроек.

MQTT-параметр RETAIN_FLAG хранит сообщение на брокере и не связан с RETAIN переменных ПЛК.

Редактор ST-кода ​

Автодополнение предлагает имена переменных, поля UDT и параметры экземпляров FB. Для доступа к полям введите точку после имени объекта.

ST-редактор: подсветка синтаксиса, номера строк и сворачиваемый REGION
ST-редактор: подсветка синтаксиса, номера строк и сворачиваемый REGIONST-редактор: подсветка синтаксиса, номера строк и сворачиваемый REGIONBeremiz IDE 1.1.57
КнопкаКомандаКак использовать
IFIFВставить условие IF…THEN…END_IF.
CASECASEВставить выбор CASE…OF…END_CASE.
FORFORВставить цикл FOR…DO…END_FOR.
WHILEWHILEВставить цикл WHILE…DO…END_WHILE.
КомментарийКомментарийВставить многострочный комментарий (* … *). Однострочные // также поддерживаются.
Создать REGIONСоздать REGIONВыделите строки и нажмите кнопку. Регион объединяет сворачиваемый участок кода. Ctrl+Alt+R.
Удалить REGIONУдалить 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 ​

  1. Щёлкните в ST-коде или нужной таблице.
  2. Нажмите Ctrl+F или первую лупу верхней панели.
  3. Проверьте «Область поиска»: редактор ST или конкретная таблица.
  4. Введите запрос. Кнопка «Поиск» переводит к следующему совпадению; направление и дополнительные параметры задаются в этом же окне.
Локальный поиск: область «редактор ST — main», совпадение Temperature в коде
Локальный поиск: область «редактор ST — main», совпадение Temperature в кодеЛокальный поиск: область «редактор ST — main», совпадение Temperature в кодеBeremiz IDE 1.1.57
После выбора таблицы область поиска меняется на таблицу переменных
После выбора таблицы область поиска меняется на таблицу переменныхПосле выбора таблицы область поиска меняется на таблицу переменныхBeremiz IDE 1.1.57

Поиск в таблицах охватывает и вложенные поля пользовательских структур. Если ищете объявление, сначала выберите таблицу, а не область кода.

Заново открытое окно начинает с пустого запроса. Закрытие окна снимает поисковую подсветку; подсветка ошибок компиляции — отдельный механизм.

Локальная замена ​

В актуальной IDE окно Ctrl+F содержит также замену — в ST и таблицах переменных, типов и глобальных переменных. Поиск начинается от текущего курсора или выбранной ячейки; ручное перемещение меняет начальную позицию. После последовательной замены выделяется следующая цель. При отсутствии совпадений показывается «Совпадений не найдено».

В таблицах действуют обычные проверки значений и штатное переименование с обновлением обращений. Вложенные поля общего типа нельзя менять через таблицу его использования: откройте определение типа. Снимки выше относятся к прежнему виду окна без новых элементов замены.

Весь проект · Ctrl+Shift+F ​

Вторая лупа запускает поиск в проекте. Он нужен, когда неизвестен блок с нужным именем, описанием или кодом. Результаты появляются на вкладке «Поиск» внизу; двойной щелчок открывает найденное место.

Библиотеки и вставка шаблонов ​

Панель «Библиотеки» содержит стандартные функции, преобразования типов, таймеры, операции и группу ESP. Меню Вставка POU добавляет готовые пользовательские FB с объявлениями, примером кода и регионом «ОПИСАНИЕ».

Меню «Вставка POU»: готовые блоки протоколов и сетевых служб
Меню «Вставка POU»: готовые блоки протоколов и сетевых службМеню «Вставка POU»: готовые блоки протоколов и сетевых службBeremiz IDE 1.1.57

Вставленный шаблон становится исходным кодом проекта и не обновляется автоматически при установке новой IDE. При переходе на новую версию сверяйте старый блок со свежим шаблоном, особенно адресацию Modbus.

ШаблонНазначениеНастройка
Modbus RTU MasterОпрос ведомых RS-485Modbus 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Брокер, публикации, подписки и LWTMQTT
Проверка интернетаTCP-проверка заданного сервераСеть и время
Время из интернетаСинхронизация NTPСеть и время

Как включить вставленный FB в программу ​

  1. Выберите шаблон в меню и задайте имя нового POU.
  2. Откройте его регион «ОПИСАНИЕ», настройте адреса, периоды, разрешения и диапазоны.
  3. В main добавьте локальную переменную типа вставленного FB, например modbus : ModbusTCPClient, и вызов modbus(); в ST-коде.
  4. Соберите и загрузите проект; проверьте статус соединения и каждой операции.

Blink в стартовом проекте переключает выход через заданный setTime. RISE и FALL из ESP обнаруживают фронт и спад сигнала; для TEMP нужна отдельная BOOL-переменная памяти на каждый независимый сигнал.

IF RISE(SIG := command, TEMP := previousCommand) THEN
    counter := counter + 1;
END_IF;

Сборка и загрузка в контроллер ​

  1. Сохраните проект; проверьте URI, DeviceHost и WebPassword.
  2. Нажмите Собрать. Ошибки и показатели памяти выводятся в консоль.
  3. Нажмите Загрузить в ESP и дождитесь сообщения «PLC-программа загружена и активирована».
  4. Подключитесь к 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.

Открытие значений ​

  1. Убедитесь, что на устройстве активна нужная PLC-программа.
  2. Нажмите «Подключиться к ПЛК» — кнопку со значком очков. После подключения у значка светло-зелёный фон.
  3. В дереве экземпляров выберите выполняемый экземпляр программы или FB и откройте его отладочный просмотр через значок очков.
  4. Наблюдайте значения в 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, а не вернуться к настройке блока.

Изменить или вернуть наследование ​

  1. Раскройте экземпляр в таблице объявлений.
  2. Щелчком или пробелом задайте собственное значение.
  3. Чтобы убрать переопределение, выделите ячейку Debug и нажмите Delete.
  4. Для составного поля сбрасываются также вложенные переопределения.

Чтобы открыть подсказку по управлению флажками, наведите курсор на заголовок колонки Debug.

Наследование и собственные значения Debug в таблице экземпляров
Наследование и собственные значения Debug в таблице экземпляровБледный чекбокс показывает унаследованное значение, контрастный — собственное значение экземпляра. Delete возвращает наследование.Beremiz IDE 1.1.68

Раскрытие структур и блоков ​

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

Открытые строки таблицы с синими треугольниками
Открытые строки таблицы с синими треугольникамиBeremiz IDE 1.1.68

После изменения выбора ​

Сохраните проект, завершите подключение отладки, соберите и загрузите программу, затем подключитесь снова. Выбор Debug учитывается при проверке актуальности. Не включённая в пакет переменная не становится доступной для наблюдения только от добавления её в отладочный лист.

См. также: подключение и мониторинг, листы I/O Control.

Актуальность блоков и UDT ​

При подключении слева от программных объектов и пользовательских типов появляются признаки сравнения с активной программой контроллера. Так можно заметить, что проект на компьютере отличается от программы, которая сейчас выполняется на устройстве.

Причина состояния показана в подсказке объекта. После отключения индикаторы сравнения с ПЛК исчезают.

ОбозначениеСостояниеЧто делать
АктуаленАктуаленКод, объявления и зависимости совпадают с активным PLC-пакетом.
Изменён объектИзменён объектОтличается собственное содержимое: код, объявление, описание, комментарий или пробел.
Изменилась зависимостьИзменилась зависимостьСам объект тот же, но изменился используемый FB, функция, UDT или другая зависимость, в том числе вложенная.
Отсутствует в PLCОтсутствует в PLCОбъект есть в локальном проекте, но отсутствует в метаданных активного пакета.
Нет достоверных данныхНет достоверных данныхПакет не содержит нужных сведений либо сравнение этого объекта не поддерживается.

Какие изменения учитываются ​

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

Индикатор возле имени проекта объединяет актуальность его блоков и типов: изменение объекта видно даже при свёрнутом дереве. Это не проверка совпадения всех настроек портов, подключения или конфигурации устройства.

ИзменениеСам объектЕго потребители
Описание POU, переменной или поля UDTИзменёнОстаются актуальными, если других отличий нет.
Комментарий, пробел, перенос строки, оформление REGIONИзменёнНе меняются при неизменном смысле кода.
Исполняемый код, структура/тип данных, значимое исходное значениеИзменёнИзменение зависимости распространяется по используемой цепочке.
Размер окна или ширина колонкиНе меняетсяНе меняются.

Правило одинаково для функций, функциональных блоков, программ и пользовательских типов. Описание типа влияет на актуальность самого типа, но не его неизменённых потребителей. Старый пакет без сведений о точном исходном содержимом нужно пересобрать и загрузить новой IDE.

Пример: UDT «Датчик» используется внутри UDT «Узел», тот — в FB «Линия», а FB вызывается из main. Изменение типа поля «Датчика» затрагивает всю эту цепочку. Независимый блок остаётся актуальным.

Как актуализировать программу

Сохраните изменения, отключитесь от отладки, загрузите программу и подключитесь снова.

Отладочные листы I/O Control ​

Отладочный лист — сохранённый список переменных для наблюдения и проверки. Соберите в нём, например, команды и состояния одного насоса, чтобы видеть их вместе, не переключаясь между блоками.

Создать лист и добавить переменные ​

  1. Нажмите Списки I/O и создайте лист с понятным именем.
  2. Откройте нужный экземпляр программы в левом нижнем дереве. Раскройте FB, UDT или массив до конкретной переменной.
  3. Перетащите переменную из дерева экземпляров в окно листа.
  4. Расположите строки и разделители, затем нажмите Save.

Состав листа можно готовить без подключения. Сохранённые листы, их переименование и удаление доступны через Списки I/O.

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

Комментарии и подписи разделителей ​

Нажмите ручку рядом с переменной или на разделителе, введите текст и подтвердите OK. Комментарий переменной отображается зелёным. Точечные линии между подписью и полями сохраняются.

Редактирование комментария
Редактирование комментарияЕдиное окно текста: значок очистки в конце поля, кнопки OK и CancelBeremiz IDE 1.1.57

Корзина в конце поля очищает текст, не закрывая окно. OK применяет изменение, Cancel отменяет. После подтверждения нажмите Save в листе.

Комментарий принадлежит переменной

Перестановка строк не переносит комментарий к соседям. При удалении переменной из листа комментарий удаляется. Если переименовать объект командой IDE, его строки остаются связанными с ним. Удаление объекта и создание нового с тем же именем не равнозначно переименованию. После изменения проекта сохраните лист и проверьте его состав перед применением Force.

Двойной щелчок по имени переменной открывает выбор цвета имени. Комментарий остаётся зелёным. Сохраните оформление кнопкой Save.

Принуждение значений · Force ​

Force удерживает переменную в заданном значении вместо результата PLC-логики до снятия принуждения командой Release.

  1. Подключитесь к соответствующей программе PLC и откройте лист.
  2. Для числовой переменной введите значение подходящего типа и нажмите Force. Для BOOL используется ON/OFF.
  3. Проверьте состояние строки и красную надпись FORCE в строке состояния IDE.
  4. По окончании проверки нажмите Release у принудительно заданных переменных.
ЭлементЗначение
Force / ON/OFFПринудительно задать числовую переменную / BOOL.
ReleaseСнять принуждение; дальнейшее значение задаёт обычная логика программы.
Красная надпись FORCEНа контроллере есть хотя бы одна переменная с принудительным значением.
Служебная FORCEBOOL только для чтения. Её нельзя присваивать, принуждать или добавлять в отладочный лист.
BOARD_LED_D4 := FORCEВ стартовом проекте D4 повторяет общий признак принуждения.

Завершение проверки

Закрытие листа не снимает Force. После обрыва связи восстановите соединение, проверьте флаг FORCE и снимите принуждение командой Release.

Modbus: функции и адресация ​

Modbus позволяет читать показания и записывать команды в приборы. Перед настройкой найдите в руководстве прибора таблицу регистров: нужные адреса, типы данных и разрешённые операции. FC — код операции; транзакция — один настроенный запрос чтения или записи.

FCОперацияКоличество за запрос
01 / 02Чтение Coils / Discrete Inputs1–2000 бит
03 / 04Чтение Holding / Input Registers1–125 регистров
05 / 06Запись одного Coil / Holding Register1 элемент
15 / 16Запись нескольких Coils / Holding Registers1–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
0Coils — дискретные командыЧтение и запись
1Discrete Inputs — дискретные состоянияЧтение
2Holding Registers — регистрыЧтение и запись
3Input 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Внутренняя или другая ошибка.
10Illegal Function — устройство не поддерживает функцию.
11Illegal Data Value — недопустимое значение.
12Slave Device Failure — отказ устройства.
13Acknowledge — запрос принят, обработка не завершена.
14Slave Device Busy — устройство занято.
15Memory Parity Error.
16Gateway Path Unavailable.
17Gateway 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Нулевая длина
6BUF_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 не связан с принудительными значениями отладчика.

Мастер: опрос внешнего прибора ​

Шаблон RTU Master: отдельные транзакции чтения и записи
Шаблон RTU Master: отдельные транзакции чтения и записиШаблон RTU Master: отдельные транзакции чтения и записиBeremiz IDE 1.1.57
  1. Вставьте Modbus RTU Master, объявите экземпляр этого FB в main и вызывайте его каждый цикл.
  2. В вызове RS485_MB_MASTER задайте линию и периоды.
  3. Для каждого диапазона добавьте экземпляр RS485_MB_ADD_TR. Задайте FC, адрес ведомого, удалённый и локальный диапазоны.
  4. После загрузки проверяйте APPLIED/ERROR у мастера и STATUS у каждой транзакции. Успешное чтение обновляет локальный буфер.

Ведомый: доступ к данным вашего PLC ​

Где задаётся адрес ведомого

В RS485_MB_SLAVE параметр SLAVE_ID — собственный адрес вашего ведомого. В RS485_MB_ADD_TR это адрес внешнего прибора, который опрашивает мастер. CLIENT_ID из Modbus TCP — номер соединения, не адрес RTU-прибора.

  1. Вставьте Modbus RTU Slave, задайте линию, уникальный SLAVE_ID и адресное окно.
  2. Заполняйте в программе локальные таблицы MB_A_* (или MB_B_*). Подключите внешний мастер с теми же параметрами линии.
  3. Для проверки начните с 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/Slave0 — норма; 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.
INTERFACEAUTO (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: соединение и запросы
Modbus TCP Client: соединение и запросыШаблон Modbus TCP Client: настройки соединения и транзакцийBeremiz IDE 1.1.57
  1. Вставьте Modbus TCP Client. В MBTCP_CLIENT задайте CLIENT_ID, IP, порт и интерфейс.
  2. Настройте экземпляры MBTCP_ADD_TR: одинаковый CLIENT_ID, нужные FC, UNIT_ID и диапазоны.
  3. Вызывайте FB из main. После загрузки проверьте CONNECTED и STATUS = 1 у транзакций.
  4. Чтение обновляет 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 UINTBUF_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 ​

Шаблон TCP Server: включение сервера и работа с локальной таблицей
Шаблон TCP Server: включение сервера и работа с локальной таблицейШаблон TCP Server: включение сервера и работа с локальной таблицейBeremiz IDE 1.1.57
  1. Вставьте Modbus TCP Server, задайте TCP_PORT, UNIT_ID и окно данных в MBTCP_SERVER.
  2. Заполняйте MBTCP_S_* из программы. Удалённому клиенту задайте IP вашего устройства и порт сервера.
  3. Сервер принимает подключения через 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_CODE0 — норма; 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_CODE0 — норма; 3 — нулевая длина окна; 5 — ошибка сокета, привязки порта, listen или внутренняя ошибка.

Siemens S7 Client ​

Siemens S7 Client: отдельные диапазоны DB и локального буфера
Siemens S7 Client: отдельные диапазоны DB и локального буфераSiemens S7 Client: отдельные диапазоны DB и локального буфераBeremiz IDE 1.1.57

Шаблон Siemens S7 Client содержит соединение S7_CLIENT и транзакции S7_ADD_TR. WT32 читает и записывает данные внешнего контроллера Siemens S7. DB — блок данных в памяти S7-контроллера; его номер и расположение нужных значений уточните в проекте этого контроллера.

  1. В настройках S7-контроллера разрешите PUT/GET и используйте DB с отключённым оптимизированным доступом.
  2. Вставьте шаблон, задайте IP контроллера, порт 102, RACK и SLOT. Для S7-1200 в примере используются 0 и 1.
  3. У транзакции задайте DB_NUMBER, MODE (0 — чтение, 1 — запись), REMOTE_START, BUF_START, TR_LEN и SET_TIMEOUT.
  4. Разрешите соединение флагом 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-сеанс
23S7-контроллер вернул ошибку операции
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-шаблон в ST: публикация, подписка и параметры сообщений
MQTT-шаблон в ST: публикация, подписка и параметры сообщенийMQTT-шаблон в ST: публикация, подписка и параметры сообщенийBeremiz IDE 1.1.57

MQTT передаёт сообщения через брокер — сервер, который принимает и доставляет их подписчикам. Топик — имя канала сообщений, например boiler/temperature. Публикация отправляет значение в топик, подписка получает его.

Шаблон MQTT Client объединяет MQTT_CLIENT, MQTT_PUBLISH и MQTT_SUBSCRIBE. У связанных блоков одинаковый CLIENT_ID. Доступны два клиента (0–1), до 8 публикаций и до 8 подписок.

  1. Укажите брокер: URL вида mqtt://host:1883, DNS-имя HOST либо IP1..IP4. Приоритет: URL → HOST → IP; порт в URL имеет приоритет над TCP_PORT.
  2. Выберите INTERFACE и задайте USERNAME/PASSWORD, если брокер требует авторизацию. При пустом CLIENT_NAME устройство формирует имя по MAC.
  3. Для публикации задайте TOPIC, PAYLOAD, QOS (0/1), RETAIN_FLAG. ENABLE запускает отправку при включении, фронте FALSE → TRUE и изменении параметров публикации.
  4. Для подписки задайте TOPIC, QOS и ENABLE. Последнее принятое сообщение доступно на выходе PAYLOAD.
ПараметрНазначение
KEEPALIVE_SEC10–600 секунд: допустимый интервал тишины соединения.
RECONNECT_MSПауза перед повторным подключением, мс.
CLEAN_SESSIONTRUE — начать чистую сессию.
RETAIN_FLAGСохранить последнюю публикацию на брокере для новых подписчиков.
WILL_ENABLE / WILL_TOPIC / WILL_PAYLOADВключение Last Will, топик и сообщение при аварийной потере связи.
WILL_QOS / WILL_RETAINQoS 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 ​

INTERNET_TIME: NTP-серверы, периоды синхронизации и диагностика
INTERNET_TIME: NTP-серверы, периоды синхронизации и диагностикаINTERNET_TIME: NTP-серверы, периоды синхронизации и диагностикаBeremiz IDE 1.1.57

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_CHECK0 — ожидание; 1 — успешно; 2 — проверка; 3 — интерфейс недоступен; 4 — тайм-аут; 5 — TCP-соединение не установлено; 7 — конфигурация.
INTERNET_TIME0 — ожидание; 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: проверяйте настройки, версии и журнал устройства.

СимптомЧто проверить
Не подключается к PLCWeb-доступность устройства, URI/DeviceHost, пароль, запущенный Worker Beremiz и активную PLC-программу.
Несовместимый WorkerУстановите Worker Beremiz из firmware вашего комплекта IDE, затем пересоберите и загрузите проект.
Нет записи о превышении при лимите 00 выключает контроль. Нужны положительный предел, выбранное действие и загрузка пересобранного проекта.
Белое поле «Исходное» не редактируетсяУ этого типа или класса единая инициализация не поддерживается. Скалярные поля структуры задаются в редакторе типа.
Перемешались данные Modbus TCP клиентовBUF_START/TR_LEN всех клиентов: буферы общие, автоматического разделения нет.
Не ищет в таблицеЩёлкните таблицу до Ctrl+F и проверьте область поиска в окне.
Latest build does not matchОткрыт ли проект, соответствующий программе PLC. Если нужен локальный вариант — выполните его сборку и загрузку.
N/A вместо значенияСвязь, совпадение программы, конкретный экземпляр и Debug в объявлении.
Объект оранжевый, хотя его не редактировалиЗависимости: используемые FB, функции, UDT, массивы и глобальные объявления.
Серый вопрос у актуальностиПоддержку метаданных текущими версиями IDE/Worker и наличие сведений в активном пакете.
Нет значения Modbus / S7CONNECTED, затем STATUS отдельной транзакции; далее адрес, длину, локальный буфер и тайм-аут.
Соединение есть, но прибор возвращает ошибкуFC и разрешённую область, нумерацию с нуля, UNIT_ID/SLAVE_ID и предел длины запроса.
MQTT подключён, но нет новой публикацииTOPIC, CLIENT_ID, фронт ENABLE или изменение PAYLOAD/параметров публикации.
Внешняя переменная не найденаГлобальное объявление, точное имя и совпадение типов с EXT.
Недостаточно RAM / activation_no_memРазмер массивов, структур и таблиц; показатели сборки и свободную RAM устройства.

Для диагностики зафиксируйте версии IDE и Worker, последнее выполненное действие, полный лог и точный STATUS/ERR_CODE проблемного блока. Встроенный регион «ОПИСАНИЕ» шаблона содержит расшифровки для его версии.

Рабочий порядок ​

  1. Перед загрузкой проверьте адрес устройства и параметры обмена. Соберите проект и убедитесь, что программа помещается в доступную память.
  2. После загрузки подключитесь к устройству, проверьте индикаторы актуальности, значения переменных и STATUS операций обмена.
  3. Перед завершением отладки снимите принудительные значения кнопкой 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.

rumiz.ruWT32 · Ethernet · Wi-Fi · RS-485