Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



Статьи / KA054 / Прямое взаимодействие двух Laurent-5 / 5G через TCP клиент



§ 54. Прямое взаимодействие двух Laurent-5 / 5G через TCP клиент

Дмитрий Иванов, 28 Мая 2021


Рассмотрим решение следующей практической задачи:


Необходимо организовать связь двух модулей Laurent-5 или Laurent-5G что бы один мог управлять другим по сети и обратно - второй модуль в случае события мог отправить команды управления на первый модуль.



Для конкретики, предположим что к первому модулю подключена кнопка (к линии общего назначения IO_1). Нужно что бы при нажатии на нее на втором модуле включалось реле RELE_1.


Задача связи двух и более модулей ранее уже рассматривалась в рамках статьи § 45. "Удлинитель" механической кнопки по Ethernet.

В ней использовался подход передачи Ke-команд управления через HTTP GET запрос с вызова Ke-команды $KE,URL в качестве реакции на событие в системе логических правил CAT. В текущей статье рассмотрим другой вариант возможной реализации - с использованием TCP клиента и команды $KE,PUT.




Итак, предположим что в сети есть два модуля Laurent-5. У первого IP адрес 192.168.0.101, а у второго - 192.168.0.102. Давайте их "свяжем" друг с другом с помощью TCP клиентов. В каждом модуле помимо TCP сервера ожидающего подключений клиентов на порту 2424 есть так же и независимый TCP клиент. Ему указываются IP и порт сервера к которому он должен сам подключиться и пытаться поддерживать связь (переподключаться автоматически, например после сброса питания или разрыва сети).

По установленному подключению TCP клиент-сервер можно обмениваться Ke-командами управления между модулями в обе стороны в том числе в автономном режиме связав различные события (нажатия кнопок, показания датчиков и т.д.) с отправкой данных по TCP соединению в системе логических правил CAT.


Заходим в WEB интерфейсе 1-го модуля в раздел "TCP клиент":

TCP Клиент модуля Laurent-5


Задаем IP адрес второго модуля (192.168.0.102) и TCP порт сервера 2-го модуля (по умолчанию - 2424). Включаем TCP клиент соответствующей "галочкой". Если все в порядке (модули оба видны в сети, порт 2424 второго модуля не занят другой программой и т.д.) - статус клиента поменяется на значение "Подключено".

TCP Клиент модуля Laurent-5


Аналогично настроим TCP клиент 2-го модуля на связь с 1-ым модулем:

TCP Клиент модуля Laurent-5


Отлично! Теперь между модулями налажена двустороння связь по TCP. Можно уже даже передавать Ke-команды управления с одного модуля на другой, но для начала следует выключить систему безопасности на обоих модулях. Иначе каждый из модулей потребует разблокировки интерфейса через пароль. В данном простом примере ограничимся просто выключением запроса пароля при обмене командами по TCP.

Для этого заходим в WEB в раздел "Общие Настройки" → "Безопасность" и снимаем соответствующую галочку:

TCP Клиент модуля Laurent-5




Настало время проверить связку модулей. Для отладки, давайте отправим Ke-команду управления с одного модуля на другой, например команду на включение реле. Для этого воспользуемся Ke-командой $KE,PUT которая будучи выполненной на конкретном модуле позволяет отправить произвольный набор байт данных в указанный интерфейс (TCP сервер, TCP клиент, порт RS-232 и т.д.).


Полный список всех Ke-команд поддерживаемых модулем можно найти в соответствующем документе Описание Ke-команд управления


Ke-команда для включения, например, 1-го реле выглядит следующим образом:

$KE,REL,1,1

Передадим ее на второй модуль с использованием Ke-комады $KE,PUT. Напомним, что команда позволяет отправить текстовую строку либо произвольный набор символов (включая непечатные) в HEX форме в указанный интерфейс (TCP сервер, TCP клиент, RS-232). Поскольку в теле команды управления реле есть непечатные символы (возврат каретки / перенос на новую строку) - то данные направим в интерфейс TCP клиента в HEX виде.

$KE,PUT,С,H,<Тело Ke-команды в HEX виде>

Подробности о том как перевести тело команды из ASCII (печатного текстового вида) в HEX можно найти в статье § 53. Конвертор Ke-команд в HEX.




Преобразовав команду $KE,REL,1,1 в HEX вид (добавив так же в конец символы возврата каретки и переноса на новую строку 0D 0A) помещаем полученную HEX строку в команду $KE,PUT:

$KE,PUT,C,H,244b452c52454c2c312c310d0a


Можно проверить что с помощью этой команды выполненной на 1-ом модуле мы сможем включить 1-ое реле на втором модуле. Зайдем в терминал KE-команд в WEB интерфейсе 1-го модуля, скопируем туда эту команду и выполним ее:

TCP Клиент модуля Laurent-5


На 2-ом модуле произойдет включение RELE_1 в чем можно убедиться через WEB интерфейс. Соответственно, если теперь использовать эту команду как реакцию на событие CAT можно автоматизировать управление ресурсами второго модуля при возникновении событий на 1-ом и аналогично в обратную сторону.



Займемся системой CAT, но для начала - наладим аппаратные ресурсы. На первом модуле нужно подключить кнопку (или любой механический контакт, например геркон) что бы детектировать факт его срабатывания. Подключать будем кнопку к линии общего назначения IO_1. Ее нужно перевести в режим "на вход" что бы детектировать уровень напряжения на входе линии.

Настройка GPIO линий на вход


По умолчанию, все IO линии модуля настроены "на выход". Нажимаем на "стрелочку" возле линии IO_1 что бы перевести ее в режим "на вход".

GPIO входная линия


После изменения направления WEB интерфейс будет выглядеть следующим образом. При этом детектируемый входной сигнал (высокий / низкий уровень) может "плавать" если линию оставить "висящей в воздухе".

GPIO входная линия


Подключим к линии IO_1 подтягивающий резистор от клеммы +3.3 (напряжение +3.3 В от встроенного стабилизатора напряжения на плате). Теперь если кнопка (контакт) не нажата - то на линии будет высокий уровень напряжения (+3.3 В через резистор). Если кнопку нажать (замкнуть контакт) - то на линии будет логический ноль ("посадим" IO_1 на землю).

Laurent-5 Подтягивающий резистор для линии на вход


Добавим исходно запрошенную автоматику - отправка команды на включение реле на втором модуле при нажатии на кнопку на 1-ом модуле. Будем использовать систему CAT - редактируемые логические правила.

Система CAT - программируемая логика


Создаем новое CAT событие - по изменению уровня сигнала на линии IO:

Программируемый логический контроллер KernelChip


Выбираем линию IO_1 и тип события - при изменении уровня входного сигнала на линии с высокого на низкий (замыкание линии на "землю").

Программирование ПЛК Laurent


Секцию дополнительных условий пропускаем. Настройки квот можно оставить по умолчанию. На следующем шаге - реакция. Задаем ее в виде списка Ke-команд. В частности, выполним ранее подготовленную команду $KE,PUT с помощью которой направим команду включения реле на 2-ой модуль через соединение по TCP клиенту.

Программирование ПЛК Laurent


На последнем шаге можно дать удобное текстовое имя событию. После создания события оно появляется в списке в выключенном состоянии. Его следует включить с помощью соответствующей иконки.


Теперь при нажатии на кнопку подключенную к входной линии IO_1 модуль отправит по соединению TCP клиента набор байт представленных в виде HEX строки 244b452c52454c2c312c310d0a через Ke-команду $KE,PUT. Поскольку TCP клиент 1-го модуля установил соединение с TCP сервером 2-го модуля - он воспримет эти данные как KE-команду и выполнит ее. В частности, включит RELE_1.

TCP клиент сервер







© Дмитрий Иванов
28 Мая 2021 года
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2021