FB_KL6831KL6841Communication
Die Bausteine 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 Baustein 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 Bausteine gleichzeitig auf das Prozessabbild der KL6831/KL6841 zugreifen. Jeder dieser drei Puffer wird mit einer anderen Priorität (hoch, mittel oder niedrig) abgearbeitet. Der Anwender der SPS-Library kann durch den Parameter eCommandPriority, den es bei den meisten Bausteinen gibt, beeinflussen mit welcher Priorität der jeweilige SMI-Befehl von dem Baustein 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 Baustein FB_KL6831KL6841Communication() und eine Variable vom Typ ST_SMICommandBuffer. Der Baustein FB_KL6831KL6841Communication() 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? Der TwinCAT System Manager bietet zur Analyse entsprechende Hilfsmittel an.
- Versuchen Sie die Zykluszeit der Task, in der der Baustein FB_KL6831KL6841Communication() aufgerufen wird, zu verringern. Der Wert sollte nicht größer als 6 ms sein, optimal sind 2 ms.
- Überprüfen Sie die Zykluszeit der SPS-Task, in der die Bausteine für die einzelnen SMI-Befehle aufgerufen werden. Dieser Wert sollte zwischen 10 ms und 60 ms 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.
VAR_INPUT
bResetMaximumDemandCounter : BOOL;
bResetOverflowCounter : BOOL;
bResetInactiveProcessImage : BOOL;
bResetDataFrameError : BOOL;
dwOptions : DWORD := 0;
bResetMaximumDemandCounter: Eine positive Flanke setzt den gespeicherten Wert der maximalen Befehlspuffer-Auslastung (arrBufferMaximumDemandMeter) zurück.
bResetOverflowCounter: Eine positive Flanke setzt den gespeicherten Wert der Anzahl der Befehlspuffer-Überläufe (arrBufferOverflowCounter) zurück.
bResetInactiveProcessImage: Eine positive Flanke hebt die Sperrung des Prozeßabbildes der Klemme wieder auf. Die Ausgänge bProcessImageInactive, bDigitalInput1Active und bDigitalInput2Active werden wieder auf FALSE gesetzt. Die Sperrung wird aktiviert, sobald einer der beiden digitalen Eingänge an der Klemme betätigt wurde.
bResetDataFrameError: 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: reserviert für zukünftige Erweiterungen.
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;
bBusy: Der Ausgang wird gesetzt, sobald der Baustein einen Befehl verarbeitet und bleibt so lange aktiv, bis der Befehl abgearbeitet wurde.
bError: 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: Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Befehls. Wird durch das erneute Aktivieren des Bausteins über den Eingang bStart wieder auf 0 zurückgesetzt. Siehe Fehlercodes.
arrBufferDemandMeter: Belegung des jeweiligen Puffers (0 - 100 %).
arrBufferMaximumDemandMeter: Bisherige maximale Auslastung des jeweiligen Puffers (0 - 100 %).
arrBufferOverflowCounter: Bisherige Anzahl der Pufferüberläufe.
bLineIsInitialized: 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 SMI-Befehle bearbeitet werden. Ist die Initialisierung abgeschlossen, wird dieser Ausgang auf TRUE gesetzt.
b24VPowerSupplySwitchedOn: Die KL6831/KL6841 muß ü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: Der digitale Eingang 1 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: Der digitale Eingang 2 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: Einer der beiden digitalen Eingänge 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: Die Klemme hat einen Telegrammfehler auf dem SMI-Bus erkannt. Über den Eingang bResetDataFrameError muss der Fehler wieder zurückgesetzt werden.
bChecksumError: Die Klemme hat einen Checksummenfehler auf dem SMI-Bus erkannt. Die Meldung wird automatisch zurückgesetzt, sobald eine Telegramm wieder fehlerfrei übertragen wurde.
VAR_IN_OUT
stInData : ST_KL6831KL6841InData;
stOutData : ST_KL6831KL6841OutData;
stCommandBuffer : ST_SMICommandBuffer;
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 (Puffer) mit den SMI-Bausteinen.
Voraussetzungen
Entwicklungsumgebung | Zielsystem | erforderliche Bibliotheken |
---|---|---|
TwinCAT 2.11 R3/x64 ab Build 2238 | PC/CX, BX oder BC | TcSMI-Bibliothek ab V1.0.0 |