Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

Важно! Перед началом работы с архивными процедурами, обязательно ознакомьтесь с примером их использования.

Синтаксис

procedure ArchiveTimeOn(AArcVar, AResVar: TM_Variable; AFrom, ATo: TDateTime; const ALayer: Byte = 0);

Описание

Вычисляет суммарное время, в котором значение переменной отлично от нуля. Вычисляется из архивных данных переменной AArcVar за период от AFrom до ATo. Результат записывается в переменную AResVar, которая должна иметь тип DateTime. ALayer - необязательный параметр(по-умолчанию равен нулю), который определяет слой архива: 0 - основной; 1 - минутный; 2 - часовой; 3 - суточный.

Пример 1:

var
  DateStart, DateEnd: TDateTime;
begin
  DateEnd:= Now;                     // текущие дата и время
  DateStart:= IncDay(DateEnd, -1);   // уменьшить дату на 1 день
 
  { вычислить время включенного состояния переменной "MyVariable" за период 
    от "DateStart" до "DateEnd" и записать результат в переменную "MyVariableRes" }
  ArchiveTimeOn(MyVariable, MyVariableRes, DateStart, DateEnd);
end.

Пример 2:

Допустим требуется вывести время наработки оборудования в объект "Текст" в формате "дд.мм.гггг чч:мм". Для вычисления времени наработки воспользуемся процедурой ArchiveTimeOn (пример 1). Затем добавим в проект объект "Текст" и свяжем его с переменной результата - в нашем случае это переменная "MyVariableRes". Далее создадим новый скрипт (например с именем "OperateTime") с типом события "Универсальный скрипт" и напишем код приведенный ниже. Для формирования даты/времени в нужном формате используем функцию ZeroPad. После этого, на событие OnDataChange объекта "Текст" назначим наш скрипт "OperateTime". Данный скрипт универсальный, поэтому его можно применить к любому количеству объектов "Текст" - для этого нужно связать объекты "Текст" с требуемыми переменными результата и для всех объектов на событие OnDataChange назначить наш скрипт "OperateTime".

var
  aText: TM_Text;
  aDate, aTime: string;
begin
  // проверяем, что Sender это текст
  if not (Sender is TM_Text) then Exit;
  aText := TM_Text(Sender);
 
  if YearOf(aText.AsDateTime) < 2016 then
  begin
    // формируем дату в нужном формате
    aDate := ZeroPad(DaysBetween(aText.AsDateTime, 0), 2) + '.' +
      ZeroPad(MonthsBetween(aText.AsDateTime, 0), 2) + '.' +
      ZeroPad(YearsBetween(aText.AsDateTime, 0), 4) + ' ';
    // формируем время в нужном формате
    aTime := ZeroPad(HourOf(aText.AsDateTime), 2) + ':' +                      
      ZeroPad(MinuteOf(aText.AsDateTime), 2);
    // записываем в Текст полученные дату и время
    aText.Text := aDate + aTime;
  end else
    aText.Text := '00.00.0000 00:00';
end.