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

Тема: Как отсветить UpTime контроллера?

  1. #1
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    Question Как отсветить UpTime контроллера?

    Использую следующий код:
    PROGRAM SHOW_UPTIME
    VAR_INPUT
    z: DINT;
    END_VAR
    VAR
    FormatUint: STRING(10):='%02u';
    FormatUintS: STRING(10):='%01u';
    t: DINT;
    dd: UDINT;
    hh: UDINT;
    mm: UDINT;
    ss: UDINT;
    uptime_sec: UDINT;
    END_VAR

    uptime_sec:=uptime_Sys_time.ulHigh*4294+uptime_Sys _time.ulLow/1000000;
    dd:=uptime_sec/86400;
    hh:=(uptime_sec-dd*86400)/3600;
    mm:=(uptime_sec-dd*86400-hh*3600)/60;
    ss:=uptime_sec-hh*3600-mm*60;
    IF dd<9 THEN
    t:=ShowDint(z, 9, 0, FormatUintS,dd);
    t:=ShowString(z, 10, 0, 'д');
    t:=ShowDint(z, 11, 0, FormatUint,hh);
    t:=ShowString(z, 13, 0, ':');
    t:=ShowDint(z, 14, 0, FormatUint,mm);
    ELSE
    t:=ShowString(z, 9, 0, '>9 дней-ОК');
    END_IF

    Структуры со временем - глобальные переменные:
    VAR_GLOBAL
    uptime_Sys_Time: SysTime64;
    TimeAndDate: SystemTimeDate;
    END_VAR

    Переменные заполняются следующим образом:
    PROGRAM GET_TIME
    VAR_INPUT
    END_VAR
    VAR
    GetTime: CurTimeEx;
    END_VAR


    TimeAndDate.Day :=0;
    TimeAndDate.DayOfWeek :=0;
    TimeAndDate.dwHighMsec :=0;
    TimeAndDate.dwLowMSecs :=0;
    TimeAndDate.Milliseconds :=0;
    TimeAndDate.Minute :=0;
    TimeAndDate.Second :=0;
    TimeAndDate.Hour :=0;
    TimeAndDate.Year :=0;
    TimeAndDate.Month :=0;

    uptime_Sys_Time.ulHigh :=0;
    uptime_Sys_Time.ulLow :=0;

    GetTime (SystemTime:=uptime_Sys_Time, TimeDate:= TimeAndDate);

    Что в итоге имеем: сначала время отсчитывается хорошо, потом, в какой-то момент времени, начинает идти в обратную сторону, затем опять хорошо и т.д.
    Очевидно, где-то вместо беззнакового INTа используется знаковый. Не могу понять где, и всё тут...

    Или может есть готовый кусочек кода?

    Под UpTime'ом подразумеваю время с момента загрузки контроллера и автостарта программы.
    Последний раз редактировалось Elka; 22.10.2010 в 10:11.

  2. #2
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    см. влож.КЗСМ_ПС_2.rar

  3. #3
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    По умолчанию

    спасибо, но либо я чего-то не увидел, либо чего-то не понял. интересно время с момента запуска контроллера, а не вывод текущих даты/времени. типа сколько времени не передёргивалось питание или не подвисал с последующей автоперезагрузкой контроллер. файловой системы на плк63 нет, с регистратором мсд-100 толком не поработаешь, ибо на Rs-485 висит модем. хоть так какое-то понимание у оператора будет...

  4. #4
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Ну так используй CurTime :
    SysTime ulHigh: dword; Содержит 0
    ulLow: dword; Содержит время с момента загрузки ПЛК в миллисекундах
    Что-то не пойму проблему?
    Правда учитывай, что после заполнения dword отсчет идет с нуля.
    Есть готовая система диспетчеризации ПЛК со встроенным модемом и диспетчер для ПК+ СМС на 3 тлф. Удаленное управление объектом, контроль и обновление ПРГ.
    Если интересно пиши в личку. Ты меня знаешь.

  5. #5
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    По умолчанию

    Во-первых, там микросекунды, т.е. 10^-6, а не миллисекунды (10^-3).
    Во-вторых, и в ulLow, и в ulHigh есть данные (что следует из первого).
    В-третьих, как минимум, между часами, отображающими время и этими внутренними часами у меня на ПЛК63 постоянно увеличивается расхождение. За 6 минут примерно на 20 секунд. Часы, отображающие время показывают его вполне точно. UpTime отстаёт. Разница велика, ни на какие погрешности округления не списывается. В принципе, проблема uptime решается переводом текущего времени при старте программы в unixtime, текущего в процессе работы, опять же в unixtime, дальше вычислением их разницы и переводом в дни/часы/минуты. Но муторно.

    За предложение спасибо, но самому хочется ;-)

    PS. Кстати, после заполнения DWORD'а нулями отсчёт не сбивается, если что...
    PPS. Прошивка 2.11
    Последний раз редактировалось Elka; 24.10.2010 в 10:06. Причина: Добавил PS и PPS

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

    По умолчанию

    в плк при работе онлайн, значительно увеличивается время цикла.
    попробуй к примеру вывести эти значения на экран и посмотреть, будет ли расти разница во времени?
    и я не очень понял, нужны миллисекунды или микросекунды? если миллисекунды,то как бы проблема легко разрешима, если микро, то зачем такая точность?

  7. #7
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    По умолчанию

    Т.е. при работе online время работы контроллера течёт медленнее? Причем только его uptime, а календарное время - течёт как обычно. Как-то это не совсем правильно, как мне кажется, да и реализовать внутри контроллера это сложнее, чем обычный отсчёт времени. Но проверю в ближайшие дни, так ли это...

    А требуемая точность - мне и минут достаточно...
    Последний раз редактировалось Elka; 25.10.2010 в 12:30.

  8. #8

    По умолчанию

    Цитата Сообщение от lara197a Посмотреть сообщение
    в плк при работе онлайн, значительно увеличивается время цикла.
    попробуй к примеру вывести эти значения на экран и посмотреть, будет ли расти разница во времени?
    и я не очень понял, нужны миллисекунды или микросекунды? если миллисекунды,то как бы проблема легко разрешима, если микро, то зачем такая точность?
    Опа! А можно поподробнее: на сколько %% (во сколько раз)? Или это субъективные ощущения? Вопрос не праздный, использую отображение встроенное в Кодесис, одновременно имею непонятные проблемы с реакцией на внешние входы.

  9. #9
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    258

    По умолчанию

    Online на течение времени субъективно не влияет. Точных измерений не проводил, но вот программка на которой видно, что в любом случае часы, показывающие uptime (т.е. структура SystemTime функционального блока CurTimeEx) отстают от календарных.

    Покажите, где у меня кривые руки, а если это не они, то стоит ли ждать каких-нибудь исправлений в прошивках? ПЛК63, прошивка 2.11

    Не критично-есть альтернативные решения, про которые писал выше...
    Вложения Вложения
    • Тип файла: rar UpTime.rar (14.0 Кб, Просмотров: 23)

  10. #10
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

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

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

Ваши права

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