Bau einer Achse
Anders als bei der Beckhoff NC wird in der Hydraulik-Bibliothek die Achse von der Applikation selbst gebaut. Das heißt, die Bausteine zum Betrieb einer Achse (Istwert lesen, Sollwerte generieren, Lageregeln, Linearisierung und Ausgabe erzeugen) müssen einzeln aufgerufen werden.
Alle Bausteine arbeiten auf einer gemeinsamen Achsreferenz, welche global anzulegen ist. Gibt es mehr als eine Achse, so sind die Achsreferenzen als Array anzulegen.
Neben der Achsreferenz (AXIS_REF_BkPlcMc) müssen pro Achse die E/A Strukturen ST_TcPlcDeviceInput und ST_TcPlcDeviceOutput deklariert werden. Abhängig vom Anwendungfall kommen weitere optionale Elemente hinzu.
Um Meldungen einsehen zu können sollte ein ST_TcPlcMcLogBuffer deklariert werden. Dieser Puffer wird von allen Achsen gemeinsam benutzt.
Sind in der Applikation neben der reinen Positionserfassung weitere Sensoren wie Druck- oder Kraftmessdosen vorhanden, so muss der E/A-Wert in der Applikation angelegt werden. Die Parametrierung der Skalierung kann im Bereich fCustomerData[]der Achse verwaltet werden. In jeder Achse sind dort 20 kundenspezifische Daten bereitgestellt. Diese Daten werden über die Achse gespeichert, geladen und im PLcMcManager angezeigt. Für die Anzeige im PlcMcManager kann die Beschriftung über die Deklaration der Struktur ST_TcMcAuxDataLabels verändert werden.
Beispiel für die Daten einer Achse
Generelle Einstellungen
Damit das E/A immer unabhängig vom Zeitbedarf des Programms mit konstantem Zeitabstand eingelesen wird, muss in TwinCAT 3 im Programm ein Attribut gesetzt werden.
Unter TwinCAT 2 muss im System Manager unter SPS - Konfiguration das Flag I/O am Task Anfang gesetzt werden.
Anders als bei der NC wird die Hydraulikachse selbst (Sollwertgenerator, Regler usw. ) direkt in der PLC gerechnet. Damit ist zu empfehlen, die Zykluszeit der Task auf <10 ms zu stellen.
Initialisierung
Der PLCopen-Standard legt fest, dass alle Motion-Bausteine der Applikation mit einer Instanz des Typs AXIS_REF_BkPlcMc aufgerufen werden. Einige Achsbestandteile können aus technischen Gründen nicht in einer solchen Instanz enthalten sein, da sie in gesonderten Bereichen (z.B. Prozessabbilder) liegen müssen. Andere Elemente sind optional und werden nur bei Bedarf ergänzt. Um sie mit der Achs-Referenz zu verbinden werden sie einem Initialisierungsbaustein vom Typ MC_AxUtiStandardInit_BkPlcMc übergeben.
Beim erstmaligen Aufruf verknüpft der Baustein die Eingangs- und Ausgangsstrukturen sowie alle optionalen Elemente mit der Achsreferenz. Variablen, die als Adresse übergeben werden müssen, sind mit dem Präfix „p“ gekennzeichnet. Der Baustein sollte weiter zyklisch aufgerufen werden, um die Pointeradressen zu kontrollieren.
Es ist nicht zulässig, eine Instanz von ST_TcPlcDeviceInput, ST_TcPlcDeviceOutput oder ST_TcMcAutoUdent an mehrere Achsen zu binden. Es ist nicht zulässig, mehr als eine Instanz von ST_TcMcLogBuffer mit Achsen zu verbinden. |
Der Baustein lädt die Parameter aus dem übergebenen Dateipfad und übergibt diese an die Achsreferenz. Sämtliche Parameter sind binär in einer Datei Achsname.dat abgespeichert.
Wurde das Laden der Parameter erfolgreich abgeschlossen, wird das Flag bParamsEnable in der Achsreferenz TRUE. Erst jetzt ist die Verwendung noch nicht definierter Parameter ausgeschlossen und es dürfen alle weiteren achsbezogenen Bausteine aufgerufen.
Istwert-Erfassung
Der in der Parameter-Struktur der Achs-Referenz eingestellte Encodertyp legt fest, wie und aus welchen Variablen der Eingangsstruktur der MC_AxRtEncoder_BkPlcMc Baustein den Istwert lesen und in eine Position [mm] und eine Geschwindigkeit [mm/s] umrechnen wird. Dabei wird bei Verwendung von EtherCAT-Komponenten die Verbindung überwacht.
Sollten die Aktualwerte stark verrauscht sein, besteht die Möglichkeit, diese über einen gleitenden Mittelwert (MC_AxUtiSlidingAverage_BkPlcMc) oder ein Pt1-Glied (MC_AxUtiPT1_BkPlcMc) zu filtern. Die Verwendung eigener Filter ist möglich.
Filterbausteine sind nach dem Encoder-Baustein aufzurufen. Ihrem Eingang muss die zu filternde Variable übergeben werden. Das Ergebnis kann auf die entsprechende Variable der Achsreferenz zurück geschrieben werden. Dadurch ist der alte verrauschte Wert durch einen neuen beruhigten Wert ersetzt.
Wird ein stark gefilterter Aktualwert für eine Regelung verwendet kann aufgrund der Filtersprungantwort die Dynamik und die Regelbarkeit beeinträchtigt sein. |
Zum Einlesen von Drücken und Kräften stehen weitere Bausteine zur Verfügung. In Abhängigkeit von der zu erfassenden Messgröße muss der entsprechende Baustein verwendet werden. Anders als bei der Positionsermittlung muss für die Kraft- und Druckermittlung die Mapping-Schnittstelle sowie die Klemmenüberwachung von der Applikation bereitgestellt werden.
Für die Ermittlung der wesentlichen Istwerte einer servoelektrisch-hydraulischen Hybrid-Achse steht mit MC_AxRtHybridAxisActuals_BkPlcMc ein angepasster Baustein zur Verfügung. |
Sollwert-Generierung und Default-Lage-Regler
Wird durch z.B. MC_MoveAbsolute_BkPlcMc eine aktive Bewegung der Achse ausgelöst berechnet der Sollwert-Generator in jedem Zyklus die aktuellen Werte für Soll-Geschwindigkeit und Soll-Position. Dies kann zeit- oder weggesteuert erfolgen. Bei einer zeitgesteuerten Generierung ist eine permanente Lage-Regelung erforderlich, andernfalls wird dies nur im Stillstand benötigt. Es werden mehrere Profil-Varianten unterstützt. Näheres hierzu wird in der Dokumentation des Bausteins bereitgestellt.
Wenn die Achse nicht mit einem Kommando-Puffer ausgerüstet ist wird ein Befehl direkt in den Laufzeitdaten der Achse eingetragen. Andernfalls werden Kommandos gepuffert, einer Wegplanung unterzogen und dann entsprechend den Blending-Regeln wirksam gemacht.
Bei Bedarf kann die Applikation die Sollwert-Generierung übernehmen. Dazu ist ein MC_AxRtSetExtGenValues_BkPlcMc Baustein einzusetzen. Der weiter aufzurufende Bibliotheksbaustein wird bei aktiver externer Generierung in einen passiven Zustand geschaltet und anschließend reaktiviert. Auf diese Weise können applikationsspezifische Getriebe und andere nicht standardisierbare Mechanismen verwirklicht werden.
Der Sollwert-Generator und ein in den meisten Fällen ausreichender Default-Lage-Regler sind im MC_AxRuntime_BkPlcMc Baustein integriert.
Alternativer Lage-Regler
Wenn nach dem Default-Lage-Regler ein anderer Regler aufgerufen wird und fLagCtrlOutput in den Laufzeitdaten der Achsreferenz überschrieben wird kann dadurch ein anderer Lage-Regler wirksam gemacht werden. Dabei kann es sich um einen kundenspezifischen Regler oder einen anderen Regler der Bibliothek wie zum Beispiel den FB MC_AxRtPosPiControllerEx_BkPlcMc handeln.
Bei diesem Bibliotheks-Regler handelt es sich um einen PID Regler mit optionalen Erweiterungen wie Zustandsrückführung und Beschleunigungsvorsteuerung.
Weitere Regler
In vielen Anwendungen mit hydraulischen Achsen werden Druck- oder Kraftregler eingesetzt. Als Beispiel wird hier ein MC_AxCtrlPressure_BkPlcMc Baustein gezeigt.
Im aktiven Zustand überschreibt der Baustein die Ausgabe des Sollwert-Generators. Damit die Reaktion des Reglers wirksam wird muss er vor der Linearisierung aufgerufen werden.
Bei der Aktivierung oder Deaktivierung kann es abhängig von Parameter-Werten zu Sprüngen in den Kontroll-Werten der Achse kommen. |
Abschließende Bearbeitung
An diesem Punkt liegen die Kontroll-Werte der Achse in einer Form vor, die ein lineares Verhalten der Achse und ihrer Komponenten voraussetzt. Dies ist in der Praxis so nur in den seltensten Fällen gegeben. Um dies zu berücksichtigen werden die Kontroll-Werte (Sollwerte, Reglerausgaben, Überdeckungskompensation) zu einem Ausgabewert zusammengefasst und einer Linearisierung unterzogen. Diese Anpassung kann abschnittsweise oder kennlinienbasiert erfolgen.
Abschnittsweise Linearisierung
Für eine einfache Linearisierung stellt die Bibliothek den Baustein MC_AxRtFinish_BkPlcMc bereit.
Die mit der Vorsteuerung gewichtete Sollgeschwindigkeit und die Reglerausgabe werden zur Ausgabegeschwindigkeit addiert.
Eine aktive Überdeckungskompensation wird so gewählt, dass sie zwischen 0 und VCreep linear von Null auf die eingestellte Überdeckungskompensation Ovl gerampt wird. Für den übrigen Bereich ist sie voll wirksam.
Die Richtungsabhängigkeit wird kompensiert. Dazu wird die Ausgabegeschwindigkeit mit fAreaRatio aus den Achsparametern multipliziert, wenn die Geschwindigkeit positiv und fAreaRatio ≥ 1.0 ist. Wenn die Geschwindigkeit negativ und fAreaRatio ≤ 1.0 ist wird sie dividiert.
Die Ausgabe wird durch Addition der gewichteten Sollgeschwindigkeit, der Reglerausgabe, der aktiven Überdeckungskompensation und der Offset-Korrektur gebildet.
Kennlinienbasierte Linearisierung
Für diese höher auflösende Linearisierung stellt die Bibliothek den Baustein MC_AxRtFinishLinear_BkPlcMc bereit.
Sollte die Verwendung der Kennlinie nicht freigegeben oder nicht möglich sein wird ein interner Baustein für die abschnittsweise Linearisierung genutzt. Dies ist der Fall wenn mindestens einer der folgenden Gründe vorliegt:
- Am Enable-Eingang des Bausteins wird FALSE übergeben.
- Es ist keine Instanz vom Typ ST_TcMcAutoIdent mit der Achsreferenz verbunden worden.
- bLinTabAvailable in den Parametern der Achse ist FALSE: Die Kennlinie ist nicht gültig.
Andernfalls werden die mit der Vorsteuerung gewichtete Sollgeschwindigkeit und die Reglerausgabe zur Ausgabegeschwindigkeit addiert. Die zwei dem errechneten Wert am nächsten liegenden Kennlinienpunkte werden ermittelt und der Ausgabewert durch Zwischeninterpolation und Addition der Offset-Korrektur gebildet.
Kennlinien-Vermessung
Der Baustein MC_AxUtiAutoIdent_BkPlcMc unterstützt die Vermessung einer Kennlinie durch einen standardisierten automatischen Ablauf. Die hierfür einzustellenden Parameter sind in der Struktur ST_TcMcAutoIdent hinterlegt. Soll eine Kennlinien-Vermessung und eine kennlinienbasierte Linearisierung genutzt werden ist ein solches Element anzulegen und mit der Achsreferenz zu verbinden.
Ein MC_AxUtiAutoIdent_BkPlcMc Baustein muss nach dem MC_AxRtFinishLinear_BkPlcMc und vor dem MC_AxRtDrive_BkPlcMc Baustein der Achse aufgerufen werden. |
Die ermittelte Kennlinie vereint die Einflüsse einer Reihe von Quellen:
- Nichtlinearitäten des Ventils
- Asymmetrie des Zylinders
- Strömungseffekte bei höheren Geschwindigkeiten
- Mögliche Limitierungen durch eine Pumpe
- Lagebedingte Einwirkungen wie Gravitation
- Einflüsse weiterer Komponenten im Ölstrom
Bei einer servoelektrisch-hydraulischen Hybridachse darf kein MC_AxUtiAutoIdent_BkPlcMc Baustein aktiviert werden. |
Ausgabe-Anpassung
An diesem Punkt liegen die Kontroll-Werte für die Achse als physikalische oder normierte Größen vor. Erst der MC_AxRtDrive_BkPlcMc Baustein ermittelt eine Ausgabe-Größe, die diese Größen in einer Form darstellt, die vom eingesetzten Gerät in die gewünschte Reaktion umgesetzt wird. Die dabei verwendete Methode und ihre Parameter sind in der Parameter-Struktur der Achs-Referenz eingestellt.
Anbindung des PlcMcManagers
In Bearbeitung.
Die Anbindung des PlcMcManagers erfolgt über den ADS-Dienst von TwinCAT. Da dieser nur ein Port pro Applikation erlaubt müssen alle Achsen eine gemeinsame Anbindung nutzen. Mehrere Instanzen dieses Bausteins sind nicht zulässig.
Das gezeigte Beispiel gilt für eine Applikation mit nur einer Achse. Mehrachsige Projekte müssen die Achsreferenzen in einem Array zusammenfassen, dessen Adresse und erster und letzter Index übergeben werden.
Der Aufruf dieses FBs hat unabhängig davon zu erfolgen, ob Achsen ihre Parameter laden können.
Message-Logging
Alle Achsen einer Applikation teilen sich einen Logging Buffer. Um die dort auflaufenden Meldungen in das Event Log des Betriebssystems und falls verfügbar in das Meldungsfenster der Entwicklungsumgebung zu senden ist pro Applikation eine Instanz des Bausteins MC_AxRtLoggerSpool_BkPlcMc anzulegen. Der Aufruf des Bausteins ist unabhängig davon, ob Achsen ihre Parameter laden können.