Hallo,
nachdem ich nun einige Probleme mit dem Funktionsbaustein Actuator_3P umgangen habe (siehe page fault Problem Lösung? funktionierte er immer noch nicht zufriedenstellend.
Nun habe ich den Code noch mal analysiert und bin der Meinung das ich den Fehler gefunden habe:
Das Problem war, dass die Mischer, welche ich über diesen Baustein ansteuere unter gewissen Umständen ständig Auf und Zu fahren. Dies passierte immer wenn die Mischer eine Position ungleich 0% oder 100% anfahren sollten und ich eine MAX_RUNTIME angegeben habe, die viel Größe war als die tatsächliche Laufzeit (5 Minuten zu 1,5 Minuten). Dort passierte es dann wenn der Mischer z.B. auf 50% Auffahren sollte die interne Positionsberechnung (Variable POS) dem wirklichen Wert weit hinterherhing (die Geschwindigkeit passte nicht) und der Mischer somit schon den Endlagenschalter erreichte ehe er intern bei 50% angekommen war. Durch den Endlagenschalter syncronisierte sich der Actuator_3P auf 100% und wollte somit auf 50% zufahren. Mit den gleichen Folgen…
Meiner Ansicht nach wurde im Quellcode vergessen die Startwerte (welche mit MAX_RUNTIME angenommen werden) der Anstiegs- (Variable KR) und Abfallgeschwingikeiten (Variable KF) von der Funktion rout (Originalname FT_RMP) mit den neuen vom Actuator_3P gemessenen Laufzeiten runtime_1 und runtime_2 zu überschreiben.
Daher müsste meiner Meinung nach folgende Zeile noch eingefügt werden (bei state 4):
4: (* measure runtime_1 *)
...
rout(KR := 1000 / TIME_TO_REAL(runtime_1), KF := 1000 / TIME_TO_REAL(runtime_1) );
...
So jedenfalls sind bislang keine Fehler mehr aufgetaucht!
Liege ich mit meinen Beobachtungen richtig? Sind diese Infos noch wichtig, da der Funktionsbaustein ja neu geschrieben werden soll (Actuator 3P bleibt stehen!!)
Schöne Grüße!