Отображение даты

Avatar
  • обновлен

Image 2146

Добрый день. Прошу помощи с корректным выводом даты в формате ДД:ЧЧ:ММ.

Данные с Codesys 3.5 приходят в формате ltime. Можно ли вывести также, в таком же формате?

Image 2141

Avatar

Добрый вечер.


Данную задачу нужно решать в скрипте. Принятое значение в ltime разпарсить и перевести в формат datetime.

Avatar
иван_в

Может есть пример, как это сделать?

Avatar

Для начала нужно разобраться какой тип передает ОРС сервер, т.к LTime судя по описанию 64 разрядное число.

https://support.industry.siemens.com/cs/mdm/109815056?c=104323238667&lc=ru-RU

Avatar
иван_в

В моем понимании так и есть, но как сделать вид с двоеточиями не могу понять

Avatar

В общих чертах скрипт для преобразования 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.

Результат:

Image 2152

Пояснение: 

Вам нужен будет виртуальный канал типа String, в нем скрипт по таймеру. Читаете значение физического канала (время наработки), с помощью описанной выше функции LTimeToString преобразовываете считанное значение в строку, и записываете в созданный виртуальный канал. На мнемосхему выводите уже значение с этого виртуального канала.

Avatar
иван_в
Цитата от СИМП Лайт (тех поддержка)

В общих чертах скрипт для преобразования 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.

Результат:

Image 2152

Пояснение: 

Вам нужен будет виртуальный канал типа String, в нем скрипт по таймеру. Читаете значение физического канала (время наработки), с помощью описанной выше функции LTimeToString преобразовываете считанное значение в строку, и записываете в созданный виртуальный канал. На мнемосхему выводите уже значение с этого виртуального канала.

Спасибо за помощь. Подскажите в мониторе я увидел статическое, что указано было в скрипте, но вот к каналу как правильно привязать? Допустим канал VESPER_3_Time_work 

Image 2156

Image 2155

Image 2154

Avatar

В пояснениях я оставлял ссылки на документацию.

WriteValue('Virtual channel', LTimeToString(ReadValue('VESPER_3_Time_work')));
Avatar
иван_в

Image 2157

Image 2158

Может нужно изменить тип 32-64?

Avatar
Цитата от иван_в

Image 2157

Image 2158

Может нужно изменить тип 32-64?

Этот тип возвращает ОРС сервер.