Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Вопросы по скриптам в Simple-Scada 2  (Прочитано 1222395 раз)

DikoSt

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #795 : 21 Января 2019, 14:56:34 »
подскажите пожалуйста , как можно разобрать строку  и потом собрать её снова , но только без не нужных символов , т.е у меня есть строка - это тэг с плк в формате  дата и время DT  в скаду он передаётся как строка вида он такого  DT#2018-09-03-12:01:03.569   а мне нужно получить
2018-09-03-12:01:03  - заранее благодарен.
Думаю, что как-то так получится:
newString:=Copy(StringFromPLC; 2, 19 Integer);

всё время забываю с 0 начинают отсчитывать или с 1, поэтому 2 и 19 может придётся подправить.

midnight1979

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
HTTP get/put запросы криптами
« Ответ #796 : 09 Февраля 2019, 12:07:57 »
Добрый день!

Возможно ли на уровне скриптов формировать GET/PUT http запросы????
Вариант с RunApplication не очень элегантный...

спасибо.

midnight1979

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: HTTP get/put запросы криптами
« Ответ #797 : 09 Февраля 2019, 15:33:56 »
Добрый день!

Возможно ли на уровне скриптов формировать GET/PUT http запросы????
Вариант с RunApplication не очень элегантный...

спасибо.

Отвечу пока сам себе - на каком решении на данный момент остановился и оно в принципе меня устраивает.
Суть вот в чем - наверняка многие знают про такую штуку как Blynk. Так вот - есть свой сервер Blynk и нужно было передавать значения переменных Simple Scada в проект Blynk'a.
Благо у последнего есть свой HTTP RESTful API. Присвоение и чтение переменных проекта Blynk осуществляется при помощи GET/POST запросов.
В итоге создал в проекте Simple Scada скрипт на изменение переменных, который отправляет значения этих переменных на сервер Blynk при помощи CURL.
Естественно чтобы запустить CURL - воспользовался методом RunApplication, но в моменты запуска (а переменные изменяются часто) появление черных (консольных) виндовых окошек, которые с завидной регулярностью появляются и пропадают - интерфейсно это ну просто НИКАК!!!

В итоге запускаю CURL, но при помощи VBS скрипта (передав в него в качестве параметров значения переменных Simple Scada) - в примере ниже - для двух таких переменных:
RunApplication(SS_SERVER_NAME, 'c:\curl\curl.vbs', FloatToStr(t1.Value, 0) + ' ' + FloatToStr(h1.Value, 0));

//-- сам скрипт --//
Set objArgs = WScript.Arguments
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "c:\curl\curl.exe ip-address:port/blynk_token/update/v0?value="+objArgs(0), 0, falseTRUE
oShell.Run "c:\curl\curl.exe ip-address:port/blynk_token/update/v1?value="+objArgs(1), 0, falseTRUE
//--добавлено
Set objArgs = Nothing
Set oShell = Nothing

PS. В скрипте изменены параметры shell.run c FALSE на TRUE и добавлено обнуление переменных (как заверяют мануалы - эти переменные и сами должны "убиться" по окончанию выполнения, но раз создал сам то и убей сам), иначе произойдут серьезные утечки в памяти...

Вот таким образом не появляется никаких черных окошек - всё работает в фоне.
Всем спасибо, может у кого нибудь есть и другие варианты решения этой задачи, но я пока остановился на вышеописанном.
Пример наипростейший - осуществляется опрос датчика температуры и влажности воздуха, эти данные попадают в Simple Scada с ArOPC-сервера, и скриптом уходят в мобильное приложение Blynk.
« Изменён: 10 Февраля 2019, 11:29:32 от midnight1979 »

midnight1979

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #798 : 10 Февраля 2019, 19:58:19 »
Функция RunApplication вызывает переполнение памяти при многократном вызове!
Если запускать приложение из скрипта изменения переменной (а это раз в 1-2 секунды) то происходит постепенный рост занимаемой процессом server.exe памяти!
Причем в процессах видно, что запущенная через RunApplication программа отработала и завершилась.
Почему происходит утечка памяти?????????

По факту после запуска сервера Simple Scada - при текущей конфигурации проекта - процесс server.exe занимает в памяти порядка 96 мб, за последующий час работы сервера он уже занимает 117 мб. и так до максимально возможного объема оперативки.

Очень жду ответа разработчиков...
« Изменён: 10 Февраля 2019, 20:00:59 от midnight1979 »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #799 : 11 Февраля 2019, 09:54:16 »
Здравствуйте.

Цитировать
Возможно ли на уровне скриптов формировать GET/PUT http запросы?
Нет, но в будущем появятся такие функции в скриптах.

Цитировать
Функция RunApplication вызывает переполнение памяти при многократном вызове!
Почему происходит утечка памяти?
Скада для запуска приложений использует прямой вызов ShellExecuteExW из WinAPI, никаких доп. действий не выполняется. Если у Вас Windows 10, то возможно Вы столкнулись с ошибкой Windows, которая подробно описана здесь и здесь. Она была устранена в последних обновлениях Windows. По крайней мере у нас она не наблюдается в версии 1803 (сборка 17134.472).

midnight1979

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #800 : 11 Февраля 2019, 15:00:14 »
Версия 1803 (17134.523)
« Изменён: 12 Февраля 2019, 21:23:21 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #801 : 12 Февраля 2019, 21:31:45 »
К сожалению в этом вопросе мы вряд ли сможем что-то изменить, т.к. для запуска приложений используется только код Windows. Видимо в сборке 17134.523 также присутствует проблема с ShellExecute (в этом случае можно рекомендовать только сменить версию или сборку ОС), либо утечка связана с чем-то другим. Если есть желание, отправьте нам на support@simple-scada.com текущую версию проекта. Мы можем проверить её на различных ПК, а также на наличие другие проблем (вдруг утечка памяти вызвана чем-то ещё?).

vyacheslav

  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #802 : 13 Февраля 2019, 10:39:46 »
добрый день, подскажите правильность написание этого скрипта верна?

Код: (delphi)
begin
  RunApplication(GetClientName, GetProjectPath + 'Files\info_simplescada\Температурный график', '');
end.

Он не работает у меня в проекте
« Изменён: 13 Февраля 2019, 10:50:26 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #803 : 13 Февраля 2019, 11:06:16 »
Здравствуйте.

"Температурный график" - это файл изображения? Если да, то необходимо через RunApplication открыть приложение для просмотра изображений и в параметры передать путь к файлу. Например:

Код: (delphi)
begin    
  { запустить Paint на клиенте, который вызвал скрипт и открыть изображение }
  RunApplication(GetClientName, 'mspaint.exe', GetProjectPath + '"Files\info_simplescada\Температурный график.jpeg"');
end.

Также, не забудьте указать верное расширение файла, например "Температурный график.jpeg"

vyacheslav

  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #804 : 13 Февраля 2019, 11:16:59 »
Нет это просто папка

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #805 : 13 Февраля 2019, 11:26:52 »
Тогда нужно запускать проводник Windows(explorer.exe) и код будет таким:

Код: (delphi)
begin   
  { открыть папку в проводнике Windows }
  RunApplication(GetClientName, 'explorer.exe', GetProjectPath + 'Files\info_simplescada\Температурный график');
end.

Этот и другие примеры скриптов для RunApplication можно найти в руководстве по ссылке.

vyacheslav

  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #806 : 14 Февраля 2019, 09:36:35 »
Подскажите возникли проблемы, как правильно исправить: этот код работает на сервере и этот файл лежит именно на сервере, но когда на клиенте выполняю эти действия он не находит этот файл так как локально его нет. как правильно прописать скрипт, чтоб он обращался к папке на сервере?
« Изменён: 14 Февраля 2019, 16:53:32 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #807 : 14 Февраля 2019, 16:52:22 »
Если требуется с клиента открыть папку на удаленном ПК, то использовать GetProjectPath не получится и нужно указывать полный путь к папке на сервере, например:

Код: (delphi)
begin   
  { открыть папку в проводнике Windows }
  RunApplication(GetClientName, 'explorer.exe', '\\192.168.1.10\info_simplescada\Температурный график');
end.

При этом, между сервером и клиентом должен быть настроен общий доступ к необходимой папке.


midnight1979

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #808 : 16 Февраля 2019, 20:43:36 »
К сожалению в этом вопросе мы вряд ли сможем что-то изменить, т.к. для запуска приложений используется только код Windows. Видимо в сборке 17134.523 также присутствует проблема с ShellExecute (в этом случае можно рекомендовать только сменить версию или сборку ОС), либо утечка связана с чем-то другим. Если есть желание, отправьте нам на support@simple-scada.com текущую версию проекта. Мы можем проверить её на различных ПК, а также на наличие другие проблем (вдруг утечка памяти вызвана чем-то ещё?).

Вероятно дело и версии, но решил все таки данную задачу пока со Скады снять. Во-первых - память утекает, во-вторых это не совсем задача для Скады таким способом через скрипты работать с API сторонних систем :)
Если бы были методы реализующие на языке скриптов запросы GET и PUT тогда возможно и на скаде бы оставил, а так написал собственного клиента OPC и сделал удобный интерфейс сопоставления тегов сервера с переменными проекта Blynk. - теперь каждый занимается своей задачей... :)

Но возможность работы с HTTP (а еще лучше через websockets) - очень ждем в Simple Scada...

Кумар

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #809 : 26 Февраля 2019, 12:03:29 »
Здравствуйте.
Как можно отключить (завершить работу) Web-клиентов?
Используя процедуру CloseApplicationClient/CloseApplicationAll, скрипт срабатывает только для обычных клиентов и для web-клиентов, запущенных через созданную иконку на Android-устройстве.