SCL Kodiereung dringend!!

Hallo,

sollte in etwa so aussehen

Code:
FUNCTION_BLOCK FB1 

VAR
TimerRest : WORD;  //Rest-Zeitwert (Binär)
TimerAkt : S5TIME; //Timer-Wert
TimerFlag : BOOL;  //Status der Zeit
FM : BOOL;         //Hilfsmerker
band_re : BOOL;
pf_timer_stoer_impuls : BOOL;
#t1 : INT;         //Route da T ein Schlüsselwort ist
#t2 : INT;         //Route da T ein Schlüsselwort ist
END_VAR

BEGIN

(* Zeit als Einschaltverzögerung starten *) 
TimerAkt := S_ODT(T_NO:=T3, S:=band_re, TV:=T#10ms, R:=FALSE, 
                  BI:=TimerRest, Q:=TimerFlag); 

(* Negative Flanke bilden *)
pf_timer_stoer_impuls := NOT(TimerFlag) AND FM;
FM := TimerFlag;

(* Addieren bei Neg. Flanke *)
IF pf_timer_stoer_impuls THEN
  #t2 := #t1 + #t2; //Route da T ein Schlüsselwort ist
END_IF;

END_FUNCTION_BLOCK

wobei ich nicht weis wo der band_re herkommt.

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mal ne frage nebenbei.....
für MICH gibt es keinen sinn sowas in scl zu proggen

bittte, bitte, bitte liebe neueinsteiger
benutzt scl dafür wofür es gemacht wurde (koplexere sachen und so)
und nicht für normale funktionen
da kommt am ende nur müll raus
 
mal ne frage nebenbei.....
für MICH gibt es keinen sinn sowas in scl zu proggen

bittte, bitte, bitte liebe neueinsteiger
benutzt scl dafür wofür es gemacht wurde (koplexere sachen und so)
und nicht für normale funktionen
da kommt am ende nur müll raus

So ist es. Wollte ich eigentlich auch noch schreiben.
Das Problem war bloss das der Finger schneller war.

*ACK*

Gruss Daniel
 
Und wenn man sowas in SCL löst dann bitte niemals mit S5 Timern arbeiten. Am besten ganz auf S5 Zähler und Timer verzichten (das ist aber eine andere Diskussion).

Warum man gerade in SCL sowas besser mit TON bzw. TOF (also den IEC Timern) lösen sollte hängt damit zusammen das man den Code dann deutlich einfacher auf andere IEC 61131-3 konforme Plattformen übertragen kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und wenn man sowas in SCL löst dann bitte niemals mit S5 Timern arbeiten. Am besten ganz auf S5 Zähler und Timer verzichten (das ist aber eine andere Diskussion).

Warum man gerade in SCL sowas besser mit TON bzw. TOF (also den IEC Timern) lösen sollte hängt damit zusammen das man den Code dann deutlich einfacher auf andere IEC 61131-3 konforme Plattformen übertragen kann.

Mal ne Frage: Wie können den die TON/TOF initialisiert werden, wenn diese im SCL eingesetzt werden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auszug aus Hilfe für TON: Das Betriebssystem setzt die Instanzen des SFB 4 "TON" bei Kaltstart zurück. Falls Instanzen dieses SFB nach Neustart (Warmstart) initialisiert sein sollen, müssen Sie im OB 100 die zu initialisierenden Instanzen mit PT = 0 ms aufrufen. Falls Instanzen dieses SFB innerhalb eines anderen Bausteins enthalten sind, erreichen Sie das Rücksetzen dieser Instanzen z. B. durch Initialisierung des übergeordenten Bausteins. Einige CPU's kennen ja nur den Warmstart. Da ich viele Bausteine im SCL mache, und diese dann im CFC integriere, ist das ermitteln der zugehörigen Instanz, so viel ich weiss, unmöglich. Beim Übersetzen des CFC werden die Instanzen immer wieder neu generiert.
 
Also im Prinzip ja einfach so:

Code:
IF Initialisierung THEN
TIMER_INSTANZ.PT := T#0MS ;
ELSE
TIMER_INSTANZ.PT := Sollwert ;
END_IF;

Das ganze kannst du ja auch im SCL-Baustein machen, in welchem der Timer aufgerufen wird.

"Initialisierung" könnte hier jetzt z.B. ein Merker sein, welcher im OB100 gesetzt wird,
und im OB1 im letzten Netzwerk rückgesetzt wird.

Mfg
Manuel
 
... und diese Initialisierung ist m.E. nur notwendig, wenn der Timer-Baustein bedingt bearbeitet wird - also der Aufruf zeitweise übersprungen wird. Beim wieder-bearbeiten erkennt der Timer dann ein schon anstehendes Signal nicht als Start-Impuls (war ja vorher keine "0" am Eingang).

Gruß
LL
 
danke für die info's, werde das mal austesten, wie das verhalten ist nach warmstart. gruss

Habe mal einen TON im CFC verschaltet, Startbedingung mit einem Bit aus DBx. Den Timer gestartet und während dem einen Stromausfall gemacht. Nach dem Auffahren läuft der Timer bei der Zeit wo der Unterbruch war, weiter. Kann ggf. zu Fehlfunktionen bzw. unkorrekten Zeitabläufen führen. Nochmals: Die Initialisierung im CFC der Instanz ist meines Erachtens nicht möglich, da die Instanz Db's durch das CFC vergeben werden. Oder kennt wer ne Lösung? gruss
 
:confused: wie war denn in deinem Fall das Verhalten des Start-Bits am IN ? Wahrsc´heinlich die ganze Zeit gesetzt ? Der Timer startet nur neu, wenn er eine neue Flanke mitbekommt ... !!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:confused: wie war denn in deinem Fall das Verhalten des Start-Bits am IN ? Wahrsc´heinlich die ganze Zeit gesetzt ? Der Timer startet nur neu, wenn er eine neue Flanke mitbekommt ... !!!

Das Bit aus dem DBx habe ich nicht verändert, also war es immer gesetzt!? Die DB's sind ja alle Remanent bei Warmstart (CPU319).
 
Zurück
Oben