Codesys KOP Daten aufzeichnen

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich versuche gerade einen Ton Timer zu Programmieren, der Bsp. nach 60 Sekunden auf eine Variable vom Typ Bool springt und damit das Programm sozusagen stoppt. Solange der Timer aber von 60 sek runterzählt, soll das Programm weiterlaufen.

Dafür habe ich:

xTIme_END (xTime_END.IN, xTime_END.Q, PT:=T#60s);
IF xTime_END.IN THEN iState:=4;
IF xTime_END.Q THEN iState:=0;

Funktioniert aber nicht beziehungsweise bekomme ein Fehler angezeigt. Wie kann man das noch lösen?
 
Lies Dir bitte in der Codesys Hilfe den Teil mit den Timern durch, Dein Aufruf ist nämlich völlig falsch. Ein Fehler ist die Verwendung Variablen IN und Q der Timer-Instanz im Aufruf.
Was soll dieses Konstrukt überhaupt bewirken, z.B. die IF-Abfragen darunter?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte im Grunde, dass während der Timer herunterzählt das Programm weiterläuft. Sobald die Zeit abgelaufen ist, dass Programm beendet wird. Ist das so mit einem TON Timer überhaupt möglich?
 
Wie sieht das EingangsSignal des Timers aus?
Ist sichergestellt, dass mit Ablauf des Timers der Eingang wieder auf 0 wechselt?
Sonst geht iState wieder auf 4, nachdem es einen Zyklus lang auf 0 gezerrt wurde.
ProgrammDarfLaufen := IN AND NOT Q ;
 
Zuletzt bearbeitet:
Und wie könnte ich das Programmieren?
Momentaner Stand:
xTime_END (IN:=NOT xTime_END.Q, PT:=T#60s);
IF xTime_END.Q THEN
iState:=4;
Hier wartet er 60 Sekunden und geht dann weiter zu 4: er sollte aber weiterlaufen und nach 60 Sekunden zu 0 wechseln (Anweisung fehtl noch).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wodurch soll Dein TON gestartet werden? So, wie Du es jetzt hast, wird der Timer immer wieder neu gestartet, sobald er abgelaufen ist. Ist das beabsichtigt?

xTime_END (IN:=NOT xTime_END.Q, PT:=T#60s);
IF xTime_END.Q THEN
iState:=4;
Evtl. tauschen:
Code:
IF xTime_END.Q THEN iState:=4;
xTime_END (IN:=NOT xTime_END.Q, PT:=T#60s);
// bzw.
bHilfsVariable := xTime_END.Q ;
xTime_END (IN:=NOT bHilfsVariable, PT:=T#60s);
IF bHilfsVariable THEN iState:=4;
 
Zuletzt bearbeitet:
Genau. Das Ziel sollte sein: Timer zählt runter Programm läuft weiter und zeichnet Temperaturwerte auf. Timer wird auf ca. 1 Woche eingestellt. Wenn der Timer abgelaufen ist, sollte durch eine Variable vom Typ Bool Bsp. ein Schalter das Programm gestoppt werden.
 
Code:
StartTrigger : BOOL --> Wird z.B. durch HMI gesetzt

TOF(IN := StartTrigger, PT:=t#7d);    // Schaltet die Aufzeichnung frei
StartTrigger := False;

TON(NOT TON.Q, PT:=t#1s);            // Triggert die Aufzeichnung

...

CASE step OF

0:    IF TOF.Q AND TON.Q THEN            // Zeichnet auf, wenn Aufzeichnung freigegeben und Trigger aktiv
        step := step + 1;
    END_IF
1:    ...

END_CASE
 
xTime muß von Dir als TON deklariert sein (kann ich nicht sehen). Und dann mußt Du natürlich in Zeile6 das NOT TON.Q durch NOT xTime.Q ersetzen.

In Zeile 11 mußt Du xTime.Q und xTime_END.Q verwenden.
 
Zurück
Oben