Die Anforderungen sind durch eine analoge PID-Reglerkarte (Festo) vorgegeben, an dessen Geschwindigkeit und Genauigkeit wir uns orientieren sollen. Unsere vorgegebene Aufgabe ist es, diese bisher analoge Regelung nun mit Hilfe einer SPS zu realisieren.
Von der Karte gibt es doch bestimmt ein Blockschaltbild oder einen Schaltplan (✿◠‿◠)
Habt ihr euch schon angeschaut ob das was der Analog-Regler intern veranstaltet passend zu dem Blockschaltbild des PID_Compact? (findest du in der TIA-Hilfe des Reglers)
Ist das analoge evtl. nen unterlagerter Regelkreis, wie bei einem Servoantrieb?
Also ein Regelkreis, der sich auf die Position bezieht & ein zweiter Regelkreis "darunter", der aufgrund der Positionsdifferenz die Geschwindigkeit/den Ventil-Öffnungswinkel regelt.
Der Funktionsgenerator gibt eine Rechteckfunktion in Spannung aus. Dieses analoge Signal wird von der SPS ja direkt in ein digitales Signal umgewandelt und in Inkrementen angegeben (16 bit / 0-32768 bzw. der Nennbereich ist 0-27648). Über den Norm_X wandeln wir die Inkremente in eine Gleitpunktzahl und über Scale_X skalieren wir diese Gleitpunktzahl in Prozent, da der PID-Compact den Sollwert in Prozent benötigt
Du kannst dem Regler übrigens auch so ziemlich jede andere physische Größe übergeben.
Der Mathematik des PID-Algorithmus ist die Einheit ziemlich egal.
Das sollte für deine Problemstellung zwar irrelevant sein, macht es aber einfacher, wenn man %-Werte nicht erst in konkrete Positionen umrechnen muss.
Kann hier eventuell unser Fehler liegen, falls diese Umwandlung zu lange dauert? Gäbe es Alternativen?
Die Zykluszeiten der Ein- und Ausgangskarte haben wir uns aus den Datenblättern erschlossen.
Zykluszeit der Eingangskarte sollte ca. bei 18ms liegen (2 aktivierte Kanäle mit Spannungsmessung, keine Offsetkalibrierung, keine Drahtbruchüberwachung)
Überprüf mal die Konfiguration des Analogeingangs.
Die Wandlungszeit des Analogwerts findest du im Gerätehandbuch, genauso wie viele Wandlungszyklen mit der Glättung gemeint sind.
Der Screenshot ist von einer anderen AI-Karte als deiner, Prinzip ist aber identisch.
Ne nicht ganz so schnelle Karte + Glättung kann dir die tatsächliche Zeit bis dein physischer Eingangswert auch tatsächlich im Peripheriewert ankommt ganz entspannt in den Sekunden-Bereich drücken.
Hier haben wir noch einen Screenshot vom Oszilloskop.
Grün ist der Funktionsgenerator mit dem Rechtecksignal (Sollwert)
Blau ist die Wegemessung der Achse (Istwert)
Rosa ist die Ansteuerung des Proportionalventils (Stellgröße)
Mach mal paralell dazu einen Trace von den Signalen.
Dann siehst du wie sich die Werte aus Sicht des SPS-Programms verhalten.
Hilft evtl beim Einschätzen ob das Verhalten vom SPS-Programm oder der Hardware kommt.
Als Aufzeichnungspunkt den Interrupt-OB des Reglers nehmen!
Der Zeittakt des Weckalarms ist zur Zeit bei 1000 Mikrosekunden.
Die gemessene Zykluszeit der CPU (über Online&Diagnose) liegt bei 1-7ms.
Damit ist das "normale", zyklische Programm gemeint.
Der Interrupt-OB in dem du die Regler aufrufst, macht immer die 1000 Mikrosekunden.
Wir meinten damit, dass das Ventil nur alle 250ms angesteuert wird. Dies konnten wir mit Hilfe des Oszilloskop feststellen. (Siehe Bild im Anhang)
Das der Ausgabewert vom PID_Compact nur alle 250ms aktualisiert wird riecht tatsächlich etwas nach der Abtastzeit des PID-Algorithmus, wie
@DOD666 bereits erwähnt hat.
Beschreibung zu diesem Parameter Siehe TIA-Hilfe (F1 ist dein Freund).
Kannst du mal deine PID-Parameter posten?
Oder am besten gleich die Bausteinquelle des PID_Compact.
Rechtsklich auf das Technologieobjekt => Quelle aus Baustein generieren.
Wird dann als .db-Datei gespeichert, kannst du aber als normales Textfile öffnen.
Der diskret arbeitende PID-Regler wird durch endliche Zyklus- und Wandlungszeiten mehr oder weniger ausgebremst.
Prinzipiell korrekt, allerdings habe ich in der Praxis noch keine Positionieranwendung gesehen, die betreffend Zykluszeit in dieses Limit gerannt wäre.
Und für den Rest gibts FPGA-Module.
Dann reden wir aber eher über die Regelung von Lasertechnik, Halbleiterproduktion, etc.
Im Übrigen ist es auch wenig sinnvoll, den Regler in kürzeren Zyklen auf zu rufen, als die Aktualisierung der E/As, bzw. der gesamten Regelstrecke erfolgt.
Zustimmung.
Wich würde die Ausgangskarte dann auch mit dem Interrupt OB verschalten und nicht auf Automatic belassen
Auch ein Punkt.
Habt ihr berücksichtigt, dass die Peripherie-Daten/Prozessabbild nur bei jedem Aufruf des zugehörigen OBs aktualisiert werden?
Gilt für Ein- und Ausgänge.
Bei 1-7ms Zykluszeit sollte das zwar keine 250ms Verzögerung geben, aber im Endeffekt ist der 1ms Interrupt worst case bei 7ms Zykluszeit dann 7 Mal durchgelaufen, bevor der Regler überhaupt neue Daten bekommen hat.