Programm-Beispiele (ab V3.0)
Aufbau der Applikation
Die Applikation wird weitgehend aus PLCopen Bausteinen aufgebaut. Es steht eine Auswahl an Funktionsbausteinen zur Verfügung, die mit einem durch die PLCopen definierten Interface ausgestattet sind. Nachstehend wird eine Reihe von Beispielen beschrieben, die eine gute Grundlage bei der Projekterstellung darstellen.
Jedes Beispiel beinhaltet die Projektdatei, die benötigten Achsparameterdateien und eine Scope-Konfiguration. Die Achsparameterdateien müssen in einem Ordner auf dem Zielsystem hinterlegt werden. Der Dateipfad muss in der globalen Konstanten „cnst_ParamFilePath“ der Projektdatei angepasst werden.
Beispiel 1: Einzelachse
Für TC2: TcPlcMcEx_1.zip
Für TC3: TC3_TcPlcMcEx_1.zip
Der MC_AxUtiStandardInit_BkPlcMc lädt die Parameter und überwacht die Pointeradressen. Nachdem die Daten erfolgreich geladen wurden, wird „bParamsEnable“ TRUE und die eigentlichen Achsbausteine werden aufgerufen.
Der MC_AxStandardBody_BkPlcMc ruft intern die erforderlichen Bausteine wie MC_AxRtEncoder_BkPlcMc, MC_AxRuntime_BkPlcMc, MC_AxRtFinish_BkPlcMc und MC_AxRtDrive_BkPlcMc auf. Wird jedoch ein Filter, ein Druckregler, eine Kennlinienvermessung oder ähnliches benötigt, müssen statt dem MC_AxStandardBody_BkPlcMc die Einzelkomponenten aufgerufen werden.
Durch die Verwendung eines MC_AxAdsCommServer_BkPlcMc kann die Achse über den PlcMcManager kommandiert werden. Der Baustein MC_AxParamDelayedSave_BkPlcMc speichert nach einer vorgegebenen Zeit (hier 10s) Änderungen, die vom PlcMcManager gemacht wurden.
Über den PlcMcManager kann man sich auf dem Zielsystem einloggen und die Achse aktiv verfahren.
Beispiel 2: Mehrachs-Applikation
Für TC2: TcPlcMcEx_2.zip
Für TC3: TC3_TcPlcMcEx_2.zip
Das Beispiel zeigt die Arbeit mit Arrays von Bausteinen und Strukturen. Der Funktionsumfang entspricht Beispiel 1.
Beispiel 3: Druckgeregeltes Abbremsen
Für TC2: TcPlcMcEx_3.zip
Für TC3: TC3_TcPlcMcEx_3.zip
Das Beispiel zeigt, wie der Druckregler MC_AxCtrlSlowDownOnPressure_BkPlcMc den Vorschub einer Achse abhängig vom Druck drosselt. Der Regler wird in diesem Beispiel aktiv, wenn der Istdruck größer als der Solldruck ist. Da das Ergebnis durch Applikationscode in „fLagCtrlOutput“ übergeben wird muss der Regler zwingend nach dem Sollwertgenerator aufgerufen werden. Andernfalls würde fLagCtrlOutput vom Lageregler in MC_AxRuntime_BkPlcMc überschieben werden.
Wenn im PlcMcManager ein Kommando mit einer Geschwindigkeit von zum Beispiel 100 mm/s und einer Position von zum Beispiel 500 mm gestartet wird kann im Scope verfolgt werden, dass bei steigender Position der Druck kontinuierlich ansteigt. Bei einer Position von 400 mm hat das System den Solldruck von 50 Bar erreicht und bleibt stehen.
Beispiel 5: Move-Bausteine
Für TC2: TcPlcMcEx_5.zip
Für TC3: TC3_TcPlcMcEx_5.zip
In diesem Beispiel werden verschiedene Funktionsblöcke für die Bewegungssteuerung eingesetzt. Wird die Variable bStart TRUE startet die Statemachine die Achse mit MC_MoveAbsolute_BkPlcMc zur Position 500 mm. Wenn die Achse im Ziel angekommen ist und die Zielfensterbedingungen erfüllt hat (In PosRang, in TargetRange für TargetFilterTime und in BrakeDistance), startet automatisch ein MC_MoveVelocity_BkPlcMc mit einer Geschwindigkeit von 400 mm/s. Diese Geschwindigkeit bleibt 5 s aktiv und wird dann durch ein MC_Stop_BkPlcMc beendet, so dass die Achse zum Stillstand kommt. Anschließend folgt eine relative Bewegung von 100 mm mit MC_MoveRelative_BkPlcMc um danach auf Position 0.0 mm zu fahren. In den verschiedenen Bewegungsprofilen werden unterschiedliche Beschleunigungs- und Verzögerungsrampen verwendet.
Beispiel 6: Zeitrampen-Generator
Für TC2: TcPlcMcEx_6.zip
Für TC3: TC3_TcPlcMcEx_6.zip
Eine Achse ohne Encoder kann nicht über den Standard Sollwertgenerator geführt werden. Für diese Art von Achsen steht mit iTcMc_ProfileTimeRamp ein alternativer Sollwertgenerator zur Verfügung. Wird im Beispiel in den Globalen Variablen die Variable „bUp“ bzw. „bDown“ TRUE, so fährt die Achse mit der vorgegebenen Geschwindigkeit (hier 500 mm/s) bis zum ersten Endschalter (DigCamP – für Positiv/ DigCamM – für Negativ) und bremst dann auf die entsprechende Schleichgeschwindigkeit herunter. Nach Erreichen von DigCamPP – für Positiv/ DigCamMM – für negativ wird die Ausgabe abgelöscht.
Beispiel 7: Override und Funktionsgenerator
Für TC2: TcPlcMcEx_7.zip
Für TC3: TC3_TcPlcMcEx_7.zip
Demonstration des Bausteins MC_SetOverride_BkPlcMc. Über globale Variablen (bOverrideSinusoidal, fOverrideCycleTime, fOverrideMinValue, fOverrideMaxValue) kann der Verlauf, die Periodendauer und die Begrenzungen eines Signalerzeugers festgelegt werden, der den Override verändert. Für die Erzeugung des Overrides werden MC_FunctionGeneratorFD_BkPlcMc, MC_FunctionGeneratorTB_BkPlcMc und MC_FunctionGeneratorSetFrq_BkPlcMc Bausteine eingesetzt.
Beispiel 8: Digitales Nockenschaltwerk
Für TC2: TcPlcMcEx_8.zip
Für TC3: TC3_TcPlcMcEx_8.zip
Das Beispiel zeigt, wie man durch eine Achse und MC_DigitalCamSwitch_BkPlcMc digitale Nocken steuern kann. Im Beispiel sind zwei Nocken in TRACK_REF_BkPlcMc aktiviert (Maximal 32). Die erste Nocke wird zu drei verschiedenen Bedingungen aktiv geschaltet:
1. Von Position -1000 mm bis 1000 mm und positive Richtung
2. Von Position 2000 mm bis 3000 mm und positive Richtung
3. Von Position 3000 mm bis 2500 mm und negative Richtung
Die Zweite Nocke hat nur eine Bedingung:
1. Ab Position 3000 mm für eine Zeit von 1.35 s in positiver und negativer Richtung aktiv zu sein.
Neben den Schaltbedingungen kann eine Nocke eine Einschalt- sowie Ausschaltverzögerung mitbringen. Für Nocke 1 ist die Einschaltverzögerung 0.125 s und die Ausschaltverzögerung 0.250 s eingestellt. Die Bedingungen für das Schalten einer Nocke werden in CAMSWITCH_REF_BkPlcMc festgelegt. Der Ausgang einer Nocke ist in OUTPUT_REF_BkPlcMc angegeben.
Die Achse ist über den PlcMcManger zu kommandieren (Position größer 3000 mm).
Beispiel 9: Joystick
Für TC2: TcPlcMcEx_9.zip
Für TC3: TC3_TcPlcMcEx_9.zip
Das Beispiel demonstriert die Verwendung des Bausteins MC_MoveJoySticked_BkPlcMc. Bei diesem Baustein wird die Achse in eine endlose Bewegung mit einer durch JoyStick vorgegebenen Geschwindigkeit versetzt. Joystick ist ein normierter Wert zwischen +/-1.0, welcher multipliziert mit der kommandierten Geschwindigkeit die Sollgeschwindigkeit ergibt.
Beispiel 10: Identifikation und Linearisierung
Für TC2: TcPlcMcEx_10.zip
Für TC3: TC3_TcPlcMcEx_10.zip
Das Beispiel beschreibt die automatische Kennlinienvermessung mit MC_AxUtiAutoIdent_BkPlcMc und die Verwendung der Kennlinie mit MC_AxRtFinishLinear_BkPlcMc. Die Einstellungen für die automatische Kennlinienvermessung sind im PlcMcManger unter dem Reiter LinDef zugänglich und finden sich in der Struktur ST_TcMcAutoIdent wieder.
Im Beispiel kann über die Globale Variable nTest zwischen drei verschiedenen Ventilsimulationen gewählt werden. Entsprechend der ausgewählten Simulation wird eine passende .dat Datei geladen. In der .dat-Datei sind die Parameter für die Kennlinienvermessung entsprechend voreingestellt. Achtung: Wird nTest während die PLC läuft umgeschaltet, muss der PlcMcManager neu verbunden werden. Folgende Szenarien können über nTest ausgewählt werden:
- Vermisst lediglich die Überdeckung und das Geschwindigkeitsverhältnis
- Vermisst eine Nullschnitt-Kennlinie mit Knick
- Vermisst eine Kennlinie mit Überdeckung
Durch die Variable „bStartAuto“ kann MC_AxUtiAutoIdent_BkPlcMc gestartet werden. Während der Vermessung gibt der Baustein ein Busy zurück und auf dem Reiter LinTab wird die bereits vermessene Kennlinie angezeigt.
War die Vermessung erfolgreich, so kann die Kennlinie durch den Baustein MC_AxRtFinishLinear_BkPlcMc verwendet werden. Die Kennlinie wird automatisch in der .dat-Datei der Achse mitgespeichert und mitgeladen. Soll die Kennlinie ASCII lesbar exportiert werden so steht hierfür der Baustein MC_AxTableToAsciFile_BkPlcMc zur Verfügung.
Beispiel 11: Stop-Bausteine
Für TC2: TcPlcMcEx_11.zip
Für TC3: TC3_TcPlcMcEx_11.zip
Hier werden die verschiedenen Möglichkeiten gegenübergestellt, eine Achse anzuhalten. Das Beispiel kann gestartet werden, in dem die Variable bStart TRUE gesetzt wird.
MC_Stop_BkPlcMc: Führt ein Stopp mit vorgegeben Verzögerungsparametern durch. Die Achse meldet sich fertig, wenn das berechnete Ziel inklusive Zieltoleranzen (in PosRange, In Target Rage für Target Filter time und in BrakeDistance) erreicht ist.
MC_EmergencyStop_BkPlcMc: Bremst mit vorgegebener Rampe bis zum Stillstand.
MC_ImediateStop_BkPlcMc: Setzt den Sollwert ohne Rampe auf Null.
Beispiel 12: Buffering und Blending
Für TC2: TcPlcMcEx_12.zip
Für TC3: TC3_TcPlcMcEx_12.zip
Das grundlegende Vorgehen bei gepufferten Bewegungen ist in FAQ 20 erklärt. Um das Beispiel zu starten, muss die Variable bStart TRUE werden. Im Scope View ist zu erkennen, dass es sich hier um 6 Bewegungen handelt, die aneinandergekoppelt abgearbeitet werden.
Beispiel 13: Filter
Für TC2: TcPlcMcEx_13.zip
Für TC3: TC3_TcPlcMcEx_13.zip
Das Beispiel zeigt das Verhalten mehrerer Filtertypen und worauf beim Einsatz von Filtern zu achten ist.
Schaltet man im Scope View alle Signale mit dem Namen „Noisy“ aus, so ist das Originalsignal und dazu verschoben die gefilterten Signale zu erkennen. Dabei bleibt die Form des Signals erhalten. Je stärker ein Signal gefiltert wird, desto stärker ist jedoch die Phasenverschiebung zwischen originalem und gefiltertem Signal. Diese Phasenverschiebung hat direkten Einfluss auf die Regelbarkeit von Achsen und anderen Strecken.
Werden die verrauschten Signale im Scope sichtbar gemacht ist zu erkennen, dass der Rauschanteil im Signal sowohl durch ein MC_AxUtiSlidingAverage_BkPlcMc als auch nach einem MC_AxUtiPT1_BkPlcMc wesentlich geringer ist.
Beispiel 14: Funktionsgenerator
Für TC2: TcPlcMcEx_14.zip
Für TC3: TC3_TcPlcMcEx_14.zip
In einigen Anwendungen wird ein Sollwertgenerator benötigt, der Sinus-, Trapez- oder Sägezahn-Signale erzeugt. Die mit MC_FunctionGeneratorTB_BkPlcMc und MC_FunctionGeneratorFD_BkPlcMc erzeugten Signale können zum Beispiel über MC_AxRtSetExtGenValues_BkPlcMc an eine Achse übergeben werden.
Beispiel 15: Druckregler
Für TC2: TcPlcMcEx_15.zip
Für TC3: TC3_TcPlcMcEx_15.zip
Das Beispiel zeigt das Einlesen und Skalieren eines Druckaktualwerts in der Applikation. Eine Druckregelung für eine Achse mit MC_AxCtrlPressure_BkPlcMc wird demonstriert.
Die Applikation fährt zunächst über eine schnelle Bewegung eine Position an, ab der ein Druckanstieg erwartet wird. Die Bewegung wird mit einer geringeren Geschwindigkeit fortgesetzt und nach Erreichen des Solldruckes der Regler aktiviert.
Beispiel 16: Verteilte Achs-Referenzen
Für TC2: TcPlcMcEx_16.zip
Für TC3: TC3_TcPlcMcEx_16.zip
Das Beispiel zeigt die Verwendung einer Liste von POINTER TO Axis_Ref_BkPlcMc. Die Verwendung von MC_AxAdsPtrArrCommServer_BkPlcMc an Stelle von MC_AxAdsCommServer_BkPlcMc ermöglicht es, die Achs-Referenzen zu verteilen.
Die Liste muss in jedem Zyklus aktualisiert werden. Diese Aktualisierung muss vor dem Aufruf des MC_AxAdsPtrArrCommServer_BkPlcMc durchgeführt sein.
Beispiel 17: Externe Sollwert-Generierung
Für TC2: TcPlcMcEx_17.zip
Für TC3: TC3_TcPlcMcEx_17.zip
Das einfache Beispiel zeigt die grundsätzliche Verwendung eines Bausteins vom Typ MC_AxRtSetGenValues.
Beispiel 18: PlcMcManager sperren
Für TC2: TcPlcMcEx_18.zip
Für TC3: TC3_TcPlcMcEx_18.zip
Es kann notwendig sein, Kommandos des PlcMcManagers wie Jog, MoveAbs oder Stopp zu sperren. Dies kann in der PLC mit MC_AxRtCommandsLocked_BkPlcMc erfolgen.
Beispiel 19: Externe Sollwert-Generierung
Für TC2: TcPlcMcEx_19.zip
Für TC3: TC3_TcPlcMcEx_19.zip
Hier werden mit einem umfangreicheren Projekt die Möglichkeiten der externen Sollwert-Generierung demonstriert.
Beispiel 100: Elektronisches Getriebe
Für TC2: TcPlcMcEx_100.zip
Für TC3: TC3_TcPlcMcEx_100.zip
Das Beispiel zeigt, wie über eine Masterachse (Achse 3) zwei Slave Achsen durch ein elektronisches Getriebe verkoppelt werden können. Das Erzeugen und Lösen der Kopplung geschieht durch MC_GearIn_BkPlcMc und MC_GearOut_BkPlcMc.
Es muss darauf geachtet werden, dass die Dynamikparameter vom Master und Slave zueinander passen, da sonst der Slave nicht dem Master folgen kann.
Zur Herstellung der Kopplung müssen Master und Slave im Ruhezustand sein. Das Lösen der Kopplung kann in der Bewegung passieren. Dabei fährt die Masterachse bis zum Ziel und die Slave Achse wir beim Lösen der Kopplung abgestoppt.
Beispiel 101: Elektronische Kurvenscheibe
Für TC2: TcPlcMcEx_101.zip
Für TC3: TC3_TcPlcMcEx_101.zip
Die Achse 1 und 2 wird über eine Kurvenscheibe an die virtuelle Achse 3 gekoppelt. Die Kopplungsparameter für Achse 1 sind in diesem Beispiel in der Textdatei TcPlcMcEx_101_2.txt abgelegt. Für Achse 2 werden die Kopplungsparameter im Baustein „FB_CalculateCamTable2“ berechnet. Über MC_CamTableSelect_BkPlcMc werden die Master- und Slave-Achse und die Kurvenscheibentabelle festgelegt. Im Baustein MC_CamIn_BkPlcMc wird die Kopplung erzeugt und die Sollwerte für den Slave berechnet. Wird die Masterachse über den PlcMcManager verfahren, folgt die Slave Achse nach der entsprechenden Kurvenscheibe. Mit MC_CamOut_BkPlcMc wird die Kopplung aufgehoben.
Beispiel 103: Fliegende Getriebekopplung
Für TC2: TcPlcMcEx_103.zip
Für TC3: TC3_TcPlcMcEx_103.zip
Demonstration einer fliegend aktivierten Getriebekopplung mit den Bausteinen MC_GearInPos_BkPlcMc und MC_GearOut_BkPlcMc.
Beispiel 104: Gleichlaufregelung
Für TC2: TcPlcMcEx_104.zip
Für TC3: TC3_TcPlcMcEx_104.zip
Demonstration einer Gleichlaufregelung für ein Zweiachs-Gantry unter Verwendung eines virtuellen Masters. Eine Gleichlaufregelung findet immer dort Anwendung, wo zwei oder mehrere Achsen balanciert geregelt werden müssen. Dabei wird eine virtuelle Masterachse für die Sollwertgenerierung verwendet. Die Sollwerte werden auf die Slaveachsen verteilt, welche ihren lokalen Lageregler addieren. Die aktuelle Position der virtuellen Masterachse wird zum Beispiel als Mittelwert über die Slaveachsen gebildet.
Für eine reibungslose Inbetriebnahme ist unbedingt darauf zu achten, dass bestimmte Parameter gleich gehalten werden. Dies gilt in einigen Fällen innerhalb der Gruppe der Slaveachsen, zum Teil auch für die Masterachse. In „FB_Parameter“ wird dies durch zyklisches Kopieren erzwungen.
Beispiel 105: Linearisierung für Gleichlaufregelung
Für TC2: TcPlcMcEx_105.zip
Für TC3: TC3_TcPlcMcEx_105.zip
Dieses Beispiel demonstriert die Kennlinienermittlung für ein Zweiachs-Gantry (siehe auch Beispiel 104) mit den Bausteinen MC_AxUtiAutoIdent_BkPlcMc und MC_AxUtiAutoIdentSlave_BkPlcMc.
Beispiel 106: Fliegende Kopplung
Für TC2: TcPlcMc_106.zip
Für TC3: TC3_TcPlcMcEx_106.zip
Hier werden einige der Möglichkeiten dargestellt, die ein fliegendes Ein- und Auskoppeln eines elektronischen Getriebes bietet.