Просмотр полной версии : Дата следующего дня.
есть процесс, который должен закончится через двое (или N) суток. Как можно вывести дату окончания процесса, может какой блок есть для этой задачи. Пока представляю себе прописать весь календарь с числами по массивам, но это муторно, может есть легче решение? Спасибо!
ПЛК 1** версии. Сравниваю с текущим временем ПЛК.
есть процесс, который должен закончится через двое (или N) суток. Как можно вывести дату окончания процесса, может какой блок есть для этой задачи. Пока представляю себе прописать весь календарь с числами по массивам, но это муторно, может есть легче решение? Спасибо!
ПЛК 1** версии. Сравниваю с текущим временем ПЛК.
Странный вопрос.
28855
Ровно через два дня после старта переменная Stop установится в "1"
Странный вопрос.
28855
Ровно через два дня после старта переменная Stop установится в "1"
У меня другое. Мне вывести дату готовности в переменные.
Допустим 1 января запустили, через 3 дня готов, т.е. Результат в таком формате: "4 января процесс закончится." Это как пояснение.
А вся сложность, заключается, если запустим 31 января или 28 февраля на несколько дней, тут надо пересчитать относительно еще и высокосного года.
Еще раз. Запускаем процесс сегодня 23 января, на 5 суток. В результате выходит сообщение после запуска: 28 января процесс закончится". В этом смысле.
У меня другое. Мне вывести дату готовности в переменные.
Допустим 1 января запустили, через 3 дня готов, т.е. Результат в таком формате: "4 января процесс закончится." Это как пояснение.
А вся сложность, заключается, если запустим 31 января или 28 февраля на несколько дней, тут надо пересчитать относительно еще и высокосного года.
Еще раз. Запускаем процесс сегодня 23 января, на 5 суток. В результате выходит сообщение после запуска: 28 января процесс закончится". В этом смысле.
В чем проблема?
В Кодесис есть переменные для работы с датой
28867
Прибавляете к текущей дате два дня (пять дней) и получайте правильный результат с учетом перехода на другой месяц и с учетом високосного года.
Причем все будет автоматически.
Например, високосный год
28878
Тот же интервал для обычного года
28879
Только в кодесис нет стандартной функции, которая определяет текущую дату.
Воспользуйтесь такой функцией, которая с помощью библиотеки SysLibTime вычисляет текущую дату
FUNCTION curDATE : DATE
VAR_INPUT
END_VAR
VAR
CurTimeExInst: CurTimeEx;
CurSystemTimeDate: SystemTimeDate;
CurSysTime64: SysTime64;
year: INT;
day: INT;
month: INT;
count: INT;
END_VAR
CurTimeExInst(TimeDate := CurSystemTimeDate, SystemTime := CurSysTime64);
year :=CurSystemTimeDate.Year;
month :=CurSystemTimeDate.Month;
day :=CurSystemTimeDate.Day;
(*------------------------------------------------------------------------*)
IF year=0 THEN year:=1970; day:=1; month:=1; END_IF (* если функция вызывается в эмуляции*)
(*Вычислить дату с учетом високосных лет*)
IF month > 2 THEN
count := (month - 1) * 30;
IF month > 7 THEN count := count + SHR(month - 3,1);
ELSE count := count + SHR(month - 4,1); END_IF;
(* проверить на високосный год и добавить один день если год високосный *)
IF SHL(year,14) = 0 THEN count := count + 1; END_IF;
ELSE
count := (month - 1) * 31;
END_IF;
curDATE := DWORD_TO_DATE((INT_TO_DWORD(count + day - 1)
+ SHR(INT_TO_DWORD(year) * 1461 - 2878169, 2)) * 86400);
(*------------------------------------------------------------------------*)
С учетом этой функции получится
28886
28885
Запускаем процесс сегодня 23 января, на 5 суток. В результате выходит сообщение после запуска: 28 января процесс закончится". В этом смысле.
Чтобы выходило сообщение "28 января процесс закончится", а не "D#2017-02-02"
Добавил несколько функций из OSCAT
DAY_OF_MONTH - немного модифицирована
sMONTH_OF_DATE - выводит название месяца, а не его номер
28890
https://www.youtube.com/watch?v=-T-Zicg3Paw
Добрый день! Задача стоит похожая: для журнала учета расхода необходимо писать время -1 час (т.е. расход за прошедший час) и день -1 (т.е. расход за прошедшие сутки). По вашему примеру получил дата -1, но как таким же методом вычитать -1 час? Полученный результат, в вашем случае OUT, необходимо разложить на отдельные переменные год, день, месяц, час ну и т.д. Пытался это сделать по методу описанному в материале "Программируем временные сложности" Петрова И.В. но запутался в функциональных блоках и выходят постоянные ошибки. Есть ли методы по проще? Буду благодарен за помощь!
Получить текущее время в формате TOD, аналогично получению текущей дате DATE, и отнимать 1 час
Я на ST писать не силен. По аналогии сделал время в формате TOD, не знаю насколько правильно. Надеюсь там высокосный год вычислять не надо было. 38352Теперь мне нужно из переменных out и out1 вытащить год, месяц, день и часы, минуты соответственно в отдельные переменные. Как это сделать?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot