Страница 799 из 855 ПерваяПервая ... 299699749789797798799800801809849 ... ПоследняяПоследняя
Показано с 7,981 по 7,990 из 8547

Тема: CODESYS V3.5. Вопросы и ответы

  1. #7981

    По умолчанию

    Спасибо. Это сработало.

  2. #7982

    Arrow

    Добрый день! Подскажите пожалуйста по функции SysTimeRtcGet из библиотеки SysTimeRtс, для применения на виртуальном ПЛК CoDeSys Control Win V3. Как правильно её применять, для использования системного времени в программе? Сложность в том, что системное время отображается некорректно ( к примеру время из функции показывает 15.23 на самом же деле время 16.10 ).
    Запись в программе выглядит следующим образом: tdVar:= TO_TOD (SysTimeRtc.SysTimeRtcGet (dwErrorCode)*1000 ); . Без умножения на 1000 на выходе совсем даже не приблизительное время, а с умножением со стабильной разницей в 47 мин. )). Как устроена эта функция неведомо, и описание её работы очень скудно. Примеры её применения мною не обнаружены, поэтому надеюсь на вашу помощь в изучении этого вопроса.
    Задача состоит в том, чтобы время с выхода этой функции применить в программе, для работы оборудования в определённые часы. Например, чтобы с 0 до 6 часов оно работало в одном режиме, а с 6ти до 23.59 в другом.
    Последний раз редактировалось Diogen; 23.01.2025 в 17:56.

  3. #7983
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    Добрый день.

    Код:
    dtVar:= TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode) ); // получаем системное время в виде значения типа DT
    Если нужен именно TOD - то см. ниже пример от kondor3000.

  4. #7984

    По умолчанию

    Здравствуйте! Да, нужен именно ТОD, но как "делить" на разряды и "собирать" из них TOD, я не знаю. Может где-то пример есть ?

  5. #7985

    По умолчанию

    Цитата Сообщение от Diogen Посмотреть сообщение
    Здравствуйте! Да, нужен именно ТОD, но как "делить" на разряды и "собирать" из них TOD, я не знаю. Может где-то пример есть ?
    У меня работает конвертация DT_TO_TOD, ничего не раскладывая 1 Формат TOD.jpg

  6. #7986

    По умолчанию

    Это отлично, благодарю за подсказку ! Меня терзают смутные сомнения по поводу дальнейших действий и в целом поведения функции SysTimeRtcGet. Выходит мне нужно конвертировать 2 раза ( сперва DWORD_TO_DT, затем DT_TO_TOD) ? Почему не выходит корректная конвертация с одного перевода? Особенности конвертации или я что-то неверно исполняю?

  7. #7987
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,595

    По умолчанию

    Цитата Сообщение от Diogen Посмотреть сообщение
    Это отлично, благодарю за подсказку ! Меня терзают смутные сомнения по поводу дальнейших действий и в целом поведения функции SysTimeRtcGet. Выходит мне нужно конвертировать 2 раза ( сперва DWORD_TO_DT, затем DT_TO_TOD) ? Почему не выходит корректная конвертация с одного перевода? Особенности конвертации или я что-то неверно исполняю?
    Потому что функция SysTimeRtcGet возвращает дату и время, а не время суток (TOD).

  8. #7988

    По умолчанию

    Если я правильно понимаю, то функция SysTimeRtcGet возвращает DWORD а не дату и время. Но опыт показал, что переводя результат этой функции в время суток - получается несоответствие. А вот двойная конвертация (DWORD_TO_DT, затем DT_TO_TOD) возвращает вполне адекватное время . Только нужно его подкорректировать ещё каким-то средством, потому как получается системное -2ч.
    SysTimeRtcGet (FUN).png

  9. #7989

    По умолчанию

    Цитата Сообщение от Diogen Посмотреть сообщение
    Если я правильно понимаю, то функция SysTimeRtcGet возвращает DWORD а не дату и время. Но опыт показал, что переводя результат этой функции в время суток - получается несоответствие. А вот двойная конвертация (DWORD_TO_DT, затем DT_TO_TOD) возвращает вполне адекватное время . Только нужно его подкорректировать ещё каким-то средством, потому как получается системное -2ч.
    Для Москвы код будет таким, время TOD + 3 часа.
    Код:
    TOD1:=TO_TOD (TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode))) +T#3h ;
    Последний раз редактировалось kondor3000; 24.01.2025 в 23:23.

  10. #7990

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Для Москвы код будет таким, время TOD + 3 часа.
    Код:
    TOD1:=TO_TOD (TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode))) +T#3h ;
    Благодарю Вам душевно! Это верно, коротко и главное работает! Я в восторге - зарррабоооталаааа!!! Сколько пришлось повозиться, чтобы решить эту задачку, но спасибо добрым людям, и долгие вам лета!
    Кстати, тем кому придётся когда-то как мне заморочиться - следует знать, что некорректная конвертация этой функции, даёт неверные результаты выражений с её использованием. Это нужно учитывать прежде, чем грешить на свои ошибки в коде.

Страница 799 из 855 ПерваяПервая ... 299699749789797798799800801809849 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 4000
    Последнее сообщение: Сегодня, 12:05
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 849
    Последнее сообщение: 16.11.2025, 08:58
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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