Új hozzászólás Aktív témák

  • moseras

    tag

    válasz moseras #603 üzenetére

    Sziasztok

    "Szükségem lenne egy újraindítható timer-re."

    Magamnak válaszolok:

    A TIME() függvényt kell használni, ezzel a PLC indulása óta eltelt időt kapom meg msec-ben. Erre lehet már timer-t építeni, pl. így:

    FUNCTION_BLOCK TP_X
    VAR_INPUT
    IN : BOOL;
    PT : TIME;
    END_VAR
    VAR_OUTPUT
    Q : BOOL;
    ET : TIME;
    END_VAR
    VAR
    edge : BOOL;
    start : TIME;
    tx: TIME;
    END_VAR

    (*
    version 1.2 19. oct. 2008
    programmer hugo
    tested by oscat

    retriggerable edge triggered pulse similar to TP but with a retrigger function
    if the pt input is 0 then output is always low.
    *)

    (* @END_DECLARATION := '0' *)
    (* read system_time *)
    tx := DWORD_TO_TIME(T_PLC_MS());

    (* rising edge trigger *)
    IF in AND NOT edge THEN
    start := Tx;
    IF pt > t#0ms THEN Q := TRUE; END_IF;
    END_IF;
    edge := in;
    IF q THEN
    et := Tx - start;
    IF et >= PT THEN
    Q := FALSE;
    et := t#0ms;
    END_IF;
    END_IF;


    (* revision history
    hm 4. aug 2006 rev 1.0
    original version

    hm 17. sep 2007 rev 1.1
    replaced time() with T_PLC_MS() for compatibility reasons

    hm 19. oct. 2008 rev 1.2
    renamed to TP_R to TP_X for compatibility reasons
    *)
    END_FUNCTION_BLOCK

    Forrás:
    [link]

    Imi.

Új hozzászólás Aktív témák