МКИ: различия между версиями

Материал из EWiki
Перейти к навигации Перейти к поиску
 
(не показаны 22 промежуточные версии этого же участника)
Строка 2: Строка 2:


=== Схема тестового стенда ===
=== Схема тестового стенда ===
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]
=== Подключение и настойка оборудования ===
=== Подключение и настойка оборудования ===
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:
Строка 118: Строка 120:
|1
|1
|}
|}
Установка базовой системы Ubuntu 22.0x Server на компьютер '''MCM-SNIFFER''' производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:
Установка базовой системы Ubuntu Server 24.0x на компьютер '''MCM-SNIFFER''' производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:
{| class="wikitable"
{| class="wikitable"
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER
Строка 137: Строка 139:
</syntaxhighlight>
</syntaxhighlight>
а также проверить доступ к серверу по SSH с компьютера администратора:<syntaxhighlight lang="sh">
а также проверить доступ к серверу по SSH с компьютера администратора:<syntaxhighlight lang="sh">
ssh entcor@192.168.2.23 (текущий адрес сервера MCM-SNIFFER)
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)
</syntaxhighlight>
</syntaxhighlight>'''Примечание:''' для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:<syntaxhighlight lang="sh">
sudo apt install mc
</syntaxhighlight>Также в дальнейшем целесообразно запускать Midnight Commander через '''sudo''':<syntaxhighlight lang="sh">
sudo mc
</syntaxhighlight>Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.
 
==== Настройка сетевых интерфейсов ====
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге '''/etc/netplan''' создать файл с расширением .yaml (например, '''01-network.yaml''') со следующим содержимым:<syntaxhighlight lang="yaml">
network:
    version: 2
    ethernets:
        enp5s0:
            dhcp4: false
            addresses:
                - 192.168.2.15/24
            routes:
              - to: default
                via: 192.168.2.254
            nameservers:
                addresses: [192.168.2.60, 176.114.16.33]
        enp6s0:
            dhcp4: false
        enp7s0:
            dhcp4: false
        enp8s0:
            dhcp4: false
    bridges:
        docker0:
            interfaces: [enp6s0, enp7s0, enp8s0]
</syntaxhighlight>'''Примечания:'''


# Для интерфейса '''enp5s0''' вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в '''via''' и '''nameservers''' соответственно).
# В файле конфигурации заранее определяется мост '''docker0''', который будет использоваться Docker'ом после его установки. Таким образом, интерфейсы '''enp6s0/enp7s0/enp8s0''' заранее подключаются к мосту '''docker0''', и, соответственно, в будущем будут доступны из Docker.
# Для удобства проще скопировать готовый файл '''01-network.yaml''' с компьютера администратора и положить его в '''/etc/netplan.''' Файлу  следует установить права по маске 0100600.
# Как показывает практика, существующий в '''/etc/netplan''' файл конфигурации по умолчанию '''50-cloud-init.yaml''' лучше переименовать во что-то типа '''50-cloud-init.yaml.bak,''' иначе у интерфейса '''enp5s0''' будет образовываться 2 адреса - статический из настроек в '''01-network.yaml''' и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле '''50-cloud-init.yaml''' для интерфейса '''enp5s0''' параметра '''dchp4: false''', но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в '''/etc/netplan'''  только один файл '''01-network.yaml''' с настройками интерфейсов.
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение '''netplan generate''' . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Саму конфигурацию лучше применять через '''netplan try --timeout  30''' (или другое не сильно большое количество секунд, чтобы она автоотменилась в случае косяков). Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.
# Для проверки работоспособности моста '''docker0''' перед настройкой интерфейсов следует запустить постоянный пинг (с параметром '''-t''') с '''MCM-NODE1''' (10.0.0.1) на '''MCM-NODE2''' (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения '''netplan try''' следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост '''docker0'''.
==== Установка сертификата Entcor ====
==== Установка сертификата Entcor ====
С компьютера администратора следует скопировать файл сертификата '''entcor.crt''' на узел '''MCM-SNIFFER''' по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):<syntaxhighlight lang="sh">
Перед установкой собственно компонентов МКИ с компьютера администратора следует скопировать файл сертификата '''entcor.crt''' и разместить его в каталоге /usr/local/share/ca-certificates (удобнее всего это сделать через Shell-link в панели Midnight Commander). Затем сертификат необходимо обновить, после чего выполнить перезагрузку:<syntaxhighlight lang="sh">
scp entcor.crt entcor@192.168.2.23:/home/entcor
</syntaxhighlight>Затем на компьютере '''MCM-SNIFFER''' следует перенести сертификат в необходимый каталог и выполнить его обновление:<syntaxhighlight lang="sh">
sudo mv entcor.crt /usr/local/share/ca-certificates
sudo update-ca-certificates  
sudo update-ca-certificates  
</syntaxhighlight>'''Примечание:''' после обновления сертификатов необходимо выполнить перезагрузку компьютера '''MCM-SNIFFER'''.
</syntaxhighlight>'''Примечание:''' после обновления сертификатов необходимо выполнить перезагрузку компьютера '''MCM-SNIFFER'''.
Строка 169: Строка 203:
</syntaxhighlight>Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
</syntaxhighlight>Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository


==== Подключение интерфейсов к L2 Bridge для Docker ====
==== Установка компонентов системы МКИ ====
Предварительно следует запустить постоянный пинг (с параметром '''-t''') с '''MCM-NODE1''' (10.0.0.1) на '''MCM-NODE2''' (10.0.0.2) и наоборот, убедиться в том, что узлы недоступны друг для друга.
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).


Далее необходимо выполнить подключение внутренних интерфейсов обмена данными к мосту '''docker0''':<syntaxhighlight lang="sh">
==== Вариант 1: Установка с помощью инсталляционного пакета ====
sudo ip link set dev enp6s0 master docker0
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы '''install.sh''' и '''latest.tar.gz'''.
sudo ip link set dev enp7s0 master docker0
sudo ip link set dev enp8s0 master docker0
sudo ip link set dev docker0 up
ip link show
</syntaxhighlight>Ссылка на руководство: https://chrisjhart.com/Bridge-Network-Interfaces-on-Ubuntu-22.04/


Для сохранения настроек моста '''docker0''' после перезагрузки сервера необходимо в каталоге '''/etc/netplan''' создать файл с расширением .yaml (например, '''01-network.yaml''') со следующим содержимым:<syntaxhighlight lang="yaml">
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:<syntaxhighlight lang="sh">
network:
chmod +x install.sh
    version: 2
</syntaxhighlight>Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:<syntaxhighlight lang="sh">
    ethernets:
docker login registry.entcor
        enp5s0:
</syntaxhighlight>Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта '''install.sh'''.
            dhcp4: false
            addresses:
                - 192.168.2.15/24
            routes:
              - to: default
                via: 192.168.2.254
            nameservers:
                addresses: [192.168.2.60, 176.114.16.33]
        enp6s0:
            dhcp4: false
        enp7s0:
            dhcp4: false
        enp8s0:
            dhcp4: false
    bridges:
        docker0:
            interfaces: [enp6s0, enp7s0, enp8s0]
</syntaxhighlight>'''Примечания:'''  


# Для интерфейса '''enp5s0''' вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в '''via''' и '''nameservers''' соответственно).
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог '''/opt/e-node/deploy''', куда выполнялось развертывание компонентов системы инсталляционным скриптом '''install.sh'''.
# Для удобства проще скопировать готовый файл с компьютера администратора и положить его в '''/etc/netplan''' .
# Если нет необходимости сразу задействовать интерфейсы '''enp6s0/enp7s0/enp8s0''' в мосте '''docker0''', то можно предыдущие команды '''ip link set dev''' не выполнять, а вместо этого отредактировать/скопировать файл в '''/etc/netplan'''.
# В существующем в '''/etc/netplan''' файле конфигурации по умолчанию '''50-cloud-init.yaml''' следует для интерфейса '''enp5s0''' установить параметр '''dchp4: false''', иначе у интерфейса будет 2 адреса - статический из настроек в '''01-network.yaml''' и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу.


Далее в том же каталоге следует создать/отредактировать файла '''.env''', в котором следует установить следующие параметры:


После выполнения настройки интерфейсов следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост '''docker0'''.
* MONITOR_DATA_IF = <имя интерфейса на узле '''MCM-SNIFFER''',  на котором выполняется прослушка, например, enp6s
* MODE = enode


==== Установка компонентов системы МКИ ====
'''Примечание:''' вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так.  
Получение последней версии инсталляционного пакета производится с FTP-сервера '''Jenkins (192.168.2.49)'''. Для этого необходимо подключиться к нему с узла '''MCM-SNIFFER''' по FTP, используя обычную пару логин-пароль и выкачать оттуда файлы '''install.sh''' и '''latest.tar.gz'''.
 
Развертывание контейнеров производится запуском скрипта '''install.sh'''.


'''Примечание:''' перед запуском необходимо установить для скрипта '''install.sh''' права на выполнение командой chmod:<syntaxhighlight lang="sh">
==== Вариант 2: Установка непосредственно из репозитория Git ====
chmod +x install.sh
</syntaxhighlight>


==== Запуск компонентов системы МКИ ====
Получение последней версии инсталляционного пакета производится из  Git-репозитория '''e-deploy''', находящегося по адресу  '''<nowiki>http://192.168.2.61</nowiki>''', (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку '''develop'''): <syntaxhighlight lang="sh">
После установки компонентов МКИ можно выполнить их запуск посредством скрипта '''enode.sh''', расположенного в каталоге    '''/opt/e-node/deploy'''.  
git clone http://192.168.2.61/e-node/e-deploy.git
git switch develop


'''Примечание:''' для нормальной работы стека '''common''' необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:<syntaxhighlight lang="sh">
</syntaxhighlight>Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:<syntaxhighlight lang="sh">
docker login registry.entcor
docker login registry.entcor
</syntaxhighlight>
</syntaxhighlight>после чего нужно перейти в каталог '''e-deploy''' (в том каталоге, где выполнялся git clone) и выполнить следующую команду:<syntaxhighlight lang="sh">
./enode.sh init
</syntaxhighlight>Далее в том же каталоге следует создать/отредактировать файла '''.env''', в котором следует установить следующие параметры:


Конфигурирование выполняется посредством редактирования файла '''.env''', в котором следует установить следующие параметры:
MONITOR_DATA_IF = <имя интерфейса на узле '''MCM-SNIFFER''',  на котором выполняется прослушка, например, enp7s0>  
 
MONITOR_DATA_IF = <имя интерфейса на узле '''MCM-SNIFFER''',  на котором выполняется прослушка, например, eno1>  


MODE = enode  
MODE = enode  


'''Примечание:''' вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так.  
'''Примечание:''' вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так.  
 
==== Запуск компонентов системы МКИ ====
 
После установки компонентов МКИ можно выполнить их запуск следующей командой: <syntaxhighlight lang="sh">
 
Непосредственно запуск компонентов системы МКИ осуществляется из каталога '''/opt/e-node/deploy''' следующей командой: <syntaxhighlight lang="sh">
enode <имя стека> start
enode <имя стека> start
</syntaxhighlight>'''Примечание:''' названия нужных стеков можно посмотреть в каталоге stacks (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:<syntaxhighlight lang="sh">
</syntaxhighlight>'''Примечание:''' названия нужных стеков можно посмотреть в каталоге '''stacks'''  в '''e-deploy''' (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:<syntaxhighlight lang="sh">
enode analytic start
enode common start
enode common start
enode asutp start
enode asutp start
enode ha-server start
 
enode analytic start
</syntaxhighlight>'''Примечание:'''  стек '''analytic''' рекомендуется запускать перед стеком '''common''' из-за каких-то особенностей функционирования:
</syntaxhighlight>Проверка запуска сервисов производится обычным образом с помощью команды:<syntaxhighlight lang="sh">
 
Проверка запуска сервисов производится обычным образом с помощью команды:<syntaxhighlight lang="sh">
docker ps
docker ps
</syntaxhighlight>
</syntaxhighlight>


==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда '''MCM-NODE1''' и '''MCM-NODE2''' посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet.  
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда '''MCM-NODE1''' и '''MCM-NODE2''' посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet.  


Строка 259: Строка 265:


Далее устанавливается канал обмена последовательным нажатием кнопок "Build String" и "Open Channel" (индикатор "1 channel" должен стать темно-зеленым).  
Далее устанавливается канал обмена последовательным нажатием кнопок "Build String" и "Open Channel" (индикатор "1 channel" должен стать темно-зеленым).  
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:


TCP/IP Link Role - Client  
TCP/IP Link Role - Client  
Строка 268: Строка 274:


Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки "Start DT" (индикатор "1 channel" должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки "Start DT" (индикатор "1 channel" должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами '''MCM-NODE1''' и '''MCM-NODE2''' следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку "870 Commander", нажатием кнопки "Загрузить" загрузить макрос "ДУ по циклу 5 сек.rtm" и выполнить его нажатием кнопки "Выполнить":
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами '''MCM-NODE1''' и '''MCM-NODE2''' следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку "870 Commander", нажатием кнопки "Загрузить" загрузить макрос "ДУ по циклу 5 сек.rtm" и выполнить его нажатием кнопки "Выполнить":
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке "870 Commander" в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке "870 Commander" в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.
 
'''Примечание:''' в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  '''MCM-SNIFFER''' в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.
 
=== Проверка информационного обмена по протоколу MODBUS ===
 
Работа стенда по протоколу MODBUS осуществляется посредством ПО '''Modbus Poll''', запущенного на узле '''MDM-NODE2''' (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.
 
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины '''ZLVirCom''', которую можно запустить с рабочего стола на узле '''MCM-NODE2''' ('''Примечание:''' '''в текущей конфигурации стенда вся работа с MODBUS производится с этого узла'''). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]
 
При нажатии на кнопку '''Device''' в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]
 
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]
 
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).
 
Непосредственно для выполнения опроса датчиков нужно запустить '''Modbus Poll''' с рабочего стола на узле '''MCM-NODE2''':
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]
 
 
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]
 
 
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, '''10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора''').
 
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]
 
 
Для их настройки следует зайти в меню '''Setup -> Read/Write Definition''' (или нажать F8) и указать следующие параметры:
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]
 
В поле '''Slave ID''' нужно указать адрес датчика ('''5, 6 или 7'''), в поле '''Function''' выбрать '''«04 Read Input Registers (3х)»''', в полях '''Address''' и '''Quantity''' указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно ('''Tx увеличивается, Err = 0)''':
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]
 
Результат опроса можно увидеть, нажав кнопку '''Display communication traffic''' в панели инструментов ('''Tx – байты с запросом, Rx – байты ответа от датчика'''). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).
[[Файл:Modbus9.png|центр|Рис. 12 - Просмотр трафика при опросе порта|обрамить]]
 


'''Примечание:''' в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  '''MCM-SNIFFER''' ('''<nowiki>http://192.168.2.142</nowiki>''') в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.
'''Примечание:''' Весь трафик между '''Modbus Poll''' на узле '''MCM-NODE2''' и каким-либо из датчиков пролетает через сервер '''MCM-SNIFFER''' (см. схему). Соответственно, если в настройках перехвата указать порт на сервере '''MCM-SNIFFER''',  к которому подключен '''MCM-NODE2''' (например, '''enp6s0'''), то МКИ на сервере '''MCM-SNIFFER''' сможет перехватывать трафик MODBUS и, соответственно, его анализировать.

Текущая версия от 11:38, 3 апреля 2025

Система мониторинга качества измерений (МКИ)

[править | править код]

Схема тестового стенда

[править | править код]
Стенд для МКИ (декабрь 2024)
Стенд для МКИ (декабрь 2024)

Подключение и настойка оборудования

[править | править код]

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

Таблица 1 - Параметры сетевых настроек устройств стенда

[править | править код]
Хост Порт Интерфейс IP Подключен к

устройство/порт

Описание
MCM-SNIFFER Eth1 enp5s0 192.168.2.15/24 L2 Switch Интерфейс управления для Sniffer
MCM-SNIFFER Eth2 enp6s0 - MCM-NODE1 / Eth2 Участвует в L2 Bridge
MCM-SNIFFER Eth3 enp7s0 - MCM-NODE2 / Eth2 Участвует в L2 Bridge
MCM-SNIFFER Eth4 enp8s0 - ZLAN / Eth Участвует в L2 Bridge
MCM-NODE1 Eth1 EXTERNAL 192.168.2.156/24 L2 Switch Интерфейс управления для Node1
MCM-NODE1 Eth2 INTERNAL 10.0.0.1/24 MCM-SNIFFER / Eth2 Интерфейс обмена данными для Node1
MCM-NODE2 Eth1 EXTERNAL 192.168.2.195/24 L2 Switch Интерфейс управления для Node2
MCM-NODE2 Eth2 INTERNAL 10.0.0.2/24 MCM-SNIFFER / Eth3 Интерфейс обмена данными для Node2
ZLAN Eth - - MCM-SNIFFER / Eth4 Интерфейс обмена данными для ZLAN
ZLAN RS-485 #1 ZLDEV0001 10.0.0.241/24 Подключение датчика с MODBUS-адресом 5
ZLAN RS-485 #2 ZLDEV0002 10.0.0.242/24 Подключение датчика с MODBUS-адресом 6
ZLAN RS-485 #3 ZLDEV0003 10.0.0.243/24 Подключение датчика с MODBUS-адресом 7

Развертывание системы

[править | править код]

Установка базовых систем

[править | править код]

Установка ОС Windows на компьютерах MCM-NODE1 и MCM-NODE2 производится обычным образом, при этом соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:

Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2
Параметр Значение
Имя компьютера MCM-NODE1/MCM-NODE2
Имя пользователя c правами локального администратора entcor
Пароль 1

Установка базовой системы Ubuntu Server 24.0x на компьютер MCM-SNIFFER производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует указать следующие значения прочих параметров:

Таблица 3 - Параметры настройки узла MCM-SNIFFER
Параметр Значение
Имя компьютера MCM-SNIFFER
Имя пользователя c правами root entcor
Пароль ng3-dcc20

После установки системы необходимо установить обновления:

sudo apt full-upgrade

а также проверить доступ к серверу по SSH с компьютера администратора:

ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)

Примечание: для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:

sudo apt install mc

Также в дальнейшем целесообразно запускать Midnight Commander через sudo:

sudo mc

Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.

Настройка сетевых интерфейсов

[править | править код]

Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге /etc/netplan создать файл с расширением .yaml (например, 01-network.yaml) со следующим содержимым:

network:
    version: 2
    ethernets:
        enp5s0:
            dhcp4: false
            addresses: 
                - 192.168.2.15/24
            routes:
              - to: default
                via: 192.168.2.254
            nameservers: 
                addresses: [192.168.2.60, 176.114.16.33]
        enp6s0:
            dhcp4: false
        enp7s0:
            dhcp4: false
        enp8s0:
            dhcp4: false
    bridges:
        docker0:
            interfaces: [enp6s0, enp7s0, enp8s0]

Примечания:

  1. Для интерфейса enp5s0 вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в via и nameservers соответственно).
  2. В файле конфигурации заранее определяется мост docker0, который будет использоваться Docker'ом после его установки. Таким образом, интерфейсы enp6s0/enp7s0/enp8s0 заранее подключаются к мосту docker0, и, соответственно, в будущем будут доступны из Docker.
  3. Для удобства проще скопировать готовый файл 01-network.yaml с компьютера администратора и положить его в /etc/netplan. Файлу следует установить права по маске 0100600.
  4. Как показывает практика, существующий в /etc/netplan файл конфигурации по умолчанию 50-cloud-init.yaml лучше переименовать во что-то типа 50-cloud-init.yaml.bak, иначе у интерфейса enp5s0 будет образовываться 2 адреса - статический из настроек в 01-network.yaml и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле 50-cloud-init.yaml для интерфейса enp5s0 параметра dchp4: false, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в /etc/netplan только один файл 01-network.yaml с настройками интерфейсов.
  5. Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение netplan generate . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Саму конфигурацию лучше применять через netplan try --timeout 30 (или другое не сильно большое количество секунд, чтобы она автоотменилась в случае косяков). Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.
  6. Для проверки работоспособности моста docker0 перед настройкой интерфейсов следует запустить постоянный пинг (с параметром -t) с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения netplan try следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост docker0.

Установка сертификата Entcor

[править | править код]

Перед установкой собственно компонентов МКИ с компьютера администратора следует скопировать файл сертификата entcor.crt и разместить его в каталоге /usr/local/share/ca-certificates (удобнее всего это сделать через Shell-link в панели Midnight Commander). Затем сертификат необходимо обновить, после чего выполнить перезагрузку:

sudo update-ca-certificates

Примечание: после обновления сертификатов необходимо выполнить перезагрузку компьютера MCM-SNIFFER.

Установка Docker

[править | править код]
# Add Docker's official GPG key:

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

Установка компонентов системы МКИ

[править | править код]

Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).

Вариант 1: Установка с помощью инсталляционного пакета

[править | править код]

Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы install.sh и latest.tar.gz.

Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:

chmod +x install.sh

Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:

docker login registry.entcor

Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта install.sh.

После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог /opt/e-node/deploy, куда выполнялось развертывание компонентов системы инсталляционным скриптом install.sh.

Далее в том же каталоге следует создать/отредактировать файла .env, в котором следует установить следующие параметры:

  • MONITOR_DATA_IF = <имя интерфейса на узле MCM-SNIFFER, на котором выполняется прослушка, например, enp6s
  • MODE = enode

Примечание: вообще-то для работы МКИ параметр MODE должен иметь значение asutp, но работает пока только вот так.

Вариант 2: Установка непосредственно из репозитория Git

[править | править код]

Получение последней версии инсталляционного пакета производится из Git-репозитория e-deploy, находящегося по адресу http://192.168.2.61, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку develop):

git clone http://192.168.2.61/e-node/e-deploy.git
git switch develop

Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:

docker login registry.entcor

после чего нужно перейти в каталог e-deploy (в том каталоге, где выполнялся git clone) и выполнить следующую команду:

./enode.sh init

Далее в том же каталоге следует создать/отредактировать файла .env, в котором следует установить следующие параметры:

MONITOR_DATA_IF = <имя интерфейса на узле MCM-SNIFFER, на котором выполняется прослушка, например, enp7s0>

MODE = enode

Примечание: вообще-то для работы МКИ параметр MODE должен иметь значение asutp, но работает пока только вот так.

Запуск компонентов системы МКИ

[править | править код]

После установки компонентов МКИ можно выполнить их запуск следующей командой:

enode <имя стека> start

Примечание: названия нужных стеков можно посмотреть в каталоге stacks в e-deploy (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:

enode analytic start
enode common start
enode asutp start

Примечание: стек analytic рекомендуется запускать перед стеком common из-за каких-то особенностей функционирования: Проверка запуска сервисов производится обычным образом с помощью команды:

docker ps

Проверка информационного обмена по протоколу МЭК-60870-5-104

[править | править код]

Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда MCM-NODE1 и MCM-NODE2 посредством программного обеспечения IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet.

Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками:

TCP/IP Link Role - Server

IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2)

Далее устанавливается канал обмена последовательным нажатием кнопок "Build String" и "Open Channel" (индикатор "1 channel" должен стать темно-зеленым).

Рис. 1 - Настройки программы IEC Test для организации обмена между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)

Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:

TCP/IP Link Role - Client

IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена (в данном примере - 10.0.0.2).

Далее устанавливается канал обмена последовательным нажатием кнопок "Build String" и "Open Channel" (индикатор "1 channel" должен стать темно-зеленым).

Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки "Start DT" (индикатор "1 channel" должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.

Рис. 2 - Настройки программы IEC Test для организации обмена между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)

Для создания трафика по протоколу МЭК-60870-5-104 между узлами MCM-NODE1 и MCM-NODE2 следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку "870 Commander", нажатием кнопки "Загрузить" загрузить макрос "ДУ по циклу 5 сек.rtm" и выполнить его нажатием кнопки "Выполнить":

Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104
Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104

В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке "870 Commander" в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.

Примечание: в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера MCM-SNIFFER в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.

Проверка информационного обмена по протоколу MODBUS

[править | править код]

Работа стенда по протоколу MODBUS осуществляется посредством ПО Modbus Poll, запущенного на узле MDM-NODE2 (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.

Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины ZLVirCom, которую можно запустить с рабочего стола на узле MCM-NODE2 (Примечание: в текущей конфигурации стенда вся работа с MODBUS производится с этого узла). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:

Рис. 4 - Главное окно ZLVirCom

При нажатии на кнопку Device в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:

Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843

Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:

Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN

Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).

Непосредственно для выполнения опроса датчиков нужно запустить Modbus Poll с рабочего стола на узле MCM-NODE2:

Рис. 7 - Главное окно Modbus Poll


Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:

Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN


В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, 10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора).

Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.

Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса


Для их настройки следует зайти в меню Setup -> Read/Write Definition (или нажать F8) и указать следующие параметры:

Рис. 10 - Настройка параметров опроса порта

В поле Slave ID нужно указать адрес датчика (5, 6 или 7), в поле Function выбрать «04 Read Input Registers (3х)», в полях Address и Quantity указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (Tx увеличивается, Err = 0):

Рис. 11 - Выполнение опроса порта в установленном режиме

Результат опроса можно увидеть, нажав кнопку Display communication traffic в панели инструментов (Tx – байты с запросом, Rx – байты ответа от датчика). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).

Рис. 12 - Просмотр трафика при опросе порта


Примечание: Весь трафик между Modbus Poll на узле MCM-NODE2 и каким-либо из датчиков пролетает через сервер MCM-SNIFFER (см. схему). Соответственно, если в настройках перехвата указать порт на сервере MCM-SNIFFER,  к которому подключен MCM-NODE2 (например, enp6s0), то МКИ на сервере MCM-SNIFFER сможет перехватывать трафик MODBUS и, соответственно, его анализировать.