- Описание функциональных характеристик системы
- Поддержание жизненного цикла
- Установка PromUC
- Настройка сервисов
- Обновление PromUC
- Резервное копирование и восстановление базы данных Promuc FrameWork
- Рекомендации по безопасности
- Руководство по эксплуатации и администрированию
- Module GIS
- Конфигурирование правил и сценариев
- Module Framework
- Module Interface
- Технологии проекта
- Эксплуатация КТС
- Единый сервис аутентификации
- Информация о релизах
Узел ModbusTCP¶
Modbus TCP — это протокол связи, используемый для передачи данных между устройствами в промышленных сетях. Протокол является частью стандарта Modbus, который был разработан для обеспечения простого и эффективного способа связи между электронными устройствами.
Modbus TCP (Modbus over TCP/IP) использует протокол TCP/IP для передачи данных по сетям Ethernet. Этот протокол работает на прикладном уровне модели OSI. Передает данные в формате TCP/IP пакетов, которые включают в себя заголовок Modbus и полезную нагрузку.
Данный протокол подходит для больших расстояний и большого количества устройств, так как Ethernet позволяет легко масштабировать сеть.

ModbusTCP module¶
Узел опроса устройств по протоколу Modbus TCP.
Конфигурация узла:¶
Входные данные¶
Структура:
ip - адрес устройства, к которому мы подключаемся
port - порт через который происходит связь с устройством
int
device-name - наименование устройства (произвольно)
str
period - время опроса подключенных устройств в мс
int
order -
ByteOrder
- big - BigEndian (BE). Cамый старший байт имеет наименьший адрес.str
- любое другое значение - LittleEndian (LE). Порядок от младшего к старшему.str
scale - масштаб значения. 1 - отсутствие масштабирования.
double
function - тип запрашиваемой операции. Доступно 4 варианта:
str при настройке, но в регистр идёт int
- FC01 - Coil Status - FC02 - Input Status - FC03 - Holding Register - FC04 Input Registertype - тип передаваемых данных, можно написать CapsLock-ом.
str
- float64, float32 uint32, uint16 -int32, int16 - boolquantity - Количество регистров для чтения.
int
- 1- для type = int16, uint16, bool - 2 - для type = int32, uint32, float32 - 4 - для type = float64address - адрес регистра с которого начинается чтение.
int
property-name - имя свойства для идентификации данных.
str
source - Источник данных
str
device-id - идентификатор устройства
int
Вкладка Ручные:
в разработке…
Вкладка Из файла:
Загрузка настроек из файла .csv.
Пример содержимое .csv файла с настройками:
ip |
port |
device-name |
period |
order |
scale |
function |
type |
quantity |
address |
property-name |
source |
device-id |
---|---|---|---|---|---|---|---|---|---|---|---|---|
192.168.1.194 |
1502 |
umg |
5000 |
big |
1 |
FC03 |
int16 |
1 |
0 |
address0 |
ABC/adr0 |
1 |
192.168.1.194 |
1502 |
umg |
5000 |
big |
1 |
FC03 |
int16 |
1 |
1 |
address1 |
ABC/adr1 |
1 |
192.168.1.194 |
1502 |
umg |
5000 |
big |
1 |
FC03 |
int16 |
1 |
2 |
address2 |
ABC/adr2 |
1 |
Csv
ip;port;device-name;period;order;scale;function;type;quantity;address;property-name;source;device-id
192.168.1.194;1502;umg;5000;big;1;FC03;bool;1;0;address0;ABC/adr0;1
192.168.1.194;1502;umg;5000;big;1;FC03;bool;1;1;address1;ABC/adr1;1
192.168.1.194;1502;umg;5000;big;1;FC03;bool;1;2;address2;ABC/adr2;1
Выходные данные¶
connection_status: bool
device: string
time: uint64
timer: std::chrono::duration_cast<std::chrono::milliseconds>
values[]: * address: int * property-name: string * source: string * type: string * value: string
Json
{
"connection_status": Ok,
"device": "umg",
"time": 1672531200000,
"timer": 1,
"values": [
{
"address": 0,
"property-name": "address0",
"source": "ABC/adr0",
"type": "int16",
"value": "0"
},
{
"address": 1,
"property-name":"address1",
"source": "ABC/adr1",
"type": "int16",
"value": 1
},
{
"address": 2,
"property-name":"address2",
"source": "ABC/adr2",
"type": "int16",
"value": 2
}
]
}
Пример создания цепочки с загрузкой конфигурации Modbus устройства из файла:¶
Пример будет приведен на локальном устройстве с использованием эмулятора ModbusSlave. Если вы не пользователь Windows, то Wine - отличное решение.
Добавим в ваш compose.yaml следующий сервис:
modbus_tcp: container_name: modbusTCP_emul restart: on-failure build: dockerfile: ./test_server/mbs_eml_tcp.Dockerfile ports: - 1502:1502
Надеюсь, файл mbs_eml_tcp.Dockerfile будет у вас для теста.
Узнаем ip нашего хоста в сети:
Создаём файл .csv для входных данных в узел ModbusTCP (пример смотрим в описании), ставим в столбец ip ваш адрес > Обязательно должны быть все ячейки адресы быть одинаковыми!
Добавьте узел ModbusTCP, выберите вкладку File, загрузите файл в виде, как указано выше, в формате CSV:
Добавьте узел Вывод в сокет, соедините узлы:
Запустим наш compose.yaml, должно собраться всё успешно.
Запустите ModbusSlave, во вкладке connection добавьте новое подключение, как на изображении (чтобы поменять значение ip: снимите флажок с Any Address, при сохранении верните флажок в исходное состояние), можно оставить значение как 127.0.0.1 или
Сохраните собранную цепочку в PromUC и откройте консоль браузера для удостоверения в том, что узел ModbusTCP работает - должна загореться зеленая лампочка.
Откроем ModbusSlave и в Communication Traffic можем наблюдать:
У меня закончился пробный период modbus slave, поэтому я скачал diagslave (/Документы). Чтобы его запустить следует ввести:
sudo ./diagslave -p 21502