Страница 5 из 5 ПерваяПервая ... 345
Показано с 41 по 44 из 44

Тема: СП300 - синхронизация времени

  1. #41

    По умолчанию

    А значение UnixTime в Панели равно значению в 61553 ПРки?

  2. #42

    По умолчанию

    Изначально нет, там его нету как такового. Есть регистры текущего времени, откуда надо сформировать UnixTime и преобразовать его во время от 2000 года. Вот как я делаю: (код и макроса, который прикреплён несколькими сообщениями выше немного доработанный мной)

    wYear = 2000 + (LOBYTE(PSW[30]) / 16) * 10 + LOBYTE(PSW[30]) % 16;
    wMonth = (PSW[31] / 16) * 10 + PSW[31] % 16;
    wDay = (PSW[32] / 16) * 10 + PSW[32] % 16;
    wHour = (PSW[33] / 16) * 10 + PSW[33] % 16;
    wMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;
    wSecond = (PSW[35] / 16) * 10 + PSW[35] % 16;

    //код выше для преобразования, в регистрах панели время выражено в HEX формате, преобразуем в DEC

    time_str.tm_year = wYear - 1900;
    time_str.tm_mon = wMonth - 1;
    time_str.tm_mday = wDay;
    time_str.tm_hour = wHour;
    time_str.tm_min = wMinute;
    time_str.tm_sec = wSecond;
    time_str.tm_isdst = -1;

    UnixTime_now = mktime(&time_str);

    time_str.tm_year = 2000 - 1900;
    time_str.tm_mon = 1 - 1;
    time_str.tm_mday = 1;
    time_str.tm_hour = 0;
    time_str.tm_min = 0;
    time_str.tm_sec = 0;


    UnixTime_2000 = mktime(&time_str);

    UnixTime=UnixTime_now - UnixTime_2000;

    Итого получается что в переменной UnixTime лежит количество секунд от 2000 года. Их я и пытаюсь записать в ПР103. И когда записываю, то время панели не равно времени ПР, в этом то и дело. Хотя должно быть равно.
    Последний раз редактировалось ShmoninEN; 27.02.2025 в 09:37.

  3. #43

    По умолчанию

    А чему равно UnixTime в Панели? И чему равно значение переменной, привязанной к 61553 в ПР, после передачи данных?

  4. #44

    По умолчанию

    Разобрался в чём была проблема. Оказалось, что в функции Writes в макросах панели при формировании массива регистров на запись обязательно нужно помнить о том, что последующее обращение к массиву идёт с нулевого элемента! А я начал нумерацию с единицы, поэтому второй регистр у меня не записывался. Сейчас всё в порядке, работает как и задумывалось.
    TestTime_1.jpg

    Код макроса:
    #include <time.h>

    DWORD UnixTime_now;
    DWORD UnixTime_2000;
    DWORD OwenTime;

    struct tm time_str;

    WORD wYear; // system date-time
    WORD wMonth;
    WORD wDay;
    WORD wHour;
    WORD wMinute;
    WORD wSecond;

    WORD TimeSec[2];

    // get system date-time and convert it from BCD to DEC
    wYear = 2000 + (LOBYTE(PSW[30]) / 16) * 10 + LOBYTE(PSW[30]) % 16;
    wMonth = (PSW[31] / 16) * 10 + PSW[31] % 16;
    wDay = (PSW[32] / 16) * 10 + PSW[32] % 16;
    wHour = (PSW[33] / 16) * 10 + PSW[33] % 16;
    wMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;
    wSecond = (PSW[35] / 16) * 10 + PSW[35] % 16;

    PSW[300] = wYear;
    PSW[301] = wMonth;
    PSW[302] = wDay;
    PSW[303] = wHour;
    PSW[304] = wMinute;
    PSW[305] = wSecond;

    time_str.tm_year = wYear - 1900;
    time_str.tm_mon = wMonth - 1;
    time_str.tm_mday = wDay;
    time_str.tm_hour = wHour;
    time_str.tm_min = wMinute;
    time_str.tm_sec = wSecond;
    time_str.tm_isdst = -1;

    UnixTime_now = mktime(&time_str);

    time_str.tm_year = 2000 - 1900;
    time_str.tm_mon = 1 - 1;
    time_str.tm_mday = 1;
    time_str.tm_hour = 0;
    time_str.tm_min = 0;
    time_str.tm_sec = 0;
    time_str.tm_isdst = -1;

    UnixTime_2000 = mktime(&time_str);

    OwenTime = UnixTime_now - UnixTime_2000;

    PSW[310]=LOWORD(OwenTime);
    PSW[311]=HIWORD(OwenTime);

    TimeSec[0]=PSW[310];
    TimeSec[1]=PSW[311];

    Writes(PLC, 1, MODBUS_RTU_REGS_4X, 61553, 2, TimeSec);

    Макрос вызывается кнопкой Выполнить на экране. Кнопка с часами вызывает экран установки времени в панели. Так же на экран выведено содержимое регистров панели PSW[310-311] и регистров ПР103 61553-61554, и сделал ещё вывод этих же регистров в двоичном виде индикаторами. Панель Мастер, ПР103 слейв, подключение через RS485. В свойствах подключения обязательно поставить галку "Изменить порядок регистров".
    TestTime_1.zip

Страница 5 из 5 ПерваяПервая ... 345

Похожие темы

  1. ПР200 синхронизация времени
    от Alex_Z в разделе Программируемые реле
    Ответов: 1
    Последнее сообщение: 29.08.2017, 16:12
  2. Синхронизация времени
    от VanoKing в разделе ПЛК1хх
    Ответов: 35
    Последнее сообщение: 10.01.2014, 12:20
  3. Синхронизация времени
    от VanoKing в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 07.09.2011, 19:41
  4. синхронизация времени плк и ип320
    от rabitt.exe в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 11.02.2010, 10:59
  5. Ответов: 0
    Последнее сообщение: 22.04.2008, 05:37

Ваши права

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