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

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

maks48

На экране есть n окружностей. Как можно в цикле работать со свойствами всех объектов? Т.е. в скрипте не напрямую писать shape1.visible:= true; ...
a через ссылку или указатель на объект.

Simple-Scada

#751
maks48, имя объекта является именно указателем на объект. Перебрать объекты в цикле можно через функцию поиска по имени, например GetShapeByName, если имена однотипные. Но это не идеальное решение и практически всегда можно обойтись без перебора, решив задачу с использованием универсального скрипта. Опишите задачу подробнее, нужно менять видимость фигуры в зависимости от значения переменной?

maks48

У меня есть 100 окружностей, например. Есть 100 замеров в бд. Результаты замеров я присваиваю координатам х и у окружностей для визуализации данных. Вот этот алгоритм я хочу реализовать в цикле.

Simple-Scada

Тогда только перебором через GetShapeByName, что плохо, т.к. каждый раз на каждый объект будет выполняться поиск по имени. SCADA-система совершенно не подходит для решения подобных задач, поэтому любое возможное решение на скаде будет плохим по производительности и его будет трудно реализовать. Скорее всего Вам нужно использовать какое-то специализированное ПО.

Дмитрий_021

Добрый день, можно ли к скрипту приявязать более 2 переменных (основной и дополнительной), скрипт используется для объекта - Поле.

Simple_Scada

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

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

maks48

Если из скрипта выполнить команду SELECT * FROM my_base, то в DataSet будет вся бд. Если какие-то ограничения на размер базы, число строк, столбцов?
Например, бд содержит 25 столбцов и 10000 строк. Корректно делать выборку одним запросом или лучше придумать алгоритм сортировки и вычитывать данные постепенно?

Simple-Scada

Это зависит от производительности серверного ПК и операций, которые затем нужно выполнять с полученным набором данных. Можно просто заполнить таблицу БД данными на указанную величину и протестировать под конкретный серверный ПК. Если производительности не хватит, то нужно будет разделять запросы и выбирать данные по частям.

vyacheslav

#758
Добрый день помогите правильно составить скрип. есть формула расчета температуры подачи и обратки по теплу, вот она :
Код: pascal
koef_rasch := (21 - t_narvozd) / (t_komfort + 43);
IF (t_narvozd >= -43) THEN
  t_zad := t_komfort + 61 * 0.5 * koef_rasch + (129 - t_komfort * 2) * 0.5 * EXPT(koef_rasch, 0.8);
ELSE
  t_zad := 95;
END_IF
t_zad_obr := t_zad - 25 * koef_rasch;
EXPT - это возведение в степень.
Помогите перевести ее в скрипт, все наименования, это переменные           

Simple-Scada

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

Вот пример:
Код: pascal
begin
  koef_rasch.Value := (21 - t_narvozd.Value) / (t_komfort.Value + 43);
  if t_narvozd.Value >= -43 then
    t_zad.Value := t_komfort.Value + 61 * 0.5 * koef_rasch.Value +
            (129 - t_komfort.Value * 2) * 0.5 * Power(koef_rasch.Value, 0.8)
  else
    t_zad.Value := 95;

  t_zad_obr.Value := t_zad.Value - 25 * koef_rasch.Value;
end.

Но, если мы правильно поняли, переменные "koef_rasch" и "t_zad" нужны только во время проведения расчета, тогда их можно сделать локальными, например:
Код: pascal
var
  koef_rasch, t_zad: Double;
begin
  koef_rasch := (21 - t_narvozd.Value) / (t_komfort.Value + 43);
  if t_narvozd.Value >= -43 then
    t_zad := t_komfort.Value + 61 * 0.5 * koef_rasch +
      (129 - t_komfort.Value * 2) * 0.5 * Power(koef_rasch, 0.8)
  else
    t_zad := 95;

  t_zad_obr.Value := t_zad - 25 * koef_rasch;
end.

kolya_asu

Добрый день. Коллеги, помогите пожалуйста в написании скрипта, нужно внешнею переменную (типа INT), преобразовать побитно во внутренние переменные (типа BOOL), Var0, Var1, Var2, и т. д. Кто то делал подобное? Заранее благодарю за любую подсказку в данном вопросе. Спасибо.

Simple-Scada

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

См. функции для работы с битами. Разбивать на биты лучше всего в скрипте по изменению переменной.
Код: pascal
begin
  Var1.Value := GetBit(VarName.AsInt, 0); // получить значение 1-ого бита переменной "VarName"    
end.

aleks218

#762
Здравствуйте!
Не подскажите как из  скрипта для кнопки получить значение Tag(дополнительной переменной) подстраницы на которой находится эта кнопка .Скрипт должен быть универсальным без явного прямого обращения   
Код: pascal
var
  aVar: TM_Variable;
  aName: string;
  aTagPage: string;
  aStatus: string;
begin
  if Sender is TM_Object then
    with Sender as TM_Object do
      if VariableEx.Value = True then
      begin
        Visible := True;
        aName := IntToStr(Sender.Tag);
        aTagPage := IntToStr // (здесь необходимо получить значение дополнительного тега подстраницы которая активна);
        // aVar:= GetVariableByName ()
      end else
        Visible := False;

 { if  VariableEx.Value = True then   // если значение доп переменной объекта равно 1, то
   begin
     FlashColor := clYellow;     // включить мигание объекта жёлтым цветом
     AnimSpeed := 5;
   end else                      // иначе
     begin
       FlashColor := clNone;     // отключить мигание объекта
       AnimSpeed := 0;
     end;
 end; }
end.

vyacheslav

Добрый день, подскажите как правильно написать скрипт. (он должен  быть универсальным) Есть лампочка, к ней привязана основная переменная, скрипт должен проверять что если число переменной выходит за рамки значения от 4 до -4 включая ноль (то есть если будет 5 и больше или -5 и меньше) то должно включать горение красным цветом. Спасибо за внимание

Simple-Scada

Цитата: aleks218 от 15 ноября 2018, 23:49:16Не подскажите как из  скрипта для кнопки получить значение Tag(дополнительной переменной) подстраницы на которой находится эта кнопка
У страниц и подстраниц нет таких свойств. Они не могут быть привязаны к переменной, или к дополнительной переменной. У них есть только свойство Тег (целое число). Может быть нужно по номеру тега получить переменную. Например, если у страницы Тег = 200, то получить переменную с именем varable200? Если у другой страницы Тег = 111, то получить переменную с именем varable111 и т.д.?

Цитата: vyacheslav от 16 ноября 2018, 12:14:59Добрый день, подскажите как правильно написать скрипт. (он должен  быть универсальным) Есть лампочка, к ней привязана основная переменная, скрипт должен проверять что если число переменной выходит за рамки значения от 4 до -4 включая ноль (то есть если будет 5 и больше или -5 и меньше) то должно включать горение красным цветом. Спасибо за внимание
Вот пример:
Код: pascal
begin
  if Sender is TM_Object then
    with Sender as TM_Object do
      if (AsInt < -4) or (AsInt > 4) then
        Color := clRed
      else
        Color := clNone;
end.
Этот скрипт для события OnDataChange и подойдёт для всех объектов, которые связаны с переменной. Объект будет менять цвет на красный, если значение переменной меньше -4, или больше 4.