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

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

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



Статьи / KA056 / Laurent-5/5G: Как узнать об изменении уровня на входной линии?



§ 56. Как узнать об изменении уровня на входной линии?

Дмитрий Иванов, 02 Августа 2021



Вступление



Одной из типовых задач эксплуатации модулей класса Laurent-5 / 5G является определение факта изменения уровня сигнала на входных линиях (срабатывание датчиков движения, открытия / закрытия, наполнения, нажатия мехнических кнопок, герконов и т.д.)

В статье рассмотрим все возможные способы узнать или проинформировать пользователя о текущем состоянии линии а так же о событии смены состояния.




Аппаратура



Для начала подготовим "аппаратуру". В частности, воспользуемся входной оптоизолированной линией IN_1. Подключим к ней датчик открытия (геркон) через выход питания +5 В. Т.о. если геркон разомкнут - на линии будет логический ноль, если геркон замкнут (сработал) - то на линии IN_1 будет напряжение +5 В т.е. высокий логический уровень сигнала.

Подключение геркона к входной линии

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




WEB



Начнем с самого простого варианта - просто будем визуально наблюдать текущий статус линии IN_1 в WEB интерфейсе. Заходим в WEB интерфейс модуля (IP по умолчанию 192.168.0.101 либо можно воспользоваться NetBIOS Name laurent-5 т.е. следует набрать в браузере http://laurent-5). Переходим в раздел посвященный оптоизолированным входным линиям:

Входные оптоизолированные линии сухой контакт

Если геркон сработает (будет замкнут) то в WEB сможем наблюлдать этот факт зеленым индикатором для линии IN_1. Так же сводная компактная информация по состояниям линий представлена в парой части рабочей области интерфейса в виде сводной строки.

WEB интерфейс сухой контакт



Ke-команды



Следующим ходом который опробуем будет использование API модуля а именно Ke-команд. Это текстовые команды управления (на подобие AT команд для GSM модемов) которыми можно общаться с модулем по различным интефейсам.


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



Для чтения текущео состояния линий IN предназначена команда $KE,RD. Она позволяет считать как состояние конкретной линии так всех сразу за одно обращение.



Начнем с отправки Ke-команды по соединению к TCP серверу модуля. По умолчанию, после старта на TCP порту 2424 запускается TCP сервер к которому может подключиться клиент. В качестве терминала воспользуемся, например, программой putty.

Указываем либо IP в явном виде либо NetBios Name модуля, TCP порт для подключения (2424) и тип соединения (Raw). Нажимаем на кнопку Open.

Подключение к TCP серверу Laurent через putty

В примере ниже, после установления соединения, первым делом отправляется команда $KE что бы просто проверить канал связи. Далее, посылается команда с паролем что бы разблокировать интерфейс, который по умолчанию не будет воспринимать большинство команд управления пока не будет указан пароль. И в конце посылаем команду на чтение состояния линии IN_1:

Ke-команды через putty

$KE
#OK
$KE,PSW,SET,Laurent
#PSW,SET,OK
$KE,RD,1
#RD,1,1

Модуль вернул ответ #RD,1,1 говорящий о том что на линии IN_1 (первый параметр) сейчас установлен высокий уровень напряжения (второй параметр).

Обратите, пожалуйста, внимание на то что каждая Ke-команда и каждый ответ модуля дополнен в конце символами перевода каретки (<CR>, 0x0D или '\r' в нотации Си) и перехода на новую строку (<LF>, 0x0A или '\n').

Putty автоматически дополняет символы \r\n в конец отправляемой команды. В качестве примера, на листинге ниже показана отправка Ke-команды $KE,REL,2,1 на языке Perl (включение 2-го реле). В конец текстовой команды в явном виде дописываются байты 0x0A и 0x0D.


use IO::Socket::INET;

my ($socket, $client_socket);

$socket = new IO::Socket::INET (
  PeerHost => 'laurent-5',
  PeerPort => '2424',
  Proto => 'tcp',
) or die "ERROR\n";

print "TCP Connection OK.\n";

# Turn 2-nd RELE ON
$socket->send( "\$KE,REL,2,1".chr(0x0D).chr(0x0A) );

# Read response
$socket->recv($data,1024);
print "Reponse: $data\n";

$socket->close();

Ke-команды можно так же отправлять по порту RS-232 или соединению TCP клиента.




URL



Зачастую бывает гораздо проще выполнить HTTP GET запрос (вызвать URL ссылку) нежели чем писать скрипт или запускать терминал. Модули Laurent-5 / 5G поддерживают и такую возможность. Следует обратиться к определенной странице WEB интерфейса модуля, перадать пароль доступа в запросе и команду для выполнения.


Общий синтаксис URL команд:

http://адрес_модуля/cmd.cgi?psw=<Пароль_Модуля>&cmd=< Ke_Команда>

где:

Пароль_Модуля Текущий пароль модуля (используемый для входа в Web интерфейс и разблокировки командного интерфейса). По умолчанию – Laurent
Ke_Команда Ke-команда без первых четырех символов “$KE,” и CR+LF в конце. Например, если необходимо выполнить команду $KE,REL,3,1 следует в данном поле использовать REL,3,1

В ответ на запрос модуль выдает сообщение о статусе выполнения запрошенной команды:

#Wrong password Пароль модуля указан некорректно
#Access denied Пароль модуля не задан
#ERR Некорректный синтаксис Ke-команды

В противном случае формат ответа на URL запрос будет полностью соответствовать ответу для конкретной Ke-команды.



Например, если текущий IP модуля 10.56.75.211, пароль доступа остался без изменений то для запроса через URL текущего состояния линии IN_1 следует перейти по следующему адресу:

http://10.56.75.211/cmd.cgi?psw=Laurent&cmd=RD,1

HTTP GET запрос к модулю Laurent



Ke-сообщения




А если нужно получать текущее состояние на регулярной основе? Неужели посылать каждый раз Ke-команду на чтение? А если событие изменения уровня возникает часто (геркон сработал и тут же выключился за доли секунды) то при запросном чтении такое событие может быть пропущено?


Разумеется, постоянно посылать запросы или надеятся на то что не будет пропусков нет ни какой нужды. Для решения таких задачи в модуле специально предусмотрены Ke-сообщения.


Это набор текстовых сообщений с информацией о состояниях аппаратных ресурсов или произошедших событиях. Сообщения могут выдаваться по событию (в момент его возникновения) либо по расписанию. Генерация конкретных сообщений может быть гибко настроена в необходимые порты (TCP сервер / клиент, RS-232).


Давайте настроим выдачу этих сообщений через WEB интерфейс модуля. Заходим в раздел Общие настройки


Настройка ПЛК Laurent

В под-секции Сообщения можно увидеть полный список всех Ke-сообщений поддерживаемых модулем. Некоторые из них имеют тип ON_EVENT (т.е. выдаются только по событию), некоторые ON_TIME (генерируются периодечиски с темпом раз в секунду в независимости изменилось ли состояние ресурса или нет).

Так же "галочкой" можно включить выдачу каждого из сообщений одновременно в разные порты / интерфейсы.

В нашем случае (входные линии IN) начнем с Ke-сообщения EIN генерируемого в запрошенный интерфейс в случае изменения состояния линии. Выберем выдачу этого сообщения, например, в порт TCP сервера модуля.

Ke-сообщения о изменении сигнала на входе IN

Если подключиться к TCP порту (2424), например, с помощью putty и для теста включать / выключать геркон (или нажимать на кнопку - в зависимости от того как была орагнизована аппаратура), то можно наблюдать появление Ke-сообщения с информацией о событии смены уровня сигнала на входе линии IN_1:

Терминал putty для Ke-команд и сообщений

Не лишним будет упомянуть о том что по умолчанию, на всех входных линиях включен программный подавитель эффекта "дребезга" контактов. Т.е. модуль не воспримет новый измененный уровень сигнала на входе пока он не зафиксируется в течении не менее постоянной времени подавления. По умолчанию, постоянная времении подавления - 100 мс.

100 мс хорошо подходит для механических ключей, кнопок. Но если сигнал, например, поступает от датчика которому несвойственен эффект дребезга и/или частота срабатывания может заметно превышать 10 Гц, будет целесообразным уменьшить постоянную времени подавления или выключить подавитель совсем.

Найстройки подавителя можно найти в WEB интерфейсе в разделе Общие настройки. Можно так же воспользоваться Ke-командой $KE,DZG

Подавление дребезга контактов Laurent

Есть еще одно Ke-сообщение относящееся к входным оптоизолированным линиям. Это сообщение IN. Оно выдается на периодической основе (1 Гц) и содержит сводную информацию о текущем состоянии всех линий IN в одной сводной строке.


Включение сообщения IN в WEB интерфейсе

Ke-сообщения по входным линиям IN

Включать / выключать выдачу Ke-сообщения в нужный порт можно так же и Ke-командой. Например, команда ниже включает выдачу сообщения IN в порт TCP сервера.

$KE,MSG,S,IN,SET,ON



JSON



Информацию о состоянии линий IN можно так же получить в формате JSON. Если обратиться со следующим HTTP запросом:

http://< IP адрес модуля >/json_sensor.cgi?psw=< Пароль модуля >

то модуль вернет сводную инфорамцию о всех текущих показаниях и состояниях датчиков в виде сводного JSON файла. В ключе in можно найти сводную строку состояний всех линий IN. В частности в данном примерме, на IN_1 - логическая единица, на всех остальных линиях - логический ноль.


Показания датчиков в JSON



CAT



А как быть если необходимо выполнить некоторые действия при изменении уровня сигнала на входе линии IN но силами и средствами самого модуля без участия внешнего софта? Тут на помощь придет система встроенной в модуль программируемой логики CAT.

Система CAT – это программируемое пользователем управление автоматической реакцией модуля при возникновении различных событий (логические правила). CAT позволяет запрограммировать модуль и использовать его автономно без постоянного подключения по сети.

Наиболее удобным способом управления системой CAT является Web-интерфейс, позволяющий визуально создавать новые события, контролировать их работу и т.д. Заходим в раздел CAT в главной панели WEB интерфейса.

Система CAT - программируемый логический контроллер


Например, предположим что мы хотим что бы при изменении уровня сигнала на входе линии IN_1 с высокого на низкий реле модуля RELE_3 меняло бы свое состояние. Создаем новое CAT событие по входной оптоизолированной линии.

Логические правила CAT по входным линиям IN


На следующем шаге укажем конкретную линию (IN_1), изменение сигнала на которой нас интересует а так же тип события (переход 1 → 0).

Логические условия ПЛК CAT


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

$KE,REL,3,2

Реакция на событие в виде Ke-команд управления


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

Добавление нового события CAT


Теперь каждый раз когда сигнал на входе линии IN_1 меняется с высокого уровня на низкий - реле RELE_3 будет попеременно включаться или выключаться.

При необходимости, можно создать несколько CAT событий отдельно на переход 0 → 1 и отдельно на случай 1 → 0. Так же в качестве реакции можно указывать целый список Ke-команд а не только одну единственную как представлено в этом примере. Секция дополнительных условий и квот позволят создать более сложные события, выполнение которых будет завиеть от текущего состояния других ресурсов модуля.




Динамические переменные



В составе некоторых Ke-команд и Ke-сообщений можно получить / передать не только заранее заданный статический текст, но и текущие динамические значения и показания датчиков и системных параметров, подставляемых в строку в режиме реального времени.

Динамические переменные - это набор определенных текстовых полей в специальном формате которые заменяются модулем динамически на текущее значение параметра (например, показания датчика) и в таком финальном виде передаются / выдаются в виде KE-сообщения, параметров URL команды или текста SMS сообщения.

Для входных линий предназначена динамическая переменная ~IN~. Если эта запись окажется в составе текста некоторых Ke-команд то модуль подменит ее на текущее значение указанной линии.

Например, если выполнить Ke-команду ниже, то в порт TCP сервера будет передана строка Line: 0 (если сейчас на линии IN_1 логический ноль).

$KE,PUT,S,C,Line: ~IN1~

Можно рассмотреть и более сложный пример. Используя систему CAT и событие по входной линии можно проинформировать внешний сервер (софт) о смене уровня на линии одновременно передав его текущее состояние. Для этого достаточно вызвать соответствующую Ke-команду формируюущу HTTP GET запрос к внешнему серверу.

Например, если предположить что на удаленном сервере с IP = 10.57.34.2 запущен WEB сервис на 80-ом TCP порту и есть страница command.php готовая принять информацию, то KE-команда для передачи данных на этот сервер (как реакция на событие CAT) могла бы, например, выглядлеть следующим образом:

$KE,URL,RUN,10.57.34.2,80,command.php?lines=~NN~

В данном случае, на внешний сервер передаются состояния всех входных оптоизолированных линий IN с помощью динамической переменной ~NN~ в виде сводной строки.


А можно и SMS отправить (для модуля Laurent-5G с встроенным GSM модемом) с дополнительной информацией о текущем времени (~TM~), состоянии линий IN_1 и IN_2 (~IN1~, ~IN2~) и приятным форматированием (переносом на новую строку) с помощью переменной ~LF~.

$KE,SMS,SND,1,C,Time: ~TM~~LF~Line_1: ~IN1~~LF~Line_2: ~IN2~

Подробнее о работе с GSM можно познакомиться в статьях:

§ 47. Laurent-5G: Автоматика GSM. Часть 1

§ 50. Laurent-5G: Управление по SMS с обратной связью




А можно и вывести информацию на LCD дисплей:

$KE,LCD,WR,0,L,C,1,Lines: ~NN~

Вывод показаний датчиков на LCD через динамические переменные



Подробнее о работе с LCD можно познакомиться в статьях:

§ 57. Laurent-5/5G: Пример работы с LCD







© Дмитрий Иванов
02 Августа 2021 года
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2021