Карта I/O-сервера и тэг проекта
I/O означает ввод-вывод (Input/Output). I/O-сервер описывает соединение с устройством и карту доступных переменных. Тэг шаблона описывает технологический смысл и ссылается на переменную карты. Такое разделение позволяет изменить адрес контроллера, не переделывая все экраны.
Доступные протоколы зависят от состава установленной сборки. Настройки отсутствующего протокола сохраняются при импорте проекта и открываются с предупреждением. Для опроса устройства установите сборку с поддержкой нужного протокола. Наличие драйвера и разрешение лицензии проверяются отдельно.
Создайте сервер нужного протокола, настройте подключение и заполните карту. В карте используйте имена, по которым легко определить сигнал, и подробные комментарии. Поиск, фильтры и сортировка помогают работать с большими списками; фильтр скрывает неподходящие строки, не изменяя карту переменных.
Локальная проверка «Старт» в Studio и опрос автономного Runtime — разные процессы. Изменение карты в Studio не заменяет карту уже работающего узла. Некоторые команды редактирования недоступны при запущенной локальной проверке: сначала нажмите «Стоп». Импорт CODESYS и чтение карты OPC UA могут изменять проект без остановки действующей проверки; новая карта используется после её перезапуска и последующей загрузки проекта на Runtime.
Создание I/O-сервера и выбор типа
- В проекте откройте вкладку «I/O серверы». Нажмите «+» над деревом или «Добавить I/O-сервер» внизу.
- Задайте уникальное название, например
PLC1, и описание. Название используется в ссылках тэгов, поэтому задайте его по принятой системе обозначений оборудования. - В поле «Тип сервера» выберите протокол по таблице ниже и создайте сервер. У существующего соединения тип не меняется: для другого протокола создайте новое.
- На вкладке «Настройка» заполните поля соединения. При первичной наладке чтения включите «Запретить запись» и нажмите «Сохранить» справа от «Старт».
- Заполните вкладку «Карта», проверьте обмен, свяжите переменные с тэгами проекта и назначьте I/O-сервер узлу Runtime. У Modbus Gate карта создаётся в дочерних устройствах.
| Тип сервера | Когда выбирать | Инструкция |
|---|---|---|
| Modbus TCP | Устройство принимает обычные запросы Modbus TCP по сети. | Настройка TCP |
| Modbus RTU | Устройство подключено к последовательному порту компьютера. | Настройка RTU |
| Modbus OVER TCP | Преобразователь передаёт RTU-кадры через TCP без преобразования в Modbus TCP. | Настройка OVER TCP |
| Modbus Gate | Несколько RTU-устройств доступны через общий шлюз Modbus TCP. | Настройка шлюза |
| Modbus RTU (устройство шлюза) | Дочернее устройство внутри созданного Modbus Gate. | Настройка устройства |
| Siemens S7 TCP | Адресный доступ к неоптимизированным DB S7-1200/1500. | Настройка S7 |
| МЭК-60870-5-104 | Телемеханика по TCP: общий опрос, спонтанные данные и команды. | Настройка МЭК-104 |
| Меркурий 200 / 230 / 234 | Чтение мощности и накопленной энергии; для 230/234 — фазные электрические величины. | Настройка Меркурий |
| Симулятор | Проверка проекта без оборудования: генераторы значений и имитация потери связи. | Настройка Симулятор |
| BACnet/IP | Чтение объектов автоматизации зданий и приоритетная запись. | Настройка BACnet/IP |
| M-Bus | Чтение приборов учёта через M-Bus-мастер или прозрачный TCP-шлюз. | Настройка M-Bus |
| HTTP/JSON | Получение JSON из HTTP API и отправка отдельных команд. | Настройка HTTP/JSON |
| DLMS/COSEM | Чтение счётчиков по OBIS через TCP Wrapper или HDLC. | Настройка DLMS/COSEM |
| SNMP | Чтение параметров сетевого оборудования по OID и запись SET. | Настройка SNMP |
| MQTT | Подписки на топики брокера и публикация сообщений. | Настройка MQTT |
| Логика СПСеть | СПТ/СПГ с протоколом СПСеть: последовательный порт, прозрачный или адресуемый TCP-шлюз; карта по каналам и номерам параметров. | Настройка СПСеть |
| Omron FINS | Чтение и запись областей памяти Omron по TCP или UDP. | Настройка FINS |
| OPC UA | Чтение значений внешнего сервера OPC UA по NodeId. | Настройка OPC UA |
На снимках используются учебные адреса 192.0.2.x. Замените их адресами оборудования. Вкладка «Сервер Modbus» или «Сервер OPC UA» в узле Runtime решает другую задачу — публикует значения SAMUTAG для внешних клиентов.
- I/O-серверПротокол, адрес устройства и параметры опроса
- КартаПеременная, адрес и тип данных
- Тэг проектаПривязка к переменной карты
- RuntimeОпрос, качество и использование значения
Карта Modbus: добавление переменной
Выберите транспорт, соответствующий устройству: TCP, RTU либо вариант шлюза. Для TCP задайте адрес и порт, для RTU — последовательный порт и параметры линии. Укажите идентификатор устройства, период опроса и таймаут запроса.
| Область | Назначение |
|---|---|
| Coil | Дискретные значения, допускающие запись при разрешении устройства и проекта. |
| Discrete Input | Дискретные входы для чтения. |
| Holding Register | Регистры, используемые для чтения и разрешённой записи. |
| Input Register | Регистры входных данных для чтения. |
В карте используется адрес PDU с нуля, без префикса области 4xxxx. Проверьте начало адресации в документации устройства и пересчитайте номер регистра при необходимости. До массового импорта прочитайте регистр, ожидаемое значение которого известно, и сравните результат с показанием контроллера.
Для многорегистровых значений важны порядок байтов и слов. В новых настройках для REAL используется CDAB при порядке байтов AB; конкретный контроллер может требовать другое сочетание. Проверьте порядок байтов и слов по известному вещественному значению контроллера.
BYTE занимает выбранный старший или младший байт 16-битного регистра. UDINT представляет беззнаковое 32-битное значение и занимает два регистра.
- Откройте вкладку «Карта» и нажмите «+ Добавить переменную».
- В «Название переменной» введите, например,
Pressure; в «Комментарий» — «Давление после насосов». - В «Область данных» выберите область по документации устройства. Для примера используйте Holding Register.
- В «Тип данных» выберите «Real (Float32)», в «Адрес» укажите 100. Переменная займёт регистры 100 и 101. Вводится адрес PDU с нуля, без префикса 40001 или 30001.
- Для BOOL внутри регистра выберите тип Bool и заполните «Бит регистра (0–15, только BOOL)». Для Coil и Discrete Input номер бита регистра не задаётся.
- Нажмите «Сохранить». В карте проверьте имя, описание, тип, адресный диапазон и ссылку
PLC1.Pressure.
Для большого списка используйте импорт CODESYS, импорт EasyBuilder или Excel. Для подготовки Excel сначала нажмите «Экспорт Excel», заполните полученную таблицу и откройте «Импорт Excel». Перед подтверждением проверьте предлагаемые изменения. Поиск по имени, адресу и комментарию находится в раскрывающемся блоке «Фильтр»; там же выбираются область и тип данных.
Modbus TCP: пошаговая настройка
- Создайте I/O-сервер типа Modbus TCP, например
PLC1. - В блоке «Подключение Modbus TCP» задайте «IP-адрес узла» и «Порт». Порт 502 распространён, но должен соответствовать настройке контроллера.
- Укажите «ID устройства» по документации устройства. Значение 255, предлагаемое формой, не является универсальным адресом любого контроллера.
- Задайте «Период опроса, мс», например 1000 для обновления раз в секунду. В блоке «Формирование запросов» задайте паузу и допустимый размер блоков. Если устройство запрещает читать промежутки между объявленными адресами, выберите «Только непрерывные данные».
- В блоке «Данные и параллельный обмен» проверьте «Порядок байтов в регистре» и «Порядок слов LONG / REAL». Начальные AB и CDAB должны быть подтверждены контрольным значением. «Одновременные подключения» сначала оставьте равным 1.
- Настройте таймаут, устаревание и число неудачных чтений. Нажмите «Сохранить».
- Добавьте контрольную переменную в карту и выполните проверку обмена. После успешной проверки настройте остальные переменные и привязки.
Modbus RTU: последовательный порт
- Создайте I/O-сервер типа Modbus RTU, например
Meter1. - В «COM-порт / устройство» укажите порт компьютера, который будет выполнять опрос: например
/dev/ttyUSB0в Linux илиCOM3в Windows. Учётная запись службы должна иметь доступ к этому порту. - Задайте «Скорость, бит/с», «Чётность» и «Стоп-биты» точно по настройкам устройства. Используются восемь бит данных. На иллюстрации заданы 19200 бит/с, Even и один стоп-бит.
- В «ID устройства» задайте адрес от 1 до 247. Устройства одной линии должны иметь разные адреса; широковещательный адрес 0 для опроса не используется.
- Настройте период, паузу между запросами, размеры блоков, формат данных и контроль связи. Опрос последовательный; увеличивать число TCP-соединений для этого типа не требуется.
- Нажмите «Сохранить», заполните карту Modbus и проверьте обмен. Если адаптер подключён только к компьютеру Runtime, локальная проверка Studio с другого компьютера его не использует: проверьте значения после загрузки проекта на Runtime.
Modbus OVER TCP: прозрачный преобразователь
- Убедитесь, что преобразователь работает в режиме передачи RTU-кадров через TCP. Если он преобразует запросы Modbus TCP в RTU, используйте Modbus Gate или Modbus TCP согласно его документации.
- Создайте сервер типа Modbus OVER TCP, например
SerialBridge1. - В «IP-адрес узла» и «Порт» укажите сетевые параметры преобразователя. Его TCP-порт может отличаться от 502.
- В «ID устройства» укажите адрес RTU-устройства 1–247 за преобразователем. Скорость, чётность и стоп-биты последовательной линии задаются на самом преобразователе.
- Задайте период и паузу между запросами с учётом скорости линии. Настройте формат данных и контроль связи; используется один последовательный канал.
- Сохраните настройки, заполните карту Modbus и проверьте контрольное значение. Затем назначьте сервер узлу Runtime и загрузите проект.
Modbus Gate: создание общего шлюза
- Создайте сервер типа Modbus Gate, например
Gateway1. Он описывает общий канал к шлюзу Modbus TCP — RTU. - В блоке подключения задайте «IP-адрес узла» и «Порт» шлюза. Последовательную линию и маршрутизацию адресов настройте на самом шлюзе.
- Задайте «Пауза между запросами, мс». Через общий канал запросы устройств выполняются последовательно.
- В блоке «Пропуск неотвечающих устройств» проверьте «Неудачных попыток до пропуска» и «Пропуск устройства, мс». Например, после трёх неудач устройство временно пропускается на 30000 мс, чтобы его отсутствие не задерживало остальные.
- Нажмите «Сохранить». Создайте дочерние устройства командой «Добавить устройство RTU» в контекстном меню шлюза.
- В составе I/O узла Runtime назначьте сам шлюз. Его устройства будут включены вместе с ним.
Устройство RTU внутри Modbus Gate
- В дереве I/O нажмите правой кнопкой на
Gateway1и выберите «Добавить устройство RTU». - Задайте уникальное имя, например
GateMeter1, и описание. Устройство появится внутри ветви шлюза; тип «Modbus RTU (устройство шлюза)» назначается при создании. - В настройках проверьте подпись «Шлюз: Gateway1». Укажите «ID устройства» 1–247, соответствующий прибору на линии. Для следующего прибора используйте его собственный адрес.
- Задайте период опроса, размеры блоков, формат данных и контроль качества именно этого прибора. IP и порт используются от родительского шлюза.
- Нажмите «Сохранить» и заполните вкладку «Карта» этого устройства. Например, его переменная Pressure будет доступна тэгу проекта по ссылке
GateMeter1.Pressure. - Повторите шаги для остальных приборов. Проверьте каждый адрес и затем загрузите обновлённый проект на Runtime с назначенным шлюзом.
Период, таймаут и число попыток
- В настройках Modbus прокрутите форму до блока «Контроль связи и восстановление».
- В «Таймаут запроса, мс» задайте допустимое ожидание одного ответа. Например, 2000 мс.
- В «Неудачных чтений до плохого качества» укажите число последовательных неудач; начальное значение — 3.
- Для «Устаревание значения, мс» можно оставить 0: предел определяется автоматически как максимум трёх периодов опроса и двух таймаутов запроса. При ручном значении учитывайте полный цикл чтения устройства.
- Настройте начальную и максимальную задержки переподключения и множитель. Например, 500 мс, 30000 мс и 2 дают увеличивающуюся паузу до заданного предела.
- Сохраните настройки и проверьте поведение при временном отключении и восстановлении связи в согласованных условиях испытания.
Период опроса определяет, как часто сервер планирует чтение. Таймаут ограничивает ожидание ответа на конкретный запрос. При периоде 5 секунд и таймауте 2 секунды очередное чтение планируется через 5 секунд, а ожидание ответа на каждый запрос ограничено 2 секундами.
Срок устаревания — отдельная настройка. Он должен соответствовать заданному периоду обновления и допустимой технологической задержке. Слишком короткий срок вызывает ложные переходы качества, слишком длинный маскирует потерю данных.
Настройка числа неудачных попыток чтения определяет, когда подтверждать потерю связи; по умолчанию используется три попытки. При закрытии соединения чтение может быть повторено в том же цикле. Запись автоматически не повторяется: повторная отправка может привести к повторному выполнению команды оборудованием.
Увеличение числа соединений не всегда ускоряет опрос. Устройство должно поддерживать параллельные подключения, а карта — содержать достаточно независимых блоков. Начните с одного канала и сравните время опроса после изменения настройки.
Когда выполняется запись
Runtime отправляет запись при изменении значения со стороны скрипта или оператора. Если значение не изменилось, следующий цикл Runtime не вызывает его повторную запись. Успешный ответ записи сам по себе не переводит качество в uncertain; ошибки протокола и отсутствие связи отражаются отдельно.
Для битовой записи в Holding Register используется маска и значение регистра, прочитанное перед сканом. FC22 не используется, дополнительное чтение перед каждой записью не выполняется. Это важно при совместном управлении: если другой клиент меняет соседние биты, необходимо согласовать владельца регистра.
Слайдер «Запретить запись» блокирует запись на уровне I/O-сервера. По умолчанию он отключён. На этапе проверки чтения включите запрет. Перед проверкой команд записи отключите его.
- Действие на АРМВвод уставки или нажатие кнопки.
- Проверка доступаДоступ к кадру, право записи тэга и пароль, если требуется.
- RuntimeИзменение значения тэга и обработка его I/O-привязки.
- I/O-сервер → ПЛКПередача изменения, если запись разрешена настройками сервера.
Импорт адресованных переменных CODESYS
В карте Modbus откройте «Импорт из CODESYS» и вставьте объявления переменных. Импортируются переменные поддерживаемых типов с явным адресом; имя, тип и комментарий переносятся в строки карты. Сначала выполните проверку, изучите сообщения, затем подтвердите импорт.
VAR_GLOBAL
Pressure AT %MB200 : REAL; (* Давление после насосов *)
ValveOpen AT %MX3.1 : BOOL; (* Задвижка открыта *)
Temperatures AT %MB676 : ARRAY [-2..2] OF REAL;
END_VAR
Для этого импорта M-адреса трактуются через Holding Register. %MB200 для REAL начинается с Modbus-регистра 100 и занимает регистры 100 и 101. %MX3.1 означает бит 9 слова с индексом 1: первый индекс обозначает байт, а не регистр.
Массив разворачивается в последовательность переменных. Отрицательный индекс обозначается n, положительный — p, например Temperatures_n2 и Temperatures_p2; адрес сдвигается на размер типа, комментарий дополняется индексом. Проверьте итоговые строки в предпросмотре, включая крайние индексы массива и адреса упакованных типов.
«Обновить существующие» позволяет изменить адреса уже известных имён. Если обновление отключено, проверьте сообщения о совпадении имён. Для структур без явных адресов строки карты автоматически не создаются.
- Исходный текстСкопируйте объявления переменных с адресами AT.
- ПроверкаПроверьте типы, адреса и комментарии в предварительном результате.
- ИмпортПримените выбранный режим обновления существующих переменных.
- Загрузка на RuntimeСохранённая карта применяется на узле после загрузки проекта.
Импорт карты EasyBuilder
Кнопка импорта EasyBuilder находится в карте I/O-сервера. Она предназначена для экспортированного списка переменных устройств, а не для переноса графического проекта панели.
- Выберите файл экспорта и явно укажите начало адресации: с нуля или с единицы.
- Определите, использовать ли серверы с совпадающими именами либо создавать новые с индексом.
- Для существующих серверов выберите политику обновления тэгов. Перед заменой просмотрите совпадения.
- Проверьте типы, области данных и порядок слов на нескольких контрольных переменных.
- Примените импорт и затем загрузите изменённый проект на Runtime.
После импорта проверьте сетевые настройки выбранных устройств.
- Файл экспортаВыберите файл карты устройств.
- АдресацияУкажите начало адресов: с нуля или с единицы.
- Серверы и переменныеВыберите использование существующих серверов или создание новых; проверьте замену переменных.
- Проверка результатаСверьте устройства, адреса и типы до загрузки проекта на узел.
OPC UA: чтение с внешнего сервера
- Создайте I/O-сервер типа OPC UA, например
UaServer1. - В «Endpoint URL» введите адрес, предоставленный администратором UA-сервера, например
opc.tcp://192.0.2.25:4840. При наличии пути в адресе укажите его полностью. - Установите «Период чтения, мс» и «Узлов в запросе Read». Начните с допустимого сервером размера запроса; при ограничениях сервера уменьшите его.
- Задайте «Таймаут запроса, мс», «Устаревание значения, мс» и начальную/максимальную паузу переподключения. Для OPC UA срок устаревания задаётся явно; значение 0 для автоматического режима Modbus здесь не применяется.
- Раскройте блок «Безопасность и аутентификация». Выберите согласованный режим «Безопасность (Basic256Sha256)»: None, Sign или SignAndEncrypt. Для защищённого соединения задайте Application URI клиента и пути к сертификату клиента, его закрытому ключу и доверенному сертификату сервера. Настройте доверие к сертификату клиента на UA-сервере.
- Если требуется парольный вход, выберите SignAndEncrypt, заполните «Пользователь (пусто — Anonymous)» и «Переменная окружения с паролем на узле». Значение этой переменной должно быть задано в окружении службы. Для анонимного входа пользователь не задаётся; сервер должен разрешать такой вход.
- Нажмите «Сохранить». Заполните карту вручную, чтением с UA-сервера или импортом Excel.
- Выполните проверку, свяжите переменные с тэгами в режиме «Только чтение», назначьте I/O-сервер Runtime и загрузите проект.
Клиент OPC UA поддерживает чтение значений. Запись и вызов методов не поддерживаются.
Подготовьте сертификаты, ключи и переменную окружения с паролем на обоих компьютерах: Studio использует их при локальной проверке, Runtime — при рабочем опросе. Перед добавлением сертификата сервера в доверенные проверьте его у администратора UA-сервера.
В карте задаются имя, описание и NodeId, например ns=2;s=Temperature. Индекс пространства имён (ns) определяется сервером OPC UA. Если сервер изменил список пространств имён NamespaceArray, проверьте сохранённые NodeId.
Результат чтения карты применяется целиком после завершения обхода. При ошибке существующая карта сохраняется.
Для импорта и экспорта Excel используются колонки «Название переменной», «Описание» и «NodeId».
OPC UA: заполнение и чтение карты
- Перейдите на вкладку «Карта». Для одной известной переменной нажмите «Добавить переменную» и заполните «Имя переменной», «Описание» и «NodeId», например
ns=2;s=Pressure. Сохраните строку. - Для обнаружения переменных нажмите «Считать карту». В поле «Начальный NodeId» оставьте
i=85для Objects либо укажите NodeId нужной папки. Выбор папки сокращает объём чтения. - Включите «Обновить существующие переменные», только если нужно обновление уже найденных записей. Существующая карта целиком не удаляется.
- Нажмите «Считать» и дождитесь завершения. Чтение использует сохранённые настройки, а подключение выполняется со стороны Studio: ей должны быть доступны сеть, сертификаты и переменная окружения с паролем.
- Проверьте имена, описания и NodeId полученных строк. Обход добавляет читаемые скалярные переменные; методы, массивы и ссылки на другие UA-серверы пропускаются.
- При необходимости нажмите «Экспорт Excel», отредактируйте таблицу и используйте «Импорт Excel». Проверьте имена и NodeId перед подтверждением обновления.
- После изменения карты перезапустите локальную проверку и загрузите проект на Runtime. Подготовьте сертификаты и окружение также на компьютере Runtime — файлы локальной Studio не появляются там автоматически.
Проверка обмена и привязка к тэгу
- Сохраните подключение и карту. Если оборудование доступно компьютеру Studio, нажмите «▶ Старт» над вкладками I/O-сервера. Это запускает локальную проверку; проект на удалённом Runtime не изменяется.
- Откройте «Карта» и сравните контрольное значение с устройством. В карте OPC UA дополнительно выводятся качество и время получения. Если значения недоступны, проверьте сообщение, адрес, протокол, права доступа и формат данных.
- Завершите локальную проверку кнопкой «Стоп». Для редактирования полей, заблокированных при работе проверки, остановка обязательна.
- Откройте тэг шаблона, экземпляра или модели. В настройках ввода-вывода включите «Включить ввод-вывод» и выберите «Режим обмена». Для измерения, а также для OPC UA, используйте «Только чтение».
- В «Общая ссылка ввода-вывода» укажите существующую переменную карты, например
PLC1.PressureилиUaServer1.Pressure. Если для чтения и записи нужны разные адреса, включите соответствующий переключатель и заполните отдельные ссылки. Для булевого сигнала при необходимости включите «Инверсия». - При необходимости включите «Авария по плохому качеству I/O», задайте её приоритет и настройте масштабирование. Сохраните тэг.
- Назначьте I/O-сервер и модель с этим тэгом одному узлу Runtime. Сохраните узел и загрузите проект.
- В «Просмотр сервера» добавьте тэг в область «Значения» кнопкой «…». Сравните значение, качество и текст ошибки. После проверки Runtime обновите АРМ, если изменились его привязки.
Для команд записи необходимо разрешение устройства, подходящая область Modbus или переменная Siemens S7 с разрешённой записью, режим записи тэга и отключённый запрет записи I/O-сервера. Проверьте команды в режиме наладки.
Проверка значений и журнал обмена
Сравните значение в карте, значение тэга Runtime и значение на АРМ. При расхождении проверьте адрес, тип, масштабирование, инверсию и версию проекта, работающую на узле. Убедитесь, что динамический скрипт не заменил I/O-ссылку после запуска.
В просмотре значений узла проверьте качество и текст ошибки. «Неизвестная ссылка I/O» означает, что в текущей карте не найдена переменная по указанной ссылке; это не то же самое, что недоступный контроллер.
В журнале сервера можно выбрать конкретный I/O-сервер. Режим debug для Modbus показывает запросы и ответы и помогает проверить адресацию. Используйте подробный журнал на время диагностики: большой поток сообщений расходует место и затрудняет поиск остальных событий.
Siemens S7-1200/1500: подготовка контроллера
Siemens S7 TCP обеспечивает чтение и запись данных CPU через её Ethernet/PROFINET-интерфейс. Используется адресный обмен S7 по ISO-on-TCP, порт 102. Карта содержит адреса обычных блоков данных DB. Символьный доступ к оптимизированным DB и обмен PROFINET IO этим драйвером не выполняются.
- В TIA Portal откройте проект контроллера. Проверьте IP-адрес CPU и доступность её интерфейса с компьютера, на котором работает сервер приложений SAMUTAG.
- В свойствах CPU откройте Protection & Security → Connection mechanisms. Разрешите Permit access with PUT/GET communication from remote partner. На версиях CPU с управлением пользователями и ролями предварительно назначьте необходимые разрешения доступа согласно руководству этой CPU: расположение и доступность переключателя зависят от версии прошивки и TIA Portal.
- Создайте DB обмена или выберите существующий стандартный DB. В свойствах блока, на вкладке Attributes, отключите Optimized block access. Изменение этой настройки может изменить смещения переменных: после компиляции используйте новые адреса из TIA Portal.
- Добавьте переменные обмена. Запишите номер DB, тип каждой переменной и её смещение. Для BOOL также укажите номер бита.
- Скомпилируйте программу и аппаратную конфигурацию, затем загрузите изменения в CPU. Перед загрузкой проверьте предлагаемые TIA Portal действия: они могут потребовать остановки CPU или переинициализации данных.
- Разрешите сетевой доступ от Runtime к TCP-порту 102 CPU. Для кнопки «Старт» в Studio соединение устанавливается с компьютера Studio; после загрузки проекта — с узла Runtime.
PUT/GET предоставляет доступ по адресам памяти без защиты современного шифрованного HMI-сеанса. Используйте его в доверенной технологической сети и ограничьте сетевой доступ к контроллеру.
Siemens S7 TCP: настройка I/O-сервера
- На вкладке «I/O серверы» добавьте сервер. Задайте имя, например
PLC_Boiler, и выберите тип «Siemens S7 TCP (S7-1200/1500)». - Откройте настройки подключения и заполните поля по таблице ниже.
- Если команды записи не нужны, включите «Запретить запись». Этот переключатель блокирует все выходные команды данного I/O-сервера.
- Нажмите «Сохранить» в верхней панели и перейдите на вкладку «Карта».
| Поле | Назначение |
|---|---|
| IP-адрес или имя контроллера | Адрес Ethernet-интерфейса CPU. |
| Порт TCP | Обычно 102. Меняйте только при использовании явно настроенного перенаправления. |
| Rack / Slot | Параметры адресации CPU в S7-соединении. Начальные значения — 0 / 1; проверьте их по конфигурации своего контроллера. |
| Период опроса, мс | Пауза между завершением одного цикла чтения и началом следующего. Сетевой опрос выполняется независимо от скана Runtime. |
| Таймаут запроса, мс | Максимальное время ожидания одного сетевого ответа. |
| Попыток чтения до ошибки связи | Число попыток восстановить чтение в текущем цикле. По умолчанию 3. После исчерпания попыток выставляется ошибка связи. Запись автоматически не повторяется. |
| Срок устаревания данных, мс | Возраст последнего успешного чтения, после которого значение получает плохое качество. Должен быть не меньше периода опроса плюс таймаут, умноженный на число попыток. |
| Максимум байт в запросе чтения | Ограничение размера объединённого чтения соседних переменных одного DB. Дополнительно учитывается размер PDU, согласованный с CPU. |
Siemens S7 TCP: карта переменных и проверка обмена
Нажмите «Добавить переменную». Заполните имя, описание, адрес и тип. Для выходной команды включите «Разрешить запись»; по умолчанию переменная доступна только для чтения. Имена переменных должны быть уникальны внутри I/O-сервера.
| Пример адреса | Тип | Занимаемая память |
|---|---|---|
DB10.DBX0.1 | BOOL | Бит 1 байта 0. Номер бита от 0 до 7. |
DB10.DBB1 | BYTE, SINT | Один байт со смещения 1. |
DB10.DBW2 | WORD, UINT, INT | Два байта со смещения 2. |
DB10.DBD4 | DWORD, UDINT, DINT, REAL | Четыре байта со смещения 4. |
DB10.DBB8 | LREAL | Восемь байт со смещения 8. Начальный байт задаётся адресом DBB. |
Тип определяет интерпретацию содержимого памяти. Например, одинаковый адрес DBD может содержать REAL или DINT: выберите тот тип, который задан в программе ПЛК. Массивы представляются отдельными строками карты с рассчитанными смещениями; строки STRING и структуры в этом варианте драйвера не поддерживаются.
- Добавьте входную переменную
Temperatureтипа REAL с адресомDB10.DBD4, если именно этот адрес используется в вашем DB. - Нажмите «Старт». В карте проверьте значение, качество, время получения и состояние соединения. При ошибке наведите указатель на значение: подсказка содержит причину.
- Остановите локальную проверку перед изменением карты или настроек.
- В настройках I/O тэга шаблона укажите ссылку
PLC_Boiler.Temperature. Выберите нужное направление обмена. Для записи должны разрешать запись и тэг, и переменная карты, и I/O-сервер. - Назначьте I/O-сервер узлу Runtime и загрузите проект на узел. Проверьте значения и качество в диагностике узла.
Runtime получает последние считанные значения из памяти. Драйвер отправляет только изменённые выходы; запись BOOL выполняется битовой командой S7, без чтения и перезаписи соседних битов. Подтверждение записи означает принятие команды CPU, а фактическое состояние контролируется последующим чтением.
Siemens S7 TCP: диагностика ошибок
| Сообщение | Что проверить |
|---|---|
| Таймаут или отказ соединения | IP, доступность TCP 102, сетевые правила, питание CPU и доступное количество S7-соединений. |
| CPU отклонила COTP-соединение | Rack, Slot, параметры защиты и ресурсы соединений CPU. |
| Доступ запрещён, S7 0x03 | Разрешение PUT/GET, права доступа CPU и разрешённые операции с DB. |
| Адрес за границами DB, S7 0x05 | Байтовое смещение, размер переменной и фактическую длину загруженного DB. |
| DB отсутствует или недоступен, S7 0x0A | Номер DB, загрузку блока в CPU и отключение оптимизированного доступа. |
| Значение устарело | Время последнего успешного чтения, длительность полного опроса карты и установленный срок устаревания. |
| Запись запрещена настройками I/O-сервера | Переключатель «Запретить запись». Для отдельной переменной также проверьте «Разрешить запись». |
| Ошибка записи после обрыва соединения | Проверьте фактическое состояние ПЛК перед повторной командой: CPU могла принять запись до обрыва ответа. |
В журнале узла выберите источник нужного I/O-сервера. Журнал содержит установление и потерю связи, имя и адрес переменной при ошибке чтения или записи. В режиме debug дополнительно выводятся переданные и принятые кадры S7 в шестнадцатеричном виде.
Omron FINS: подготовка контроллера
Драйвер читает и записывает адресуемую память контроллеров Omron через FINS/TCP или FINS/UDP. Используется адресация областей CS/CJ/CP. Поддержка транспорта и доступные области зависят от модели CPU и установленного Ethernet-модуля; проверьте их в руководстве контроллера.
- Задайте IP-адрес Ethernet-интерфейса контроллера и включите нужный транспорт FINS. Стандартный порт — 9600.
- Для TCP разрешите подключение от компьютера Runtime. При значении SA1 = 0 драйвер запросит адрес клиента у контроллера; DA1 = 0 использует адрес сервера, полученный при подключении.
- Для UDP задайте разные номера узлов FINS компьютеру Runtime и контроллеру (1–254). Проверьте таблицу преобразования FINS/IP или автоматическое преобразование адресов в Ethernet-модуле. Обратный маршрут должен вести к компьютеру, выполняющему опрос.
- При прямом подключении к CPU оставьте номера сетей SNA/DNA и номер модуля DA2 равными 0. Для маршрутизируемой сети используйте настройки из проекта ПЛК.
- Определите адреса переменных и типы данных. Например, значение REAL по адресу D100 занимает слова D100 и D101; следующее значение REAL можно разместить с D102.
- Загрузите настройки в контроллер. При локальной проверке обмен идёт с компьютера Studio, после загрузки проекта — с узла Runtime. Для UDP каждому компьютеру нужен собственный свободный адрес FINS.
Omron FINS: настройки сервера
- На вкладке «I/O серверы» создайте сервер, например
PLC_Omron, и выберите Omron FINS (TCP/UDP). - Укажите IP-адрес, транспорт и порт. Заполните адреса FINS согласно конфигурации контроллера.
- Выберите порядок слов. По умолчанию младшее 16-битное слово передаётся первым. Внутри слова старший байт идёт первым. Порядок слов применяется к DWORD, UDINT, DINT, REAL и LREAL.
- Сохраните настройки, заполните карту и нажмите «Старт» для локальной проверки значений.
| Поле | Назначение |
|---|---|
| Период опроса | Пауза до следующего цикла чтения после завершения предыдущего. |
| Таймаут запроса | Предельное время ожидания ответа на команду. |
| Попыток чтения до ошибки связи | Количество попыток при сетевом сбое; по умолчанию 3. После исчерпания попыток устанавливается ошибка связи. |
| Срок устаревания данных | Время, после которого последнее прочитанное значение перестаёт считаться актуальным. |
| Максимум байт в запросе чтения | Ограничение объединения соседних адресов одной области. Чётное число от 8 до 1000; по умолчанию 400. |
| Запретить запись | Блокирует выходные команды всего I/O-сервера. |
Omron FINS: карта переменных
В карте задайте имя, описание, адрес, тип и разрешение записи. Для привязки тэга используйте ссылку PLC_Omron.ИмяПеременной. Фильтр ищет по имени, описанию и адресу.
| Тип | Пример адреса | Размер |
|---|---|---|
| BOOL | D100.0, CIO10.03, W20.15, H0.1, A100.2 | Один бит; номер после точки от 0 до 15 |
| WORD, UINT, INT | D100, CIO10, W20, H0, A100 | Одно 16-битное слово |
| DWORD, UDINT, DINT, REAL | D102 | Два последовательных слова |
| LREAL | D104 | Четыре последовательных слова |
D — память данных, CIO — область входов/выходов, W — рабочая область, H — удерживаемая область, A — вспомогательная область. Доступность конкретных адресов и запись в них определяются контроллером. Строки, EM-банки, таймеры и счётчики этим драйвером не адресуются.
Запись должна быть разрешена и в карте, и в настройках ввода-вывода тэга. Изменённое значение передаётся отдельной командой. BOOL записывается непосредственно в указанный бит, без перезаписи соседних битов. При потере подтверждения команда записи автоматически не повторяется.
Omron FINS: диагностика
Состояние связи отображается над картой; качество и ошибка конкретной переменной — в её строке. Журнал использует источник I/O.ИмяСервера. В режиме Debug записываются отправленные и полученные пакеты. После восстановления связи появляется запись об успешном подключении.
| Сообщение | Что проверить |
|---|---|
| Нет ответа или соединение отклонено | IP-адрес, порт, выбранный TCP/UDP, настройки Ethernet-модуля и доступность сети. |
| Ошибка согласования FINS/TCP | Разрешён ли TCP, свободен ли адрес SA1 и не исчерпан ли лимит подключений контроллера. |
| Нет ответа по UDP | Узлы SA1/DA1, соответствие FINS/IP и обратный маршрут к Studio или Runtime. |
| 0x1103, 0x1104 | Область памяти, адрес и число занимаемых слов. Уменьшите блок чтения при ограничении контроллера. |
| 0x2101, 0x2102, 0x2201 | Разрешение записи, защиту памяти и допустимость команды в текущем режиме CPU. |
| Значение устарело | Время последнего успешного чтения, длительность цикла и срок устаревания. |
| Число прочитано, но имеет неверную величину | Тип, начальный адрес и порядок 16-битных слов. |
Описание команд и кодов памяти: Omron W342, Communications Commands Reference Manual.
МЭК-60870-5-104: подключение станции телемеханики
SAMUTAG работает как управляющая станция (клиент). Сервер устройства передаёт состояния, измерения и показания счётчиков по TCP. После открытия соединения клиент разрешает передачу данных командой STARTDT, выполняет общий опрос и принимает спонтанные сообщения.
- Создайте I/O-сервер типа МЭК-60870-5-104. Укажите имя, по которому к его переменным будут обращаться тэги проекта.
- Введите IP-адрес устройства и порт. Стандартный порт — 2404. Адрес инициатора OA по умолчанию равен 0; при необходимости укажите значение, принятое на устройстве.
- Проверьте таймаут запросов, число неудачных попыток до ошибки связи и паузу между переподключениями. По умолчанию ошибка связи устанавливается после трёх неудачных попыток.
- Задайте период общего опроса. Значение 0 оставляет только опрос при подключении. Между общими опросами продолжается приём спонтанных данных.
- Откройте вкладку Карта, добавьте переменные и нажмите Старт для локальной проверки. Для работы на сервере приложений загрузите обновлённый проект на узел.
| Параметр | Назначение |
|---|---|
| t1, t2, t3 | Ожидание подтверждения, задержка отправки подтверждения и период проверки соединения. t2 должен быть меньше t1. |
| k и w | Размеры окон отправленных и принятых кадров. w не должен превышать k. |
| Часовой пояс устройства | Смещение времени CP56Time2a относительно UTC в минутах. Для устройства с московским местным временем укажите 180, для UTC — 0. Короткая метка времени без даты не преобразуется в полную дату. |
| Срок устаревания | 0 отключает проверку возраста значения. Это значение по умолчанию для спонтанного обмена: отсутствие изменений само по себе не означает потерю связи. При включении задайте срок больше периода общего опроса с учётом времени его выполнения. |
МЭК-104: карта данных и команды
Адрес записывается как CA:IOA: общий адрес станции и адрес информационного объекта. Например, 1:100. CA находится в диапазоне 1–65534, IOA — 0–16777215. Тип должен соответствовать данным, которые передаёт устройство.
| Тип карты | Значение |
|---|---|
| Single | Однопозиционное состояние BOOL. |
| Double | Двухпозиционное состояние: 1 — выключено, 2 — включено. Промежуточное и неопределённое состояния имеют плохое качество. |
| Step | Положение ступенчатого регулятора. |
| Bitstring | 32-битовая строка, представленная целым числом. |
| Normalized | Нормализованное измерение от −1 включительно до 1 исключительно. |
| Scaled | Масштабированное 16-битное целое. |
| Floating | 32-битное вещественное число. |
| Counter | Интегральное показание счётчика. |
Для управления включите Разрешить запись и выберите тип команды. Он задаётся отдельно от типа принимаемых данных. Команда может использовать другой CA:IOA; если адрес команды оставлен пустым, используется адрес переменной. Поддерживаются Single, Double, Regulating, Normalized, Scaled, Floating и Bitstring. Для Double и Regulating передаются значения 1 или 2.
Выбор перед выполнением (SBO) включает последовательность «выбрать — получить подтверждение — выполнить». Для Bitstring выбор не предусмотрен. Ожидать завершение команды включает проверку ACTTERM после положительного ACTCON. Включайте её, если устройство передаёт подтверждение завершения.
Запись выполняется только для изменённого значения, если она разрешена настройками I/O-сервера, карты и тэга. При отказе устройства или потере подтверждения команда автоматически не повторяется.
Диагностика обмена МЭК
В карте отображаются значение, качество и время получения. Подробная ошибка доступна в диагностике переменной и журнале I/O-сервера. В режиме Debug журнал содержит подробные сведения о запросах и ответах устройства.
| Сообщение | Действия |
|---|---|
| Соединение отклонено или истёк таймаут | Проверьте адрес, порт, доступность сети и разрешение клиентских подключений на устройстве. |
| Нет завершения общего опроса | Проверьте CA, поддержку общего опроса и таймаут. Станция должна завершить опрос сообщением ACTTERM. |
| Команда отклонена / нет подтверждения | Проверьте адрес команды, тип, Direct/SBO, права управления и блокировки устройства. |
| Неверный тип данных | Сопоставьте тип карты с типом данных устройства. |
| Плохое качество | Проверьте исходный флаг качества устройства, ошибку чтения, возраст данных и результат последней команды. |
Счётчики Меркурий 200, 230 и 234
Драйвер предназначен для чтения показаний по протоколу «Меркурий». Один I/O-сервер представляет один счётчик. Для нескольких приборов создайте отдельные серверы с разными сетевыми адресами. Концентратор Меркурий 225 и протокол СПОДЭС не поддерживаются этим драйвером.
- Проверьте интерфейс конкретного исполнения счётчика. Используйте совместимый последовательный адаптер или прозрачный TCP-шлюз. Шлюз должен передавать байты без Modbus TCP-заголовков. У исполнений с интерфейсом CAN нужен совместимый преобразователь; обычный USB–RS-485 его не заменяет.
- Создайте I/O-сервер с протоколом Меркурий 200 / 230 / 234. Выберите модель и способ подключения. Для TCP укажите адрес и порт шлюза; для последовательного порта — COM-порт в Windows или путь, например
/dev/ttyUSB0, в Linux, скорость, чётность и стоповые биты. Учётная запись службы должна иметь доступ к порту. - Укажите сетевой адрес счётчика. У Меркурий 200 он занимает четыре байта и обычно соответствует заводскому номеру. У 230/234 задаётся адрес 1–239; используйте значение из конфигурации прибора.
- Для 230/234 выберите кодировку пароля первого уровня: отдельные цифровые байты, ASCII или HEX. Она зависит от исполнения, а не только от номера модели. Если пароль изменён, задайте его в окружении службы Runtime и впишите имя переменной окружения в Studio. Например, при
password_env=MERCURY_READER_PASSWORDслужба должна получить соответствующую переменную. Значение пароля в проект не записывается. Пустое имя использует заводской пароль первого уровня. В режиме HEX значение должно содержать ровно шесть байтов, например01 01 01 01 01 01. Для исполнения с ASCII используйте ASCII-кодировку. Прибор должен отвечать в стандартном формате без повтора кода команды. - Сохраните настройки. На вкладке Карта нажмите Автозаполнение либо добавьте нужные измерения вручную. Автозаполнение добавляет отсутствующие параметры, сохраняя существующие строки.
- Запустите локальную проверку и проверьте значение, качество и время получения. Привяжите тэги проекта к переменным карты и загрузите проект на Runtime. Для нестандартного пароля настройте переменную окружения также на целевом сервере.
| Модель | Доступные измерения |
|---|---|
| 200 | Активная энергия по четырём тарифам, кВт·ч; текущая активная мощность, Вт. Команды 27h и 26h. |
| 230 / 234 | Фазные напряжения и токи; активная, реактивная и полная мощность по фазам и сумме; коэффициент мощности; частота; активная и реактивная энергия обоих направлений по тарифам и сумме. Команды 08h/11h и 05h. |
Доступность измерений определяется исполнением прибора. Неподдерживаемое измерение получает плохое качество и пояснение в карте. Показания передаются в единицах, указанных в списке измерений; коэффициенты трансформаторов дополнительно не умножаются. Сверьте масштаб с настройкой учёта конкретного счётчика. Все переменные карты доступны только для чтения. Архивы профиля нагрузки, журналы прибора, изменение тарифов и управление реле в этот набор не входят.
Период опроса по умолчанию составляет 5 секунд, таймаут одного ответа — 2 секунды. Таймаут ответа не является сроком устаревания показания. При сбое чтение повторяется, ошибка связи устанавливается после трёх неудачных попыток. Срок устаревания задаётся отдельно; значение 0 отключает этот контроль. При восстановлении обмена качество восстанавливается автоматически. Запросы к одному порту или TCP-шлюзу сериализуются между процессами одного хоста.
В режиме отладки журнал содержит отправленные запросы и ответы. Пароль открытия канала скрывается. При ошибке CRC проверьте параметры линии и помехи; при отсутствии ответа — интерфейс, адрес и доступность шлюза; при отказе доступа — пароль и его кодировку. Для Меркурий 234 с поддержкой СПОДЭС должен быть выбран именно протокол «Меркурий».
Форматы обмена: описание команд семейства 200 и описание команд 230/234.
Логика СПСеть: приборы СПТ и СПГ
Один I/O-сервер представляет один прибор СПСети. Драйвер читает текущие параметры и отдельные элементы индексных массивов, а также передаёт разрешённые команды записи. Номера каналов и параметров определяются руководством конкретного исполнения прибора.
- Проверьте, что прибор настроен на протокол СПСеть. Для прямого подключения используйте последовательный порт дополнительного интерфейса прибора либо одноведущую шину в восьмибитном режиме. При подключении к магистрали с передачей маркера используйте совместимый шлюз: самостоятельная передача маркера и девятибитный режим драйвером не выполняются.
- Создайте I/O-сервер и выберите Логика СПСеть. Для последовательного подключения укажите порт, скорость, чётность и стоповые биты, соответствующие прибору. В Linux предоставьте учётной записи службы доступ к порту. Для TCP укажите IP-адрес и порт шлюза.
- Выберите способ адресации из таблицы ниже. IP-адрес TCP-шлюза и его адрес в СПСети — разные настройки.
- Установите период опроса, таймаут ответа и число неудачных попыток. По умолчанию: 5 секунд, 2 секунды и 3 попытки. Таймаут ответа не ограничивает время между опросами. Срок устаревания задаётся отдельно; значение 0 отключает этот контроль.
- Сохраните настройки. На вкладке Карта добавьте переменные: имя, описание, адрес и тип значения. Для одиночного параметра используйте
канал:параметр, для элемента массива —канал:массив:индекс. Индекс указывается в системе нумерации прибора, без автоматического сдвига. - Запустите проверку и сопоставьте значения с показаниями прибора. Привяжите тэги проекта к переменным карты и загрузите проект на Runtime.
| Адресация | Настройка |
|---|---|
| Прямая / прозрачный шлюз | Укажите адрес прибора и свободный адрес клиента, оба 0–29 и разные. Прозрачный TCP-шлюз передаёт кадры СПСети без дополнительного заголовка. |
| Через адресуемый шлюз СПСеть | Укажите адрес конечного прибора и сетевой адрес шлюза 0–29. В исходящий кадр записывается адрес источника «адрес шлюза + 128»: ответ возвращается через дополнительный интерфейс шлюза. Сам шлюз обслуживает магистраль. |
| Без адреса — локальный прибор | Запрос не содержит адресов источника и назначения. Применяется только к локальному прибору на дополнительном интерфейсе, если такой обмен предусмотрен его руководством; маршрутизация не выполняется. |
Индекс архивного параметра и расписание
Для параметров, например 210, 211 или 215, можно читать отдельный элемент массива. В карте задайте канал и номер параметра, заполните поле Индекс элемента (0, 1, 2…) и выберите Архивный — по расписанию. Адрес 1:210:0 означает только элемент с индексом 0 параметра 210 канала 1. Нумерация передаётся прибору без сдвига. Принадлежность параметра к архивным назначается явно, а не определяется его номером.
- В настройках сервера откройте блок Опрос архивных параметров.
- Выберите Каждые N минут, например 10, либо В заданную минуту часа, например 1 для запуска в HH:01. Используются местные часы машины Runtime.
- Задайте паузу повторных попыток в секундах. Число повторов не ограничено: цикл завершается после успешного чтения всех участвующих архивных строк.
- Сохраните настройки и обновите конфигурацию Runtime. При запуске службы первый архивный опрос ожидает ближайший срок: N минут от старта либо следующую указанную минуту часа.
Успешно прочитанные элементы исключаются из текущего цикла. Если следующий срок наступил до завершения повторов, параллельный цикл не создаётся; пропущенные сроки не накапливаются. После завершения используется следующий будущий срок. При перезапуске службы расписание начинается заново, журнал выполненных запросов на диск не записывается.
Текущие параметры опрашиваются отдельно и получают приоритет на общей линии. Архивный цикл освобождает линию после каждого запроса; отдельный запрос может занять время до сетевого таймаута. Неудача архивного параметра не ухудшает качество текущих параметров. Последнее хорошее архивное значение сохраняется при первых неудачных попытках; после заданного порога ошибок его качество становится плохим, чтение продолжает повторяться. Обычный срок устаревания текущих показаний к архивным строкам не применяется.
В диагностике отображаются состояние архивного цикла, число оставшихся строк, ближайший срок расписания, время последнего завершённого опроса и ошибка. Это чтение выбранных параметров, а не выгрузка всего архива по времени.
Типы карты: REAL — действительное число, INT — целое, BOOL — 0 или 1, STRING — текст. Десятичный разделитель в числовом ответе может быть точкой или запятой. Текстовые данные прибора декодируются в CP866. Ошибка отдельного параметра отображается в его качестве и диагностике; остальные параметры продолжают опрашиваться.
Для записи включите Разрешить запись в строке карты, отключите общий запрет записи сервера и настройте направление I/O-тэга. Команда передаётся при изменении значения. Подтверждение проверяется, но потерянная или отклонённая команда автоматически не повторяется. Отказ записи отображается у соответствующей переменной.
При потере связи чтение повторяется; авария связи устанавливается после заданного числа неудачных попыток. Последний успешный снимок сохраняется до достижения этого порога. Опрос работает независимо от цикла Runtime, а обращения к одному порту или шлюзу между worker-процессами одного Runtime выполняются последовательно. Одну физическую линию назначайте одному Runtime-узлу.
В журнале выберите источник соответствующего I/O-сервера. В режиме debug записываются кадры запросов и ответов. При ошибке CRC проверьте режим линии и помехи; при отсутствии ответа — адреса, параметры интерфейса и обратную маршрутизацию; при диагностике параметра — его номер, канал, тип и доступность в данном исполнении прибора.
Драйвер предназначен для СПСети, а не для протокола М4. Автоматическое чтение словаря параметров, выгрузка архивов по времени и журналов прибора в этот набор не входят. Формат обмена описан в спецификации производителя РАЖГ.00276-33.
SNMP: чтение и запись по OID
I/O-сервер SNMP связывает тэги проекта с параметрами сетевого оборудования. Чтение и запись выполняются службой Runtime независимо от Studio. Community и ключи аутентификации и шифрования задаются переменными окружения на машине службы Runtime, а для локальной проверки — на машине Studio. В проекте сохраняются только имена этих переменных.
- Включите SNMP-агент на устройстве и предоставьте серверу Runtime доступ к его UDP-порту, обычно 161.
- Создайте I/O-сервер SNMP. Укажите адрес устройства, порт и версию: 1, 2c или 3.
- Для v1/v2c укажите переменную окружения Community. Пустое поле означает
public. Для v3 укажите пользователя, алгоритм аутентификации и переменную окружения ключа. Поддерживаются MD5, SHA-1 и SHA-256. При необходимости включите AES128 и задайте переменную окружения ключа шифрования. Поле контекста обычно оставляют пустым. - Установите период опроса, таймаут и число неудачных попыток до ошибки связи. По умолчанию период — 5 секунд, таймаут — 2 секунды, попыток — 3. Срок устаревания задаётся отдельно; 0 отключает его проверку.
- В карте добавьте переменную и числовой OID с индексом экземпляра: например,
1.3.6.1.2.1.1.3.0для sysUpTime. Тип должен соответствовать определению OID в документации устройства. - Запустите проверку, проверьте значение и качество, затем привяжите тэг проекта к переменной карты и загрузите проект на Runtime.
INTEGER — знаковое 32-битное значение; UNSIGNED и COUNTER32 — беззнаковые 32-битные; COUNTER64 — 64-битный счётчик; TIMETICKS — сотые доли секунды, без автоматического перевода в секунды. STRING декодируется как UTF-8, OID и IPADDRESS передаются строкой, BOOL — как 0/1. REAL предназначен для устройств, передающих число строкой OctetString. Счётчики доступны только для чтения.
Для SET включите разрешение записи в строке карты и настройте права на стороне агента. Общий запрет записи I/O-сервера имеет приоритет. Команда передаётся при изменении значения и не повторяется автоматически при потере ответа. Неизвестный OID и отказ доступа отображаются у переменной; отсутствие ответа вызывает повтор чтения и затем ошибку связи. Приём Trap/Inform, загрузка MIB и автоматический обход WALK в эту реализацию не входят.
MQTT: подписки и публикация
I/O-сервер MQTT связывает тэги проекта с сообщениями брокера. Runtime получает значения по подписке и публикует разрешённые команды независимо от Studio. Пароль подключения и пароль ключа клиентского сертификата задаются переменными окружения на машине службы Runtime, а для локальной проверки — на машине Studio. В проекте сохраняются только имена этих переменных.
- Создайте I/O-сервер MQTT. Укажите адрес брокера и порт: обычно 1883 без TLS или 8883 с TLS. Выберите MQTT 3.1.1 либо MQTT 5.
- При необходимости укажите пользователя и переменную окружения пароля. Включите TLS для защищённого соединения. Пустое поле CA использует доверенные сертификаты операционной системы; для собственного центра сертификации укажите файл CA. Клиентский сертификат и ключ задаются парой. Проверка сертификата и имени сервера выполняется всегда. Файлы сертификатов и ключей должны находиться на машине службы Runtime, а для локальной проверки — на машине Studio.
- Настройте Keep Alive, таймаут ответа и переподключение. Срок устаревания относится к времени получения конкретного значения, а не к состоянию TCP-соединения. Для редких сообщений оставьте 0 либо задайте срок, превышающий ожидаемый интервал публикаций.
- В карте укажите точный топик подписки, например
plant/boiler1/temperature, и тип REAL, INT, BOOL или STRING. Шаблоны+и#не используются: одна строка карты должна однозначно определять значение. - Для простого сообщения выберите Текст. Для JSON выберите JSON и, при необходимости, JSON Pointer: например
/sensor/temperatureизвлекает температуру из вложенного объекта. В пути~1означает косую черту,~0— тильду. Можно указывать индексы массивов. - Выберите QoS 0, 1 или 2. Для управления разрешите запись и укажите отдельный топик публикации, например
plant/boiler1/setpoint. Пустой топик публикации означает использование топика подписки. Retain по умолчанию отключён. - Сохраните карту, запустите проверку и отправьте сообщение с устройства. После получения значения проверьте качество и привяжите тэг проекта.
Публикация передаёт одно значение: текст либо JSON-скаляр. JSON Pointer применяется только при чтении и не создаёт вложенную структуру команды. QoS 0 подтверждает отправку в соединение, QoS 1/2 — соответствующий обмен с брокером; это не подтверждение исполнения команды оборудованием. При разрыве создаётся новая чистая сессия с уникальным Client ID и заново оформляются подписки. Неподтверждённые команды не сохраняются для повторной отправки после переподключения.
До первого сообщения переменная имеет плохое качество. Сохранённое брокером retained-сообщение принимается как обычное значение; срок устаревания отсчитывается от его получения. Для нескольких строк одного топика можно задать разные JSON Pointer. Допускаются UTF-8 сообщения до 1 МиБ. Ошибка JSON или типа влияет на соответствующую строку карты. В журнале видны ошибки подключения, отказ подписки, публикации и восстановление связи; пароли и ключи не выводятся.
Симулятор: проверка проекта без оборудования
Симулятор формирует значения внутри службы I/O. Его переменные связываются с тэгами тем же способом, что и сигналы реального оборудования. Это позволяет проверить графику, скрипты, аварии и запись истории до подключения контроллера.
- Создайте I/O-сервер типа «Симулятор», задайте имя и период опроса.
- На вкладке «Карта» добавьте переменную. Укажите уникальный ключ сигнала, тип данных и генератор.
- Для числового сигнала задайте минимум, максимум и период. Для постоянного значения укажите число,
true/falseили строку в кавычках. - Сохраните настройки и нажмите «Старт». В карте появятся значения. Назначьте соответствующие I/O-ссылки тэгам проекта.
| Генератор | Поведение |
|---|---|
| Постоянное значение | Сохраняет заданное значение. При разрешённой записи принимает команды Runtime и оператора. |
| Синусоида | Плавно изменяет числовое значение между минимумом и максимумом. |
| Пила | Линейно увеличивает значение и возвращается к минимуму в начале следующего периода. |
| Случайное значение | Формирует число в заданных пределах. Начальное число генератора позволяет повторять последовательность при новом запуске. |
| Переключение BOOL | В первую половину периода возвращает FALSE, во вторую — TRUE. |
В настройке «Имитация неисправности» можно включить плохое качество или потерю связи. Задайте период и длительность неисправности. Период 0 означает постоянную неисправность. При потере связи действует установленное число неудачных попыток до ошибки связи. После перезапуска службы исходные постоянные значения восстанавливаются из конфигурации.


BACnet/IP: объекты и приоритетная запись
Клиент BACnet/IP читает свойства объектов устройства по UDP. Поддерживается адресный опрос; для поиска объектов используется список object-list выбранного устройства. Изменение значений выполняется подтверждаемой командой WriteProperty без автоматического повторения.
- На устройстве разрешите BACnet/IP и проверьте его IP-адрес и UDP-порт. Обычно используется порт 47808.
- Создайте сервер «BACnet/IP». Укажите адрес устройства и локальный адрес клиента. Значение
0.0.0.0:0позволяет системе выбрать интерфейс и свободный порт; при ограничениях сети укажите конкретный локальный IPv4 и порт. - Задайте уникальный Device Instance клиента. Не используйте одинаковый Device Instance для одновременно работающих клиентов одной BACnet-сети.
- Сохраните настройки. Откройте карту и нажмите «Считать карту». Будут добавлены аналоговые, дискретные и многостатусные объекты.
- Для ручного добавления задайте адрес, например
analog-input:1/present-value. У массивного свойства укажите индекс; −1 означает свойство целиком.
Проверка status-flags переводит переменную в плохое качество, если устройство сообщает fault или out-of-service. Отсутствующее свойство или ошибка доступа отображаются у конкретной переменной. Потеря ответа обрабатывается как ошибка связи.
Для управления разрешите запись у переменной и выберите приоритет от 1 до 16. Режим «Освободить значение выбранного приоритета» отправляет NULL: дальнейшее значение определяет приоритетная логика устройства. Свойство должно поддерживать такую команду. Подписки COV, маршрутизация MS/TP и регистрация Foreign Device через BBMD в этой версии не настраиваются.


M-Bus: приборы учёта
Драйвер читает переменные записи проводного M-Bus. Для подключения к последовательному порту требуется M-Bus-мастер с соответствующим электрическим интерфейсом. Обычный преобразователь RS-485 его не заменяет. TCP-вариант предназначен для шлюза, который прозрачно передаёт телеграммы M-Bus.
- Создайте сервер «M-Bus». Один сервер представляет один прибор с заданным первичным адресом.
- Выберите последовательный порт либо прозрачный TCP-шлюз. Для прямого подключения укажите порт и скорость; обмен выполняется в формате 8E1. Для шлюза задайте IP-адрес и TCP-порт.
- Укажите первичный адрес прибора от 0 до 250. Устройства на одной линии должны иметь различные адреса.
- Сохраните конфигурацию и нажмите «Считать карту». Studio прочитает телеграммы и создаст переменные для доступных записей.
- Проверьте описания и типы значений, затем привяжите нужные переменные к тэгам проекта.
Адрес переменной — индекс записи, начиная с 0. При чтении карты сохраняется сигнатура DIF/VIF. Если прибор впоследствии изменит структуру ответа, несовпадение сигнатуры будет показано как ошибка качества вместо выдачи значения другого параметра. После изменения конфигурации прибора считайте карту повторно.
Один опрос получает весь набор записей; запрос для каждого тэга отдельно не отправляется. Многочастный ответ ограничен параметром «Максимум телеграмм в ответе». Проверяются длина, адрес и контрольная сумма. Карта доступна только для чтения. Вторичная адресация, поиск приборов по вторичным адресам и Wireless M-Bus в этой версии не поддерживаются.


HTTP/JSON: обмен с HTTP API
Сервер HTTP/JSON периодически получает один JSON-документ и распределяет его поля по переменным карты. Можно использовать HTTP или HTTPS, а также авторизацию Basic и Bearer. Пароль и токен задаются переменными окружения службы; в проекте сохраняются только имена этих переменных.
- Создайте сервер «HTTP/JSON» и укажите полный URL чтения, например
https://device.example/api/status. - Выберите способ авторизации. Для Basic задайте имя пользователя и переменную окружения с паролем; для Bearer — переменную с токеном.
- Для HTTPS оставьте проверку сертификата включённой. При использовании внутреннего центра сертификации укажите файл доверенных CA.
- Настройте период, таймаут и максимальный размер ответа. Сохраните конфигурацию и нажмите «Считать карту» либо добавьте переменные вручную.
- Задайте адрес поля в формате JSON Pointer. Например, для
{"sensor":{"temperature":22.5}}используйте/sensor/temperature. Элемент массива задаётся числом:/devices/0/value. Знак$означает корневое значение.
Символы ~ и / внутри имени поля кодируются как ~0 и ~1. Отсутствующее поле или неподходящий тип дают ошибку качества только соответствующей переменной. Ошибка HTTP, неполный ответ и превышение времени запроса учитываются как неудачный опрос.
Для записи разрешите её у переменной, задайте путь на том же сервере, метод PUT, POST или PATCH и поле JSON команды. Например, путь /api/setpoint и поле /value отправят {"value":25}. Пустое поле команды передаёт отдельное значение. Перенаправления на другие URL и автоматический повтор команды не выполняются. После записи очередной опрос читает фактическое состояние.


DLMS/COSEM: адреса OBIS и профили
Драйвер использует Logical Name referencing: объект определяется кодом OBIS, классом COSEM и номером атрибута. Доступны TCP Wrapper и последовательный HDLC, без аутентификации или с паролем LLS. HLS, шифрование сообщений, Short Name referencing и начальное согласование IEC 62056-21 Mode E в этой версии не поддерживаются. Прибор должен разрешать выбранный способ доступа.
- Уточните у изготовителя счётчика адрес клиента, логический адрес сервера, режим доступа и таблицу OBIS.
- Создайте сервер «DLMS/COSEM». Для TCP Wrapper укажите IP-адрес и порт, обычно 4059. Для HDLC задайте последовательный порт, скорость и физический адрес. Прозрачная передача HDLC через TCP не является TCP Wrapper.
- Установите адрес клиента и логический адрес сервера. При LLS укажите переменную окружения с паролем. Она должна быть доступна той службе, которая выполняет опрос.
- Сохраните настройки и нажмите «Считать карту». Studio запросит список объектов Association LN и добавит объекты Data, Register, Extended Register, Demand Register, Profile Generic и Clock, если они присутствуют.
- Проверьте типы переменных по документации счётчика. Для регистра укажите, например, OBIS
1.0.1.8.0.255, класс 3 и атрибут 2.
Настройка «Применять scaler_unit регистра» учитывает десятичный множитель, заданный счётчиком. При отключении возвращается исходное числовое значение. При записи числового регистра выполняется обратное преобразование; непредставимое для выбранного типа значение отклоняется. Единицы измерения и описание тэга задаются в проекте.
Для буфера Profile Generic используйте класс 7, атрибут 2 и тип STRING: набор записей возвращается в формате JSON. Поля «Первая запись профиля» и «Последняя запись профиля» ограничивают диапазон по индексам, начиная с 1. Нулевая первая запись отключает выбор диапазона; нулевая последняя означает чтение до конца. Размер ответа и число блоков ограничиваются настройками сервера.
При разрешении записи необходимо явно выбрать тип COSEM. Счётчик также должен разрешать запись данного атрибута для используемой ассоциации. Команда SET выполняется один раз; при потере ответа автоматического повторения нет.


Чтение и перенос карт I/O-серверов
Кнопка «Считать карту» запускает фоновое чтение и показывает его состояние в окне. При ошибке существующая карта остаётся без изменений. Переключатель «Обновить существующие переменные» разрешает замену настроек совпадающих имён; без него такие имена пропускаются.
«Экспорт JSON» сохраняет имена, описания, адреса, типы и параметры переменных. «Импорт JSON» переносит их в сервер того же протокола. Настройки подключения и секреты в файл карты не входят. Проверка выполняется для всей карты до применения изменений.
Для чтения карты устройство должно быть доступно компьютеру Studio. После загрузки проекта на Runtime обмен выполняется с компьютера Runtime. Изменённая карта вступает в действие в рабочем Runtime после следующей загрузки проекта.