Written on: 01. 10. 2020 [17:53]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Замахнулся я на MQTT.
Уже есть пятерка приборов со своими протоколами, для которых написал Пользовательские протоколы, и все работает.
Но у всех этих протоколов запрос-ответ, а в MQTT брокер и клиент начинают общаться по инициативе клиента, "поздоровались", обменялись информацией и дальше клиент сидит с открытым каналом и ждет. Ну и периодически отправляет серверу "Ты жив? А я жив"ю Акак появляются новые данные для клиента, то сообщение отправляется по инициативе сервера.
Как сделать чтоб канал не закрывался и в канале можно было ловить сообщения от сервера?
[This article was edited 1 times, at last 01.10.2020 at 17:55.]
|
Written on: 02. 10. 2020 [11:45]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"ShuraF" wrote:
Замахнулся я на MQTT.
OK, а зачем сюда, в "Разработка OpenSCADA", про это писать? Вы будете менять код OpenSCADA и пришлёте патчи?
"ShuraF" wrote:
Уже есть пятерка приборов со своими протоколами, для которых написал Пользовательские протоколы, и все работает.
Как наверное прислали корректно оформленный код этих протоколов для включения в библиотеки?
"ShuraF" wrote:
Но у всех этих протоколов запрос-ответ, а в MQTT брокер и клиент начинают общаться по инициативе клиента, "поздоровались", обменялись информацией и дальше клиент сидит с открытым каналом и ждет. Ну и периодически отправляет серверу "Ты жив? А я жив"ю Акак появляются новые данные для клиента, то сообщение отправляется по инициативе сервера.
Как сделать чтоб канал не закрывался и в канале можно было ловить сообщения от сервера?
А нет, не прислали! Так чего вы тут ожидаете персональных бесплатных консультаций на создание закрытого кода под себя, ещё и не в той теме?!
Learn, learn and learn better than work, work and work.
|
Written on: 02. 10. 2020 [13:01]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
"roman" wrote:
OK, а зачем сюда, в "Разработка OpenSCADA", про это писать? Вы будете менять код OpenSCADA и пришлёте патчи?
Да, с разделом ошибся.
Про код - В принципе, глобальная цель написать модуль для скады, т.к. MQTT наверное интересен многим. Товарищи посоветовали сначала написать в скаде, а потом перенести на golang.
"roman" wrote:
Как наверное прислали корректно оформленный код этих протоколов для включения в библиотеки?
Это протоколы наших внутренних железяк и вряд ли кому будут интересны. Да и свое кодотворчество я стесняюсь людям показывать.
"roman" wrote:
А нет, не прислали! Так чего вы тут ожидаете персональных бесплатных консультаций на создание закрытого кода под себя, ещё и не в той теме?!
Не консультаций, а совета как правильно сделать.
А прислать с удовольствием пришлю, когда будет что присылать.
Тем более если получится сделать то чего нет в примерах ОпенСКАДы.
*А еще хочу прикрутить телеграмм. А то сейчас не очень продуктивно - скада складывает в базу, а Питоновская служба работает с базой и телеграмм-ботом ("Хочешь рассмешить бога расскажи ему о своих планах" (С))
|
Written on: 02. 10. 2020 [16:09]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"ShuraF" wrote:
"roman" wrote:
А нет, не прислали! Так чего вы тут ожидаете персональных бесплатных консультаций на создание закрытого кода под себя, ещё и не в той теме?!
Не консультаций, а совета как правильно сделать.
А прислать с удовольствием пришлю, когда будет что присылать.
Тем более если получится сделать то чего нет в примерах ОпенСКАДы.
Все концептуальные вещи есть, кроме того это рабочие решения, а не примеры!
"ShuraF" wrote:
Но у всех этих протоколов запрос-ответ, а в MQTT брокер и клиент начинают общаться по инициативе клиента, "поздоровались", обменялись информацией и дальше клиент сидит с открытым каналом и ждет. Ну и периодически отправляет серверу "Ты жив? А я жив"ю Акак появляются новые данные для клиента, то сообщение отправляется по инициативе сервера.
Что является режимом независимого обмена просто, и который реализован в протоколах Distributed Network Protocol 3, IEC-60870, IEC-62056 и шаблон просто не закрывает соединение если не нужно.
Learn, learn and learn better than work, work and work.
|
Written on: 26. 12. 2020 [09:49]
|
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
|
Пока нет встроенного решения по MQTT можно воспользоваться утилитой командной строки mosquitto-clients (Debian, Ubuntu). В OpenSCADA для публикации и получения данных можно использовать следующие функции ниже. В связке с брокером Mosquitto и сервером Home Assistant получается отличное решение для отображения данных и управления OpenSCADA с мобильных устройств. В Home Assistant имеются мобильные приложения для Android и iOS. Все перечисленное с открытым исходным кодом.
Функция публикации логического значения pub_bool
Идентификатор Имя Тип Режим Скрытый Умолчание
in Логическое для публикации Логич. Вход false false
true_txt Текст для значения true Строка Вход false true
false_txt Текст для значения false Строка Вход false false
topic Топик Строка Вход false /test/test
server Адрес брокера Строка Вход false localhost
port Порт брокера Строка Вход false 1883
user Имя пользователя Строка Вход false
password Пароль пользователя Строка Вход false
command_txt Текст команды Строка Выход false
debug_txt Текст вывода команды Строка Выход false
f_start f_start Логич. Вход false
f_stop f_stop Логич. Вход false
Программа
//License GPL v3 or later
//sudo apt-get install mosquitto-clients
using Special.FLibSYS;
//Обработка останова-запуска блока программы
if (f_start || f_stop) return;
command_txt="mosquitto_pub -q 0 -r -d -h "+server+" -p "+port+" -u "+user+" -P "+password+" -t "+topic+" -m ";
if (in==true) command_txt=command_txt+"\""+true_txt+"\""; else command_txt=command_txt+"\""+false_txt+"\"";
debug_txt=sysCall(command_txt);
Функция публикации вещественного числа pub_real
Идентификатор Имя Тип Режим Скрытый Умолчание
in Вещественное число для публикации Веществ. Вход false 0
numbs Количество цифр после точки Целый Вход false 0
len Минимальная длина Целый Вход false 0
sign Знак Логич. Вход false false
topic Топик Строка Вход false /test/test
server Адрес брокера Строка Вход false localhost
port Порт брокера Строка Вход false 1883
user Имя пользователя Строка Вход false
password Пароль пользователя Строка Вход false
command_txt Текст команды Строка Выход false
debug_txt Текст вывода команды Строка Выход false
f_start f_start Логич. Вход false
f_stop f_stop Логич. Вход false
Программа
//License GPL v3 or later
//sudo apt-get install mosquitto-clients
using Special.FLibSYS;
//Обработка останова-запуска блока программы
if (f_start || f_stop) return;
command_txt="mosquitto_pub -q 0 -r -d -h "+server+" -p "+port+" -u "+user+" -P "+password+" -t "+topic+" -m "+in.toFixed(numbs,len,sign);
debug_txt=sysCall(command_txt);
Функция публикации строки pub_string
Идентификатор Имя Тип Режим Скрытый Умолчание
in Строка для публикации Строка Вход false test string
topic Топик Строка Вход false /test/test
server Адрес брокера Строка Вход false localhost
port Порт брокера Строка Вход false 1883
user Имя пользователя Строка Вход false
password Пароль пользователя Строка Вход false
command_txt Текст команды Строка Выход false
debug_txt Текст вывода команды Строка Выход false
f_start f_start Логич. Вход false
f_stop f_stop Логич. Вход false
Программа
//License GPL v3 or later
//sudo apt-get install mosquitto-clients
using Special.FLibSYS;
//Обработка останова-запуска блока программы
if (f_start || f_stop) return;
command_txt="mosquitto_pub -q 0 -r -d -h "+server+" -p "+port+" -u "+user+" -P "+password+" -t "+topic+" -m \""+in+"\"";
debug_txt=sysCall(command_txt);
Функция получения логического значения sub_bool
Идентификатор Имя Тип Режим Скрытый Умолчание
out_bool Полученное логическое Логич. Выход false false
true_txt Текст значения true Строка Вход false true
false_txt Текст значения false Строка Вход false false
topic Топик Строка Вход false /test/test
server Адрес брокера Строка Вход false localhost
port Порт брокера Строка Вход false 1883
user Имя пользователя Строка Вход false
password Пароль пользователя Строка Вход false
command_txt Текст команды Строка Выход false
out_txt Текст вывода команды Строка Выход false
f_start f_start Логич. Вход false
f_stop f_stop Логич. Вход false
Программа
//License GPL v3 or later
//sudo apt-get install mosquitto-clients
using Special.FLibSYS;
//Обработка останова-запуска блока программы
if (f_start || f_stop) return;
command_txt="mosquitto_sub -N -q 0 -C 1 -h "+server+" -p "+port+" -u "+user+" -P "+password+" -t "+topic;
out_txt=sysCall(command_txt);
if (out_txt==true_txt) out_bool=true;
if (out_txt==false_txt) out_bool=false;
Функция получения вещественного sub_real
Идентификатор Имя Тип Режим Скрытый Умолчание
out_real Полученное вещественное Веществ. Выход false
out_txt Текст вывода команды Строка Выход false
topic Топик Строка Вход false /test/test
server Адрес брокера Строка Вход false localhost
port Порт брокера Строка Вход false 1883
user Имя пользователя Строка Вход false
password Пароль пользователя Строка Вход false
command_txt Текст команды Строка Выход false
f_start f_start Логич. Вход false
f_stop f_stop Логич. Вход false
Программа
//License GPL v3 or later
//sudo apt-get install mosquitto-clients
using Special.FLibSYS;
//Обработка останова-запуска блока программы
if (f_start || f_stop) return;
command_txt="mosquitto_sub -N -q 0 -C 1 -h "+server+" -p "+port+" -u "+user+" -P "+password+" -t "+topic;
out_txt=sysCall(command_txt);
out_real=out_txt.toReal();
Функция получения строки sub_string
Идентификатор Имя Тип Режим Скрытый Умолчание
out_txt Текст вывода команды Строка Выход false
topic Топик Строка Вход false /test/test
server Адрес брокера Строка Вход false localhost
port Порт брокера Строка Вход false 1883
user Имя пользователя Строка Вход false
password Пароль пользователя Строка Вход false
command_txt Текст команды Строка Выход false
f_start f_start Логич. Вход false
f_stop f_stop Логич. Вход false
Программа
//License GPL v3 or later
//sudo apt-get install mosquitto-clients
using Special.FLibSYS;
//Обработка останова-запуска блока программы
if (f_start || f_stop) return;
command_txt="mosquitto_sub -N -q 0 -C 1 -h "+server+" -p "+port+" -u "+user+" -P "+password+" -t "+topic;
out_txt=sysCall(command_txt);
[This article was edited 4 times, at last 30.12.2020 at 12:19.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|