Vlastní funkční blok - sepnutí výstupu na určitý čas



  • Dobry den,

    je možné v jazyce ST při vytváření funkčního bloku použít nějakou funkci, která sepne výstup, resp. přiřadí výstupu typu bool honotu true po určitý čas, řekněme 5 vterin? Jakym zpusobem vytvorit cyklus s urcitym poctem iteraci?


  • administrators

    Dobrý den,

    Možností je několik, můžete použít blok Monostable FlipFlp, Pulse Generator nebo Pulse Encoder, ale určitě jsou i další možnosti jak dosáhnout stejného výsledku. Funkční bloky lze v jazyce ST volat pomocí funkčního syntaxu.

    Např z jednoho našeho modulu:

    VAR
    	monostable_block : lib.Core.V1_0.MonostableFlipFlop;
    END_VAR
    IF (inp_value <> previous_inp) THEN
    	monostable_block.en := TRUE;
    	monostable_block.Delay := hold_time;
    	monostable_block.In := TRUE;
    	monostable_block();
    	monostable_block.In := FALSE;
    END_IF;
    monostable_block();
    previous_inp := inp_value;
    out_force := monostable_block.Out;
    out_value := inp_value;
    

    Iterování se dělá pomocí FOR,WHILE,REPEAT nebo CASE ST příkazů. Jako tutoriál pro ST mohu např. doporučit: http://www.plcacademy.com/structured-text-tutorial/



  • Dekuji za radu. Co se tyce iteraci, cykly jsou mi jasne, ale nevim, jak udelat cyklus, kdy se iterace provede rekneme 3x s odstupem napr. 10 vterin.


  • administrators

    Na to stačí použít právě nějaký blok jako je např. monostable, a volat ho při každém zavolání rodičovské funkce - pokud je hodnota .Out TRUE pak ho vyresetovat a udělat další část iterace.

    V tom případě pak není potřeba použít cyklu, ale stačí IF