Synchronisierung von Achsen an verschiedenen PCs ("verteilte Achsen")
(Beispiel und Kurzanleitung)
Diese Kurzanleitung beschreibt die Synchronisierung von NC-Achsen an Empfänger-PCs auf eine an einem sendendem PC angeschlossene Achse. Die Daten der "Masterachse" werden zyklisch via Netzwerkvariablen an die Empfänger übertragen. Aufgrund von Gangunterschieden der Echtzeituhren kommt es hierbei zu Schwebungseffekten. Diese führen auf der Empfängerseite zum doppelten Lesen oder zum Verpassen einzelner Achsinformationen. Bei direktem Betrieb der Empfängerachsen mit den Informationen führen die Sprünge in der Position bzw. Geschwindigkeit zu einem unruhigen Betriebsverhalten. Abbildung 1 zeigt (leicht versetzt in y) die Soll- und die Istgeschwindigkeit einer im Positionsinterface direkt mit den empfangenen Werten betriebenen NC-Achse. Die Dauer und Häufigkeit der Schwebungseffekte sind abhängig vom Gangunterschied der verwendeten Systeme.
Zur Minimierung des Schwebungseffektes auf der Empfängerseite kommt im Folgenden der SPS-Funktionsbaustein FB_AxisSync zum Einsatz. Dieser verwendet intern die Funktionsbausteine FB_TimeSync und FB_AxisExtrapolateValues.
Der Baustein FB_TimeSync bestimmt zunächst den zeitlichen Abstand der Schwebungseffekte. Anschließend wird eine Korrekturzeit berechnet, mit der die empfangenen Informationen in die Zukunft extrapoliert bzw. in die Vergangenheit zurück gerechnet werden, um so eine äquidistante korrigierte Information ohne Schwebungseffekte zu erhalten. Die durch die Schwebung entstehenden Sprünge in den kinematischen Größen der Achse werden über den kompletten Zeitraum zwischen zwei Schwebungen durch kleine Änderungen korrigiert.
Für die Extrapolation der Sollwerte stehen zwei unterschiedlich detaillierte Verfahren zur Verfügung. Im ersten Fall wird nur die Sollgeschwindigkeit verwendet, um die Sollposition zu extrapolieren:
AxisOut.fPosSoll:=AxisIn.fPosSoll + AxisIn.fVeloSoll * fTimeCorrection;
AxisOut.fVeloSoll:=AxisIn.fVeloSoll;
Darüber hinaus besteht die Möglichkeit, auch die Sollbeschleunigung zur Extrapolation von Sollposition und Sollgeschwindigkeit zu verwenden:
AxisOut.fPosSoll:=AxisIn.fPosSoll + AxisIn.fVeloSoll*fTimeCorrection+ 0.5 * AxisIn.fAccSoll *fTimeCorrection^2;
AxisOut.fVeloSoll:=AxisIn.fVeloSoll + AxisIn.fAccSoll *fTimeCorrection;
Standardmäßig wird die zweite Methode, d.h. die Extrapolation unter Berücksichtigung der Beschleunigung, verwendet. Steht keine ausreichend glatte Beschleunigung zur Verfügung, muss gemäß den Ausführungen bei FB_AxisExtrapolateValues die Verwendung der Beschleunigung deaktiviert werden.
Die korrigierten Achsinformationen werden als NCTOPLC_AXLESTRUCT zur Verfügung gestellt.
Beispiel
Das Beispiel tcremotesync_sample.zip besteht aus den folgenden Dateien:
sample_axissync_master.tsm
Systemmanager-Setup des sendenden PCs. Eine Achse wird simuliert ("MASTER") und ihre Informationen als Netzwerkvariabeln via RT-Ethernet verschickt.
sample_axissync_slave.tsm
Systemmanager-Setup des Empfängers. Die Information des Senders werden vom RT-Ethernet-Device empfangen und mit den Variablen des SPS-Projekts verknüpft. Eine simulierte Achse ("corrected master") wird zur externen Sollwertgenerierung mit den SPS-Eingängen ("Nc2PlcAxis") und Ausgängen ("Plc2NcAxis") verknüpft. Die korrigierten Masterinformation stehen als SPS-Ausgang ("MAIN.MasterNcToPlcFeedback") zur Verfügung.
sample_axissync.pro
SPS Projekt für den Empfänger. In MAIN wird FB_SyncAxis aufgerufen. Von besonderer Bedeutung ist der Eingang iCycleIndex, da dieser zyklisch aktualisierte Index Grundlage der gesamten Steuerung ist. Die originalen Master-Achsinformationen werden durch den Parameter AxisIn übergeben, die modifizierten Werte stehen als SyncAxis.AxisOut zur Verfügung. Ebenfalls in dem Projekt implementiert ist eine rudimentäre Statemachine für die Steuerung der NC-Achse.
sample_axissync.scp
ScopeView Vorlage.