Отображение даты
Добрый день. Прошу помощи с корректным выводом даты в формате ДД:ЧЧ:ММ.
Данные с Codesys 3.5 приходят в формате ltime. Можно ли вывести также, в таком же формате?
Добрый день. Прошу помощи с корректным выводом даты в формате ДД:ЧЧ:ММ.
Данные с Codesys 3.5 приходят в формате ltime. Можно ли вывести также, в таком же формате?
Для начала нужно разобраться какой тип передает ОРС сервер, т.к LTime судя по описанию 64 разрядное число.
https://support.industry.siemens.com/cs/mdm/109815056?c=104323238667&lc=ru-RU
В общих чертах скрипт для преобразования LTIME в строку формата d:h:m:s будет выглядеть так:
{Pascal Script}
function LTimeToString(const LTime: Int64): string;
var
TotalSeconds: Int64;
Days, Hours, Minutes, Seconds: Integer;
begin
// 1 наносекунда = 1e-9 секунд
TotalSeconds := LTime div 1000000000;
Days := TotalSeconds div 86400;
TotalSeconds := TotalSeconds mod 86400;
Hours := TotalSeconds div 3600;
TotalSeconds := TotalSeconds mod 3600;
Minutes := TotalSeconds div 60;
Seconds := TotalSeconds mod 60;
Result := Format('%dd:%dh:%dm:%ds', [Days, Hours, Minutes, Seconds]);
end;
Begin
WriteValue('Virtual channel', LTimeToString(721597000000000));
end.
Результат:
Пояснение:
Вам нужен будет виртуальный канал типа String, в нем скрипт по таймеру. Читаете значение физического канала (время наработки), с помощью описанной выше функции LTimeToString преобразовываете считанное значение в строку, и записываете в созданный виртуальный канал. На мнемосхему выводите уже значение с этого виртуального канала.
В общих чертах скрипт для преобразования LTIME в строку формата d:h:m:s будет выглядеть так:
{Pascal Script}
function LTimeToString(const LTime: Int64): string;
var
TotalSeconds: Int64;
Days, Hours, Minutes, Seconds: Integer;
begin
// 1 наносекунда = 1e-9 секунд
TotalSeconds := LTime div 1000000000;
Days := TotalSeconds div 86400;
TotalSeconds := TotalSeconds mod 86400;
Hours := TotalSeconds div 3600;
TotalSeconds := TotalSeconds mod 3600;
Minutes := TotalSeconds div 60;
Seconds := TotalSeconds mod 60;
Result := Format('%dd:%dh:%dm:%ds', [Days, Hours, Minutes, Seconds]);
end;
Begin
WriteValue('Virtual channel', LTimeToString(721597000000000));
end.
Результат:
Пояснение:
Вам нужен будет виртуальный канал типа String, в нем скрипт по таймеру. Читаете значение физического канала (время наработки), с помощью описанной выше функции LTimeToString преобразовываете считанное значение в строку, и записываете в созданный виртуальный канал. На мнемосхему выводите уже значение с этого виртуального канала.
Спасибо за помощь. Подскажите в мониторе я увидел статическое, что указано было в скрипте, но вот к каналу как правильно привязать? Допустим канал VESPER_3_Time_work
В пояснениях я оставлял ссылки на документацию.
WriteValue('Virtual channel', LTimeToString(ReadValue('VESPER_3_Time_work')));
Добрый вечер.
Данную задачу нужно решать в скрипте. Принятое значение в ltime разпарсить и перевести в формат datetime.