Здравствуйте.
Если время наработки/простоя всегда меньше 24 часов, то проще всего будет использовать для вывода компонент Календарь (https://simple-scada.com/help/manual/calendar.html) и настроить его так, чтобы отображалось только время - см. свойства Стиль, Дата, Время. У календаря в свойстве "Переменная" нужно указать переменную, в которую запишется результат процедуры ArchiveTimeOn, например "MyVariableRes".
Если время наработки/простоя больше 24 часов, то можно выводить его в компонент Текст (https://simple-scada.com/help/manual/text.html) как это описано в примере №2 по ссылке (https://simple-scada.com/help/script/archivetimeon.html). Создавать дополнительные переменные для этого не требуется.
Если обязательно требуется записывать результаты вычислений ArchiveTimeOn в строковые переменные, то для каждого агрегата нужно создать переменные с однотипными именами, например: vrAggregate1TimeOn, vrAggregate2TimeOn и тд. Для указанных переменных нужно выбрать тип данных DateTime. В эти переменные будет записываться результат вычисления времени наработки. Аналогично, необходимо создать однотипные переменные с типом данных String, например с именами: vrAggregate1TimeOnStr, vrAggregate2TimeOnStr и тд. В эти переменные будет записываться результат вычисления времени наработки в виде строки.
Далее нужно создать скрипт с типом события "Изменились переменные", добавить в список скрипта (как это описано в примере (https://simple-scada.com/help/script/changemulvar.html)) переменные "vrAggregate1TimeOn", "vrAggregate2TimeOn" и т.д., после чего написать универсальный скрипт:
var
aVar: TM_Variable;
aDay, aMonth, aYear: string;
function myFormat(AVal: Integer; aSymbols: Byte): string;
begin
Result := IntToStr(AVal);
while Length(Result) < aSymbols do
Result := '0' + Result;
end;
begin
aVar := GetVariableByName(Variable.Name + 'Str'); // ищем переменную с именем "vrAggregate1TimeOn", "vrAggregate2TimeOn" и тд.
if aVar <> nil then // если переменная существует
begin
SetTimeFormat('hh:mm');
if YearOf(Variable.AsDateTime) < 2016 then
begin
aDay := myFormat(DaysBetween(Variable.AsDateTime, 0), 2) + '.';
aMonth := myFormat(MonthsBetween(Variable.AsDateTime, 0), 2) + '.';
aYear := myFormat(YearsBetween(Variable.AsDateTime, 0), 4) + ' ';
aVar.Value := aDay + aMonth + aYear + TimeToStr(Variable.AsDateTime);
end else
aVar.Value := '00.00.0000 00:00';
end;
end.
В данном скрипте с помощью функции GetVariableByName будет осуществляться поиск переменных vrAggregate1TimeOnStr, vrAggregate2TimeOnStr и т.д. по имени, после чего результат вычислений будет записываться в найденные переменные.
Здравствуйте.
Доступные методы для работы с датой и временем можно найти по ссылке (https://simple-scada.com/help/script/datetime.html). Например, чтобы получить общее количество секунд из значения наработки переменной DateTime, можно использовать функцию SecondsBetween (https://simple-scada.com/help/script/secondsbetween.html). Например:
I := SecondsBetween(0, vrAggregate1TimeOn.AsDateTime);
, где vrAggregate1TimeOn – это переменная наработки с типом DateTime. В результате выполнения данного кода Вы получите значение в секундах. Далее с этим значением можно выполнять любые математические операции.