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

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

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

Елена

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1125 : 18 Сентября 2020, 09:45:44 »
Доброе утро!
Не получается так сделать...
пишу так: {(string)Previous(Источник2,"Время")}
ошибка: Фото1

пишу так: {(DateTime)Previous(Источник2,"Время")}
ошибка: Фото2

пишу так: {StrToNullableDateTime((string)Previous(Источник2,"Время"))}
ошибка: Фото3
« Изменён: 18 Сентября 2020, 18:13:59 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1126 : 18 Сентября 2020, 18:12:55 »
Здравствуйте.

Проверили Ваш отчет. В нём нужно удалить рассчитываемые колонки "Время_Prev" и "dTime", т.к. они не нужны для решения описанной задачи (но, если хотите, можете сделать и с ними, на основе нижеописанного). Далее в колонке "Время от предыдущей регенерации" нужно изменить выражение "{Источник2.dTime}" на такое:
Код: (c#)
{
  PreviousIsNull(Источник2, "Время") ?
    TimeSpan.FromSeconds(0) :
    DateDiff(
      (DateTime)Источник2.Время,
      (DateTime)Previous(Источник2, "Время")
    )
}
Теперь в колонке будет отображаться разница во времени.

Далее в итогах для "Минимальное время между регенерациями" и "Максимальное время между регенерациями" использовать следующие выражения:
Код: (c#)
{MinTime(
  PreviousIsNull(Источник2, "Время") ?
    TimeSpan.FromSeconds(0) :
    DateDiff(
      (DateTime)Источник2.Время,
      (DateTime)Previous(Источник2, "Время")
    )
)}

Код: (c#)
{MaxTime(
  PreviousIsNull(Источник2, "Время") ?
    TimeSpan.FromSeconds(0) :
    DateDiff(
      (DateTime)Источник2.Время,
      (DateTime)Previous(Источник2, "Время")
    )
)}

zabazu

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1127 : 24 Сентября 2020, 09:51:50 »
Здравствуйте!

Возможно ли получить название исполняемого скрипта? Не нашел в документации.

Допустим, скрипты по событию изменения переменных, имеют свой префикс. Необходимо использовать функцию IsFirstChange, не прописывая каждому скрипту название.
« Изменён: 24 Сентября 2020, 10:15:36 от zabazu »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1128 : 26 Сентября 2020, 11:02:43 »
Здравствуйте.

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

zabazu

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1129 : 30 Сентября 2020, 07:38:44 »
К примеру, в скрипте отслеживается изменение переменных ряда однотипных тегов в одном узле. Каждому узлу- свой именованный скрипт с префиксом, свои переменные с префиксом.

Код: (delphi)
var
  v_cycle: shortint;
  sm: smallint;
  aVar: TM_Variable;
  vName: UTF8string;
begin
if First_start.Value = 0 {and (имя.скрипта.IsFirstChange = false)} then //защита от записи
 begin
 vName := UTF8Encode(Variable.Name);
 UTF8Delete(vName,8,1);
 aVar := GetVariableByName(UTF8ToString(vName));
 if Assigned(aVar) then
  begin
  sm := Variable.OriginalAsInt;
  sm := sm * 10;
   if GetBit(sm,15) = true then
    begin
     v_cycle := 0;
     while v_cycle < 15 do
      begin
       sm := InverseBit(sm,v_cycle);
       v_cycle := v_cycle + 1;
      end;
     sm := sm + 1;
    end;
  aVar.Value := sm ;
  end;
 end;
end.
« Изменён: 30 Сентября 2020, 10:50:38 от Simple_Scada »

Елена

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1130 : 01 Октября 2020, 11:57:41 »
Добрый день!
Формирую отчёт типа: переменная - время изменения переменной. Сама переменная архивируется 1 раз в 5с. В отчёте Источник данных "по изменению".
при генерации отчёта в него попадают строки с интервалом около 00:00:00,011 - т.е. 11мс. Переменная так быстро меняться не может - проверено. Да и архивируется раз в 5 секунд. В чём может быть дело?

Елена

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1131 : 01 Октября 2020, 15:40:58 »
Добрый день!
В проекте есть переменные, читаемые с OPC, и внутренние переменные. При включении клиента первыми определяются и начинают архивироваться внутренние переменные, а с задержкой на доли секунды - переменные с OPC. В результате в отчёт попадают 2 строки с разницей во времени доли секунды. Как это сгладить? Источник данных в отчёте "По изменению" и пишется только эта внутренняя переменная, но всё равно 2 раза, хотя она сама не изменяется.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1132 : 01 Октября 2020, 17:01:13 »
Здравствуйте.

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

Александр2103

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1133 : 01 Октября 2020, 17:43:01 »
Подскажите, где посмотреть и информацию о скрипта которые выполняются автоматически в нужное время, скажем каждый день в 20:00?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1134 : 01 Октября 2020, 19:13:24 »
Здравствуйте.

Для этого можно использовать скрипт с типом события "Прошел час", см. пример скрипта по ссылке.

Олег Печёнов

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1135 : 03 Октября 2020, 00:15:24 »
Добрый день!
Прошу помощи.
Требуется скрипт.
присвоение переменной DeltaT.value разницы T1.Value через каждые 10 секунд.

niyaz

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1136 : 03 Октября 2020, 13:54:03 »
Добрый день!
Прошу помощи.
Требуется скрипт.
присвоение переменной DeltaT.value разницы T1.Value через каждые 10 секунд.
Здравствуйте.
Не совсем понял разницы T1.Value с чем.
Код: (delphi)
const
  INTERVAL = 10;  // Интервал таймера 10 сек
begin
  vrTimer.Value := vrTimer.Value + 1; // накапливаем секунды в vrTimer
 
  // если прошло больше, чем INTERVAL секунд с последнего срабатывания таймера
  if vrTimer.Value >= INTERVAL then
  begin
    // код размещенный здесь будет выполняться каждые 10 секунд
    DeltaT.Value:= T2.Value - T1.Value; // присваиваем переменной DeltaT.Value результат вычисления T2.Value - T1.Value
    vrTimer.Value := 0; // обнуляем счетчик
  end;
end.
"vrTimer" виртуальная переменная с типом данных Integer. Код представленный выше надо разместить в скрипте с типом события "Прошла секунда".

Олег Печёнов

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1137 : 03 Октября 2020, 22:24:55 »
Спасибо

pan2000

  • Постоялец
  • ***
  • Сообщений: 216
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1138 : 04 Октября 2020, 07:46:14 »
 
присвоение переменной DeltaT.value разницы T1.Value через каждые 10 секунд.
Не совсем понял разницы T1.Value с чем.
     Здравствуйте.

Для вычисления изменения переменной за интервал времени необходимо добавить виртуальную переменную previousT1 для хранения предыдущего значения переменной T1, локальную temporaryT1 для текущего значения переменной T1 и изменить скрипт следующим образом:
Код: (delphi)
const
  INTERVAL = 10;  // Интервал таймера 10 сек
var temporaryT1: <тип T1>;
begin
  vrTimer.Value := vrTimer.Value + 1; // накапливаем секунды в vrTimer

  // если прошло больше, чем INTERVAL секунд с последнего срабатывания таймера
  if vrTimer.Value >= INTERVAL then
  begin
    // код размещенный здесь будет выполняться каждые 10 секунд
    temporaryT1 := T1.Value;     // для разностных схем следует использовать только одно значение в качестве конечного и начального на смежных интервалах
    DeltaT.Value := temporaryT1 - previousT1.Value; // присваиваем переменной DeltaT.Value результат изменения T1.Value за интервал
    previousT1.Value :=  temporaryT1;               // сохраняем как предыдущее значение для вычисления следующей разности

    vrTimer.Value := 0; // обнуляем счетчик
  end;
end.

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1139 : 12 Октября 2020, 16:02:01 »
Здравствуйте! Не работает процедура ########.CloseClient(GetClientName);  по событию Выполнен SQL запрос.