Короткий ответ: если на панели «не то число», чаще виноваты не «плохой Modbus вообще», а карта регистров для HMI: неверный масштаб, перепутанный порядок слов, мёртвая зона отображения или тег с качеством Bad, пока связь на уровне TCP ещё живая.
Статьи про Modbus TCP для интегратора и три режима RTU/TCP разбирают сеть, Unit ID и кадры. Здесь угол «панель видит не то»: что заложить в Modbus-карту для экрана, как не испортить масштаб и качество тега, и что проверить до спора «SCADA врёт / ПЛК врёт».
Modbus-карта для HMI - не копия карты для SCADA
Modbus-карта для панели - таблица: адрес регистра, тип (INT16, UINT32, float), масштаб, единица на экране, права чтение/запись, текст для оператора. Одна и та же физическая величина на заводе может идти в SCADA с полным набором служебных регистров, а на панели у шкафа - укороченный набор без дублей.
Ошибка проекта: скопировать карту верхнего уровня «как есть» на панель. Оператору не нужны сотни служебных слов; зато каждая лишняя запись - шанс перепутать адрес и увидеть мусор.
Для СТАБУР панель часто опрашивает свой ПЛК напрямую или через шлюз; карту согласуют с картой ПЛК в CODESYS/MasterSCADA, но подписи и масштаб - отдельно под смену.
Масштабирование: сырое значение и то, что видит смена
В регистре часто лежит целое (0–1000, 0–32767), на экране нужны бар, °C, %. Формула масштаба должна быть в карте явно:
значение_на_экране = (сырое × K) + B
Типовые баги:
•K забыли - давление «3276 бар» вместо 3,276.
•Два масштаба подряд - масштаб в ПЛК и ещё раз на HMI, число в два раза не то.
•Деление на ноль в выражении - панель показывает 0 или старое.
•Разные единицы - в ПЛК бар, на экране подпись «кПа» без пересчёта.
Проверка: сравнить одну точку в триадах: эталон (манометр/ручной режим), значение в отладчике ПЛК, значение на панели. Не десять тегов сразу.
Endian и порядок слов (32-bit, float)
INT32 и float занимают два регистра Modbus. Панель и ПЛК должны совпадать в:
•порядке байт (big-endian / little-endian);
•порядке слов (какое из двух 16-битных слов старше).
Симптом: «число есть, но бессмысленное» или «прыгает на 10^38». Часто помогает поменять Word order в настройках драйвера HMI, не трогая прошивку ПЛК.
Если в Modbus TCP сессия стабильна, а только один float кривой - почти всегда endian, не «плохой кабель».
Deadband (мёртвая зона) на отображении
Deadband - порог, ниже которого изменение не перерисовывают на экране, чтобы цифра не мелькала на шуме АЦП. На тренде и на поле «текущее значение» deadband настраивают отдельно.
Симптомы:
•оператор крутит уставку, на экране старое до большого шага;
•в SCADA кривая идёт, на панели «полоса»;
•после мелкой утечки уровень «застыл», хотя ПЛК уже видит изменение.
Проверка: временно убрать deadband в тестовой сборке или смотреть сырое значение в сервисном экране (за паролем). Если без deadband совпало - настроить порог, а не менять PID.
Качество тега: Good, Bad, Uncertain
Современные связки HMI понимают качество данных: связь есть, но значение недостоверно (обрыв датчика, выход за диапазон, ручной блок в ПЛК).
На экране должно быть видно:
•Bad - прочерк, серая зона, надпись «нет данных», не показывать последнее «хорошее» как живое;
•Uncertain - отдельно от нормы, не красная авария, если это не аварийное условие.
Баг: панель рисует 0 при Bad - смена думает, что бак пуст. Лучше «—» и отдельный индикатор связи.
Связь Modbus «зелёная», а тег Bad - нормально: TCP жив, а регистр качества в ПЛК говорит «датчик отвалился».
Типовые баги «на экране не то» (не сеть)
Смещение адреса на ±1 (0-based vs 1-based в документации) - соседний регистр, «случайные» уставки. Сверка по одному известному регистру из паспорта устройства.
Тип UINT vs INT - отрицательная температура как большое положительное.
Битовая маска - на экране «насос включён», а читается не тот бит слова статуса.
Запись в holding вместо input - пуск уходит не туда; на чтении всё красиво.
Опрос слишком редкий - не баг масштаба, но авария «мигнула» между опросами; для критичных битов - быстрее опрос или передача с ПЛК по событиям.
Два мастера на один slave - панель и SCADA дергают одни регистры; симптомы плавающие. Разделение ролей - в границе панели и SCADA.
Таблица: на экране -> причина -> проверка
Как оформить карту, чтобы не переделывать на пуске
Одна строка карты - минимум: имя для оператора, адрес, функция 03/04, тип, K/B, единица, R/W, комментарий для наладчика (бит, авария). Версия файла и дата в шапке.
Сервисный экран «сырой регистр» - только за паролем. Цвета и подтверждения пуска - по правилам для смены.
FAQ
Нужна ли отдельная карта, если панель на том же CODESYS, что ПЛК?
Логические переменные могут быть общими, но для внешнего Modbus-шлюза или второй панели - отдельная таблица адресов.
С чего начать, если «всё не то»?
Один аналоговый тег и один бит статуса. Потом масштаб и аварии.
Когда снова читать статьи 76-77?
Когда симптом весь экран мигает, таймауты, Unit ID, RTU-over-TCP - не один кривой float.
Обсуждение