Zeitsteuerung in ST

marmi86

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche vergeblich eine Zeitsteuerung (mit zwei Zeitzuständen) für eine Lampe in ST zu programmieren. Zur Verfügung habe ich nur einen Taster. Wenn der Taster kurz betätigt wird soll die Lampe 30 sek leuchten und wenn der Taster länger gedrückt wird soll die Lampe 90 sek leuchten. Ich denke man könnte den zweiten Zustand auch durch 2x Betätigen des Taster erreichen, weiß aber nicht wie man das realisiert.

Mein einziger funktionierender Ansatz sieht wie folgt aus:

Code:
PROGRAM test
VAR

    Taster AT %I*: BOOL;
    Lampe AT %Q*: BOOL;

    time_kurz:TP;
    

END_VAR

----------------------------------------

time_kurz(IN:=Taster , PT:=T#30S);


(* Eine einfache Zeitschaltung erst einmal für einen Zustand*)


IF  time_kurz.Q=TRUE   THEN
   lampe:=TRUE;
        ELSE
        lampe:=FALSE;

END_IF

Gruß Marmi
 
Ich würds so machen:
Code:
PROGRAM test 
VAR      
 
Taster AT %I*: BOOL;     
Lampe AT %Q*: BOOL;      
    t_set:TIME;  
    ton_TA:TON;  
    time_on:TP;
    

END_VAR

----------------------------------------



ton_TA(IN:=Taster , PT:=T#3s);

If (Taster and not ton_TA.Q) THEN t_SET=T#30s;
If (Taster and ton_TA.Q) THEN t_SET=T#90s;

time_on(IN:=Taster, PT:=t_SET);
Lampe:=time_on.Q

so in der Richtung - ungetestet und aus dem kopf....
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Von mir gibt es den üblichen Zustandsautomaten.

Code:
PROGRAM test 
VAR      
state : INT = 0;

Taster AT %I*: BOOL;     
Lampe AT %Q*: BOOL;      

timerTaster: T_ON;
timerLampe : T_ON;
END_VAR

Lampe := NOT timerLampe.Q;

CASE state OF
  0: 
  IF Taster THEN
    state := 1;
  END_IF;

  1: 
  timerTaster(IN:=Taster, PT:=t#3s);
  IF timerTaster.Q THEN
    state := 2;
  ELSIF NOT Taster THEN
   state := 3;
  END_IF;

  2: 
  timerLampe(IN:=NOT timerLampe.Q, IN:=t#90s);
  state := 4;
  
  3: 
  timerLampe(IN:=NOT timerLampe.Q, IN:=t#30s);
  state := 4;

  4:
  timerLampe();
  IF timerLampe.Q THEN
    state := 0;
  END_IF;

END_CASE;
 
Ich meine, der Lampe-Timer darf erst gestartet werden beim Loslassen der Taste oder wenn die Taste länger als die Taste-Timer-Zeit gedrückt ist. Die Lampe würde ich aber schon beim Drücken der Taste leuchten lassen. Außerdem würde ich einen TOF nehmen, das verknüpft sich einfacher, daß die Lampe nur leuchtet, wenn vorher auch die Taste gedrückt wurde.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier meine ungetestete Variante mit Kurz-/Lang-/Dauerlicht
Code:
PROGRAM test
VAR
Taster AT %I* : BOOL;
Lampe  AT %Q* : BOOL;

ftr_Taster : F_TRIG;
ton_Taster : TON;
tof_Lampe  : TOF;
END_VAR

ftr_Taster(CLK:=Taster);
ton_Taster(IN:=Taster, PT:=T#3s);

[COLOR="#008000"](*IF NOT tof_Lampe.Q THEN *)[/COLOR]
  IF ton_Taster.Q THEN
    tof_Lampe.PT := T#90s;
  ELSIF Taster
    tof_Lampe.PT := T#60s;
  END_IF;
[COLOR="#008000"](*END_IF; *)[/COLOR]

tof_Lampe(IN:=ftr_Taster.Q OR ton_Taster.Q);

Lampe := tof_Lampe.Q;
[COLOR="#008000"](*Lampe := tof_Lampe.Q OR Taster; (*falls Lampe sofort ab Tastendruck leuchten soll*) *)[/COLOR]

Als Rückmeldung für den Bediener ist es vielleicht doch ganz gut, wenn die Lampe erst angeht wenn die Taste losgelassen wird oder länger als 3s gedrückt ist.

Harald
 
Hallo Zusammen,

Ich habe eine ähnliches Problem wie dieses
Ich habe eine Sirene "bS: Bool" , die 5 Minuten nach dem Einschalten einer roten Ampel "bRA:Bool" aktiviert wird. Diese Sirene wird nur deaktiviert, wenn die Taste "TX:Bool" gedrückt wird. Die Sirene dient nur dazu, auf eine Störung hinzuweisen. Ich würde gerne wissen, ob jemand einen einfachen ST Programm vorschlagen kann.
Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau dir mal folgende Teilaspekte/Standard-Funktionsbausteine an: Einschaltverzögerung (TON), Flankenerkennung (R_TRIG) und Flipflop (SR bzw. RS).
PS: Das Thema ist mittlerweile fast acht Jahre alt.
 
also ohne deine anwendung genau zu kennen ...

ein SR-flipflop um den alarmzustand zu speichern ...

alarmSR(SET1:=bS,RESET:=TX);

und dann eine einschaltverzögerung ......

ararmTon(SET:=alarmSR.Q, Ton:=t#5m);

Ausgang:=alarmTon.q;


dein alarmeingang sollte ja true = ok sein .. (drahtbruchsicherung) ...
und je nachdem macht natürlich auch eine flankenauswertung noch sinn ...

für anfänger in ST ... löse dein problem mit fup oder kop ... und übersetze es dann ....

und ideal ist die logo-soft für so etwas ... basteln, simulieren, übersetzen ...
 
Zurück
Oben