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

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

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

maks48

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #750 : 07 Ноября 2018, 10:06:10 »
На экране есть n окружностей. Как можно в цикле работать со свойствами всех объектов? Т.е. в скрипте не напрямую писать shape1.visible:= true; ...
a через ссылку или указатель на объект.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #751 : 07 Ноября 2018, 10:13:47 »
maks48, имя объекта является именно указателем на объект. Перебрать объекты в цикле можно через функцию поиска по имени, например GetShapeByName, если имена однотипные. Но это не идеальное решение и практически всегда можно обойтись без перебора, решив задачу с использованием универсального скрипта. Опишите задачу подробнее, нужно менять видимость фигуры в зависимости от значения переменной?
« Изменён: 07 Ноября 2018, 10:14:34 от Simple-Scada »

maks48

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #752 : 07 Ноября 2018, 10:31:34 »
У меня есть 100 окружностей, например. Есть 100 замеров в бд. Результаты замеров я присваиваю координатам х и у окружностей для визуализации данных. Вот этот алгоритм я хочу реализовать в цикле.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #753 : 07 Ноября 2018, 10:50:55 »
Тогда только перебором через GetShapeByName, что плохо, т.к. каждый раз на каждый объект будет выполняться поиск по имени. SCADA-система совершенно не подходит для решения подобных задач, поэтому любое возможное решение на скаде будет плохим по производительности и его будет трудно реализовать. Скорее всего Вам нужно использовать какое-то специализированное ПО.

Дмитрий_021

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #754 : 07 Ноября 2018, 12:14:34 »
Добрый день, можно ли к скрипту приявязать более 2 переменных (основной и дополнительной), скрипт используется для объекта - Поле.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1385
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #755 : 07 Ноября 2018, 17:57:22 »
Здравствуйте!

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

maks48

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #756 : 08 Ноября 2018, 10:37:25 »
Если из скрипта выполнить команду SELECT * FROM my_base, то в DataSet будет вся бд. Если какие-то ограничения на размер базы, число строк, столбцов?
Например, бд содержит 25 столбцов и 10000 строк. Корректно делать выборку одним запросом или лучше придумать алгоритм сортировки и вычитывать данные постепенно?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #757 : 08 Ноября 2018, 19:25:31 »
Это зависит от производительности серверного ПК и операций, которые затем нужно выполнять с полученным набором данных. Можно просто заполнить таблицу БД данными на указанную величину и протестировать под конкретный серверный ПК. Если производительности не хватит, то нужно будет разделять запросы и выбирать данные по частям.

vyacheslav

  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Помогите со скриптом!
« Ответ #758 : 12 Ноября 2018, 07:46:47 »
Добрый день помогите правильно составить скрип. есть формула расчета температуры подачи и обратки по теплу, вот она :
Код
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 - это возведение в степень.
Помогите перевести ее в скрипт, все наименования, это переменные           
« Изменён: 12 Ноября 2018, 13:23:22 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #759 : 12 Ноября 2018, 13:32:54 »
Здравствуйте.

Вот пример:
Код: (delphi)
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" нужны только во время проведения расчета, тогда их можно сделать локальными, например:
Код: (delphi)
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.
« Изменён: 12 Ноября 2018, 13:33:28 от Simple-Scada »

kolya_asu

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #760 : 12 Ноября 2018, 14:18:53 »
Добрый день. Коллеги, помогите пожалуйста в написании скрипта, нужно внешнею переменную (типа INT), преобразовать побитно во внутренние переменные (типа BOOL), Var0, Var1, Var2, и т. д. Кто то делал подобное? Заранее благодарю за любую подсказку в данном вопросе. Спасибо.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #761 : 12 Ноября 2018, 14:21:09 »
Здравствуйте.

См. функции для работы с битами. Разбивать на биты лучше всего в скрипте по изменению переменной.
Код: (delphi)
begin
  Var1.Value := GetBit(VarName.AsInt, 0); // получить значение 1-ого бита переменной "VarName"   
end.
« Изменён: 12 Ноября 2018, 14:22:28 от Simple-Scada »

aleks218

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #762 : 15 Ноября 2018, 23:49:16 »
Здравствуйте!
Не подскажите как из  скрипта для кнопки получить значение Tag(дополнительной переменной) подстраницы на которой находится эта кнопка .Скрипт должен быть универсальным без явного прямого обращения   
Код: (delphi)
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.
« Изменён: 16 Ноября 2018, 12:31:02 от Simple-Scada »

vyacheslav

  • Новичок
  • *
  • Сообщений: 40
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #763 : 16 Ноября 2018, 12:14:59 »
Добрый день, подскажите как правильно написать скрипт. (он должен  быть универсальным) Есть лампочка, к ней привязана основная переменная, скрипт должен проверять что если число переменной выходит за рамки значения от 4 до -4 включая ноль (то есть если будет 5 и больше или -5 и меньше) то должно включать горение красным цветом. Спасибо за внимание

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #764 : 16 Ноября 2018, 12:40:13 »
Не подскажите как из  скрипта для кнопки получить значение Tag(дополнительной переменной) подстраницы на которой находится эта кнопка
У страниц и подстраниц нет таких свойств. Они не могут быть привязаны к переменной, или к дополнительной переменной. У них есть только свойство Тег (целое число). Может быть нужно по номеру тега получить переменную. Например, если у страницы Тег = 200, то получить переменную с именем varable200? Если у другой страницы Тег = 111, то получить переменную с именем varable111 и т.д.?

Добрый день, подскажите как правильно написать скрипт. (он должен  быть универсальным) Есть лампочка, к ней привязана основная переменная, скрипт должен проверять что если число переменной выходит за рамки значения от 4 до -4 включая ноль (то есть если будет 5 и больше или -5 и меньше) то должно включать горение красным цветом. Спасибо за внимание
Вот пример:
Код: (delphi)
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.