Показано с 1 по 10 из 10

Тема: Дата следующего дня.

  1. #1
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    Question Дата следующего дня.

    есть процесс, который должен закончится через двое (или N) суток. Как можно вывести дату окончания процесса, может какой блок есть для этой задачи. Пока представляю себе прописать весь календарь с числами по массивам, но это муторно, может есть легче решение? Спасибо!


    ПЛК 1** версии. Сравниваю с текущим временем ПЛК.
    Последний раз редактировалось Пьер; 23.01.2017 в 11:44.
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,817

    По умолчанию

    Цитата Сообщение от Пьер Посмотреть сообщение
    есть процесс, который должен закончится через двое (или N) суток. Как можно вывести дату окончания процесса, может какой блок есть для этой задачи. Пока представляю себе прописать весь календарь с числами по массивам, но это муторно, может есть легче решение? Спасибо!


    ПЛК 1** версии. Сравниваю с текущим временем ПЛК.
    Странный вопрос.

    Захват-2.png
    Ровно через два дня после старта переменная Stop установится в "1"
    Последний раз редактировалось petera; 23.01.2017 в 11:50.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #3
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Странный вопрос.

    Захват-2.png
    Ровно через два дня после старта переменная Stop установится в "1"
    У меня другое. Мне вывести дату готовности в переменные.
    Допустим 1 января запустили, через 3 дня готов, т.е. Результат в таком формате: "4 января процесс закончится." Это как пояснение.

    А вся сложность, заключается, если запустим 31 января или 28 февраля на несколько дней, тут надо пересчитать относительно еще и высокосного года.

    Еще раз. Запускаем процесс сегодня 23 января, на 5 суток. В результате выходит сообщение после запуска: 28 января процесс закончится". В этом смысле.
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  4. #4
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,817

    По умолчанию

    Цитата Сообщение от Пьер Посмотреть сообщение
    У меня другое. Мне вывести дату готовности в переменные.
    Допустим 1 января запустили, через 3 дня готов, т.е. Результат в таком формате: "4 января процесс закончится." Это как пояснение.

    А вся сложность, заключается, если запустим 31 января или 28 февраля на несколько дней, тут надо пересчитать относительно еще и высокосного года.

    Еще раз. Запускаем процесс сегодня 23 января, на 5 суток. В результате выходит сообщение после запуска: 28 января процесс закончится". В этом смысле.
    В чем проблема?
    В Кодесис есть переменные для работы с датой
    Захват-1.png
    Прибавляете к текущей дате два дня (пять дней) и получайте правильный результат с учетом перехода на другой месяц и с учетом високосного года.
    Причем все будет автоматически.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #5
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,817

    По умолчанию

    Например, високосный год
    Захват-5.png

    Тот же интервал для обычного года
    Захват-4.png
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #6
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,817

    По умолчанию

    Только в кодесис нет стандартной функции, которая определяет текущую дату.
    Воспользуйтесь такой функцией, которая с помощью библиотеки 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);
    (*------------------------------------------------------------------------*)
    С учетом этой функции получится
    Захват-7.png

    Захват-6.png
    Последний раз редактировалось petera; 23.01.2017 в 15:30.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  7. #7
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,817

    По умолчанию

    Цитата Сообщение от Пьер Посмотреть сообщение
    Запускаем процесс сегодня 23 января, на 5 суток. В результате выходит сообщение после запуска: 28 января процесс закончится". В этом смысле.
    Чтобы выходило сообщение "28 января процесс закончится", а не "D#2017-02-02"
    Добавил несколько функций из OSCAT
    DAY_OF_MONTH - немного модифицирована
    sMONTH_OF_DATE - выводит название месяца, а не его номер
    Захват-1.png

    Вложения Вложения
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #8
    Пользователь
    Регистрация
    16.08.2012
    Адрес
    Воронеж
    Сообщений
    146

    По умолчанию

    Добрый день! Задача стоит похожая: для журнала учета расхода необходимо писать время -1 час (т.е. расход за прошедший час) и день -1 (т.е. расход за прошедшие сутки). По вашему примеру получил дата -1, но как таким же методом вычитать -1 час? Полученный результат, в вашем случае OUT, необходимо разложить на отдельные переменные год, день, месяц, час ну и т.д. Пытался это сделать по методу описанному в материале "Программируем временные сложности" Петрова И.В. но запутался в функциональных блоках и выходят постоянные ошибки. Есть ли методы по проще? Буду благодарен за помощь!

  9. #9
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,817

    По умолчанию

    Получить текущее время в формате TOD, аналогично получению текущей дате DATE, и отнимать 1 час
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #10
    Пользователь
    Регистрация
    16.08.2012
    Адрес
    Воронеж
    Сообщений
    146

    По умолчанию

    Я на ST писать не силен. По аналогии сделал время в формате TOD, не знаю насколько правильно. Надеюсь там высокосный год вычислять не надо было. Disp3.43.jpgТеперь мне нужно из переменных out и out1 вытащить год, месяц, день и часы, минуты соответственно в отдельные переменные. Как это сделать?

Похожие темы

  1. Дата и Время
    от Vitamin в разделе Master SCADA 3
    Ответов: 20
    Последнее сообщение: 20.02.2015, 11:34
  2. плк63, часы и дата
    от SuperKI в разделе ПЛК63/73
    Ответов: 3
    Последнее сообщение: 19.10.2010, 11:35
  3. время и дата в плк 150
    от new_name в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 25.05.2009, 10:32
  4. Дата последнего визита
    от Владимир Чекин в разделе Трёп (Курилка)
    Ответов: 6
    Последнее сообщение: 06.05.2009, 14:13
  5. Дата и время в ПЛК-100
    от Роман26 в разделе Эксплуатация
    Ответов: 4
    Последнее сообщение: 12.02.2009, 15:53

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •