Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 25 из 25

Тема: Библиотеки сторонних разработчиков

  1. #21
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,612

    По умолчанию

    Не получаеться выделить из библиотеки OSCATBasic блок "ONTIME", ругается на переменную. Подскажите, что делать?

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

    По умолчанию

    Цитата Сообщение от Эдуард_Н Посмотреть сообщение
    Не получаеться выделить из библиотеки OSCATBasic блок "ONTIME", ругается на переменную. Подскажите, что делать?
    Добавить эту переменную.
    Для работы блока ONTIME нужна функция T_PLC_MS из этой же библиотеки. Или исправить одну сточку в коде ФБ
    Код:
    FUNCTION_BLOCK ONTIME
    VAR_INPUT
        IN : BOOL;
        RST : BOOL;
    END_VAR
    VAR_IN_OUT
        SECONDS : UDINT;
        CYCLES : UDINT;
    END_VAR
    VAR
        tx: DWORD;
        last : DWORD;
        edge : BOOL;
        init: BOOL;
        ms: DWORD;
    END_VAR
    
    (* read system time *)
    tx := TIME_TO_DWORD(TIME());
    
    (* make sure the first cycle works correctly *)
    IF NOT init THEN
        init := TRUE;
        last := tx;
        ms := 0;
    END_IF;
    IF RST THEN
        SECONDS := 0;
        CYCLES := 0;
        last := tx;
        ms := 0;
    ELSIF IN THEN
        (* add the current milliseconds *)
        ms := (tx - last) + ms;
        IF ms >= 1000 THEN
      seconds := seconds + 1;
      ms := ms - 1000;
        END_IF;
        cycles := cycles + BOOL_TO_UINT(NOT edge);
    END_IF;
    last := tx;
    edge := in;
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #23
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,612

    По умолчанию

    Спасибо, понял.

  4. #24

    По умолчанию

    Нужна помощь: необходимо отследить время с момента выключения ПЛК160 до его включения. (* Не выключать ПЛК по ряду причин нельзя *).

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

    По умолчанию

    Код:
    PROGRAM PLC_PRG
    VAR
        Init: BOOL;
        Diff: TIME;    (*Время простоя ПЛК*)
        now: DT;    (*Текущие дата и время*)
    END_VAR
    VAR RETAIN
        old: DT;    (*Дата и время в момент откл ПЛК*)
    END_VAR
    
    now:=curDT();
    IF NOT Init THEN    (*Если первый цикл ПЛК*)
        Diff:=now-old;    (*Время простоя ПЛК*)
        Init:=TRUE;
    END_IF
    old:=now;
    Время простоя ПЛК (Diff: TIME) будет с дискретностью 1 секунда
    Функцию curDT()
    Код:
    Код:
    FUNCTION curDT : DT (* Дата и время в формате POSIX как число секунд с 0 часов 1 января 1970г*)
    VAR_INPUT
    END_VAR
    VAR
        CurTimeExInst: CurTimeEx;
        CurSystemTimeDate: SystemTimeDate;
        CurSysTime64: SysTime64;
        year: INT;
        second: INT;
        day: INT;
        hour: INT;
        minute: INT;
        month: INT;
        count: INT;
        SET_DATE: DWORD;
    END_VAR
    CurTimeExInst(TimeDate := CurSystemTimeDate, SystemTime := CurSysTime64);
        year :=CurSystemTimeDate.Year;
        month :=CurSystemTimeDate.Month;
        day :=CurSystemTimeDate.Day;
        hour :=CurSystemTimeDate.Hour;
        minute :=CurSystemTimeDate.Minute;
        second :=CurSystemTimeDate.Second;
    (*------------------------------------------------------------------------*)
    (*Вычислить дату с учетом високосных лет*)
    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;
        (* chech for leap year and add one day if true *)
        IF SHL(year,14) = 0 THEN count := count + 1; END_IF;
    ELSE
        count := (month - 1) * 31;
    END_IF;
    SET_DATE := (INT_TO_DWORD(count + day - 1)
                   + SHR(INT_TO_DWORD(year) * 1461 - 2878169, 2)) * 86400;
    (*------------------------------------------------------------------------*)
    curDT := DWORD_TO_DT(SET_DATE
                  + INT_TO_DWORD(SECOND) + INT_TO_DWORD(MINUTE) * 60
                  + INT_TO_DWORD(HOUR) * 3600);
    "слепил" из OSCAT-овских SET_DT() и SET_DATE() http://www.owen.ru/forum/showthread....l=1#post161139
    Используется стандартная SysLibTime.
    Только часы ПЛК160 в выключенном состоянии сбрасываются через 5 суток и по истечение этого периода, время простоя ПЛК будет не корректным.
    Последний раз редактировалось petera; 29.03.2015 в 08:52.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. Подключение к ЕКОН-134 сторонних приборов
    от pilot2 в разделе Подбор Оборудования
    Ответов: 4
    Последнее сообщение: 13.01.2013, 12:23
  2. Ответов: 2
    Последнее сообщение: 30.06.2011, 10:45
  3. Ответов: 2
    Последнее сообщение: 16.01.2009, 00:32
  4. Opc-сервер сторонних разработчиков?
    от NSemenov в разделе Сервисное ПО
    Ответов: 3
    Последнее сообщение: 21.12.2007, 17:46
  5. Ответов: 5
    Последнее сообщение: 13.06.2007, 09:22

Ваши права

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