УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

OpenSCADA и MQTT


Автор Сообщение
Сообщение создано: 01. 10. 2020 [17:53]
ShuraF
Aleksandr Fenogentov
Создатель темы
Зарегистрирован(а) с: 08.08.2019
Сообщения: 50
Замахнулся я на MQTT.
Уже есть пятерка приборов со своими протоколами, для которых написал Пользовательские протоколы, и все работает.
Но у всех этих протоколов запрос-ответ, а в MQTT брокер и клиент начинают общаться по инициативе клиента, "поздоровались", обменялись информацией и дальше клиент сидит с открытым каналом и ждет. Ну и периодически отправляет серверу "Ты жив? А я жив"ю Акак появляются новые данные для клиента, то сообщение отправляется по инициативе сервера.
Как сделать чтоб канал не закрывался и в канале можно было ловить сообщения от сервера?

[Сообщение редактировалось 1 раз(а), в последний раз 01.10.2020 в 17:55.]
Сообщение создано: 02. 10. 2020 [11:45]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"ShuraF" wrote:

Замахнулся я на MQTT.

OK, а зачем сюда, в "Разработка OpenSCADA", про это писать? Вы будете менять код OpenSCADA и пришлёте патчи?

"ShuraF" wrote:

Уже есть пятерка приборов со своими протоколами, для которых написал Пользовательские протоколы, и все работает.

Как наверное прислали корректно оформленный код этих протоколов для включения в библиотеки?

"ShuraF" wrote:

Но у всех этих протоколов запрос-ответ, а в MQTT брокер и клиент начинают общаться по инициативе клиента, "поздоровались", обменялись информацией и дальше клиент сидит с открытым каналом и ждет. Ну и периодически отправляет серверу "Ты жив? А я жив"ю Акак появляются новые данные для клиента, то сообщение отправляется по инициативе сервера.
Как сделать чтоб канал не закрывался и в канале можно было ловить сообщения от сервера?

А нет, не прислали! Так чего вы тут ожидаете персональных бесплатных консультаций на создание закрытого кода под себя, ещё и не в той теме?!

Learn, learn and learn better than work, work and work.
Сообщение создано: 02. 10. 2020 [13:01]
ShuraF
Aleksandr Fenogentov
Создатель темы
Зарегистрирован(а) с: 08.08.2019
Сообщения: 50
"roman" wrote:

OK, а зачем сюда, в "Разработка OpenSCADA", про это писать? Вы будете менять код OpenSCADA и пришлёте патчи?

Да, с разделом ошибся.
Про код - В принципе, глобальная цель написать модуль для скады, т.к. MQTT наверное интересен многим. Товарищи посоветовали сначала написать в скаде, а потом перенести на golang.

"roman" wrote:

Как наверное прислали корректно оформленный код этих протоколов для включения в библиотеки?

Это протоколы наших внутренних железяк и вряд ли кому будут интересны. Да и свое кодотворчество я стесняюсь людям показывать.

"roman" wrote:

А нет, не прислали! Так чего вы тут ожидаете персональных бесплатных консультаций на создание закрытого кода под себя, ещё и не в той теме?!

Не консультаций, а совета как правильно сделать.
А прислать с удовольствием пришлю, когда будет что присылать.
Тем более если получится сделать то чего нет в примерах ОпенСКАДы.


*А еще хочу прикрутить телеграмм. А то сейчас не очень продуктивно - скада складывает в базу, а Питоновская служба работает с базой и телеграмм-ботом ("Хочешь рассмешить бога расскажи ему о своих планах" (С))
Сообщение создано: 02. 10. 2020 [16:09]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"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.
Сообщение создано: 26. 12. 2020 [09:49]
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Пока нет встроенного решения по MQTT можно воспользоваться утилитой командной строки mosquitto-clients (Debian, Ubuntu). В OpenSCADA для публикации и получения данных можно использовать следующие функции ниже. В связке с брокером Mosquitto и сервером Home Assistant получается отличное решение для отображения данных и управления OpenSCADA с мобильных устройств. В Home Assistant имеются мобильные приложения для Android и iOS. Все перечисленное с открытым исходным кодом.

JAVASCRIPT
Функция публикации логического значения 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);


[Сообщение редактировалось 4 раз(а), в последний раз 30.12.2020 в 12:19.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.



7466