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). IstfDataCycleTime<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 mindestens den Wert 1 habeniAgeOfDataLimit. 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.

Hinweis

Ä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