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

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

bars

Подскажите, пользовательский звуковой фаил как вставить в проек в качестве звука аварийной сигнализации? Только скриптами? В меню выбираются только 6 стандартных звуков.

Simple_Scada

#166
Здравствуйте!

Вы можете сохранить свой файл, например с именем Sound_1.ogg и заменить аналогичный файл в папке \Simple-Scada 2\Libraries. Затем, в настройках проекта ->Сообщения -> "Звук аварии" выбрать Sound_1 - теперь при появлении аварийного сообщения будет проигрываться Ваш файл. Важно! Ваш файл обязательно должен быть в формате .ogg

bars

И я так понимаю звуков не будет больше шести...

Simple-Scada

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

Mishail

Здравствуйте!
Подскажите пожалуйста есть ли возможность работы с переменной String в плане: отрезать, добавить или заменить символ или часть строки. Знаю в Object Pascal есть такие функции(процедуры) как Delete, Insert, Copy и т. д., но тут не получается их использовать.
Заранее, спасибо за ответ.

Simple-Scada

Здравствуйте.

В данный момент есть только следующие функции для работы со строками:
  • UTF8Copy(Str: UTF8String; FromPosition, Count: Integer) - копирует Count символов из строки Str, начиная с позиции FromPosition;
  • UTF8Length(Str: UTF8String) - возвращает длину строки Str;
  • UTF8ToString(AStr: UTF8String) - приводит строку AStr к типу string;
  • UTF8Encode(AStr: string) - приводит строку AStr к типу UTF8String;

Пример копирования части текста:
Код: pascal
var
  aStr: string;
begin
  aStr := 'Привет мир!';
  Text1.Text := UTF8Copy(UTF8Encode(aStr), 1, 6);  // в Text1 запишется "Привет"
end.

В ближайшее обновление добавим также другие функции для работы со строками.

starmos

#171
Непонятно.
Скрипт:
Код: pascal
begin
    Obem1 := V_1.AsFloat  + V1_1.AsFloat * 0.0001;
end.
Ошибка:
[uGlobal] Incompatible types "TM_Variable" and "DOUBLE", в строке: 2, позиция: 49

Типы переменных: V_1:LongWord, V1_1:Word, Obem1:Double   Первые две берутся с OPC, третья - виртуальная.
Как я понимаю все типы в выражении должны совпадать?  В чем тогда причина ошибки? И где в редакторе посмотреть позицию 49?

Simple-Scada

#172
starmos, дело в том, что Obem1 это глобальная переменная и она имеет тип TM_Variable, который включает в себя множество свойств (подробно описан здесь), одно из которых Значение (Value). Правильно менять не саму переменную, а значение переменной, вот так:

Код: pascal
begin
    Obem1.Value := V_1.AsFloat  + V1_1.AsFloat * 0.0001;
end.

ЦитироватьИ где в редакторе посмотреть позицию 49?
Это позиция курсора по горизонтали и она указывает на конец строки "    Obem1 := V_1.AsFloat  + V1_1.AsFloat * 0.0001;", ровно 49 символов.

deldemo

#173
РЕШЕНО!
Ребята здравствуйте. Направьте пожалуйста на путь истинный.
Не могу реализовать нормально работающий код для дискретной задвижки.
Хотелки => Что бы при состоянии задвижки ОТКРЫТА в поле писалось 'Открыта'
, а при состоянии ЗАКРЫТА ,естественно, 'Закрыта'.

Я делал так.
Создал внутреннею переменную, ее присвоил задвижке. И уже в эту virt_переменную в зависимости от сработавшего концевика писал текст. Но для этой процедуры приходится создавать кучу доп. объектов. 
Так то в принципе все ничего, но при старте СКАДЫ в этих поля прочерки " ---- " пока не поменяется состояние концевика.
А хотелось бы сразу лицизреть нужную надпись о положении задвижки.

Код: pascal
Скрипт 1

begin
  if PLC2_FIRST_PRG_zkh1_open_ok.AsInt = 1 then
    virtZKH1_txt.Value := 'Открыта'
  else
    virtZKH1_txt.Value := '----'
end.            

Скрипт 2

begin
  if PLC2_FIRST_PRG_zkh1_close_ok.AsInt = 1 then
    virtZKH1_txt.Value := 'Закрыта'
  else
    virtZKH1_txt.Value := '----'
end.       

Simple-Scada

ЦитироватьРЕШЕНО!
Не успели, но здесь видимо нужно было что-то вроде этого кода:

Скрипт 1:
Код: pascal
begin
  if (PLC2_FIRST_PRG_zkh1_open_ok.AsInt = 1) and (PLC2_FIRST_PRG_zkh1_close_ok.AsInt <> 1) then
    virtZKH1_txt.Value := 'Открыта';
end.    

Скрипт 2:
Код: pascal
begin
  if (PLC2_FIRST_PRG_zkh1_close_ok.AsInt = 1) and (PLC2_FIRST_PRG_zkh1_open_ok.AsInt <> 1) then
    virtZKH1_txt.Value := 'Закрыта';
end. 

deldemo

Администратор. Мне просто еще хотелось что бы в процесе работы или аварии был текст  "----"

Решил так:

Скрипт 1
Код: pascal
begin
  if PLC2_FIRST_PRG_zkh1_close_ok.AsInt = 1 then
    virtZKH1_txt.Value := 'Закрыта';

  if (PLC2_FIRST_PRG_zkh1_close_ok.AsInt = 0) and (PLC2_FIRST_PRG_zkh1_open_ok.AsInt = 0) then
    virtZKH1_txt.Value := '----'
end.                      

Скрипт 2

Код: pascal
begin
  if PLC2_FIRST_PRG_zkh1_open_ok.AsInt = 1 then
    virtZKH1_txt.Value := 'Открыта';

  if (PLC2_FIRST_PRG_zkh1_close_ok.AsInt = 0) and (PLC2_FIRST_PRG_zkh1_open_ok.AsInt = 0) then
    virtZKH1_txt.Value := '----'
end.                   



beloleg86

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

Simple-Scada

#177
Здравствуйте.

В версии 2.1.2.0 Добавили процедуры GoToTrendsGroupAll, GoToTrendsGroupClient, GoToMessagesGroupAll, GoToMessagesGroupClient. С их помощью можно перейти в заданную группу трендов или сообщений.

596039

Здравствуйте, можно ли как-нибудь "спросить" скриптом у группы трендов какой у нее ID?

Simple-Scada

ЦитироватьЗдравствуйте, можно ли как-нибудь "спросить" скриптом у группы трендов какой у нее ID?
596039, здравствуйте, а для какой цели это нужно? Можно посмотреть ID нужной группы в Редакторе и указать этот ID.