Step 7 Eingangswort in Zeitbausteinen

Dranix

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo User.:wink:

Ich habe eine Aufgabenstellung in der Ich ein Eingangswort ( EW2 ) in eine Einschaltverzögerung einbinden soll ( S_EVERZ ). Nun nimmt der Timer nur den Wert ( S5t#Xs ) an dem Eingang ( TW ).

Wie bekomme ich nun das Eingangswort in den Timer eingebunden?

Die Eingabe soll über BCD-Zifferstellung eingegeben werden. Die Ausgabe erfolgt über das Ausgangswort 2 ( AW2 ) über den Timerausgang DEZ.

Entschuldigt, bin aber ein ziemlicher Neuling in der Hinsicht.

MfG Dranix
 
Mit MOVE das Eingangswort in eine temporäre Variable vom Typ S5TIME kopieren und diese Variable am S_EVERZ anlegen.

Empfehlung: das Eingangswort auf korrektes und zulässiges BCD-Format überprüfen.

Harald
 
Hallo Harald.

Hatte bisher leider nur mit den In IN out OUT Parametern zutun sodass ich nicht weiß wie ich mit den temp Variablen umgehen soll. Könntest du mir deinen Weg genauer schildern?

Vielleicht ist es möglich es anhand eines Beispiels zu zeigen? Zumal ich die Befehle bzw Adressierung nicht weiß.

mfg
 
Und was ist das Vorzeichen nibble? :confused:
Am einfachsten und sichersten ist es wohl den FC40 TIM_S5TI zum Wandeln zu nehmen.

Einfach das Eingangswort mit MOVE auf eine DINT-Variable kopieren.
[EDIT] Wenn das EW als BCD daherkommt, dann eben noch mal vor dem MOVE auf DINT mit BTI in einen INT wandeln. [/EDIT]
Diese dann mit MUL_DI mit deiner Zeitbasis multiplizieren so das am Ende Millisekunden rauskommen.
Mal L#1000 = Zeitbasis Sekunden, mal L#60000 ist Zeitbasis Minuten, etc...
Den DINT dann mit einem weiteren MOVE auf eine Variable vom Typ TIME kopieren.

Danach aus der Standardbibliothek (SimaticManager/Projekt Öffnen/Reiter Bibliotheken/Standard Library/IEC-Function-Blocks) den FC40 "TIM_S5T" in dein Projekt kopieren.

"TIM_S5T" aufrufen, am IN kommt die TIME-Variable dran, an RET_VAL kommt die S5-Time Variable raus. Damit dann auf den S_EVERZ.
Beim FC40 noch den ENO-Ausgang auswerten, bei Wandlungsfehler oder Vorgabe >2h35min... geht dieser auf FALSE.

Besser so als manuelles zusammenbasteln, dann sparen wir uns auch die CPU-Stopps wegen "BCD-Wandlungsfehler" und wie sie noch alle heißen. :cool:

[EDIT] Hab zuvor überlesen das die Vorgabe als BCD daherkommt, klingt irgendwie nach nem Übungsbeispiel dass auf dieses grausige S5T-Gebastel abzielt.[/EDIT]
 
Zuletzt bearbeitet:
Ich vermute mal, daß die Augabenstellung von der beliebten uralten Schulungsaufgabe/Hausaufgabe kommt, wo mit BCD-Schaltern die 3 Ziffern + die Zeitbasis eingegeben werden soll. Eine Prüfung auf zulässige BCD-Ziffern (Tetraden) soll/kann bei dem Schulungsstand (noch) nicht stattfinden. Fehler kommen da noch nicht vor ;)
Fortgeschrittene Schüler bekommen aber schonmal gerne die Zusatzaufgabe, die höchsten zwei Bits wegen der Zeitbasis aus dem EingangsWord auszublenden (obwohl das für das S5T# nicht nötig ist).

Falls doch Interesse an einer BCD-Ziffern-Prüfung besteht, da verweise ich gerne mal auf diesen Programmierwettbewerb: BCD-Prüfung


Hatte bisher leider nur mit den In IN out OUT Parametern zutun sodass ich nicht weiß wie ich mit den temp Variablen umgehen soll. Könntest du mir deinen Weg genauer schildern?
Z.B. so:
- im Bausteinkopf im TEMP-Abschnitt eine Variable "tmpS5Time" mit dem Datentyp "S5Time" anlegen
- ein MOVE von EW2 zu #tmpS5Time (weil MOVE kann zwischen verschiedenen Datentypen kopieren)
- #tmpS5Time an den Eingang TW vom S_EVERZ

Harald
 
Zurück
Oben