Стартовая страница › Форумы › Понять, как работает ПО › Xml, БД, внешнее приложение
- В этой теме 38 ответов, 5 участников, последнее обновление 2 года, 5 месяцев назад сделано Mikhail.
-
АвторСообщения
-
02.06.2020 в 17:12 #16310vgУчастник
Здравствуйте.
Стоит задача отображать с некоторой периодичностью(для обновления) на схеме информацию, хранящуюся в БД. Некоторые колонки хранятся в виде чисел и служат уникальными идентификаторами к строковым данным в XML-файле. По этим идентификаторам нужно извлечь строковые данные(до 40 символов) из XML и передать в SCADA. То есть часть информации непосредственно из БД, часть из XML по «ключам» из БД.
Допустим я забрал все нужные данные из БД и необходимые «ключи» хранятся в каналах. В интерфейсах можно создать XML файл и скопировать туда содержимое моего XML-файла со строковой информацией.
1) Как мне обратиться из SCADA к XML-файлу чтобы забрать нужные данные? Как хранить полученные данные? Вероятно, отобразить строковые данные такой длины я смогу только записав их в БД и считав их в SCADA?
2) Возможно стоит написать приложение, которое сделает всю необходимую работу, но как тогда запустить такое приложение из SCADA? Можно написать код вроде этого:
System.Diagnostics.Process.Start(«Notepad.exe»);
Но формула всегда привязана к каналу, который имеет значение double. Пробовал возвращать константное число в канале «Минутный ТИ», лишь бы приложение запускалось, не сработало.
Даже если это плохой вариант запустить внешнее приложение возможно?3) В документации написано, что с помощью дополнительных плагинов можно осуществить поддержку не только схем и таблиц, но не понял что это за плагин.
- Эта тема была изменена 3 года, 9 месяцев назад от vg.
02.06.2020 в 17:18 #16312manjey73УчастникМожет проще будет реализовать при помощи драйвера ? и передавать в каналы 8 байт в виде текста, а в следующей версии переделать потом на текстовую БД ?
Можно будет сделать настройку в виде того же xml для настройки какие ключи использовать из БД для доступа к вашему xml и соответственно не тратить для этого каналы.
- Этот ответ был изменен 3 года, 9 месяцев назад от manjey73.
02.06.2020 в 17:26 #16314RomirosУчастник1. Можно забрать данные из БД с помощью KpDbImport и положить их в каналы RapidScada.
2. Разработать модуль для RapidScada, который по изменению данных каналов будет считывать текстовые данные из xml файла и отправлять их в события RapidScada.
3. Если не хватает отображения в журнале событий, то разработать свой плагин отображения, либо html страницу.02.06.2020 в 17:52 #16317vgУчастникБлагодарствую, есть над чем подумать)
02.06.2020 в 17:55 #16319MikhailМодераторДобрый день!
Если данные есть в БД, то изобретать промежуточный XML очень не оптимально. Напишите SQL-запрос, который выдаёт данные в том виде, который принимает драйвер KpDbImport.
Даже если это плохой вариант запустить внешнее приложение возможно?
Да, но это действительно плохой вариант )) Т.к. SCADA-Сервер является службой, то блокнот Вы не увидите, но в процессах он будет.
02.06.2020 в 17:57 #16320MikhailМодераторПробовал возвращать константное число в канале «Минутный ТИ», лишь бы приложение запускалось, не сработало.
Например, как?
02.06.2020 в 17:59 #16321MikhailМодераторПрочитал исходное сообщение внимательнее. Наверное, здесь лучше всего разработать свой драйвер для Коммуникатора, который будет работать и с БД и с файлом. Пример драйвера.
02.06.2020 в 18:08 #16322vgУчастникЕсли данные есть в БД, то изобретать промежуточный XML очень не оптимально.
Полностью согласен. Но чем богаты, тем и рады).
Пробовал возвращать константное число в канале «Минутный ТИ», лишь бы приложение запускалось, не сработало.
Например, как?
Как то так:
public double AppStart()
{
System.Diagnostics.Process.Start(«Notepad.exe»);
return 1;
}
Подумал, что какая разница что возвращается, если по пути запустится приложение)).
Я неопытный разработчик, поэтому ещё много глупостей буду делать).Спасибо за ответы.
- Этот ответ был изменен 3 года, 9 месяцев назад от vg.
03.06.2020 в 17:36 #16341MikhailМодераторAppStart выглядит нормально. Сервер стартует? Чтобы формула выполнялась, её нужно указать для какого-нибудь канала. Лучше всего для канала управления, чтобы она срабатывала по команде.
03.06.2020 в 18:22 #16345vgУчастникMikhail, да, сервер стартует. Через некоторое количество попыток запустить блокнот обнаружил в процессах несколько десятков блокнотов, но ни один не открылся. Пробовал запускать свой exe-файл, который создан для другого проекта и должен создавать текстовый файл с определённым содержанием. Указывал формулу для канала типа «Минутный ТИ». Каждую минуту exe-файл отрабатывал и появлялся в процессах, а затем исчезал, но функцию свою не выполнял: текстового файла не появлялось (exe-файл работает как надо).
Попробую с каналом управления.
- Этот ответ был изменен 3 года, 9 месяцев назад от vg.
03.06.2020 в 21:59 #16347vgУчастникС каналом управления результат тот же. Заметил, что во вкладке «Подробности» диспетчера задач у процесса notepad.exe стоит «Не разрешено» в колонке «Виртуализация UAC».
Соответственно если открыть обычный текстовый файл .txt, то в «Подробности» -> «Виртуализация UAC» будет «Отключено», а notepad.exe не значится в фоновых процессах.
Возможно в этом препятствие? Как я понял эта виртуализация является неким защитным механизмом. Использую Windows 10.
- Этот ответ был изменен 3 года, 9 месяцев назад от vg.
03.06.2020 в 22:08 #16349vgУчастникПопытка изменить положение ползунка в «Параметры управления учетными записями пользователей» ни к чему ни привела.
03.06.2020 в 22:45 #16350manjey73УчастникScada запускает все от системного пользователя. Где-то Михаил писал как вместо службы запустить exe (которые для Mono) руками, соответственно запустить и проверить.
Вдруг сработает ?03.06.2020 в 23:11 #16351vgУчастникПоищу, спасибо.
03.06.2020 в 23:17 #16352manjey73УчастникА чего там искать, отключить сервис ScadaServer и запустить руками ScadaServerMono.exe из пакета для Linux
Кажется так.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.