Hallo,
nachdem ich nun einige Probleme mit dem Funktionsbaustein Actuator_3P umgangen habe (siehe
http://www.oscat.de/community/index.php/topic,374.msg5347.html#msg5347 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 (
http://www.oscat.de/community/index.php/topic,827.msg5103.html#msg5103)
Schöne Grüße!