FB_KL6831KL6841Communication
Die Funktionsbausteine für die SMI-Befehle greifen nicht direkt auf das Prozessabbild der KL6831/KL6841 zu, sondern legen die einzelnen SMI-Befehle in drei verschiedene Puffer ab. Der Funktionsbaustein FB_KL6831KL6841Communication() liest sequentiell die SMI-Befehle aus diesen drei Puffern aus und gibt die SMI-Befehle zu der KL6831/KL6841 weiter. Hierdurch wird sichergestellt, dass nicht mehrere Funktionsbausteine gleichzeitig auf das Prozessabbild der KL6831/KL6841 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 Funktionsbausteinen gibt, können Sie beeinflussen, mit welcher Priorität der jeweilige SMI-Befehl von dem Funktionsbaustein FB_KL6831KL6841Communication() bearbeitet werden soll.
Die Puffer, in denen die SMI-Befehle abgelegt werden, sind alle in einer Variablen vom Typ ST_SMICommandBuffer enthalten. Pro KL6831/KL6841 gibt es eine Instanz vom Funktionsbaustein FB_KL6831KL6841Communication() und eine Variable vom Typ ST_SMICommandBuffer. Der Funktionsbaustein FB_KL6831KL6841Communication() sollte, wenn möglich, in einer separaten, schnelleren Task aufgerufen werden.
Über die Ausgänge des Funktionsbausteins 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 Funktionsbaustein FB_KL6831KL6841Communication() 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 Funktionsbausteine für die einzelnen SMI-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.
- Verteilen Sie die einzelnen Antriebe gleichmäßig auf mehrere SMI-Linien. Da pro SPS-Zyklus mehrere SMI-Linien gleichzeitig bearbeitet werden, erhöht sich hierdurch der Datendurchsatz insgesamt.
Eingänge
VAR_INPUT
bResetMaximumDemandCounter : BOOL;
bResetOverflowCounter : BOOL;
bResetInactiveProcessImage : BOOL;
bResetDataFrameError : BOOL;
dwOptions : DWORD := 0;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bResetMaximumDemandCounter | BOOL | Eine positive Flanke setzt den gespeicherten Wert der maximalen Befehlspuffer-Auslastung (arrBufferMaximumDemandMeter) zurück. |
bResetOverflowCounter | BOOL | Eine positive Flanke setzt den gespeicherten Wert der Anzahl der Befehlspuffer-Überläufe (arrBufferOverflowCounter) zurück. |
bResetInactiveProcessImage | BOOL | Eine positive Flanke hebt die Sperrung des Prozessabbildes der Klemme wieder auf. Die Ausgänge bProcessImageInactive, bDigitalInput1Active und bDigitalInput2Active werden wieder auf FALSE gesetzt. Die Sperrung wird aktiviert, sobald einer der digitalen Eingänge Input1 oder Input2 an der Klemme betätigt wurde. |
bResetDataFrameError | BOOL | Eine positive Flanke setzt die Meldung für einen Telegrammfehler wieder zurück. Der Ausgang bDatafRameError wird wieder auf FALSE gesetzt. Die Sperrung wird aktiviert, sobald von der Klemme ein Telegrammfehler erkannt wurde. |
dwOptions | DWORD | Reserviert für zukünftige Erweiterungen |
Ein-/Ausgänge
VAR_IN_OUT
stInData : ST_KL6831KL6841InData;
stOutData : ST_KL6831KL6841OutData;
stCommandBuffer : ST_SMICommandBuffer;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
stInData | Verweis auf die Struktur zur Kommunikation mit der KL6831/KL6841 | |
stOutData | Verweis auf die Struktur zur Kommunikation mit der KL6831/KL6841 | |
stCommandBuffer | Verweis auf die Struktur zur Kommunikation mit den SMI-Funktionsbausteinen |
Ausgänge
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
udiErrorId : UDINT;
arrBufferDemandMeter : ARRAY [0..2] OF BYTE;
arrBufferMaximumDemandMeter : ARRAY [0..2] OF BYTE;
arrBufferOverflowCounter : ARRAY [0..2] OF UINT;
bLineIsInitialized : BOOL;
b24VPowerSupplySwitchedOn : BOOL;
bDigitalInput1Active : BOOL;
bDigitalInput2Active : BOOL;
bProcessImageInactive : BOOL;
bDataFrameError : BOOL;
bChecksumError : BOOL;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bBusy | BOOL | Der Ausgang wird gesetzt, sobald der Funktionsbaustein einen Befehl verarbeitet und bleibt so lange aktiv, 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. Durch das erneute Aktivieren des Funktionsbausteins über den Eingang bStart wird der Ausgang wieder auf FALSE zurückgesetzt. |
udiErrorId | UDINT | Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Befehls. Wird durch das erneute Aktivieren des Funktionsbausteins über den Eingang bStart wieder auf 0 zurückgesetzt (siehe 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 BYTE | Bisherige Anzahl der Pufferüberläufe |
bLineIsInitialized | BOOL | Wird der Funktionsbaustein das erste Mal aufgerufen (z. B. beim Starten der Steuerung), so wird eine Initialisierung durchgeführt. Während dieser Zeit können keine SMI-Befehle bearbeitet werden. Ist die Initialisierung abgeschlossen, wird dieser Ausgang auf TRUE gesetzt. |
b24VPowerSupplySwitchedOn | BOOL | Die KL6831/KL6841 muss über zwei Anschlüsse mit 24 V DC versorgt werden. Der Ausgang wird gesetzt, sobald die 24 V DC erkannt wurden. Fehlen die 24 V DC geht der Ausgang auf FALSE und es können keine SMI-Befehle über die Steuerung bearbeitet werden, solang die 24 V DC nicht vorhanden sind. |
bDigitalInput1Active | BOOL | Der digitale Eingang Input1 an der Klemme wurde betätigt oder ist betätigt (siehe auch Klemmendokumentation). Der Ausgang bProcessImageInactive wird gesetzt und es können keine weiteren SMI-Befehle über die Steuerung bearbeitet werden. |
bDigitalInput2Active | BOOL | Der digitale Eingang Input2 an der Klemme wurde betätigt oder ist betätigt (siehe auch Klemmendokumentation). Der Ausgang bProcessImageInactive wird gesetzt und es können keine weiteren SMI-Befehle über die Steuerung bearbeitet werden. |
bProcessImageInactive | BOOL | Einer der digitalen Eingänge Input1 oder Input2 wurde an der Klemme betätigt. Es können keine weiteren SMI-Befehle über die Steuerung bearbeitet werden. Über den Eingang bResetInactiveProcessImage muss die Sperrung wieder freigeschaltet werden. |
bDataFrameError | BOOL | Die Klemme hat einen Telegrammfehler auf dem SMI-Bus erkannt. Über den Eingang bResetDataFrameError muss der Fehler wieder zurückgesetzt werden. |
bChecksumError | BOOL | Die Klemme hat einen Checksummenfehler auf dem SMI-Bus erkannt. Die Meldung wird automatisch zurückgesetzt, sobald ein Telegramm wieder fehlerfrei übertragen wurde. |
Voraussetzungen
Entwicklungsumgebung | Einzubindende SPS-Bibliothek |
---|---|
TwinCAT ab v3.1.4020.14 | Tc2_SMI ab 3.3.5.0 |