Zeitfunktion in ST

Steffen93

Level-1
Beiträge
17
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen.
Ich sitze im Moment vor einem kleinen Problem (zumindestens für mich:)).
Ich möchte in ST in einem Funktionsblock programmieren, eine Funktion anfängt den Befehl aufzuführen wenn Enable des Baustein True ist aber maximal eine bestimmte Zeit T, die ich am Funktionsbaustein eingeben kann, ausführt. Aber wenn während den 10 Sekunden Enable auf False wechselt wird es angehalten werden und das nächste mal wieder bei 0s starten.

Ich arbeite im Moment mit einem TP-Zeitglied und lass die abhängige Zeit der mathematische Funktion, die abläuft wenn die Bedingung True ist, über TP.ET mitlaufen. Mein Problem ist jetzt dass Ich das ET im Reset nicht auf 0 setzen kann(kein Schreibzugriff), bzw. nicht weis wie das geht. Selbst wenn ich die zugehöroge Variable von ET auf null setze läuft ET immer weiter auch wenn die Bedingung nicht zutrifft. Ich erstehe das auch weil es ja ein Impulsgeber ist.

Weis jemand wie man den TP anhalten kann bzw. reseten kann?
Oder was auch mir fast noch lieber wäre, ob mir jemand erklären könnte, wie ich selber einen Timer programmier, also einfach im Programm sage jetzt läuft eine Zeit, die ich starten stoppen und reseten kann.

Ich hoffe ihr versteht halbwegs mein Problem.
Vielen Dank schonmal für eure Hilfe.

Liebe Grüße
Steffen93
 
Code:
PROGRAM PLC_PRG
VAR
    Timer_1 : TP;
    Enable : BOOL;
    meineZeit: TIME := T#10s;
END_VAR

IF(Enable)
    THEN
        Timer_1(IN:= TRUE, PT:= meineZeit);
    ELSE
        Timer_1(IN:= FALSE, PT:= T#0s);
END_IF

Ich hoffe ich habe dich richtig verstanden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Steffen,

also wenn du mit CODESYS V3 (auch in V2.3) arbeitest würde ich mal die OSCAT Bibliotheken anschauen, die sind offen und man kann schauen wie man sowas macht.
https://store.codesys.com/catalogsearch/result/?q=OSCAT
speziell zu deinem Timer_2 würde ich mal den Source code browsen.

Wie vorgehen?
CODESYS V3 nehmen auf den Einkaufswagen clicken - im Store dann nach OSCAT suchen... direkt in CODESYS also über das Einkaufswagen Symbol installieren
(OSCAT BASIC und OSCAT Building reichen erst mal)
Dann die Bibliothek im Bibliotheksmanager hinzufügen.. und mal doppelclicken in der Building auf Timer_2 ... da stehst du mitten im Source code. (oder aber die Bibliothek öffnen)
Die Doku als PDF ist auch in der Lib "versenkt" ich denke da findest du alles was du brauchst.

Grüße
 
Zuletzt bearbeitet:
Hallo,ich

würde ein TON nehmen:

Code:
PROGRAM PLC_PRG
VAR
    Timer_1 : TON;
    meineZeit: TIME := T#10s;
END_VAR
VAR_INPUT
    Enable : BOOL;
END_VAR

Timer_1(IN:= Enable, PT:= meineZeit);

IF (Enable AND NOT Timer_1.Q) THEN
  //Hier was ausgeführt werden soll
END_IF

Gruß

/EDIT: Ansonsten gibt es die Time Funktion, damit kannst Du Dir Deinen eigenen Timer bauen.
 
Zuletzt bearbeitet:
Hallo,

mein eigenen TONCLK nach deine Wünche.
Code:
FUNCTION_BLOCK TONCLK
VAR_INPUT
    Execute:BOOL;
    PT:TIME;
    
END_VAR
VAR_OUTPUT
    Q:BOOL;
    ET:TIME;
       
END_VAR
VAR
    tx:TIME;
    txtx:TIME;
    diff:TIME;    
    
END_VAR
//BEGIN
tx:= TIME();
txtx:=tx;

IF Execute THEN
    ET:= ET + diff;
    IF ET >= PT THEN
        Q:= TRUE;
        ET:= T#0S;
    END_IF        
    ELSE
        Q:= FALSE;
        ET:= T#0S;
END_IF

diff:= (tx-txtx) + T#15MS;

//END
 
Zurück
Oben