Die Variable "Zeit_umgewandelt" hat vor dem Laden keinen Wert nach dem Laden auch nicht! Erst wenn ich über WinCC flex diese Variable in den dementsprechenden DB schreibe hat "Zeit_umgewandelt" einen Wert.
Code:
// Berechnung Huebe und S5TIME Umwandlung
Zeit_Ergebniss := (1000/Huebe_pro_Min)-10;
Zeit_umgewandelt := TIM_S5TI(IN := DINT_TO_TIME (INT_TO_DINT(REAL_TO_INT(ROUND (INT_TO_REAL(Zeit_Ergebniss))))));
Nach 5 Tagen gibt's endlich den Programmcode ...
Sorry, jetzt muß ich Dich erstmal runterputzen ... doch weil grad' so schönes Wetter ist, bekommst Du die milde Variante ohne finale Exekution ...
Nur eine Frage: Hast Du diesen Programmcode selber geschrieben?
Wirfst Du eigentlich auch mal einen Blick in Dein problematisches Programm wenn wir Dir hier Fragen dazu stellen???
Gehe zurück "auf Start" und lese das Thema nochmal ...
[---------- ich habe fertig ----------]
Egal wer wann in die Variable "Zeit_umgewandelt" schreiben würde - das hätte in Deinem Programm überhaupt keinen Effekt, weil es in jedem Zyklus den Wert in der Variable "Zeit_umgewandelt" überschreibt!
Wie stellst Du sicher, daß der Wert in der Instanz-Variablen "Huebe_pro_Min" niemals 0 ist bzw. ganz genau: nur im zulässigen Bereich 1 bis 50 ist?
Schreibt Dein WinCCflex direkt in die Instanz-Variable "Huebe_pro_Min" oder hast Du noch einen anderen Programmteil, der diese Variable von außen beschreibt?
Wie kann "Huebe_pro_Min" eigentlich seinen Wert verlieren, nachdem ihm einmal ein Wert zugewiesen wurde?
Mit "Laden des Programms" meinst Du wohl anscheinend nicht nur den FB20 sondern Du lädst auch den Instanz-DB DB200 (oder das komplette Programm) - das würde nämlich erklären, wieso in "Huebe_pro_Min" nach dem Laden plötzlich wieder ein unzulässiger Wert ist.
- sorge für einen vernünftigen Aktualwert (= Anfangswert) im Offline-InstanzDB, d.h. initialisiere diese Variable in der Deklaration
- prüfe VOR der Verwendung von "Huebe_pro_Min" ob der Wert im Bereich 1 bis 50 ist. Wenn nicht dann schreibe einen geeigneten Wert hinein
- willst Du das Laufen des Timers von weiteren Bedingungen abhängig machen, dann müsstest Du die Zuweisung an "Zeit_Merker" VOR dem Timeraufruf machen. Bei nur der negierten Zuweisung vom S-PEXT-Ausgang ("Zeit_Merker_Inv") ist es günstiger NACH dem Timeraufruf.
Code:
VAR
...
Huebe_pro_Min : INT [COLOR="#0000FF"]:= 1[/COLOR];
END_VAR
...
// Berechnung Huebe und S5TIME Umwandlung
[COLOR="#0000FF"] IF Huebe_pro_Min < 1 OR Huebe_pro_Min > 50
THEN Huebe_pro_Min := 1;
END_IF;[/COLOR]
Zeit_Ergebniss := (1000/Huebe_pro_Min)-10;
Zeit_umgewandelt := TIM_S5TI(IN := DINT_TO_TIME (INT_TO_DINT(REAL_TO_INT(ROUND (INT_TO_REAL(Zeit_Ergebniss))))));
//Zeitbaustein und Taktsignalerzeugung
Zeit1_1:= S_PEXT(T_NO:=Zeitbaustein_Nocke, S:=Zeit_Merker, TV:=Zeit_umgewandelt, Q=>Zeit_Merker_Inv);
[COLOR="#0000FF"]Zeit_Merker := NOT Zeit_Merker_Inv;[/COLOR]
//Signalerzeugung / Freigabe
...
PS:
MW105 ist nicht "schön" und nicht üblich
Benutzt Du auch irgendwo ein MW104 oder MW106? (MW105 überschneidet sich mit MW104 und MW106)
Harald