Важно! Перед началом работы с архивными процедурами, обязательно ознакомьтесь с примером их использования.
Синтаксис
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.
Если время наработки не будет превышать 24 часа, то для отображения на мнемосхеме можно использовать компонент "Календарь", в ином случае см. пример ниже.
Пример 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.