FB_GENIbusCommunication

Die Bausteine für die GENIbus-Befehle greifen nicht direkt auf das Prozessabbild der gewählten seriellen Schnittstelle zu, sondern legen die einzelnen GENIbus-Befehle in drei verschiedene Puffer ab. Der Baustein FB_GENIbusCommunication() liest sequentiell die GENIbus-Befehle aus diesen drei Puffern aus und gibt die GENIbus-Befehle zu der seriellen Schnittstelle weiter. Hierdurch wird sichergestellt, dass nicht mehrere Bausteine gleichzeitig auf das Prozessabbild der seriellen Schnittstelle zugreifen. Jeder dieser drei Puffer wird mit einer anderen Priorität (hoch, mittel oder niedrig) abgearbeitet. Durch den Parameter eCommandPriority, den es bei den meisten Bausteinen gibt, können Sie beeinflussen, mit welcher Priorität der jeweilige GENIbus-Befehl von dem Baustein FB_GENIbusCommunication() bearbeitet werden soll.
Die Puffer, in denen die GENIbus-Befehle abgelegt werden, sind alle in einer Variablen vom Typ ST_GENIbusCommandBuffer enthalten. Pro serieller Schnittstelle gibt es eine Instanz vom Baustein FB_GENIbusCommunication() und eine Variable vom Typ ST_GENIbusCommandBuffer. Der Baustein FB_GENIbusCommunication() sollte, wenn möglich, in einer separaten, schnelleren Task aufgerufen werden.
Über die Ausgänge des Bausteins kann ermittelt werden, wie stark die Puffer ausgelastet sind. Hierzu werden drei Arrays ausgegeben, bei dem jedes Element (0, 1 oder 2) für einen der drei Puffer (hoch, mittel oder niedrig) steht. Sollten Sie feststellen, dass einer der drei Puffer regelmäßig überläuft, so sollten Sie folgende Maßnahmen in Betracht ziehen:
- Wie stark sind die einzelnen SPS-Task ausgelastet? TwinCAT XAE bietet zur Analyse entsprechende Hilfsmittel an.
- Versuchen Sie die Zykluszeit der Task, in der der Baustein FB_GENIbusCommunication() aufgerufen wird, zu verringern. Der Wert sollte nicht größer als 6ms sein, optimal sind 2ms.
- Überprüfen Sie die Zykluszeit der SPS-Task, in der die Bausteine für die einzelnen GENIbus-Befehle aufgerufen werden. Dieser Wert sollte zwischen 10ms und 60ms liegen.
- Vermeiden Sie möglichst das Pollen (regelmäßiges Auslesen) von Werten. Lesen Sie nur dann Werte aus, wenn diese auch benötigt werden.
Eingänge
VAR_INPUT
bResetMaximumDemandCounter : BOOL;
bResetOverflowCounter : BOOL;
byMasterAddr : BYTE;
dwOptions : DWORD := 0;
eComMode : E_GENIbusComMode;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bResetMaximumDemandCounter | BOOL | Eine steigende Flanke setzt den gespeicherten Wert der maximalen Befehlspuffer-Auslastung, arrBufferMaximumDemandMeter (0 - 100%, siehe VAR_OUTPUT), zurück. |
bResetOverflowCounter | BOOL | Eine steigende Flanke setzt den gespeicherten Wert der Anzahl der Befehlspuffer-Überläufe, arrBufferOverflowCounter (siehe VAR_OUTPUT), zurück. |
byMasterAddr | BYTE | Gibt die Adresse an, welche die TwinCAT-Steuerung innerhalb der GENIbus-Linie haben soll. Möglicher Eingabebereich: 0 - 31. |
dwOptions | DWORD | Reserviert für zukünftige Anwendungen. |
eComMode | An diesem Parameter muss die Auswahl der gewählten seriellen Kommunikationsschnittstelle eingetragen werden. Bei Verwendung einer KL-Klemme oder einer EtherCAT-Klemme wird dann intern automatisch eine Konfiguration der Verbindungsparameter gestartet: Data Bits: 8 Parity: None Stop-Bits: 1 Für PC-basierte Schnittstellen ist dieses leider nicht möglich, dort müssen diese Parameter im TwinCAT XAE direkt eingetragen werden. |
Ein-/Ausgänge
VAR_IN_OUT
stInData : ST_GENIbusInData;
stOutData : ST_GENIbusOutData;
stCommandBuffer : ST_GENIbusCommandBuffer;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
stInData | Verweis auf die Struktur, welche das Eingangs-Prozessabbild zur Kommunikation mit der seriellen Schnittstelle enthält. | |
stOutData | Verweis auf die Struktur, welche das Ausgangs-Prozessabbild zur Kommunikation mit der seriellen Schnittstelle enthält. | |
stCommandBuffer | Verweis auf die Struktur zur Kommunikation (Puffer) mit dem FB_GENIbusCommunication()-Baustein |
Ausgänge
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
udiErrorId : UDINT;
udiErrorArg : UDINT;
arrBufferDemandMeter : ARRAY[0..2] OF BYTE;
arrBufferMaximumDemandMeter : ARRAY[0..2] OF BYTE;
arrBufferOverflowCounter : ARRAY[0..2] OF UINT;
bLineIsBusy : BOOL;
bLineIsInitialized : BOOL;
bLineIsConfigured : BOOL;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bBusy | BOOL | Beginnend mit der Flanke an bStart ist dieser Ausgang so lange auf TRUE, bis der Befehl abgearbeitet wurde. |
bError | BOOL | Dieser Ausgang wird auf TRUE geschaltet, wenn bei der Ausführung eines Befehls ein Fehler aufgetreten ist. Der befehlsspezifische Fehlercode ist in udiErrorId enthalten. |
udiErrorId | UDINT | Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Befehls (siehe Fehlercodes). Wird durch das erneute Aktivieren des Bausteins über den Eingang bStart wieder auf 0 zurückgesetzt. |
udiErrorArg | UDINT | Enthält ggf. eine erweiterte Beschreibung des Fehlercodes. |
arrBufferDemandMeter | ARRAY OF BYTE | Belegung des jeweiligen Puffers (0 - 100%). |
arrBufferMaximumDemandMeter | ARRAY OF BYTE | Bisherige maximale Auslastung des jeweiligen Puffers (0 - 100%). |
arrBufferOverflowCounter | ARRAY OF UINT | Bisherige Anzahl der Pufferüberläufe. |
bLineIsBusy | BOOL | Solange die Serielle Kommunikation aktiv ist, ist dieser Ausgang gesetzt. |
bLineIsInitialized | BOOL | Wird der Baustein das erste Mal aufgerufen (z. B. beim Starten der Steuerung), so wird eine Initialisierung durchgeführt. Während dieser Zeit können keine GENIbus-Befehle bearbeitet werden. |
bLineIsConfigured | BOOL | Dieser Ausgang zeigt mit TRUE an, dass die Klemme erfolgreich mit den o.a. seriellen Parametern konfiguriert wurde. Handelt es sich um eine PC-Schnittstelle, so ist dieser Ausgang automatisch gesetzt, da der Anwender die Parameter im TwinCAT XAE selbst eintragen muss. |
![]() | Da ein Fehler die Abarbeitung des Bausteines nicht unterbrechen darf, werden bError, udiErrorId und udiErrorArg in jedem SPS-Zyklus zunächst wieder zurückgesetzt und dann neu beurteilt. |
Voraussetzungen
Entwicklungsumgebung | Einzubindende SPS-Bibliothek |
---|---|
TwinCAT ab v3.1.4020.14 | Tc2_GENIbus ab v3.3.0.0 |