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

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

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

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #645 : 24 Мая 2018, 08:34:32 »
Я не разработчик, но думаю, что вряд ли. Написать отладчик очень сложно.
Рекомендую для отладки активно использовать функцию Log_Add.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #646 : 24 Мая 2018, 09:54:45 »
Здравствуйте. Отладчика скриптов нет и не планируется в системе? Вопрос для меня критичный, не хочется для проверки скриптов каждый раз перезапускать клиента
Здравствуйте. Внедрение отладчика для скриптов не планируется в ближайшем будущем. Планируется только добавить быстрый запуск проекта из редактора скады. К тому же и с отладчиком в большинстве случаев придется подключаться к проекту клиентом, например для отладки скрипта по событию OnClick кнопки. Придется сначала подключиться к проекту клиентом, найти эту кнопку на мнемосхеме и кликнуть её. Поэтому для событий, которые вызываются действиями пользователя внедрение отладчика не сильно упростит работу.

не хочется для проверки скриптов каждый раз перезапускать клиента
Перезапускать клиент не обязательно, достаточно перезапустить проект на сервере. Клиент сам подключится к проекту и подхватит изменения в проекте.
« Изменён: 24 Мая 2018, 09:58:18 от Simple-Scada »

EricFlat

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #647 : 31 Мая 2018, 10:16:44 »
Перезапускать клиент не обязательно, достаточно перезапустить проект на сервере. Клиент сам подключится к проекту и подхватит изменения в проекте.
А вот тут не работает. Изменения подхватывает только веб-клиент. И только при обновлении страницы. Скада клиент проект не обновляет, даже при перезапуске проекта на сервере.
« Изменён: 31 Мая 2018, 10:25:27 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #648 : 31 Мая 2018, 10:25:22 »
EricFlat, если Вы внесли изменения в проект, сохранили их и перезапустили проект на сервере (нажатием кнопки стоп с квадратной иконкой и затем кнопки пуск с треугольной иконкой), то обычные клиенты подключенные к серверу просто не смогут работать пока не подхватят изменения проекта, т.к. они не выполняют никаких функций кроме визуализации данных с сервера. Убедитесь что Ваш клиент подключен именно к тому серверу на котором Вы перезапускаете проект, а не к другому серверу (например локальному на том же компьютере, на котором запущен клиент) и именно к тому проекту, который вы перезапускаете. Может быть когда Вы подключаетесь к серверу из клиента, то оставляете адрес localhost? Тогда будет просто запущена локальная копия сервера скады и перезапуски проекта на удаленном сервере скады конечно ничего не дадут.
« Изменён: 31 Мая 2018, 10:28:39 от Simple-Scada »

EricFlat

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #649 : 31 Мая 2018, 11:42:59 »
Я не разработчик, но думаю, что вряд ли. Написать отладчик очень сложно.
Рекомендую для отладки активно использовать функцию Log_Add.
Нашел эту функцию, прописал в скрипт выполняемый каждую секунду, но не могу найти этот лог. Есть Client-log.txt, там нет никаких записей.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1174
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #650 : 31 Мая 2018, 13:19:18 »
Здравствуйте!

Процедура Log_Add добавляет сообщение в Log-файл сервера Simple-Scada(Server-log.txt) на ПК-сервере(ПК, на котором выполняется проект). Log-файл можно найти в папке "..\Simple-Scada 2\Logs".

atomix

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #651 : 04 Июня 2018, 16:07:54 »
Будут ли реализованы глобальные переменные в скриптах, а также функции вызываемые при старте проекта и остановке (например подключился первый клиент то вызывается некая функция старта, а если отключился последний живой клиент, то вызывается функция стопа).

Те переменные (внутренние виртуальные) не подходят у них нет значения хранить как Variant Type.

Также не хватает функции VarType и IsObject.

Пока на этом у меня застопоролось перевод проектов на вашу платформу.

Также при использовании скриптов в обработчике нажатия например от кнопки, возникает рядом с курсором мыши изображение колесика загрузки на доли секунды, может его не показывать если исполнение скрипта длится меньше секунды.
« Изменён: 04 Июня 2018, 16:15:08 от atomix »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #652 : 04 Июня 2018, 16:19:38 »
Цитировать
функции вызываемые при старте проекта и остановке
Такие события уже есть: "Полностью запущен" и "Остановка проекта". Также при подключении каждого клиента выполняется событие "Клиент подключен".

Цитировать
Будут ли реализованы глобальные переменные в скриптах
Как Вы правильно отметили - виртуальные переменные в меню "Проект -> Переменные" это и есть глобальные переменные.

Цитировать
Те переменные (внутренние виртуальные) не подходят у них нет значения хранить как Variant Type.
Любая глобальная переменная, независимо от типа, который Вы выбираете, на самом деле является Variant переменной. Поэтому свойство Value такой переменной имеет тип Variant. А выбранный при создании тип данных влияет только на формат отображения и на некоторые преобразования.

Цитировать
Также не хватает функции VarType и IsObject. Пока на этом у меня застопоролось перевод проектов на вашу платформу.
Можете подробно описать задачу которую нужно решить и для чего конкретно нужно применить эти функции? На данный момент мы не знаем реальных задач в которых нельзя было бы обойтись без этих функций.

Цитировать
Также при использовании скриптов в обработчике нажатия например от кнопки, возникает рядом с курсором мыши изображение колесика загрузки на доли секунды, может его не показывать если исполнение скрипта длится меньше секунды.
Скада сама никогда не меняет курсор, поэтому мы не сможем на это повлиять (кроме как принудительно вызывать смену курсора на обычный в "бесконечном" цикле). Скорее всего его меняет ОС. Какие именно действия выполняются в этом скрипте? Может быть работа с файлами? Можете привести пример скрипта? Либо курсор меняется при выполнении любого скрипта?
« Изменён: 04 Июня 2018, 16:25:38 от Simple-Scada »

atomix

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #653 : 05 Июня 2018, 08:57:29 »
Вставляем этот код в SimulationTimer и заводим глобальную переменную objTemp.

Вот так работает:
Код: (delphi)
function Test(param : variant) : Variant;
var
  WshNetwork  : Variant;
begin
  WshNetwork := CreateOleObject("WScript.Network");
  Field41.text :=  WshNetwork.ComputerName;
  //ShowMessageAll('Заголовок окна', WshNetwork.ComputerName, clNone);
end;

Вот так НЕ работает:
Код: (delphi)
function Test(param : variant) : Variant;
var
  WshNetwork  : Variant;
begin
  objTemp.Value := CreateOleObject("WScript.Network");
  Field41.text :=  objTemp.Value.ComputerName;
  //ShowMessageAll('Заголовок окна', objTemp.Value.ComputerName, clNone);
end;

VarType и IsObject нужны чтобы определить создался ли объект. может по другому как надо я не знаю подскажите.
« Изменён: 05 Июня 2018, 10:37:46 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #654 : 05 Июня 2018, 11:02:47 »
Сервер перед присвоением выполняет проверку VarSameValue, которая вызывает исключение если значения нельзя сравнить (имеют разный тип). Поэтому присвоение прерывается. В ближайшем обновлении исключим эту проверку и присвоение objTemp.Value := CreateOleObject("WScript.Network"); будет работать, а значение objTemp.Value можно будет затем использовать в любом скрипте. Несмотря на это, мы рекомендовали бы работать с OLE объектами в пределах скрипта, чтобы правильно реализовать их по завершению скрипта, например:
Код: (delphi)
var
  WshNetwork  : Variant;
begin
  WshNetwork := CreateOleObject("WScript.Network");  // создаем объект
  Text1.Text :=  WshNetwork.ComputerName;
  WshNetwork := Unassigned;  // освобождаем объект
end.

При необходимости работы с объектом из другого скрипта лучше снова создать его, использовать и освободить:
Код: (delphi)
var
  WshNetwork  : Variant;
begin
  WshNetwork := CreateOleObject("WScript.Network");  // создаем объект
  Text2.Text := WshNetwork.EnumNetworkDrives.Count;
  WshNetwork := Unassigned;  // освобождаем объект
end.

Цитировать
VarType и IsObject нужны чтобы определить создался ли объект.
Можете не проверять и сразу работать с объектом, как в примерах выше. Сервер всё равно будет делать такую проверку автоматически и в случае ошибки Вы увидите соответствующее сообщение в журнале сервера.

EricFlat

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #655 : 08 Июня 2018, 13:51:23 »
Вопрос по процедурам Ping. Хочу использовать IP адрес в глобальной переменной G_IP типа string
Вот такая последовательность не работает.

На старте.
Код: (delphi)
begin
  G_IP.Value:='192.168.2.9';
end.
Код: (delphi)
begin
  StartPing(G_IP.AsStr, 5000);
end.
Каждую секунду.
Код: (delphi)
begin
  if GetPing(G_IP.AsStr) then
    begin
      G_ping.Value:=TRUE;
      G_sPing.Value:='ОК';
    end
  else
    begin
      G_ping.Value:=FALSE;
      G_sPing.Value:='-';
    end
end.
Если в процедуры передавать вместо G_IP явные указания IP в виде '192.168.2.9', то все работает.
« Изменён: 13 Июня 2018, 12:01:09 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #656 : 13 Июня 2018, 12:14:37 »
Код работает. См. пример во вложении (для версии 2.2.9.2). Может быть у Вас переменная G_IP внешняя (с OPC-сервера)? Тогда присвоение "G_IP.Value:='192.168.2.9'" может выполниться не моментально и StartPing пройдёт для пустого IP-адреса. И почему у Вас два разных скрипта для старта? Если G_IP внутренняя переменная, то можно написать так:
Код: (delphi)
begin
  G_IP.Value:='192.168.2.9';
  StartPing(G_IP.AsStr, 5000);
end.

Также больше нет необходимости проверять пинг каждую секунду. Для этой цели лучше использовать скрипт с типом события "Изменился пинг".

EricFlat

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #657 : 13 Июня 2018, 13:51:20 »
Тогда присвоение "G_IP.Value:='192.168.2.9'" может выполниться не моментально и StartPing пройдёт для пустого IP-адреса. И почему у Вас два разных скрипта для старта?
Да, это переменная скады. Я использую их, как глобальные константы и в отдельном скрипте на старте раздаю значения.  Запуск пинга тоже на старте, с еще пустой константой, отсюда и ошибка. Буду задавать константы IP в скрипте старта пинга.

beloleg86

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #658 : 15 Июня 2018, 14:08:02 »
есть много точек которые считывают информацию температуры в фаренгейтах, есть способ универсального скрипта перевода в цельсия? пока приходится каждой точке писать свой скрипт

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1174
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #659 : 17 Июня 2018, 20:08:33 »
Здравствуйте!

Можно обойтись без скриптов, используя функцию масштабирования значений переменной из одной шкалы в другую. Допустим, переменная в фаренгейтах принимает диапазон значений от -58 до 122. Создадим шкалу с этим диапазоном и назначим ее нашей переменной. Далее, перейдем на вкладку свойств переменной "Дополнительные", активируем режим масштабирования и укажем соответствующую шкалу в цельсиях(см. скриншот). Значению "-58" гр. фаренгейта соответствует "-50" гр. цельсия, значению "122" гр. фаренгейта соответствует "50" гр. цельсия. Т.е., нам необходимо указать визуальную шкалу от -50 до 50. Готово! Теперь, полученные с контроллера значения в фаренгейтах будут автоматически преобразовываться в градусы цельсия.