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

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

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

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

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

Мастер Кит Как узнать об изменении уровня на входной линии?  Подключение геркона к входной линии

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

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

Мастер Кит Как узнать об изменении уровня на входной линии?  Входные оптоизолированные линии сухой контакт

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

Мастер Кит Как узнать об изменении уровня на входной линии?  WEB интерфейс сухой контакт

Следующим ходом, который опробуем, будет использование 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 клиента.

 

Зачастую бывает гораздо проще выполнить 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-сообщения.

Это набор текстовых сообщений с информацией о состояниях аппаратных ресурсов или произошедших событиях. Сообщения могут выдаваться по событию (в момент его возникновения), либо по расписанию. Генерация конкретных сообщений может быть гибко настроена в необходимые порты (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

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

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

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

 

Мастер Кит Как узнать об изменении уровня на входной линии?  Показания датчиков в JSON

А как быть если необходимо выполнить некоторые действия при изменении уровня сигнала на входе линии 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 можно познакомиться в статьях:

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

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

 

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

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

 

Мастер Кит Как узнать об изменении уровня на входной линии?  Вывод показаний датчиков на LCD через динамические переменные

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

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


© Дмитрий Иванов

Рейтинг@Mail.ru

Почему выбирают Мастер Китнас


Мы в Сети


© 1999-2022 Мастер Кит