Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Вопрос про использование времени

  1. #1

    По умолчанию Вопрос про использование времени

    Здравствуйте! Помогите пожалуйста как можно проще решить задачу: Есть процесс, который может длиться несколько дней, а потом переключаться на другой процесс. Я должен сохранить дату и время старта процесса и проверять, прошёл ли срок процесса. Проблема в том, что я не могу никак оседлать syslibtime. Я тут на форуме находил функциональный блок, чтобы вытащить по отдельности часы, минуты, дни и т.д, но мне нужно сохранять именно полный формат Date_And_Time. А как этого добиться - не могу понять. При этом на Codesys 3.5 эту задачу решить можно за минуту. Очень надеюсь на вашу помощь

  2. #2

    По умолчанию

    Цитата Сообщение от sng21099 Посмотреть сообщение
    Здравствуйте! Помогите пожалуйста как можно проще решить задачу: Есть процесс, который может длиться несколько дней, а потом переключаться на другой процесс. Я должен сохранить дату и время старта процесса и проверять, прошёл ли срок процесса. Проблема в том, что я не могу никак оседлать syslibtime. Я тут на форуме находил функциональный блок, чтобы вытащить по отдельности часы, минуты, дни и т.д, но мне нужно сохранять именно полный формат Date_And_Time. А как этого добиться - не могу понять. При этом на Codesys 3.5 эту задачу решить можно за минуту. Очень надеюсь на вашу помощь

    Из полученных времени и даты по отдельности собираете Дату-Время в формат UnixTime (UDINT или DWORD) , 1 Дата и время.jpg 1 Новое время.jpg
    тут функция https://owen.ru/forum/showthread.php?t=37203
    2) fDT_to_UT (Время в секундах в формате UNIX) и из него Дату-Время в формате DT
    Всего 2 строки
    Код:
    t_ :=fDT_to_UT(Second,Minute,hour,day,month,year);    (* собираете с помощью функции время    UnixTime	t_:UDINT;  например    1730566628    *)
    
    DT1:=DWORD_TO_DT (t_ );  (*  Из времени t_:UDINT;  получаете  Дату и Время в формате  DT1: DT;  например    DT#2024-11-02-16:57:30   *)
    Из DT1, так же можно выделить TOD1 : TOD; (Время TOD), конвертация DT_TO_TOD
    T2: TIME; (Время TIME ), конвертация TOD_TO_TIME
    D1 : DATE; (Дату), конвертация например D1:=DT_TO_DATE(DT1);

    Здесь пример работы с биб-кой SysLibTime
    5) Работа с библиотекой SysLibTime. Получение реального времени из ПЛК. Задание даты и времени в ПЛК
    https://owen.ru/product/codesys_v2/example_program
    Последний раз редактировалось kondor3000; 02.11.2024 в 22:00.

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

    По умолчанию

    Цитата Сообщение от sng21099 Посмотреть сообщение
    Есть процесс, который может длиться несколько дней, а потом переключаться на другой процесс. Я должен сохранить дату и время старта процесса и проверять, прошёл ли срок процесса
    Какое отношение имеет срок к датам?
    Чиста абстрактно. Поменяли/слетела дата на ПЛК, и?

  4. #4

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Какое отношение имеет срок к датам?
    Чиста абстрактно. Поменяли/слетела дата на ПЛК, и?
    Вариант с таймером процесса тем более не подходит, так как при перезагрузке время таймера точно слетит. Не знаю действующего способа сохранять время таймера

  5. #5

    По умолчанию

    Цитата Сообщение от sng21099 Посмотреть сообщение
    Вариант с таймером процесса тем более не подходит, так как при перезагрузке время таймера точно слетит. Не знаю действующего способа сохранять время таймера
    Кто вам сказал? Вы можете переменную времени таймера или таймер целиком поместить в RETAIN, в обоих случаях таймер будет полностью RETAIN.
    Время наработки можно запоминать и отдельно, а таймер запускать с 0 каждый раз, прибавляя к нему наработку. Так можно ограничение 49 дней растянуть на годы.
    Можно вообще не использовать таймер, а работать с функцией TIME(); точно так же запоминая наработку.
    Последний раз редактировалось kondor3000; 05.11.2024 в 09:28.

  6. #6
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    11,959

    По умолчанию

    Делал счётчик каскадом на логических элементах, с возможностью сброса любой.
    Даже выкладывал как-то.
    Могу перевыложить, там in-out переменные в ретейн загоняются и все. Считать можно что угодно, бутылки, ящики, и дальше. А так же применить ко времени. Секунды, минуты, часы и т.д.

    Делал как раз для наработки ещё для ПЛК 63 на CFC.

  7. #7

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Кто вам сказал? Вы можете переменную времени таймера или таймер целиком поместить в RETAIN, в обоих случаях таймер будет полностью RETAIN.
    Время наработки можно запоминать и отдельно, а таймер запускать с 0 каждый раз, прибавляя к нему наработку. Так можно ограничение 49 дней растянуть на годы.
    Можно вообще не использовать таймер, а работать с функцией TIME(); точно так же запоминая наработку.
    Попробовал на ПЛК210 (110 нет под рукой), если таймер полностью пихать в retain, то после перезапуска контроллера таймер становится в выполненное состояние (ET:=PT, Q:=TRUE) O_o
    ET сохранять можно, но как его перепривязывать потом к PT?

  8. #8
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    11,959

    По умолчанию

    Ну это наверное некорректно, перепривязывать ET к PT. Наверное это больше для ситуации возобновления счета после перезапуска. Потом же надо штатное PT восстановить.

  9. #9

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Ну это наверное некорректно, перепривязывать ET к PT. Наверное это больше для ситуации возобновления счета после перезапуска. Потом же надо штатное PT восстановить.
    Это понятно конечно. Имел в виду, что нужно из значения уставки времени вычитать накопленное прошедшее время и каким-то образом загонять его, как новую уставку, после перезапуска контроллера. С реальным временем это, как кажется, должно гораздо проще решиться
    Последний раз редактировалось sng21099; 05.11.2024 в 12:06. Причина: зпт

  10. #10

    По умолчанию

    Цитата Сообщение от sng21099 Посмотреть сообщение
    Попробовал на ПЛК210 (110 нет под рукой), если таймер полностью пихать в retain, то после перезапуска контроллера таймер становится в выполненное состояние (ET:=PT, Q:=TRUE) O_o
    ET сохранять можно, но как его перепривязывать потом к PT?
    Выше ответ на это

    Время наработки можно запоминать и отдельно, а таймер запускать с 0 каждый раз, прибавляя к нему наработку. Так можно ограничение 49 дней растянуть на годы.
    Можно вообще не использовать таймер, а работать с функцией TIME(); точно так же запоминая наработку.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 01.12.2023, 22:40
  2. Использование УЗС-1
    от Сергей 2909 в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 31.05.2018, 07:56
  3. MasterSCADA и MSSQL: вопрос о метках времени
    от Сергей_К в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 10.04.2014, 11:57
  4. ПЛК 110, использование RS-232
    от =MiX@$= в разделе ПЛК1хх
    Ответов: 18
    Последнее сообщение: 14.10.2011, 13:26
  5. Использование АС4
    от alex_sinjawin в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 10.11.2009, 18:31

Ваши права

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