FB_AxisSync

Dieser Funktionsbaustein dient zur Synchronisierung von NC-Achsen über ein Netzwerk ("verteilte Achsen") und zur Vermeidung der dabei auftretenden Schwebungseffekte. Zurückgegriffen wird dazu intern auf die auch einzeln zu verwendenden Funktionsbausteine FB_TimeSync und FB_ExtrapolateAxisValues.

Allgemeines

Bei der Synchronisierung von NC-Achsen über ein Netzwerk werden typischerweise die Informationen einer Achse (Sender) als Netzwerkvariablen zyklisch an andere Achsen (Empfänger) verteilt. Bei dem direkten Betrieb der Empfänger mit den übertragenen Informationen werden Schwebungseffekte sichtbar, hervorgerufen durch kleine Gangunterschiede der beteiligten Echtzeituhren. Die Auswirkungen der Schwebung zeigen sich als zyklisch wiederkehrende Störungen des Betriebs der Empfängerachsen, da je nach Gangunterschied Informationen doppelt ausgewertet oder übersprungen werden. Die Häufigkeit und die Dauer der Störungen sind dabei abhängig von der Größe des Gangunterschieds und dem Jitter der einzelnen Echtzeituhren. Abbildung 1 zeigt die Istgeschwindigkeit einer direkt via Netzwerkvariablen betriebenen Achse (Positionsinterface). Die durch Schwebungseffekte hervorgerufene Störungen aufgrund von Sprüngen der empfangenen Sollpositionen sind deutlich zu erkennen.

Abbildung 1: Istgeschwindigkeit einer direkt mit den empfangenen Achsinformationen betriebenen Achse (Positionsinterface).

Abbildung 2 zeigt die Istgeschwindigkeit einer Achse, die mit durch diesen Funktionsbaustein korrigierten Werten betrieben wurde. Die vorher beobachteten Störungen sind nun nicht mehr zu erkennen.

Abbildung 2: Istgeschwindigkeit einer mit korrigierten Achsinformationen betriebenen Achse.

 

Beschreibung

Die Schwebungseffekte basieren auf dem Verpassen oder doppelten Lesen von Informationen. Mithilfe des Zyklusindex, eines bei jedem Sendevorgang von Netzwerkvariablen inkrementieren Zählers, können diese Vorgänge detektiert und Gegenmaßnahmen ergriffen werden. Der Funktionsbaustein ist so konzipiert, dass

a) die als Netzwerkvariablen empfangenen Achsstrukturen und der entsprechende Zyklusindex als Eingang des Bausteins benötigt werden,

b) intern die Achsinformationen (Sollposition und -geschwindigkeit) korrigiert werden und

c) mit den korrigierten Informationen eine NC-Achse betrieben werden kann.

Der Zyklusindex und die Zykluszeit(en) werden intern an den Funktionsbaustein FB_TimeSync weitergereicht. Dieser bestimmt die Frequenz der Schwebung und ermittelt eine Korrekturzeit, mit der die kinematischen Achsinformationen so extrapoliert werden können, dass die Schwebungseffekte aufgehoben werden. Dazu wird die Korrekturzeit zusammen mit der empfangenen Achsstruktur an eine Instanz des Funktionsbausteins FB_AxisExtrapolateValues übergeben. Dieser berechnet die korrigierte Sollpositionen und -geschwindigkeiten. Dabei ist zu beachten, dass standardmäßig die Sollbeschleunigung zur Korrektur der Position und der Geschwindigkeit herangezogen wird. Dieses Verhalten muss im Falle nicht glatter Sollbeschleunigungen, z.B. bei Encoder-Achsen, deaktiviert werden (stAxisSyncParameters.stAxisExtrapolateParameters.bUseAccForExtrapolation:=FALSE). Die korrigierten Sollwerte werden in einer Achsstruktur zur Verfügung gestellt und können dann zum Betrieb der Achse verwendet werden.

 

Wichtig für den Betrieb

Es ist sicherzustellen, dass der Baustein FB_AxisSync nur einmal pro SPS-Zyklus aufgerufen wird!

VAR_INPUT

VAR_INPUT
    bEnable:              BOOL;
    iCycleIndex:          WORD;
    fTaskCycleTime:       LREAL;
    eFilterMode:          E_Sync_FilterMode;
    stAxisSyncParameters: ST_AxisSyncParameters;
END_VAR

bEnable : Das Zurücksetzen und Aktivieren des FB erfolgt durch eine steigende Flanke an diesem Eingang. Ist bEnable=FALSE, so wird die Eingangs-Achsstruktur AxisIn unmodifiziert auf den Ausgang AxisOut kopiert.

iCycleIndex : Vom Sender bei der Übertragung jeder Achsstruktur AxisIn um den Wert 1 erhöhter und mit übermittelter Zähler. Dieser wird benutzt, um die Schwebungsfrequenz zu bestimmen und Fluktuationen zu identifizieren.

fTaskCycleTime : Zykluszeit [s].Standardmäßig wird davon ausgegangen, dass sowohl Sender als auch Empfänger mit der Zykluszeit fTaskCycleTime betrieben werden. Im Fall unterschiedlicher Zykluszeiten entspricht fTaskCycleTime der des Empfängers, stAxisSyncParameters.stTimeSyncParameters.fDataCycleTime der des Senders.

eFilterMode : Unabhängig vom Status der Synchronisierung (angezeigt durch den Ausgang bSynced) kann die Methode gewählt werden, mit der die korrigierten Achssollwerte berechnet werden. Hiervon nicht betroffen ist der automatische Fallback (siehe ST_AxisSyncParameters.eFallBackMode) bei zu großem Abstand zwischen berechneter und originaler Position. Standardmäßig ist der Automatik-Modus aktiviert. Dadurch wird

  1. bei der Initialisierung der gewählte Modus (ST_AxisSyncParameters.eStartUpMode) verwendet. Standardmäßig ist dies der Time-Modus, d.h. es wird eine Zykluszeit berechnet, die das Auftreten von Fluktuationen verhindert.
  2. Sobald ausreichend viele (stAxisSyncParameters.stTimeSyncParameters.iNoOfPeriodsForMeanDrift +1)Schwebungen erkannt wurden, wird in den Sync-Modus umgeschaltet und die Sollwerte werden mit der Korrekturzeit extrapoliert.
  3. Geht aus irgendeinem Grund die Synchronisierung verloren, wird auf den PT1-Modus geschaltet. In diesem Modus werden die übertragenen Positionen gefiltert an den Ausgang weitergeleitet.

stAxisSyncParameters : Struktur zur detaillierten Konfiguration des FB. Die Vorgabewerte sollten allerdings in den meisten Fällen ausreichend sein.

VAR_OUTPUT

VAR_OUTPUT
    bSynced              : BOOL;
    bError               : BOOL;
    iErrorId             : DINT := 0;
    eFilterState         : E_Sync_FilterState;
    stAxisSyncDiagnostic : ST_AxisSyncDiagnostic;
END_VAR

bSynced : TRUE falls der Empfänger mit dem Sender synchronisiert ist, ansonsten FALSE.

bError : Wird TRUE im Falle eines Fehlers.

iErrorId : Stellt den Fehlercode bereit.

eFilterState : Zeigt an, welche Methode zur Bestimmung der in AxisOut zurückgegebenen Sollwerte verwendet wurde. Die Möglichkeiten sind:

  • Bypass : Die in AxisIn bereitgestellten Werte wurden unmodifiziert in AxisOut bereitgestellt.
  • PT1 : Die Eingangswerte wurden mit Hilfe eines PT1-Filters geglättet.
  • Sync : Die Ausgangswerte wurden aus den Eingangsgrößen mithilfe der Korrekturzeit bestimmt.
  • Time : Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte und Fluktuationen ausgeglichen werden.

Weitere Informationen finden sich in der Dokumentation des Funktionsbausteins FB_TimeSync.

stAxisSyncDiagnostic : Diagnosewerte

VAR_IN_OUT

VAR_IN_OUT
   AxisIn  : NCTOPLC_AXLESTRUCT;
   AxisOut : NCTOPLC_AXLESTRUCT;
END_VAR

AxisIn : Eingangs-Achsstruktur des Senders.

AxisOut : Ausgang-Achsstruktur mit korrigierten Achssollwerten.