AdsNotificationAttrib

Diese Struktur beinhaltet bei der Definition einer Notification sämtliche Attribute.

typedef struct {
  ULONG        cbLength;
  ADSTRANSMODE nTransMode;
  ULONG        nMaxDelay;
  ULONG        nCycleTime;
} AdsNotificationAttrib, *PAdsNotificationAttrib;

Elemente

cbLength

Länge der Daten, die an die Callback-Funktion übergeben werden sollen.

nTransMode: ADSTRANSMODE

ADSTRANS_SERVERCYCLE: Die Callback-Funktion der Notification wird zyklisch aufgerufen.

ADSTRANS_SERVERONCHA: Die Callback-Funktion der Notification wird nur bei Änderung des Wertes aufgerufen.

nMaxDelay

Spätestens nach dieser Zeit wird die Callback-Funktion der Notification aufgerufen. Die Einheit ist in 100ns.

nCycleTime

In diesem Zeitinvall prüft der ADS-Server, ob sich die Variable verändert hat. Die Einheit ist in 100ns

Anmerkungen

Die Übertragung zwischen der Echtzeit und der ADS-DLL wird durch einen FIFO gepuffert. Jeder Wert, der per Callback-Funktion übertragen werden soll, wird zuvor von TwinCAT in den FIFO geschrieben. Ist der Puffer voll, oder ist die Zeit nMaxDelay abgelaufen, so wird für jeden Eintrag die Callback-Funktion aufgerufen. Dabei wird durch den Parameter nTransMode das Verhalten in folgender Weise beeinflusst:

ADSTRANS_SERVERCYCLE
Es werden in dem Zeitintervall nCycleTime die Werte zyklisch in den FIFO geschrieben. Der kleinste mögliche Wert für nCycleTime, ist die Zykluszeit des Ads-Servers; bei der SPS ist dieses die Zykluszeit der Task. Die Cycletime kann in 1ms-Schritten ausgewertet werden. Geben Sie als Cycletime 0ms an, so wird in jedem Zyklus der Task der Wert in den FIFO geschrieben.

ADSTRANS_SERVERONCHA
Es wird nur dann ein Wert in den FIFO geschrieben, wenn sich dieser geändert hat. Die Abtastung in der Echtzeit erfolgt in der Zeit, die in nCycleTime angegeben wird. Die Cycletime kann in 1ms-Schritten ausgewertet werden. Geben Sie als Cycletime 0ms an, so wird bei jeder Änderung die Variablen in den FIFIO geschrieben.

Hinweis

Zu viele Leseoperationen

Durch zu viele Leseoperationen kann das System so stark ausgelastet werden, daß die Bedieneroberfläche stark verlangsamt wird.

  • Setzen Sie die Cycletime auf möglichst angemessene Werte und beenden Sie jedesmal Verbindungen, wenn diese nicht mehr benötigt werden.