PDA

Просмотр полной версии : модуль whatsapp или telegram?



kjum4n
28.05.2022, 10:22
всем привет! есть у кого опыт экспорта тревог\аварий и информационных сообщений( а в идеале еще и отчетов ) с мс3 в мессенджеры?

keysansa
28.05.2022, 12:58
Вы с мессенждерами работали?

kjum4n
28.05.2022, 13:03
было дело в телегу бот делал для пересылки сообщений со скады, скада слала на почту а бот с почты забирал и выкладывал в группу, но в моей лицензии на мс3 нет ключа для отправки отчетов почты... вот и думаю как можно костыль изобрести)

keysansa
28.05.2022, 13:07
Как бот может получать данные?

kjum4n
28.05.2022, 13:12
если бы у меня было решение этого вопроса я бы не создал эту тему)))
были мысли брать с бд напрямую ( бд юзаю внешнюю ), но вдруг есть способ проще...

keysansa
28.05.2022, 13:22
Ок, давайте, найдем способ проще.
1. Клиенту надо куда-то подключиться.
2. По какому-то протоколу
3. Боту надо иметь возможность в принципе куда-то подключиться и по какому-то протоколу.

Нарисуйте круги Эйлера и вы найдете самый лучший вариант.

ЗЫ. Вы складываете данные в доступную извне БД, ваш бот может брать данные из БД и вам нужен способ проще?

melky
28.05.2022, 14:00
Есть готовое решение, но придется использовать другую Scada :) хотя бы читать данные из БД и оправлять на Email и Telegramm. цена вопроса 7200 если для предприятия.
в сторонней Scada ничего не храним, тупо контролируем нужные каналы.

keysansa
28.05.2022, 14:10
Есть готовое решение, но придется использовать другую Scada :) хотя бы читать данные из БД и оправлять на Email и Telegramm. цена вопроса 7200 если для предприятия.
в сторонней Scada ничего не храним, тупо контролируем нужные каналы.

Мы тут вообще-то ищем решение исходя из существующего бюджета )))

SCADAMaster
28.05.2022, 14:12
Есть специальный скрипт для MasterSCADA для отправки сообщений в Telegram.
Возможно в следующей версии сделаем поддержку полноценного канала.

Пример по ссылке ниже.
Нужно получить API_ID и HASH:
https://tlgrm.ru/docs/api/obtaining_api_id
прописать в строку:
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f");

Указать номер телефона отправителя и получателя:
[FBNonRetain] string TelephoneNumber="+79038008810";
[FBNonRetain] string DestNumber="79037002236";

В режиме исполнения подаете сигнал на получить код. Полученный код (из телеграма телефона например) вписываете в Код.
Подаете сигнал на Авторизоваться.

Послать - послать тестовое сообщение.
Все сообщения которые генерируют Событие 1 и Событие 2 будут отправляться в телеграм

По ссылке проект и библиотеки
https://disk.yandex.ru/d/zTUb9ARWjP58Rw
Положить сюда:
c:\Program Files (x86)\MpsSoft\MasterSCADA\

keysansa
28.05.2022, 14:15
Есть специальный скрипт для MasterSCADA для отправки сообщений в Telegram.

Проект MasterSCADA бесплатно перепишет?

SCADAMaster
28.05.2022, 14:32
Про какой проект идет речь?
Скрипт нужно вставить в текущий проект и адаптировать его в коде - например указать какие категории выводить в Telegram. Скрипт сам перехватывает сообщение и отправляет. Каких то глобальных доработок в проекте делать не надо.

keysansa
28.05.2022, 14:35
Про какой проект идет речь?
Скрипт нужно вставить в текущий проект и адаптировать его в коде - например указать какие категории выводить в Telegram. Скрипт сам перехватывает сообщение и отправляет. Каких то глобальных доработок в проекте делать не надо.

Я прошу прощения, не заметил, что обсуждение идет в теме MasterSCADA.

kjum4n
28.05.2022, 18:17
спасибо! буду пробовать интегрировать!)

kjum4n
28.05.2022, 19:08
Есть специальный скрипт для MasterSCADA для отправки сообщений в Telegram.
Возможно в следующей версии сделаем поддержку полноценного канала.

Пример по ссылке ниже.
Нужно получить API_ID и HASH:
https://tlgrm.ru/docs/api/obtaining_api_id
прописать в строку:
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f");

Указать номер телефона отправителя и получателя:
[FBNonRetain] string TelephoneNumber="+79038008810";
[FBNonRetain] string DestNumber="79037002236";

В режиме исполнения подаете сигнал на получить код. Полученный код (из телеграма телефона например) вписываете в Код.
Подаете сигнал на Авторизоваться.

Послать - послать тестовое сообщение.
Все сообщения которые генерируют Событие 1 и Событие 2 будут отправляться в телеграм

По ссылке проект и библиотеки
https://disk.yandex.ru/d/zTUb9ARWjP58Rw
Положить сюда:
c:\Program Files (x86)\MpsSoft\MasterSCADA\

а в чат групповой есть возможность отправки?

SCADAMaster
28.05.2022, 20:03
Мы не пробовали, но вроде как можно сделать:
https://stackoverflow.com/questions/52597753/tlsharp-send-message-to-a-group

kjum4n
29.05.2022, 08:53
Мы не пробовали, но вроде как можно сделать:
https://stackoverflow.com/questions/52597753/tlsharp-send-message-to-a-group

еще вопросы, как можно в строку [FBNonRetain] string DestNumber="79037002236"; вставлять значение с мнемосхемы?
несколько номеров через запятую можно указать?

SCADAMaster
29.05.2022, 11:00
еще вопросы, как можно в строку [FBNonRetain] string DestNumber="79037002236"; вставлять значение с мнемосхемы?

Присвоить ему значение какого нибудь входа типа Строка

kjum4n
29.05.2022, 16:05
не работает... что я делаю не так? код в телегу приходит, а авторизации не происходит...
https://dropmefiles.com/QH4w0 - архив проекта

kjum4n
29.05.2022, 16:17
60953
скрин прилагается....

SCADAMaster
29.05.2022, 20:12
Так в какой момент возникает ошибка? Вы сделали API_ID и HASH?
Перепроверили сейчас еще раз, с нашим телефоном и API_ID - все прекрасно работает.

kjum4n
29.05.2022, 20:21
[QUOTE=SCADAMaster;382146]Так в какой момент возникает ошибка? Вы сделали API_ID и HASH?
Перепроверили сейчас еще раз, с нашим телефоном и API_ID - все прекрасно работает.[/Q
да сделал? код приходит на телефон. после ввода кода и включения входа авторизация ничего не происходит...
60955

kjum4n
29.05.2022, 20:27
ваш код скрипта:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using TeleSharp.TL;
using TLSharp.Core;
using System.Threading.Tasks;
using MasterSCADA.Hlp.Events;
using System.Collections.Generic;

[FBRetain]
public partial class ФБ : ScriptBase
{

string hash="";
bool? M=false;
bool? L=false;
bool? O=false;
[FBNonRetain] TelegramClient Client=null;
[FBNonRetain] TLVector<TLAbsUser> Contacts=null;
[FBNonRetain] string TelephoneNumber="+79038000102";
[FBNonRetain] string DestNumber="79520690102";
[FBNonRetain] List<string> Messages=new List<string>();

public override void Start()
{
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f",null,"TelegramSession",null,DataCenterIPVersion.Default,HostFB.TreeItemH lp.Project.Path);
Client.ConnectAsync().Wait();
Ошибка=false;
ТекстОшибки="";
АвторизацияУспешна=false;
Authorization();


//подписка на изменение сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsC hangeEvent += AlarmManager_OnRecordsChangeEvent;
//подписка на добавление сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsA ddEvent += AlarmManager_OnRecordsChangeEvent;
//System.Diagnostics.Debug.Assert(false);

}

public override void Execute()
{
if (ПолучитьКод==true && M==false)
{
var hashTask = Client.SendCodeRequestAsync(TelephoneNumber);
hashTask.Wait();
hash = hashTask.Result;
АвторизацияУспешна=false;
}
M=ПолучитьКод;
if (Авторизоваться==true && L==false)
{
Authorization();
}
L=Авторизоваться;
if (АвторизацияУспешна==false) return;

if (Послать==true && O==false)
{
Send("Test");
}
lock(this)
{
if (Messages.Count>0)
{
foreach (string Message in Messages)
{
Send(Message);
}
Messages.Clear();
}

}

O=Послать;
}

void AlarmManager_OnRecordsChangeEvent(MasterSCADA.Hlp. Events.AlarmManagerHlp manager, MasterSCADA.Interfaces.EventID[] eventIDs)
{
lock (this)
{
var filter = new EventFilterData();
var FilterObject = HostFB.TreeItemHlp.Parent; // объект, в котором искать сообщения
filter.Sources.Add(FilterObject);
filter.EventIDs=eventIDs; //фильтруем по новым EventID

var events = manager.GetEvents(HostFB.TreeItemHlp.Parent, filter, 1000);
foreach (var NewEvent in events)
{
string Message=NewEvent.Message;
Messages.Add(Message);
}
}
HostFB.SetNeedUpdate();
}


public void Authorization()
{
if (Код=="" || hash=="")
{
return;
}
try
{
var user = Client.MakeAuthAsync(TelephoneNumber, hash, Код);
user.Wait();
var resultTask = Client.GetContactsAsync();
resultTask.Wait();
Contacts = resultTask.Result.Users;
АвторизацияУспешна=true;
Ошибка=false;
ТекстОшибки="";
}
catch (Exception ex)
{
ТекстОшибки=ex.Message;
Ошибка=true;
АвторизацияУспешна=false;
}
}

public void Send(string Message)
{
try
{
foreach (var it in Contacts)
{
if (it.GetType() == typeof(TLUser))
{
TLUser User = (TLUser)it;
string Phone = User.Phone;
if (Phone == DestNumber)
{
var Send=Client.SendMessageAsync(new TLInputPeerUser() { UserId = User.Id }, Message);
Send.Wait();
}
}
}
Ошибка=false;
ТекстОшибки="";
}
catch (Exception Ex)
{
Ошибка=true;
ТекстОшибки=Ex.Message;
}

}


}

после внесения изменений:

using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using TeleSharp.TL;
using TLSharp.Core;
using System.Threading.Tasks;
using MasterSCADA.Hlp.Events;
using System.Collections.Generic;

[FBRetain]
public partial class ФБ : ScriptBase
{

string hash="";
bool? M=false;
bool? L=false;
bool? O=false;
[FBNonRetain] TelegramClient Client=null;
[FBNonRetain] TLVector<TLAbsUser> Contacts=null;
[FBNonRetain] string TelephoneNumber="+79644954773";
[FBNonRetain] string DestNumber="79137928646";
[FBNonRetain] List<string> Messages=new List<string>();

public override void Start()
{
Client = new TelegramClient(18376347, "0cfd144a477581157fd2b3948f049076",null,"TelegramSession",null,DataCenterIPVersion.Default,HostFB.TreeItemH lp.Project.Path);
Client.ConnectAsync().Wait();
Ошибка=false;
ТекстОшибки="";
АвторизацияУспешна=false;
Authorization();


//подписка на изменение сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsC hangeEvent += AlarmManager_OnRecordsChangeEvent;
//подписка на добавление сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsA ddEvent += AlarmManager_OnRecordsChangeEvent;
//System.Diagnostics.Debug.Assert(false);

}

public override void Execute()
{
if (ПолучитьКод==true && M==false)
{
var hashTask = Client.SendCodeRequestAsync(TelephoneNumber);
hashTask.Wait();
hash = hashTask.Result;
АвторизацияУспешна=false;
}
M=ПолучитьКод;
if (Авторизоваться==true && L==false)
{
Authorization();
}
L=Авторизоваться;
if (АвторизацияУспешна==false) return;

if (Послать==true && O==false)
{
Send("Test");
}
lock(this)
{
if (Messages.Count>0)
{
foreach (string Message in Messages)
{
Send(Message);
}
Messages.Clear();
}

}

O=Послать;
}

void AlarmManager_OnRecordsChangeEvent(MasterSCADA.Hlp. Events.AlarmManagerHlp manager, MasterSCADA.Interfaces.EventID[] eventIDs)
{
lock (this)
{
var filter = new EventFilterData();
var FilterObject = HostFB.TreeItemHlp.Parent; // объект, в котором искать сообщения
filter.Sources.Add(FilterObject);
filter.EventIDs=eventIDs; //фильтруем по новым EventID

var events = manager.GetEvents(HostFB.TreeItemHlp.Parent, filter, 1000);
foreach (var NewEvent in events)
{
string Message=NewEvent.Message;
Messages.Add(Message);
}
}
HostFB.SetNeedUpdate();
}


public void Authorization()
{
if (Код=="" || hash=="")
{
return;
}
try
{
var user = Client.MakeAuthAsync(TelephoneNumber, hash, Код);
user.Wait();
var resultTask = Client.GetContactsAsync();
resultTask.Wait();
Contacts = resultTask.Result.Users;
АвторизацияУспешна=true;
Ошибка=false;
ТекстОшибки="";
}
catch (Exception ex)
{
ТекстОшибки=ex.Message;
Ошибка=true;
АвторизацияУспешна=false;
}
}

public void Send(string Message)
{
try
{
foreach (var it in Contacts)
{
if (it.GetType() == typeof(TLUser))
{
TLUser User = (TLUser)it;
string Phone = User.Phone;
if (Phone == DestNumber)
{
var Send=Client.SendMessageAsync(new TLInputPeerUser() { UserId = User.Id }, Message);
Send.Wait();
}
}
}
Ошибка=false;
ТекстОшибки="";
}
catch (Exception Ex)
{
Ошибка=true;
ТекстОшибки=Ex.Message;
}

}


}

kjum4n
29.05.2022, 21:37
в дэмоверсии должно работать? лицензию еще не подвезли на этот объект...
в журнале ошибка 0х80131500

SCADAMaster
30.05.2022, 09:29
Да, должно работать на любой версии.
Библиотеки положили в папку скады? Какая версия MasterSCADA?

kjum4n
30.05.2022, 10:35
Да, должно работать на любой версии.
Библиотеки положили в папку скады? Какая версия MasterSCADA?

версия скады 3.12.0.25522 3.12(Demo)_22_02_07_11_25
DLL положил по пути C:\Program Files (x86)\MPSSoft\MasterSCADA

kjum4n
30.05.2022, 10:45
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f",null,"TelegramS ession",null,DataCenterIPVersion.Default,HostFB.Tr eeItemHlp.Project.Path);

это api ID - 1603676, 91545868ec615faf6c751beb93909a1f - это api hash.

[FBNonRetain] string TelephoneNumber="+79038000102"; - номер отправителя
[FBNonRetain] string DestNumber="79520690102"; - номер полуяателя

больше не чего в коде скрипта не меняю? все ведь верно... вроде...

SCADAMaster
30.05.2022, 10:48
С виду да.
Единственный вариант который видится - напишите на support и предоставьте доступ по AnyDesk.

kjum4n
30.05.2022, 10:58
С виду да.
Единственный вариант который видится - напишите на support и предоставьте доступ по AnyDesk.

вот видео действий -
https://youtu.be/Nm087rOiiyk

странно, сейчас и код не приходит...

SCADAMaster
30.05.2022, 11:03
Возможно что-то блокирует отправку запроса. Попробуйте выключить фаервол/антивирус.

DarkNOX
18.12.2022, 23:16
А кто то пробовал использовать телеграмм бота? Используя библиотеку Telegram.Bot.dll ?
Либо хотя бы код для отправки GET запроса используя httpClient. Перепробовал различные варианты по примерам в инете, никак не работает. Предполагаю, что есть какие то особенности MasterSCADA, которые не дают адекватно работать.

В VisualStudio:
using System;
using System.Threading;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bots.Extensions.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Exceptions;

namespace TelegramBotExperiments
{

class Program
{
static ITelegramBotClient bot = new TelegramBotClient("TOKEN");

static void Main(string[] args)
{
Console.WriteLine("Запущен бот " + bot.GetMeAsync().Result.FirstName);

bot.SendTextMessageAsync(1131266378, "проверка");
Console.ReadLine();
}
}
} - ВСЕ РАБОТАЕТ

В MasterSCADA:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using System.Threading.Tasks;
using System.Threading;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Args;
using Telegram.Bot.Extensions.Polling;


public partial class ФБ : ScriptBase
{
static ITelegramBotClient bot = new TelegramBotClient("TOKEN");

public override void Start()
{
BotID=bot.BotId;
bot.SendTextMessageAsync(1131266378, "проверка");

}

public override void Execute()
{
if (Послать==true)
{
ТекстОшибки="Отправлено";
bot.SendTextMessageAsync(1131266378, "проверка");
}
}
} - НЕ РАБОТАЕТ

SCADAMaster
19.12.2022, 09:47
В версии бета версии он теперь доступен штатно:
https://support.mps-soft.ru/MasterSCADAHelp/index.html?proekt_stranicy_svojstv_elementov_srran icy_svojstv_sistemy_soobschenia_telegram.html

Anton156
07.02.2023, 09:18
В версии бета версии он теперь доступен штатно:
https://support.mps-soft.ru/MasterSCADAHelp/index.html?proekt_stranicy_svojstv_elementov_srran icy_svojstv_sistemy_soobschenia_telegram.html

Здравствуйте!
Извините, что не в тот раздел, а тоже самое, но для MasterSCADA 4D есть?

SCADAMaster
07.02.2023, 09:24
Какой то механизм там был для этого, лучше уточнить напрямую в техподдержке по MS4:
https://support.masterscada.ru/ru

yurgin_757
19.07.2025, 19:01
а в чат групповой есть возможность отправки?

Доброго времени суток!
Скажите пожалуйста, у вас удалось запустить этот скрипт? И с каналом что-то получилось??
...если не трудно, не могли бы вы поделиться рабочим примером.

s.black
19.07.2025, 23:09
Привет. Может лучше использовать уведомления приложения OwenCloud для выдачи аварий. Звук уведомлений OwenCloud можно сделать отличным от уведомлений ватсап и телеграм. И на этот звук точно среагируешь. От телеги и ватсап в течении дня много сообщений, на которые не обязательно быстро реагировать. В веб версии можно подрегулировать какие сообщения и возможности доступны для каждого пользователя.

yurgin_757
20.07.2025, 05:31
Привет. Может лучше использовать уведомления приложения OwenCloud для выдачи аварий. Звук уведомлений OwenCloud можно сделать отличным от уведомлений ватсап и телеграм. И на этот звук точно среагируешь. От телеги и ватсап в течении дня много сообщений, на которые не обязательно быстро реагировать. В веб версии можно подрегулировать какие сообщения и возможности доступны для каждого пользователя.

Спасибо что откликнулись!
Радует конечно то что у сервиса OwenCloud есть базовый функционал (бесплатный), но все классные "рюшечки" платно!
И на сколько я понял, сервис OwenCloud предназначен для удаленного сбора данных с подключенных приборов, и оперативного оповещения об аварийных ситуациях на объектах где установлены эти приборы.
А у меня встал вопрос в оповещении с уже работающих систем и причём довольно древних, самая древняя из них, версия мастер скада 3.6. Именно поэтому и заинтересовал опыт использования скрипта telegram. В идеале конечно бы было как то интегрировать ФБ telegram из мастерскады версии 3.13, там всё более или мене понятно, и опять же организация канала имеет большой плюс.
За сим и вопрос был к "Скадистам" кто воплотил в жизнь вариант со скриптом telegram.

melky
20.07.2025, 10:17
А поставить что-то поновее просто в качестве агрегатор а для телеграм?
Суть, у вас древние системы, где один и тот же скирьп может вести себя по разному.
А так, с древних систем кидаете данные на агрегатор и там уже одной телегой управляетесь.

yurgin_757
20.07.2025, 14:25
А поставить что-то поновее просто в качестве агрегатор а для телеграм?
Суть, у вас древние системы, где один и тот же скирьп может вести себя по разному.
А так, с древних систем кидаете данные на агрегатор и там уже одной телегой управляетесь.

Доброго здоровья вам Мelky!
Ну так то да, я тоже думал в этом направлении...
...даже можно тем же OwenCloud, типа со старых - действующих скад собирать "алармы" на один ПЛК, а уже с него через инет и OwenCloud в телегу или даже вроде как есть прямой вариант с ПЛК В телегу.
Просто это всё как то ...
На данном этапе мне нужен простой на уровне кода способ купирования проблемы, хотя бы годика на 2-3, а потом у руководства Наполеоновские планы глобализация и всё такое...
...жалко что с Мастер скады соскачить хотят, она милая с 2011 года у нас на площадках верой и правдой работала, не раз купировала в зародыше проблемы выдав предупреждение или аларм оперативному персоналу!!!

п/с а как ваша система Мelky? вы доделали свой универсальный вариант фермы на базе RapidScada
(если готова пишите в личку, я вам дам адрес наших глобалистов, возможно они заинтересуются вашим проектом!)

melky
20.07.2025, 15:18
yurgin_757, доделать в одно лицо, когда занят другим, шутите? :)
К тому же я не вентиляционщик, не знаю алгоритмов управления, да ещё с учётом адиабатики.
В общем там много чего...

И правильно хотят слезть, MS4D не тот торт. А обещанного как говорится три года ждут.


на один ПЛК, а уже с него через инет и OwenCloud если есть доступ ко всем сетям, где стоит MS3 то вполне вариант.
Нюансы: - в MS3 есть Modbus slave по умолчанию? ( не знаю просто). Так то можно развернуть RapidScada без сохранения БД на любом сервере существующем, потребуется Модуль управления и собственно драйвер Телеграм (из платного) и никаких облаков.

imaex
20.07.2025, 20:18
Так то можно развернуть RapidScada

А ничего, что в этой RapidScada алармы существуют только в виде дополнительной пришлёпки? Что-то у меня сомнения в их функциональности возникают.

melky
20.07.2025, 21:01
imaex, алармы (события) там есть по умолчанию, а вот чтобы их отправить по почте, смс или телеграм нужны платные модули. Модуль авто управления для 1 и 2 + драйвер Telegram дополнительно к 3. Даже при стоимости на юр лицо это дешевле ПЛК в несколько раз, если саму Рапиду поставить на существующий сервак. И легко менять настройки, хоть 10-ок ботов создадите под каждый объект свой.
Выбор за автором.

а так как нужно на 2-3 года, можно договориться с руководством купить на частное лицо, и получится еще дешевле.
При этом потом это можно использовать даже через указанный срок (есть там механизмы), даже если сервак умрет...

imaex
22.07.2025, 12:57
imaex, алармы (события) там есть по умолчанию

Можете подсказать - где?

84955

События (event'ы) и алармы - это не одно и то же. Алармы - это особая разновидность событий, поэтому их целесообразно выделять в отдельную категорию.

melky
22.07.2025, 13:37
imaex на web внизу "События".
А настраиваются через Статусы каналов. Вторые цвета сейчас не работают, вроде как задел на будущее. По умолчанию последние 100 событий за 48 часов. Но что-то из этого можно изменить через конфиг.

Отдельного приложения (плагина) для Событий нет. Под 5-ю версию человек делал, но на 6-ю еще не портировал.
Там общее - и события и алармы, в зависимости от критичности и необходимости квитирования разное поведение.

imaex
22.07.2025, 15:11
imaex на web внизу "События".

при чём тут web? Это ж рантайм, если я правильно понимаю.


А настраиваются через Статусы каналов. Вторые цвета сейчас не работают, вроде как задел на будущее. По умолчанию последние 100 событий за 48 часов. Но что-то из этого можно изменить через конфиг.


Какая-то порнография, если честно. "Статусы каналов" - это скорее категории алармов (событий, пусть по-вашему, рапидскадовскому). "Каналы" - это тэги (tag variables) по общепринятой терминологии? Где сами события определяются с привязкой их конкретному каналу? Вкладка "События" в свойствах канала - какая-то непонятная фигня без какой-либо видимой связи со статусами каналов.

Зачем тэги было "каналами" обзывать - вообще непонятно.

melky
22.07.2025, 15:18
imaex так данные тега (канала) состоят из двух вещей - непосредственно данных Val() и Статуса Stat(). вместе это CnlData.
Можно управлять и тем и тем в скрипте канала. Можно только статус поменять (так делают границы каналов при контроле выхода за диапазон), так можно делать самостоятельно, в том числе из драйверов.

В формуле канала :), например я даже таймер в скрипте канала использовал на превышение тока, делая задержку на пусковые токи.
Все в рантайме на Сервере. Посмотреть только так, в Web. Какого-то отдельного плагина для Статусов да, не хватает. Именно журнала, с хорошей фильтрацией и т.д.... умел бы на javascript писать, написал бы, но увы....

там БД хранит Метку времени, Данные, Статус. А по Статусу определяется критичность, необходимость квитирования.
Что нравится, так можно свои создавать, не нравятся штатные (цвет, номер критичности) создали свой и вперед....

Канал это и есть Тег в английском варианте. Данные + Статус. Дальше делайте что хотите.

imaex
22.07.2025, 16:37
В формуле канала :), например я даже таймер в скрипте канала использовал на превышение тока, делая задержку на пусковые токи.

Задержку на появление аларма о превышении тока? Если так, то я как-то привык, что задержка на аларм является его неотъемлемым атрибутом, безо всяких скриптов.



Канал это и есть Тег в английском варианте. Данные + Статус. Дальше делайте что хотите.

Правда? А в каком варианте английского?
https://translate.yandex.ru/?utm_source=yamain&utm_medium=all_services&source_lang=ru&target_lang=en&text=канал

Так-то, что тэг, помимо собственно значения (value) имеет такие неотъемлемые атрибуты, как качество, метка времени для значения (можно ещё метку времени для качества) - для меня не новость.

Вы много всякого написали, а на простейший вопрос не ответили.

Где сами события определяются с привязкой их конкретному каналу?
Попробую по-другому: как сделать событие для изменения, к примеру, DIGITAL (BOOLEAN, если угодно) тега Tag1 с 0 на 1 с выводом сообщения на экран на понятном конечному пользователю языке? "Авария устройства такого-то", например.

melky
22.07.2025, 17:05
imaex
как сделать событие для изменения, к примеру, DIGITAL (BOOLEAN, если угодно) тега Tag1 с 0 на 1 с выводом сообщения на экран на понятном конечному пользователю языке? "Авария устройства такого-то", например.

если реакция на значение тега, то Коллекцией в динамическом рисунке. К сожалению, говорил это разработчику, что коллекции должны быть и для динамического текста например. Я это делаю через динамические рисунки svg :)


<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" >
<!-- Background rectangle -->
<rect width="100%" height="100%" fill="#f20" />

<text text-anchor="start">
<tspan x="1" y="15vh" font-weight="normal" fill="#000" stroke="#000" stroke-width="0.1" >
Напряжение слишком низкое
</tspan>
</text>

<style>
<![CDATA[
text{
dominant-baseline: hanging;
font: 18px Arial, Verdana, Helvetica, Comic Sans MS, sans-serif;
}
]]>
</style>
</svg>

Если бы еще можно было привязывать файл с текстом типа перечисления, но с большими списками, было бы удобнее.
Второй путь (точнее изначальный) - это Перечисления -
Норма: green; Авария устройства такого-то: red в таблице Форматы

melky
22.07.2025, 17:10
Задержку на появление аларма о превышении тока? Если так, то я как-то привык, что задержка на аларм является его неотъемлемым атрибутом, безо всяких скриптов

Ну штатных задержек непосредственно в теге при сработке границ нет, там если поймало, то сразу... мне надо было исключить режим пусковых токов, при этом чтобы писало, что это пусковой ток, при этом меняло цвет.
В границах еще можно задать зону нечувствительности.
Если нужны задержки по тегам всяко разно, то Модуль Автоуправления. ну и добавлять расчетные каналы (теги)

Блин, ну там и в англиской channel. Тег просто многим привычнее, видимо. тут мне как-то фиолетово. Потому что там же есть понятие TagCode как бы...

Там если использовать штатные Перечисления из таблицы Форматы, они идут последовательно от 0. И если есть разрывы в значениях, при которых надо выводить требуемые надписи, то надо ставить много ; для разделения. Опять же, либо скриптом упорядочить через перечисление к последовательности 0;1;2;3 и так далее. Либо через коллекцию в svg, но это для мнемосхем. Для штатных Таблиц не прокатит, придется упорядочивать.

imaex
22.07.2025, 18:28
Ахринеть, короче. Я почти окончательно убедился в том, что если эта RapidSCADA для чего и годится, так для сбора данных с ПУ и отображения их в табличном виде. Всё.

melky
22.07.2025, 21:02
imaex ну это ваше мнение, а я выбирал из-за архитектуры, быстроты настройки и возможности собственных разработок, а не ждать по три года от монстров простых решений.
Прекрасно понимал, что рисовать там все придется самому. Кому рюшечки, а кому ехать....

1. настройка линии
2. настройка устройства
3. нажатие нескольких кликов мышки и все каналы настроены, можно подключать таблицу и запускать в работу.

на 10 минут делов с перекурами. Потом уже сиди картинки рисуй. Не видел такого ни в одной scada, везде надо потратить гораздо больше времени.