Mit einem Taster zwei zwei eindeutige Befehle erzeugen? In SCL

hans55

Level-1
Beiträge
32
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!
Hat jemand eine Idee, wie man mit einem Taster zwei eindeutige Befehle generiert? z.B.
- einmal Mal kurz drücken und loslassen => Schütz soll anziehen

- einmal lang drücken (z.B. >3s) und loslassen => Schütz soll abfallen

Wie könnte man das in SCL programmieren? Hat da einer eine Idee? Irgendwie mit einen Timer >3s , einer fallenden und einer steigenden Flanke konnte das doch gehen oder? Aber wie mach ich das mit SCL?

Oder macht man das einfach nur einen Binäruntersetzer oder einem D-Flip Flop der/das bei jedem Tasten einmal umschaltet? Damit kann man aber nicht eindeutig EIN/AUS schalten.
Es wäre nicht schlecht wenn jemand eine Idee hätte und wie man das in SCL programmieren könnte, vor allem das mit dem Timer in SCL.
Danke!

Gruß
Hans
 
Hallo,
eine Einschaltverzögerung in SCL heißt z.B. "S_ODT".
Schau dir das mal in der SCL-Hilfe an. Dort gibt es dann auch noch die ganzen anderen Verwandeten, die du auch schon vom Step7 kennst ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder über die Systemfunktionen z.B.

Code:
FUNCTION_BLOCK FB10

VAR_INPUT
  Taste : BOOL;
END_VAR
VAR_IN_OUT
  Ausgang : BOOL;
END_VAR
VAR
  HM : BOOL;       // Hilfsmerker
  IM : BOOL;       // Impuls
  T_1 : TON;       // Timer TON
END_VAR


  T_1(IN:= Taste, PT:= T#3s);
  
  IM := Taste AND NOT HM;
  HM := Taste;

  IF IM AND NOT Ausgang THEN
    Ausgang := TRUE;
  ELSIF T_1.Q AND Ausgang THEN
    Ausgang := FALSE;
  END_IF;  

END_FUNCTION_BLOCK

MfG
Daniel
 
Hallo!

Warum willst du das über eine Zeit lösen und nicht gleich direkt Ein und Ausschalten?

Dein Stichwort ist Stromstoßschalter!
Suche im Forum da findest du genug Beispiele in AWL dazu die du leicht in SCL umsetzen kannst!
 
Hallo!

Warum willst du das über eine Zeit lösen und nicht gleich direkt Ein und Ausschalten?

Dein Stichwort ist Stromstoßschalter!
Suche im Forum da findest du genug Beispiele in AWL dazu die du leicht in SCL umsetzen kannst!

@Godi:
Ich denke, dass kommt aus der Bustechnik für Haus-Installation (EIB oder LCN). Dort werden Funktionen über "kurze" und "lange" Tasten-Betätigungen ausgelösst ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erst mal Danke!
An das "Stromstoßrelais" habe ich auch schon gedacht. Das müsste meine ich mit einem D-FF und einer Rückkopplung funktionieren.
Ich würde aber gerne noch eine Schütz- Rückmeldung mit einbauen. z.B. sollte das Schütz nur anziehen, wenns vorher auch richtig abgefallen und nur abfallen, wenns vorher richtig angezogen hat. Da das Schütz z.B. mehrere Ventile ansteuert müsste man meine ich die alle abfragen können.
Einfach nur so.
Eine konkrete Aufgabe habe ich nicht, ich stell mir nur vor was ich evtl. brauchen könnte und daran bastle ich halt rum um SCL zu lernen. Denn nur in dicken PDF-Files lesen bringt glaube ich nix.
Das Beispiel vom Daniel muss ich mir erst mal genauer ansehen, ich versteh noch gar nix. Hier muß ich erst mal etwas lesen.
Dass man den Timer auch vom System aufrufen kann, wusste ich nicht.

TRUE/FALSE:
Kann mir bitte jemand sagen, wann ich FALSE / TRUE und wann ich 0/1
verwenden muß? Irgendwie ist mir der Unterschied nicht klar. FALSE ist doch eine 0 und TRUE eine 1. Oder kann ich das eine oder das andere z.B. bei Abfragen verwenden? Das gabs früher bei der S5 nicht, wenn ich mich recht erinnern kann.
Danke nochmal.
Gruß
Hans
 
Erst mal Danke!
TRUE/FALSE:
Kann mir bitte jemand sagen, wann ich FALSE / TRUE und wann ich 0/1
verwenden muß? Irgendwie ist mir der Unterschied nicht klar. FALSE ist doch eine 0 und TRUE eine 1. Oder kann ich das eine oder das andere z.B. bei Abfragen verwenden? Das gabs früher bei der S5 nicht, wenn ich mich recht erinnern kann.
Danke nochmal.
Gruß
Hans

Also das bei Boolschen Variablen TRUE einer logischen 1 uns FALSE einer logischen 0 entspricht ist richtig. Der Unterschied ist eigentlich nur der, dass man im Quelltext bei der Zuweisung von TRUE oder FALSE sofort erkennt, dass die Variable vom Typ BOOL ist. Bei der Zuweisung von 0 und 1 könnte die Variable z.B. auch vom Typ INT.
Bei der Funktion der Zuweisung macht es keinen Unterschied.
 
Hallo Hans,
SCL ist eine PASCAL-ähnliche Variante. Es macht eigentlich nur Sinn dieses dort einzusetzten, wo man Code-technisch Vorteile gegenüber der Step7-Programmierung hat. Das ist bei einer Timer-Schaltung oder einem D-Flip-Flop sicher nicht der Fall. Bei einer Schleifen-Bearbeitung oder bei String-Manipulationen schon.

Aufgrund des angedachten PASCAL-Hintergrundes möchte die Variablen bei Zuweisung gerne Typ-gerecht bedient werden.
Das heißt :
Variablen vom Typ BOOL mit TRUE oder FALSE (wahr oder unwahr). "0" und "1" funktioniert hier interessanterweise aber auch.
Variablen vom Typ INT oder DINT mit Ganzzahlen.
Varaiblen vom Typ REAL mit Kommazahlen. "Var_REAL := 1 ;" funktioniert dort nicht. Da müßtest du dann schreiben "Var_REAL := 1.0 ;"
Bei Variablen vom Typ WORD oder BYTE ist es auch zum Teil so, dass du die Zuweisung dort im Hex-Code machen mußt "Var_WORD := w#16#FF" bzw. "Var_BYTE := b#16#F" bzw. "Var_DWORD := dw#16#FF".

u.v.m.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ergänzend zu der Ausführung von Larry Laffers das ST/SCL von Pascal die strenge Typtrennung geerbt haben. Ist noch zu erwähnen das man aber viele Typecasting Funktionen zur Verfügung hat so kann man den Wert einer Variable in einem anderen Datentypformat darstellen.

myREAL := INT_TO_REAL(myINT); (* weist der Variablen myReal den Wert von der myINT Variable zu der eigentlich nicht passt*)

Und was nicht passt wird nach Möglichkeit passend gemacht:
myINT := REAL_TO_INT(myREAL); (* Die Kommastellen werden hier weggerundet *)
____

Kleine Übungen sind gut geeignet um sich mit SCL vertraut zu machen. Schön finde ich auch das D. Albinus die Verwendung von einem TON gezeigt hat. Dieses Beispiel mit dem Aufruf eines FBs und der Verwendung der Schnittstellen Variablen (in dem Fall war es z.B. T_1.Q) ist häufig anzutreffen.
Um die Vorteile von SCL zusehen braucht es keine großen Aufgaben aber spätestens wenn die Pointerwut in AWL ausbricht sollte man lieber zu SCL greifen.
 
Zurück
Oben