Hinweise zur Dokumentation

Diese Beschreibung wendet sich ausschließlich an ausgebildetes Fachpersonal der Steuerungs- und Automatisierungstechnik, das mit den geltenden nationalen Normen vertraut ist.
Zur Installation und Inbetriebnahme der Komponenten ist die Beachtung der nachfolgenden Hinweise und Erklärungen unbedingt notwendig.

Das Fachpersonal hat sicherzustellen, dass die Anwendung bzw. der Einsatz der beschriebenen Produkte alle Sicherheitsanforderungen, einschließlich sämtlicher anwendbaren Gesetze, Vorschriften, Bestimmungen und Normen erfüllt.

Disclaimer

Diese Dokumentation wurde sorgfältig erstellt. Die beschriebenen Produkte werden jedoch ständig weiter entwickelt.
Deshalb ist die Dokumentation nicht in jedem Fall vollständig auf die Übereinstimmung mit den beschriebenen Leistungsdaten, Normen oder sonstigen Merkmalen geprüft.
Falls sie technische oder redaktionelle Fehler enthält, behalten wir uns das Recht vor, Änderungen jederzeit und ohne Ankündigung vorzunehmen.
Aus den Angaben, Abbildungen und Beschreibungen in dieser Dokumentation können keine Ansprüche auf Änderung bereits gelieferter Produkte geltend gemacht werden.

Marken

Beckhoff®, TwinCAT®, EtherCAT®, Safety over EtherCAT®, TwinSAFE®, XFC® und XTS® sind eingetragene und lizenzierte Marken der Beckhoff Automation GmbH.
Die Verwendung anderer in dieser Dokumentation enthaltenen Marken oder Kennzeichen durch Dritte kann zu einer Verletzung von Rechten der Inhaber der entsprechenden Bezeichnungen führen.

Patente

Die EtherCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP1590927, EP1789857, DE102004044764, DE102007017835
mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

Die TwinCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP0851348, US6167425 mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

Copyright

© Beckhoff Automation GmbH & Co. KG, Deutschland.
Weitergabe sowie Vervielfältigung dieses Dokuments, Verwertung und Mitteilung seines Inhalts sind verboten, soweit nicht ausdrücklich gestattet.
Zuwiderhandlungen verpflichten zu Schadenersatz. Alle Rechte für den Fall der Patent-, Gebrauchsmuster- oder Geschmacksmustereintragung vorbehalten.


Überblick

Durch den zunehmenden Einsatz dezentraler Steuerungen tritt immer häufiger die Anforderung auf, verschiedene Systeme zeitlich zu synchronisieren. Die Realisierung durch zyklisch versandte Informationen führt bei Systemen ohne identische Zeitbasis zu Schwebungseffekten. Diese äußern sich z.B. bei der Synchronisierung von Antrieben mittels via Netzwerk übertragener Achsinformationen als periodisch auftretende Betriebsstörungen. Die Bibliothek TcRemoteSync.lib bietet Möglichkeiten zur allgemeinen Zeitsynchronisierung von Informationen auf verteilten Systemen, sowie spezielle Methoden zur Synchronisierung von NC-Achsen ("verteilte Achsen").

Das Problem

Trotz nominell gleicher Taskzykluszeiten besteht zwischen unterschiedlichen Systemen ein geringer Gangunterschied (Drift). Diese Drift wird u. a. hervorgerufen durch Produktionsunterschiede, unterschiedlichem Temperaturverhalten und abweichenden Umgebungsbedingungen der verwendeten Oszillatoren. Der Gangunterschied bewirkt eine ständige Veränderung des zeitlichen Zusammenhangs der Taskzyklen der Systeme. In Abbildung 1 ist dies schematisch dargestellt. Das sendende System S und das empfangene System R arbeiten mit geringfügig unterschiedlichen Zykluszeiten T. Für den gezeigten Fall gilt: TS>TR. Durch den Gangunterschied verschieben sich die Taskzyklen der beiden System zueinander. Periodisch wiederkehrend tritt der Fall ein, dass zwei Zyklen des Systems R während eines Zyklus des Systems S stattfinden. Dieser Fall liegt an der in Abbildung 1 durch einen Kreis markierten Stelle vor.

Abbildung 1: Veränderung des zeitlichen Zusammenhangs zwischen den Taskzyklen zweier Systeme S und R mit geringfügig unterschiedlicher Zykluszeit (TS>TR).

Die Synchronisierung verteilter Systeme geschieht durch zyklisches Senden von Informationen vom Sender (S) zum Empfänger (R). Bis zu der in Abbildung 1 markierten Stelle werden die gesendeten Informationen sequentiell empfangen, dann wird die einmal gesendete Information in zwei aufeinander folgenden Zyklen gelesen, und anschließend erfolgt ein Übergang zurück zum sequentiellen Empfangen. Im Falle des umgekehrten Zykluszeitverhältnisses (d.h. Zykluszeit TR> Zykluszeit TS) würde entsprechend eine gesendete Information auf der Empfängerseite nicht gesehen.

Die Lösung

Besteht nicht die Möglichkeit, die Zykluszeiten der Systeme physikalisch zu synchronisieren, z.B. im Fall zweier mit SERCOS-Karten betriebenen PCs, so können obige Schwebungseffekte durch Korrektur der empfangenen Informationen ausgeglichen werden. Die dazu benötigte Korrekturzeit Δt wird aus der Drift der beiden Systeme so bestimmt, dass die damit korrigierten Daten S' einem zeitlich äquidistanten und sequentiellen Empfang entsprechen. Abbildung 2 zeigt das ursprüngliche Zeitverhalten der Originaldaten S zum Empfänger R, sowie die um die Korrekturzeit Δt korrigierten Daten S'. An der mit einem Kreis markierten Stelle werden die ursprünglich von zwei Empfängerzyklen identisch gelesenen Daten zunächst für den ersten Empfängerzyklus mit der Zeit Δt1 und anschließend für den zweiten Zyklus mit der Zeit Δt2 korrigiert.

Abbildung 2: Korrigierte Informationen S' nach Extrapolation der ursprünglich gesendeten Informationen S um die Korrekturzeit Δt. Vorzeichen und Größe der Zeitkorrektur sind durch die Pfeile angedeutet.

Für die Korrektur der Daten ist es notwendig, den zeitlichen Verlauf der Informationen zu kennen. In der typischen Anwendung der Synchronisation verteilter NC-Achsen kann beispielsweise die Korrektur der Sollposition und -geschwindigkeit durch Extrapolation mit der Sollgeschwindigkeit und -beschleunigung durchgeführt werden.

Anwendungsbeispiel

Eine typische Anwendung für die Synchronisierung verteilter Systeme ist der Betrieb von interpolierenden bzw. gekoppelten NC-Achsen (z.B. Master-Slave-Kopplung) an verschiedenen Rechnern ("verteilte Achsen"). Die durch das doppelte Lesen bzw. Verpassen von Informationen auftretenden Sprünge in den Sollwerten der Position und Geschwindigkeit bewirken periodisch wiederkehrende Betriebsstörungen. Abbildung 3 zeigt die Istgeschwindigkeit eines direkt mit der empfangenen Sollposition betriebenen Antriebes (Positionsinterface). Die sichtbaren Störungen sind durch Sprünge in den empfangenen Sollpositionen hervorgerufen.

Abbildung 3: Istgeschwindigkeit einer Achse, die direkt mit empfangenen Sollwerten im Positionsinterface betrieben wird.

Die Sollposition kann auf dem Empfängersystem vor der Ansteuerung des Antriebs nach der oben beschriebenen Methode korrigiert werden. Dazu wird die empfangene Sollposition pS mit der Korrekturzeit Δt und der empfangenen Sollgeschwindigkeit vS zur korrigierten Sollposition pS' extrapoliert. Wahlweise kann zusätzlich die Sollbeschleunigung aS zur Extrapolation verwendet werden. Es gilt: pS'=pS+Δt*vS(+0.5*Δt2aS). Abbildung 4 zeigt die Istgeschwindigkeit der mit der korrigierten Sollposition pS' angetrieben Achse. Die in Abbildung 3 vorhandenen Störungen treten nun nicht mehr auf.

Abbildung 4: Istgeschwindigkeit einer mit korrigierten Sollwerten betriebenen Achse im Positionsinterface.

Funktionsumfang der Bibliothek TcRemoteSync.lib

Die Synchronisierung von verteilten Systemen kann mit der in der Bibliothek TcRemoteSync.lib implementierten Funktionalität durchgeführt werden. Die folgenden Funktionsbausteine kommen dazu auf dem Empfängersystem zum Einsatz:

Der Funktionsbaustein FB_AxisSync dient der Synchronisierung von Achsen über ein Netzwerk. Die Sollposition und gegebenenfalls Sollgeschwindigkeit der gesendeten Achsinformationen werden gemäß den obigen Ausführungen extrapoliert. Zur Demonstration ist ein Beispiel verfügbar. Intern benutzt FB_AxisSync zwei Funktionsbausteine, FB_TimeSync und FB_AxisExtrapolateValues. Der Baustein FB_TimeSync dient der Ermittlung der Schwebungsfrequenz und der Berechnung der Korrekturzeit Δt, FB_AxisExtrapolateValues extrapoliert die empfangenen Sollwerte mit der Korrekturzeit.


FUNCTION_BLOCK 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 AxisInunmodifiziert auf den Ausgang AxisOutkopiert.

iCycleIndex : Vom Sender bei der Übertragung jeder Achsstruktur AxisInum 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, daß 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

a) 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 Fluktutationen verhindert.

b) Sobald ausreichend viele (stAxisSyncParameters.stTimeSyncParameters.iNoOfPeriodsForMeanDrift +1)Schwebungen erkannt wurden, wird in den Sync-Modus umgeschaltet und die Sollwerte werden mit der Korrekturzeit extrapoliert.

c) 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.


ST_AxisSyncParameters

Konfigurationsstruktur für FB_AxisSync.

TYPE ST_AxisSyncParameters :
STRUCT
    eStartUpMode                : E_Sync_StartUpMode
:= E_Sync_StartUpMode_Time;
    eFallBackMode               : E_Sync_FallBackMode
:= E_Sync_FallBackMode_PT1;
    stAxisExtrapolateParameters : ST_AxisExtrapolateParameters;

    stTimeSyncParameters        : ST_TimeSyncParameters;

END_STRUCT
END_TYPE

eStartUpMode: Welcher Modus wird zur Korrektur der Sollwerte während der Initialisierungsphase, wenn der Gangunterschied noch nicht bestimmt wurde, verwendet.

eFallBackMode: Modus, wenn der Unterschied zwischen berechneter und originaler Sollposition zu groß ist (siehe stExtrapolateParameters.fMaxPositionDiff)

stExtrapolateParameters : Konfigurationsstruktur des Bausteins FB_AxisExtrapolateValues.

stTimeSyncParameters : Konfigurationsstruktur des Bausteins FB_TimeSync.


ST_AxisSyncDiagnostic

Diagnosestruktur für FB_AxisSync.

TYPE ST_AxisSyncDiagnostic :
STRUCT
    fPositionDiff                : LREAL;
    fVeloDiff                    : LREAL;
    fCorrectionTime              : LREAL;
    bTimeMode                    : BOOL;
    stTimeSyncDiagnostic         : ST_TimeSyncDiagnostic;

    stAxisExtrapolateDiagnostic  : ST_AxisExtrapolateDiagnostic;

  END_STRUCT
END_TYPE

fPositionDiff: aktuelle Differenz zwischen originaler und berechneter Sollposition: AxisIn.fPosSoll - AxisOut.fPosSoll

fVeloDiff: aktuelle Differenz zwischen originaler und berechneter Sollgeschwindigkeit: AxisIn.fVeloSoll - AxisOut.fVeloSoll

fCorrectionTime: wenn bSynced=TRUE enthält fCorrectionTime die Korrekturzeit für die Synchronisierung

wenn bSynced=FALSE und bTimeMode=TRUE ist der Wert von fCorrectionTime zur Vermeidung von Fluktuationen berechnet

bTimeMode: TRUE, wenn der Time-Mode des FB_TimeSync Bausteins aktiv ist

stTimeSyncDiagnostic: Struktur mit Diagnoseausgaben des Bausteins FB_TimeSync

stAxisExtrapolateDiagnostic: Struktur mit Diagnoseausgaben des Bausteins FB_AxisExtrapolateValues


E_Sync_FallBackMode

Welche Betriebsart wird zur Modifikation der Sollwerte bei Verlust der Synchronisierung verwendet

TYPE E_Sync_FallBackMode :
(
    E_Sync_FallBackMode_Bypass  := 1
    E_Sync_FallBackMode_PT1     := 2
);
END_TYPE

E_Sync_FallBackMode_Bypass: Die vom Sender gelieferten Sollwerte werden, incl. aller Schwebungseffekte, nicht verändert.

E_Sync_FallBackMode_PT1: Die gesendeten Sollpositionen werden durch einen PT1-Filter an die Empfängerachse weitergereicht.


E_Sync_FilterMode

Welche Betriebsart soll zur Modifikation der Sollwerte verwendet werden.

TYPE E_Sync_FilterMode :
(
    E_Sync_FilterMode_Auto   := 0,
    E_Sync_FilterMode_Bypass := 1,
    E_Sync_FilterMode_PT1    := 2,
    E_Sync_FilterMode_Time   := 4
);
END_TYPE

E_Sync_FilterMode_Auto: Automatik-Modus: Während der Initialisierung wird der gewählte StartUpMode verwendet, im synchronisierten Zustand die Extrapolation mit der Korrekturzeit und bei Verlust der Synchronisation der konfigurierte FallBack-Mode.

E_Sync_FilterMode_Bypass: Die vom Sender gelieferten Sollwerte werden, incl. aller Schwebungseffekte, nicht verändert.

E_Sync_FilterMode_PT1: Die gesendeten Sollpositionen werden durch einen PT1-Filter an die Empfängerachse weitergereicht.

E_Sync_FilterMode_Time: Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte und Fluktuationen ausgeglichen werden.


E_Sync_FilterState

Welche Betriebsart wird aktuell zur Modifikation der Sollwerte verwendet.

TYPE E_Sync_FilterState :
(
    E_Sync_FilterState_Bypass := 1,
    E_Sync_FilterState_PT1    := 2,
    E_Sync_FilterState_Sync   := 3,
    E_Sync_FilterState_Time   := 4
);
END_TYPE

E_Sync_FilterState_Bypass: Die vom Sender gelieferten Sollwerte werden, incl. aller Schwebungseffekte, nicht verändert.

E_Sync_FilterState_PT1: Die gesendeten Sollpositionen werden durch einen PT1-Filter an die Empfängerachse weitergereicht.

E_Sync_FilterState_Sync: Die Sollwerte werden mit der Korrekturzeit extrapoliert.

E_Sync_FilterState_Time: Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte und Fluktuationen direkt nach dem Auftreten ausgeglichen werden. Im Gegensatz zum Sync-Modus findet kein präventiver Ausgleich der berechneten Schwebungseffekte statt.


E_Sync_StartUpMode

Mögliche Betriebsarten zur Extrapolation der Sollwerte zu Beginn des Betriebs, d.h. wenn noch keine Schwebungsfrequenz berechnet werden konnte.

TYPE E_Sync_StartUpMode :
(
    E_Sync_StartUpMode_Bypass  := 1,
    E_Sync_StartUpMode_PT1     := 2,
    E_Sync_StartUpMode_Time    := 4
);
END_TYPE

E_Sync_StartUpMode_Bypass: Die vom Sender gelieferten Sollwerte werden, incl. aller Schwebungseffekte, nicht verändert.

E_Sync_StartUpMode_PT1: Die gesendeten Sollpositionen werden durch einen PT1-Filter an die Empfängerachse weitergereicht.

E_Sync_StartUpMode_Time: Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte und Fluktuationen ausgeglichen werden.
(Details finden sich bei der Beschreibung des StartUp-Modes des FB_TimeSync)


FUNCTION_BLOCK FB_TimeSync

Dieser Funktionsbaustein dient der Synchronisierung von Systemen. Basierend auf dem Zyklusindex empfangener Netzwerkvariablen wird der Gangunterschied der Systeme bestimmt und eine Korrekturzeit berechnet.

Beschreibung

Zur Synchronisierung verteilter Systeme werden die Informationen von einem System zyklisch versendet und von den anderen Systemen empfangen. Durch Gangunterschiede zwischen den Zykluszeiten des Senders und des jeweiligen Empfängers treten Schwebungseffekte (siehe Einführung ) durch Verpassen oder doppelten Lesen einzelner Informationen auf. Im Folgenden wird zur einfacheren Darstellung nur der Fall nominell gleicher Zykluszeiten auf Sender- und Empfängerseite betrachtet. Für unterschiedliche Zykluszeiten (unterstützt werden geradzahlige Verhältnisse) gilt die folgende Beschreibung mit anderen Werten.

Jeder Sendevorgang wird mit einer fortlaufenden Nummer assoziiert, dem Zyklusindex m der Netzwerkvariablen. Für den Unterschied Δmi des im aktuellen (i) und des im vorherigen (i-1) Zyklus empfangenen Zyklusindex (Δmi=mi-mi-1) ergeben sich folgende Fälle:

Δm=0: Im aktuellen und im vorherigen Zyklus wurden die gleichen Daten gelesen.

Δm=1: Die gesendeten Daten werden kontinuierlich empfangen.

Δm>=2: Ein oder mehrere Informationen wurden nicht empfangen.

Abbildung 1 zeigt an der markierten Position schematisch den Fall für Δm=0, d.h. für ein doppeltes Lesen einer Information. Analog ist der Fall Δm=2 in Abbildung 2 dargestellt, hier wird eine gesendete Information übersprungen und nicht ausgewertet.

Abbildung 1: Schwebungseffekt, wenn die Zykluszeit des Senders (S) größer als die des Empfängers (E). Durch Linien sind die zusammengehörigen Sender- und Empfängerzyklen verbunden.

Abbildung 2: Schwebungseffekt, wenn die Zykluszeit des Senders (S) kleiner als die des Empfängers (E).

Identifikation von Schwebungen

Im Idealfall nur durch die Drift voneinander abweichender Zeiten würde das Auftreten von Δm≠1 einen Sprung charakterisieren. Aufgrund des Jitters der Zykluszeiten um Ihren nominellen Wert treten diese Fälle zeitlich gehäuft im Bereich um die Schwebung auf und verbreitern den punktuellen Sprung zu einer Übergangszone. Deren Breite ist abhängig davon, wie groß zum einen der Jitter der Uhren ist, und zum Anderen von der Größe des absoluten Gangunterschieds. Die Breite des Übergangs macht es notwendig, diesen durch eine andere Forderung als Δm≠1 zu identifizieren. Durch die Abweichungen von Δm=1 vergrößert sich an den Sprungstellen die Differenz stattgefundener Sender- und Empfängerzyklen. Eine über mehrere (stTimeSyncParameters.iEndOfTransitionLimit) Zyklen konstante Differenz wird genutzt, um das Auftreten einer Schwebung zu identifizieren. Dadurch kann ein Sprung erst die zur Identifikation notwendige Anzahl von Zyklen nach seinem Auftreten erkannt werden, was bei der Bestimmung der Korrekturen von Bedeutung ist.

Aus der Anzahl von Taktzyklen des Empfängers zwischen zwei Schwebungen wird der Gangunterschied zwischen den Rechnern bestimmt. Dieser kann zur Korrektur der Schwebungseffekte verwendet werden.

Korrekturen

Abbildung 3 zeigt den Zyklusindex der gesendeten Informationen als Funktion des empfangenen Zyklusindex für den Fall Δm=2 an der Sprungstelle. Die Steigung der Kurve weicht durch die Schwebungseffekte von dem Idealwert 1 ab. Um die Sprünge zu vermeiden, kann ein korrigierter Zyklusindex so berechnet werden (punktierte Linie), dass die Schwebungseffekte in der Zeit zwischen den Sprüngen ausgeglichen werden. Das Ergebnis ist ein korrigierter Zyklusindex auf der Empfängerseite, der geringfügig von dem übermittelten Wert abweicht, dafür aber äquidistant ist und keine Sprünge zeigt.

Abbildung 3: Empfangener (durchgehende Linie) und korrigierter (gestrichelt) Zyklusindex. Durch Kreise markiert sind die Sprungstellen mit Δm=2.

Da nach obigen Ausführungen ein Sprung erst verzögert erkannt werden kann, kommt die mit der aktuell berechneten Drift bestimmte Korrektur auch erst verzögert zum Einsatz. Um auch bei starken Variationen der Gangunterschiede Sprünge in dem korrigierten Zyklusindex zu vermeiden, wird nach Identifikation eines Sprungs die zur Korrektur verwendete Drift schrittweise von dem alten an den neuen Wert angepasst.

Eine weitere Möglichkeit die Auswirkungen sich stark ändernder Gangunterschiede zu begrenzen, ist die nicht-gleichförmige Korrektur der Schwebungseffekte. Dabei wird nach einem Sprung stärker korrigiert als kurz vor dem erwarteten Eintreten des nächsten Sprungs. Verkürzt sich die Zeit zwischen zwei Sprüngen, ist die Korrektur weitestgehend abgeschlossen und es sind kaum zusätzliche Korrekturen notwendig. Weitere Erläuterungen finden sich bei der Beschreibung der Konfigurationsparameter.

Korrekturzeit

Aus der Differenz des korrigierten und des empfangenen Zyklusindex kann, durch Multiplikation mit der Zykluszeit, die Korrekturzeit bestimmt werden. Mit der Korrekturzeit wird angegeben, um welche Zeit die aktuell gelesene Information verschoben werden muss, um äquidistant und ohne Sprünge interpretiert zu werden. Ist der zeitliche Verlauf der zu korrigierenden Größe bekannt, kann diese entsprechend extrapoliert werden. Für den Zyklusindex ist der Zusammenhang einfach (+1 pro Zykluszeit), zur Extrapolation von Achsinformationen wie Position und Geschwindigkeit müssen entsprechend die Geschwindigkeit und Beschleunigung bekannt sein (siehe Dokumentation der Funktionsbausteine FB_AxisSync und FB_AxisExtrapolateValues, sowie die Einführung).

Initialisierungsphase

Zur Berechnung der Korrekturen müssen mindestens zwei Schwebungen stattgefunden haben, um eine Drift berechnen zu können. Um auch vor dem Auftreten dieser zwei Schwebungen Fluktuationen und Sprünge ausgleichen zu können, existiert der so genannte Time-Modus. In diesem Modus (Ausgänge bStartUp=TRUE und bSynced=FALSE) wird der korrigierte Zyklusindex bei jedem Zyklus um +1 inkrementiert und Sprünge im empfangenen Zyklusindex so ausgeglichen. Nach Identifikation eines Sprungs (dessen Eintreffzeitpunkt hier noch nicht vorhersehbar ist) wird die auftretende Differenz im Verlauf mehrerer Zyklen (stTimeSyncParameters.iTimeModeBlendingCycles) kompensiert. Nach Identifikation der benötigten Anzahl von Schwebungen (stTimeSyncParameters.iNoOfPeriodsForMeanDrift) wird die Korrekturzeit nach der oben beschriebenen Methode berechnet (Ausgänge bStartUp=FALSE und bSynced=TRUE), es erfolgt ein Übergang vom Time- in den Sync-Modus.

Wichtig für den Betrieb:

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

VAR_INPUT

VAR_INPUT
    iCycleIndex          : WORD;
    fTaskCycleTime       : LREAL;
    bEnable              : BOOL;
    stTimeSyncParameters : ST_TimeSyncParameters;

END_VAR

iCycleIndex : Zyklusindex der aktuell empfangenen Daten

fTaskCycleTime : Nominelle Zykluszeit des Empfängers in [s]. Weicht die Zykluszeit des Senders hiervon ab, muss diese über den Parameter stTimeSyncParameters.fDataCycleTime konfiguriert werden. Ansonsten wird angenommen, dass beide Zykluszeiten gleich sind. Die Zykluszeiten müssen geradzahlige Vielfache voneinander sein, d.h. z.B. tSender=2ms, tEmpfänger=4ms oder tEmpfänger=1ms.

bEnable : FALSE deaktiviert den Funktionsbaustein, eine steigende Flanke reinitialisiert und startet ihn

stTimeSyncParameters : Struktur mit Konfigurationsparametern

VAR_OUTPUT

VAR_OUTPUT
    bError              : BOOL;
    iErrorId            : DINT;
    bWarning            : BOOL;
    iWarningId          : DINT;
    fCorrectionTime     : LREAL;
    bSynced             : BOOL;
    bStartUp            : BOOL;
    stTimeSyncDiagnostic: ST_TimeSyncDiagnostic;

END_VAR

bError :TRUE im Falle eines Fehlers

iErrorId : liefert im Falle eines Fehlers den Fehlercode (E_Sync_ErrorCodes) zurück

bWarning : TRUE im Falle einer Warnung, d.h. Betrieb geht, wenn auch nicht unter optimalen Bedingungen, weiter

iWarningId : liefert, falls eine Warnung aufgetreten ist, den entsprechenden Code zurück (E_Sync_WarningCode)

fCorrectionTime : Korrekturzeit, d.h. die zur Extrapolation der empfangenen Informationen zu verwendende Zeit in [s]

bSynced : TRUE wenn Sender und Empfänger synchronisiert sind. Im Sync-Modus konnte eine Korrekturzeit bestimmt werden, d.h. die Initialisierungsphase ist abgeschlossen, und die Korrekturzeit befindet sich innerhalb zulässiger Werte ( d.h. nach der Identifikation von stTimeSyncParameters.iNoOfPeriodsForMeanDrift Schwebungen, und dem anschließenden Unterschreiten von stTimeSyncParameters.fThresholdForSync*TaskCycleTime durch den Absolutwert der Korrekturzeit ).

bStartUp : TRUE wenn der Funktionsbaustein sich in der Initialisierungsphase befindet. In dieser Phase wird die Korrekturzeit so berechnet, dass diese zur Extrapolation der Daten verwendet werden kann, aber _nur_ Fluktuation ( Δm≠1) ausgleicht. Nach Identifikation einer Schwebung in der Initialisierungsphase wird innerhalb von stTimeSyncParameters.iExtendedStartUpBlendingCycles Zyklen auf eine Korrekturzeit von 0 linear übergeblendet.

stTimeSyncDiagnostic: Struktur mit weitergehenden Diagnoseausgaben


ST_TimeSyncParameters

Konfigurationsstruktur für den Baustein FB_TimeSync

TYPE ST_TimeSyncParameters :
STRUCT
    fDataCycleTime                : LREAL := 0.0;
    fThresholdForSync             : LREAL := 0.05;
    fMaxCycleIndexDifference      : LREAL := 7;
    iAgeOfDataLimit               : INT   := 7;
    iNoOfPeriodsForMeanDrift      : INT   := 1;
    fDelayTimeOffset              : LREAL := 0.0;
    fSlope1Numerator              : LREAL := 0.95;
    fSlope1Denominator            : LREAL := 0.5;
    iEndOfTransitionLimit         : INT   := 90;
    iNewDriftBendingCycles        : INT   := 90;
    iExtendedStartUpBlendingCycles: INT   := 90;
    bForceTimeMode                : BOOL  := FALSE;
    bAutomaticReInit              : BOOL  := FALSE;
    nSysCmd                       : DWORD := 1;
END_STRUCT
END_TYPE

fDataCycleTime: Zykluszeit des Senders in [s]. Bei fDataCycleTime=0 wird angenommen, dass Sender und Empfänger mit gleichen Zykluszeiten arbeiten. Die Zykluszeiten müssen geradzahlige Vielfache sein, d.h. z.B. tSender=2ms, tEmpfänger=4ms oder tEmpfänger=1ms). Ist fDataCycleTime<FB_TimeSync.fTaskCycleTime muss der Parameter fMaxCycleIndexDifference entsprechend angepasst werden (entweder durch deaktivieren (=0) oder durch Setzen auf einen Wert von mindestens FB_TimeSync.fTaskCycleTime/fDataCycleTime+2), ebenso der Wert FB_TimeSync.iAgeOfDataLimit.

fThresholdForSync : Schwellenwert der Korrekturzeit, ab dem die Synchronisierung aktiviert wird. Um zu große Unterschiede zwischen extrapolierten und originalen Werten zu vermeiden, wird bSynced=TRUE erst dann gesetzt, wenn die Korrekturzeit kleiner als der durch den Parameter angegebene Teil der Zykluszeit ist, d.h. wenn gilt:

ABS(CorrectionTime)<(fThresholdForSync*TaskCycleTime)

fMaxCycleIndexDifference : Gibt den maximalen Wert an, den der Unterschied zwischen korrigiertem und originalem Zyklusindex annehmen darf. Wenn der Wert größer wird, wird ein Fehler E_Sync_TimeSync_Error_MaxCycleIndexDiffExceeded ausgegeben. fMaxCycleIndexDifference=0 deaktiviert die Überprüfung. Arbeiten Sender und Empfänger mit unterschiedlichen Zykluszeiten, so muss fMaxCycleIndexDifference gemäß den Ausführungen bei fDataCycleTime angepasst werden.

iAgeOfDataLimit: maximales "Alter" der verwendeten Daten in Taskzyklen. Bei kontinuierlichem Lesen, d.h. wenn in jedem Zyklus ein neuer Datensatz vom Sender empfangen wird, ist der Wert ST_TimeSyncDiagnostic.iConsecutiveEqualDataCounter =0. Mit jedem Zyklus in dem sich die Daten nicht ändern steigt der Wert um +1. Um auf Schwebungseffekte reagieren zu können, muss iAgeOfDataLimit mindestens den Wert 1 haben. Je höher der Wert, desto mehr z.B. bei der Übertragung verloren gegangene Daten werden akzeptiert. Bei Überschreiten des Limits wird der Fehler E_Sync_TimeSync_Error_MaxDataAgeExceeded und bSynced=FALSE angezeigt. iAgeOfDataLimit=0 deaktiviert die Überprüfung. Arbeiten Sender und Empfänger mit unterschiedlichen Zykluszeiten, so muss iAgeOfDataLimit gemäß den Ausführungen bei fDataCycleTime angepasst werden.

iNoOfPeriodsForMeanDrift : Die zur Regelung verwendete Drift zwischen Sender und Empfänger wird als Mittelwert der letzten iNoOfPeriodsForMeanDrift Werte bestimmt.

fDelayTimeOffset :Offset in [s], der zur fCorrectionTime addiert wird. Für das Vorzeichen gilt, dass positive Werte einer zusätzlichen Extrapolation in die Zukunft entsprechen, also z.B. zum Ausgleich von Laufzeitunterschieden.

ACHTUNG: Änderungen dieses Wertes haben _direkt_ Einfluss auf die Korrekturzeit fCorrectionTime und somit auf die damit extrapolierten Werte (siehe z.B. FB_AxisExtrapolateValues oder FB_AxisSync). Es muss entsprechend Sorge getragen werden, dass durch zu schnelle Änderungen von fDelayTimeOffset keine Sprünge in den zur Antriebssteuerung verwendeten kinematischen Größen auftreten. Je größer fDelayTimeOffset, desto größer ist auch die Abweichung zwischen den original übertragenen und den extrapolierten Werten, entsprechend muss z.B. der Parameter fMaxPositionDiff in der Struktur ST_AxisExtrapolateParameters angepasst werden.

Die folgenden zwei Parameter sind vor Allem bei stark veränderlichen Gangunterschieden von Bedeutung:

fSlope1Numerator : Anteil der Korrektur, der innerhalb der Zeit fSlope1Denominator*fTaskCycleTime ausgeführt wird. Um die Schwebungseffekte auszugleichen, muss zwischen zwei Sprüngen eine Korrektur der empfangenen Zyklusindizes um +/- 1 erfolgen. Erfolgt ein Sprung deutlich vor seinem erwarteten Eintreffen ist die Korrektur noch nicht abgeschlossen, entsprechend groß ist die zu korrigierende Differenz in der nächsten Periode. Mit den Parametern fSlope1Numerator und fSlope1Denominator kann bewirkt werden, dass direkt nach einem Sprung ein überproportional großer Anteil der Korrektur ausgeführt wird. fSlope1Numerator gibt an, welcher Anteil der Korrektur im ersten Zeitabschnitt nach einem Sprung ausgeführt wird, fSlope1Denominator die Länge des Zeitabschnitts als Bruchteil der erwarteten Zeit zwischen den Schwebungen. Der Skalierungsfaktor für die Korrekturen im verbleibenden Zeitraum bis zum erwarteten Auftreten der Schwebung ergeben sich automatisch aus der Forderung, dass zum Erwartungszeitpunkt 100% der Korrektur angewandt sein muss. Der verbleibende Anteil (1-fSlope1Numerator) der Korrekturen wird in der Zeit (1-fSlope1Denominator)*fTaskCycleTime angewandt. Nach Erreichen des Erwartungszeitpunktes der Schwebung bleibt die Korrektur konstant.

Die Defaultwerte der Steigungen sind:

s1 = 0.95/0.5 =fSlope1Numerator/fSlope1Denominator

s2 = 0.05/0.5= (1-fSlope1Numerator)/ (1-fSlope1Denominator)

fSlope1Denominator : Gibt die Zeit in Bruchteilen der Zykluszeit fTaskCycleTime an, in der der durch fSlope1Numerator gegebene Anteil der Korrektur angewandt wird.

iEndOfTransitionLimit : Anzahl der Taskzyklen, die die Differenz zwischen Sender- und Empfängerzykluszähler konstant bleiben muss, um eine Schwebung zu identifizieren. Große Werte sind vor allem bei kleinen Schwebungsfrequenzen nötig. Die geringe Relativfrequenz der beiden Systeme führt in diesem Fall zu einer zeitlich ausgedehnten Übergangsphase. Durch den Zykluszeitenjitter entstehen dabei Phasen konstanter Zahlerdifferenz die umso länger sind, je geringer die Drift der Systeme ist.

iNewDriftBendingCycles : Anzahl Taskzyklen zur linearen Überblendung bei Bestimmung einer neuen Drift. Je stärker eine neu bestimmte Drift von dem vorherigen Wert abweicht, desto größer ist die Änderung der Korrekturzeit. Um die Auswirkungen dieser Änderung abzumildern, wird innerhalb von iNewDriftBendingCycles Zyklen linear zwischen den mit der alten und den mit der neuen Drift bestimmten Korrekturzeiten interpoliert. Nach iNewDriftBendingCycles wird nur noch die aktuelle Drift verwendet.

iTimeModeBlendingCycles : Im TimeMode wird nach Identifikation eines Schwebungseffektes innerhalb von iTimeModeBlendingCycles TaskZyklen die Korrekturzeit linear auf den Wert 0 zurückgeregelt. Der TimeMode ist automatisch aktiv, solange keine Synchronisierung erreicht werden konnte (bSynced=FALSE). Die die Korrekturzeit auswertenden Funktionsbausteine (FB_AxisSync oder FB_AxisExtrapolateValues) in diesem Fall die Korrekturzeit wie im Sync-Modus zu verwenden oder zu verwerfen.

bForceTimeMode: Der Time-Modus wird dauerhaft verwendet und auch bei Erreichen der Synchronisierungsbedingungen _nicht_ in den Sync-Modus gewechselt. Der TimeMode ist automatisch aktiv, solange keine Synchronisierung erreicht werden konnte (bSynced=FALSE). Die die Korrekturzeit auswertenden Funktionsbausteine (FB_AxisSync oder FB_AxisExtrapolateValues) in diesem Fall die Korrekturzeit wie im Sync-Modus zu verwenden oder zu verwerfen.

bAutomaticReInit: Automatisches ReInitialisieren nach Auftreten eines Fehlers. Fehler werden entsprechend nach einem Zyklus gelöscht und die StartUp-Phase wird begonnen. Mit Bedacht aktivieren. Die Fehlersuche wird hierdurch gegebenenfalls deutlich erschwert falls die Fehlerursache nicht beseitigt wurde.

nSysCmd : reserviert


ST_TimeSyncDiagnostic

erweiterte Ausgabestruktur für FB_TimeSync

TYPE ST_TimeSyncDiagnostic :
STRUCT
    iCycleIndexDiff              : DINT;
    iTotalEqualDataCounter       : UINT;
    iConsecutiveEqualDataCounter : UINT;
    fDrift                       : LREAL;
END_STRUCT
END_TYPE

iCycleIndexDiff : Differenz der im aktuellen und im vorherigen Taskzyklus empfangenen iCycleIndex. Bei kontinuierlichem Senden/Empfangen ist der Wert 1. Wird ein Datum doppelt gelesen ist der Wert 0, und 2 wenn ein gesendetes Datum nicht empfangen wurde.

iTotalEqualDataCounter : Gesamtanzahl der Zyklen seit Aktivieren des FB, in denen keine neuen Daten empfangen wurden.

iConsecutiveEqualDataCounter : Aktuelle Anzahl der Zyklen, in denen nacheinander keine neuen Daten empfangen wurden, d.h. in denen hintereinander fCycleIndex=0 galt.

fDrift : Aktueller Gangunterschied des Senders und des Empfängers in [ppm=parts per million]. Ein negatives Vorzeichen bedeutet, dass die Zykluszeit des Senders größer ist als die des Empfängers.

fDrift := 1E6/(Anzahl Zyklen zwischen zwei Sprüngen)


FUNCTION_BLOCK FB_AxisExtrapolateValues

Dieser Funktionsbaustein dient der Extrapolation kinematischer Achsgrößen. Die Sollposition (und wahlweise -geschwindigkeit) werden auf Basis der Sollgeschwindigkeit (und -beschleunigung) um die angegebene Korrekturzeit extrapoliert.

Defaultmäßig ist die Verwendung der Sollbeschleunigung zur Extrapolation der Geschwindigkeit und Position _aktiviert_. Entsprechend muss sichergestellt sein, dass hinreichend glatte, d.h. unverrauschte und Spikefreie Beschleunigungswerte (z.B. analytische Werte aus PTP-Achsen) in der AxisIn-Struktur vorhanden sind. Encoder-Achsen erfüllen diese Anforderungen an die Beschleunigung durch Abtastung und doppelte Differentiation der Position nicht. Die Verwendung der Beschleunigung muss hier durch Setzen des Parameters stAxisExtrapolateParameters.bUseAccForExtrapolation=FALSE deaktiviert werden.

Beschreibung

Die in der Einführung beschriebenen Schwebungseffekte führen zum Verlust oder doppelten Lesen von gesendeten Informationen. Handelt es sich bei den Informationen um Sollwerte von Achsen, so ergeben sich Sprünge in den kinematischen Größen Sollposition und -geschwindigkeit. Mit diesen Größen direkt betriebene Achsen zeigen periodisch auftretende Störungen des Betriebs. Abhilfe schafft die Korrektur der Sollwerte mit Termen der höheren Ableitungen (Sollgeschwindigkeit bzw. -beschleunigung) und einer Korrekturzeit. Letztere ist so beschaffen (siehe FB_TimeSync), dass Schwebungen und Fluktuation der Sollwerte durch die Extrapolation ausgeglichen werden können.

Abbildung 1 zeigt die empfangene (durchgehend) und die korrigierte (gestrichelt) Position, wobei die Achse mit dem Positionsinterface der unkorrigierten Werte angetrieben wurde. Die daraus resultierenden Auswirkungen auf die punktiert dargestellte Istgeschwindigkeit sind als größer werdende Fluktuationen zu erkennen. Abbildung 2 zeigt die Situation im Überblick.

Abbildung 1: Unkorrigierte (schwarz, durchgehend) und korrigierte (rot, gestrichelt) Sollposition, sowie Istgeschwindigkeit (blau, punktiert) der im Positionsinterface mit der _unkorrigierten_ Position angetriebenen Achse.

Abbildung 2: Überblick der in Abbildung 1 vergrößert dargestellten Situation.

Extrapolation der Sollwerte

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 ;

Anforderungen:

Abhängig davon, in welcher Hauptbetriebsart die Achse betrieben werden soll, sind gewisse Voraussetzungen zu erfüllen und der entsprechende Modus zu aktivieren. Die entsprechenden Kombinationen sind in Tabelle 1 dargestellt.

Hauptbetriebsart
der Achse 		benötigte Größen
in AxisIn 		Parameter Kommentar
Positionsinterface Sollposition

Sollgeschwindigkeit

(Sollbeschleunigung)

 stAxisExtrapolateParameters .bUseAccForExtrapolation=FALSE

(=TRUE)

Die Verwendung der Beschleunigung kann wahlweise hinzugeschaltet werden. (Anforderungen an die Beschleunigung (s.o.) sind zu beachten.)
Geschwindigkeitsinterface Sollposition

Sollgeschwindigkeit

Sollbeschleunigung

 stAxisExtrapolateParameters .bUseAccForExtrapolation=TRUE analytisches Verhalten der Beschleunigung notwendig, d.h. z.B. keine Encoder-Achsen

Betriebsarten:

Neben der Extrapolation der Sollwerte existieren weitere Betriebsmodi. Zwei davon, der Bypass- und der PT1-Modus, kommen vor allem dann zum Einsatz, wenn keine Korrekturzeit für die Extrapolation zu Verfügung steht. Bei Verwendung des Funktionsbausteins FB_TimeSync ist dies der Fall während der Initialisierungsphase oder wenn aus anderen Gründen die Synchronisierung fehlschlägt. Ebenfalls für Verwendung mit diesem Baustein existiert die Wahlmöglichkeit des Time-Modus, um auch bei der Initialisierung ohne Kenntnis der Schwebungsfrequenz eine Korrekturzeit zur Vermeidung von Fluktuationen zu bestimmen.

Die Betriebsarten sind im Einzelnen:

Modus | Beschreibung
E_Sync_ExtrapolateMode_Bypass | 1:1-Kopie aller empfangenen Sollwerte auf den Ausgang, d.h. ohne Veränderung der kinematischen Größen und damit auch ohne Verminderung von Schwebungseffekten.
E_Sync_ExtrapolateMode_PT1 | Im PT1-Filtermodus wird die Eingangsposition durch einen konfigurierbaren (siehe stAxisExtrapolateParameters) PT1-Filter auf den Ausgang geleitet. Die Auswirkungen der Schwebung können hierdurch vermindert werden.
E_Sync_ExtrapolateMode_Sync | Der Sync-Modus entspricht dem Standardmodus des Bausteins und extrapoliert, wie oben beschrieben, die kinematischen Sollwerte entsprechend der Korrekturzeit.
E_Sync_ExtrapolateMode_Time | Bei doppeltem Lesen/Verpassen von Daten wird die Korrekturzeit so berechnet, dass die Auswirkungen auf die Sollwerte minimiert werden. Im Gegensatz zum Sync-Modus wird nicht über den gesamten Bereich zwischen den Schwebungen eine Korrektur der Sollwerte ausgeführt.

Sicherheitsmaßnahmen:

Um im Falle einer fehlerhaften Berechnung der Korrekturzeit nicht beliebig große Differenzen zwischen den Original-Sollwerten und den berechneten Größen zu erhalten, kann dieser Abstand begrenzt werden. Festgelegt wird die maximale Differenz durch die Positions- bzw. Geschwindigkeitsänderung, die mit der aktuellen Sollgeschwindigkeit bzw. -beschleunigung in stAxisExtrapolateParameters.fMaxPositionDiffFactor Zyklen erreicht werden kann. Überschreitet die Differenz diesen Wert, wird der konfigurierbare Fallback-Modus aktiviert. Hierfür stehen der Bypass- und der PT1-Modus zur Verfügung (siehe obige Beschreibung).

VAR_INPUT

VAR_INPUT
    fCorrectionTime             : LREAL;
    fTaskCycleTime              : LREAL;
    eMode                       : E_Sync_ExtrapolateMode;

    eFallBackMode               : E_Sync_FallBackMode;

    stAxisExtrapolateParameters : ST_AxisExtrapolateParameters;

 END_VAR

fCorrectionTime : Korrekturzeit zur Extrapolation [s]

fTaskCycleTime : Zykluszeit des Empfängers [s].

eMode : Vorgewählter Betriebsmodus, kann durch Sicherheitsmaßnahmen (Fallback) automatisch geändert werden. Der tatsächlich verwendete Modus wird als Ausgang eState angezeigt.

eFallBackMode : Modus, falls die Abweichung der berechneten Sollwerte von den Original-Sollwerten den durch den Parameter stAxisExtrapolateParameters.fMaxPositionDiffFactor beschriebenen Wert überschreitet.

stAxisExtrapolateParameters : Struktur mit Konfigurationsparametern

VAR_OUTPUT

VAR_OUTPUT
    bError                     : BOOL;
    iErrorId                   : DINT;
    eState                     : E_Sync_ExtrapolateState;

    stAxisExtrapolateDiagnostic: ST_AxisExtrapolateDiagnostic;

END_VAR

bError : TRUE im Falle eines Fehlers

iErrorId : Fehlercode (E_Sync_ErrorCodes)

eState : verwendeter Modus (E_Sync_ExtrapolateState)

stAxisExtrapolateDiagnostic: Struktur mit erweiterten Diagnosausgaben

VAR_IN_OUT

VAR_IN_OUT
    AxisIn  : NCTOPLC_AXLESTRUCT;
    AxisOut : NCTOPLC_AXLESTRUCT;
END_VAR

AxisIn : empfangene Original-Achsstruktur

AxisOut : Achsstruktur, zur Vermeidung von Schwebungseffekten mit modifizierten Sollwerten


ST_AxisExtrapolateDiagnostic

erweiterte Ausgabestruktur für FB_AxisExtrapolateValues.

TYPE ST_AxisExtrapolateDiagnostic :
STRUCT
    fPositionDiff : LREAL := 0;
    fVeloDiff     : LREAL;
END_STRUCT
END_TYPE

fPositionDiff: aktuelle Differenz zwischen originaler und berechneter Sollposition: AxisIn.fPosSoll - AxisOut.fPosSoll

fVeloDiff: aktuelle Differenz zwischen originaler und berechneter Sollgeschwindigkeit: AxisIn.fVeloSoll - AxisOut.fVeloSoll


ST_AxisExtrapolateParameters

Konfigurationsstruktur für FB_AxisExtrapolateValues.

TYPE ST_AxisExtrapolateParameters :
STRUCT
    fMaxPositionDiff        : LREAL := 0;
    bUseAccForExtrapolation : BOOL  := TRUE;
    fT1factorPos            : LREAL := 3.0;
    fT1factorVelo           : LREAL := 3.0;
    fBlendingTime           : LREAL := 0.06;
    nSysCmd                 : DWORD := 1;
END_STRUCT
END_TYPE

fMaxPositionDiff : Maximal zulässige Abweichung der empfangenen von der berechneten Position in [Geschwindigkeit * s] (z.B. in mm wenn die Geschwindigkeit in mm/s angegeben ist). Bei fMaxPositionDiff:=0 findet _keine_ Überwachung der Positionsabweichung statt. Ansonsten wird bei Überschreitung als Fehler E_Sync_Extrapolate_Error_MaxPosDiffExceeded ausgegeben und auf den konfigurierten FallBackMode (siehe FB_AxisExtrapolateValues) umgeschaltet.

bUseAccForExtrapolation : Wenn TRUE wird die Sollbeschleunigung zur Extrapolation der Sollgeschwindigkeit verwendet. Dies ist der Default und muss für z.B. für Encoder- oder NCI-Bahnachsen deaktiviert werden.

fT1factorPos : Zeitkonstante des PT1-Filters für die Soll-Position, angegeben in Vielfachen der fTaskCycleTime.

fT1factorVelo : Zeitkonstante des PT1-Filters für die Soll-Geschwindigkeit, angegeben in Vielfachen der fTaskCycleTime.

fBlendingTime : Zeit, in der linear interpoliert wird zwischen den berechneten Sollpositionen beim Umschalten vom PT1-Filter- in den Syncmodus und umgekehrt. [s]

nSysCmd : reserviert


E_Sync_ExtrapolateMode

Betriebsarten zur Berechnung der Sollwerte

TYPE E_Sync_ExtrapolateMode :
(
    E_Sync_ExtrapolateMode_Bypass := 1,
    E_Sync_ExtrapolateMode_PT1    := 2,
    E_Sync_ExtrapolateMode_Sync   := 3,
    E_Sync_ExtrapolateMode_Time   := 4
);
END_TYPE

E_Sync_ExtrapolateMode_Bypass: Die vom Sender gelieferten Sollwerte werden, incl. aller Schwebungseffekte, nicht verändert.

E_Sync_ExtrapolateMode_PT1: Die gesendeten Sollpositionen werden durch einen PT1-Filter an die Empfängerachse weitergereicht.

E_Sync_ExtrapolateMode_Sync: Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte über die gesamte Periodendauer ausgeglichen werden.

E_Sync_ExtrapolateMode_Time: Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte und Fluktuationen während und direkt nach dem Auftreten ausgeglichen werden.


E_Sync_ExtrapolateState

Betriebsarten zur Berechnung der Sollwerte

TYPE E_Sync_ExtrapolateState :
(
    E_Sync_ExtrapolateState_Bypass := 1,
    E_Sync_ExtrapolateState_PT1    := 2,
    E_Sync_ExtrapolateState_Sync   := 3,
    E_Sync_ExtrapolateState_Time   := 4
);
END_TYPE

E_Sync_ExtrapolateState_Bypass: Die vom Sender gelieferten Sollwerte werden, incl. aller Schwebungseffekte, nicht verändert.

E_Sync_ExtrapolateState_PT1: Die gesendeten Sollpositionen werden durch einen PT1-Filter an die Empfängerachse weitergereicht.

E_Sync_ExtrapolateState_Sync: Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte über die gesamte Periodendauer ausgeglichen werden.

E_Sync_ExtrapolateState_Time: Die Zeitkorrektur wird so berechnet, dass auftretende Schwebungseffekte und Fluktuationen während und direkt nach dem Auftreten ausgeglichen werden.


E_Sync_ErrorCodes

Fehlercodes des FB_SyncAxis

Error (Hex) | Error (Dez) | Error type | Error name | Description
16#4b50 | 19280 |  |  | -
16#4b51 | 19281 |  | E_Sync_TimeSync_Error_MaxCycleIndexDiffExceeded | "Maximum cycleindex difference exceeded " The difference between the corrected and the calculated cycleindex is larger than allowd
16#4b52 | 19282 |  | E_Sync_TimeSync_Error_MaxDataAgeExceeded | "Maximum packet age exceeded " The packet age is larger than (configurable) value of iMaxPackageAge SPS-cycles.
16#4b53 | 19283 |  | E_Sync_TimeSync_Error_UnknownSyncLoss | "Sync loss for unknown reason" none of the above reasons caused sync loss
16#4b54 | 19284 |  |  | -
16#4b55 | 19285 |  |  | -
16#4b56 | 19286 |  | E_Sync_Error_WrongParameter | "wrong parameter used"
16#4b57 | 19287 |  |  | -
16#4b58 | 19288 |  |  | -
16#4b59 | 19289 |  | E_Sync_Extrapolate_Error_MaxPosDiffExceeded | "Maximum position difference exceeded " The difference between the actual position transmitted by the master and the position calculated for syncing is larger than the fMaxPositionDiff (configurable by input-values)


E_Sync_WarningCodes

Warnungen des FB_SyncAxis

Warning (Hex) | Warning (Dez) | Error name | Description
16#1 | 1 | E_Sync_Warning_DriftChangedSignificantly |


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 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.