Здравствуйте.
Время наработки механизма можно получить более простым способом. Для этого нужно
включить архивацию "По изменению" у переменных работы механизма и использовать процедуру
ArchiveTimeOn для получения суммарного времени, в котором значение переменной было отлично от нуля.
Перед началом работы с архивными процедурами, обязательно ознакомьтесь с примером их использования. Также не рекомендуем вызывать архивные процедуры слишком часто. Например, если достаточно обновлять данные наработки раз в час, то используйте скрипт "
Начало часа".
Для вычисления времени наработки по архивным данным рекомендуем использовать Boolean переменные состояния механизма (включен/выключен) вместо целочисленных переменных отвечающих за несколько состояний механизма. Если таких переменных нет на ПЛК, то нужно создать внутренние Boolean переменные с однотипными именами (например conv1_Status, conv2_Status и т.д.) и в скрипте по изменению переменных (conv1, conv2 и т.д.) записывать в соответствующие внутренние переменные значение 1, когда "conv1.AsInt = 20" и записывать 0 в ином случае. Пример универсального скрипта по событию "
Изменились переменные":
var
aVarStatus: TM_Variable;
begin
aVarStatus := GetVariableByName(Variable.Name + '_Status');
if aVarStatus <> nil then // если переменная существует
if Variable.AsInt = 20 then // если переменная вызвавшая скрипт = 20, то
aVarStatus.Value := True // записываем True в переменную состояния механизма
else // иначе
aVarStatus.Value := False; // записываем False в переменную состояния механизма
end.
Таким образом, в переменных conv1_Status, conv2_Status и т.д. будет сохраняться информация о работе механизмов (1 - включен, 0 - выключен). Далее, как уже было описано выше, для получения суммарного времени наработки можно использовать процедуру
ArchiveTimeOn.