Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

int2246

Цитата: Simple-Scada от 07 апреля 2016, 13:03:56Нет, в данном случае Вы по сути хотите вставить в окно скады другое приложение. Это не получится из-за особенностей отрисовки скады. Добавить такую возможность - можно, но это может привести к появлению недостатков связанных со скоростью и стабильностью работы и добавит в скаду несколько уязвимостей.
Если вы сможете добавить какую возможность то это будет ВАУ  ::) 

deldemo

#61
Здравствуйте.
Не получается реализовать скрипт с координатами мыши. Ошибка при компиляции.



Вопрос ? Что я делаю не так

Simple-Scada

#62
deldemo, Вы всё делаете верно, но некоторое время назад мы исключили функции Mouse_X, Mouse_Y из скриптов (а из справки удалить забыли), т.к. они вернут координаты курсора мыши сервера, а не клиента, что может привести к разным заблуждениям и бессмысленности этих функций.

deldemo

#63
Жаль, можно было бы первоАпрельские шутки реализовать для операторов (ну естественно не нарушая ТБ)  ;D

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

int2246

Здравствуйте, подскажите пожалуйста, можно ли как то сделать воспроизведения собственной аудио записи по событию?

Simple-Scada

int2246, это будет возможно если мы вынесем в скрипты соответствующие процедуры. Постараемся сделать это в ближайшее время.

int2246


Evgen4ik

Добрый день! Возник вопрос, Можно ли написать скрипт для того чтобы при превышении параметра (температуры) издавался звуковой сигнал. Извиняюсь возможно за глупый вопрос но совсем недавно в этой теме.

Simple_Scada

#68
Для включения звукового сигнала:
У Поля или Уровня, в котором отображается температура переходим в Инспекторе объектов в "События", кликаем два раза ЛКМ на OnDataChange (изменилось значение переменной связанной с объектом) и пишем скрипт:
Код: pascal
begin
 // Field1 - поле с которым связанна переменная температуры.
 // Ниже приведены варианты звуковых сообщений - выберите какое требуется Вам.
  case Field1.ValueAsInt of
    20..30: PlayMessageSoundClient(GetClientName);  // проиграть звук сообщения на текущем клиенте, если значение в диапазоне от 20 до 30.
    31..40: PlayWarningSoundClient(GetClientName);  // проиграть звук предупреждения на текущем клиенте, если значение в диапазоне от 31 до 40.
    41..50: PlayAlarmSoundClient(GetClientName);    // проиграть звук аварии на текущем клиенте, если значение в диапазоне от 41 до 50.
  end;
end.

Можно сделать кнопку, которая будет останавливать проигрывание звука:
Ставим кнопку, переходим в события, кликаем по событию OnClick (пользователь кликнул по объекту);
Код: pascal
begin
  StopSoundClient(GetClientName); // остановить проигрывание звука на текущем клиенте. 
end. 

Хитрый

Здравствуйте.
Можно ли написать скрипт так, чтоб при изменении переменной поля, если она меньше определенного значения, то ее значение приравнивалось к нулю и выводилось в поле?
Пробовал писать такой скрипт, но данные в этом же поле не менялись, но при этом по этому условию можно менять данные в другом поле...

Олег

Добрый день!

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

TeNQ

#71
Цитата: Хитрый от 12 мая 2016, 13:17:13Можно ли написать скрипт так, чтоб при изменении переменной поля, если она меньше определенного значения, то ее значение приравнивалось к нулю и выводилось в поле?
Попробуйте использовать скрипт по окончанию ввода для этого поля.
   Я создал внутренний тег Test типа Integer. Создал поле Field1. Привязал переменную к этому полю и в Событиях для этого поля выбрал скрипт OnDoneInput
Код: pascal
begin
  if Field1.Value < -10 then
    Field1.Value := 0;
end.            
Если вы введете значение меньше -10, то оно будет приравнено к нулю и выведено в поле. Это контроль по вводу с клавиатуры.
   А если значение переменной меняется не с клавиатуры, и вы хотите решить ту же задачу, то используйте скрипт OnDataChange. С тем же кодом.

ЦитироватьПодскажите как вывести текущую  время и дату, попробовал из примера руководства но не компилится.
Создал объект Text1. В меню Проект-Скрипты использую скрипт OnSecondTimer
Код: pascal
begin
  Text1.Text := DateTimeToStr(Now);
end.      
Т.е. просто преобразую текущее время/дату - Now из формата TDateTime в формат String и присваиваю полю Text объекта Text1 и каждую секунду оно будет обновляться.

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

Simple-Scada

#72
ЦитироватьПодскажите как вывести текущую  время и дату, попробовал из примера руководства но не компилится.
Как и написал TeNQ.

ЦитироватьМожно ли написать скрипт так, чтоб при изменении переменной поля, если она меньше определенного значения, то ее значение приравнивалось к нулю и выводилось в поле?
Подобные проверки безусловно должны быть сделаны на контроллере. Но если такой возможности нет и нужно сделать именно в скаде, то:

Для внешней переменной (с OPC-сервера):
Можно сделать это по событию OnDataChange объекта, который связан с данной переменной, или по событию OnDoneInput, как предложил TeNQ (это подойдет если переменную меняет именно пользователь).

Для виртуальной переменной:
правильнее делать эту проверку в OneSecondTimer или по событию OnDoneInput, как описано выше. Но по событию OnDataChange такого делать нельзя, т.к. скрипт будет зациклен сам на себя и приведет к плохим последствиям. Описать этот процесс можно так:
  • вы создаете новый объект "O" и связываете его с переменной "V";
  • теперь, когда переменная "V" изменится - будет вызван скрипт OnDataChange объекта "O";
  • если в скрипте вы присвоите переменной "V' другое значение, то скрипт OnDataChange будет вызван снова. т.к. значение переменной изменится;
  • и вот скрипт вызывается и снова меняет значение переменной, что приводит к ещё одному вызову OnDataChange;
  • и так повторяется бесконечно долго
т.к. любое присваивание в виртуальную переменную сейчас приводит к вызову события OnDataChange. Постараемся уйти от этого в ближайшее время.

Цитата: TeNQ от 12 мая 2016, 18:05:48А вот это надо в предложения внести. Сейчас если вы вошли в учетную запись, вы из нее никак не выйдете. Только сможете перейти в другую учетку или закрыть клиент.
Добавим в скрипты функции авторизации и закрытия сессии в ближайшем или следующем после него обновлении.

deldemo

Здравствуйте!
Есть небольшое неудобство при написании скриптов.
Если печатать длинный текст в скрипте (ну например как на скришоте ) он уходит за область и достать его от туда нельзя. А при переносе половины текста на строку ниже (скрин №2) сбивается форматирование в окне где этот текст отображается, ну и в редакторе скриптов как то не эстетично все это смотрится  без подсветки синтаксиса.
Просто у меня ноут +FHD монитор. Иногда приходится работать с экрана ноутбука а там 1366x768 и тут становится не очень комфортно в редакторе .
Вообщем хотелось бы какие то горизонтальные ползунки ну или любой другой вариант для передвижения по экрану в горизонтальном положении. 

Simple-Scada

#74
deldemo, чтобы текст в коде располагался в несколько строк, нужно писать так, как показано на картинке. Также не забывайте, что можно менять размер шрифта, если нужно. Может быть на вашем мониторе удобнее будет работать с более мелким шрифтом.