FB_SMISlaveIdCompare

FB_SMISlaveIdCompare 1:

Der Funktionsbaustein FB_SMISlaveIdCompare vergleicht eine vorgegebene Slave-Id (32 Bit Key-Id) mit der motorseitig definierten Slave-Id (32 Bit Key-Id) eines oder mehrerer Antriebe. Der Befehl kann auch an mehrere SMI-Slaves gesendet werden.

Das Ergebnis der Abfrage wird durch vier Ausgänge weitergegeben. Jeder dieser Ausgänge kann drei Zustände annehmen:

Weiter unten werden hierzu einige Beispiele erläutert.

FB_SMISlaveIdCompare 2: Eingänge

VAR_INPUT
  bStart           : BOOL;
  dwAddr           : DWORD := 0;
  eAddrType        : E_SMIAddrType := eSMIAddrTypeAddress;
  dwAddrOption     : DWORD := 0;
  eCommandPriority : E_SMICommandPriority := eSMICommandPriorityMiddle;
  dwSlaveId        : DWORD := 0;
END_VAR

Name

Typ

Beschreibung

bStart

BOOL

Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert und der Befehl versendet.

dwAddr

DWORD

Herstellercode (0-15), Adresse eines Teilnehmers (0-15), Bitfeld (16 Bit) für die Gruppenadressierung oder Slave-Id (32 Bit Key-Id). Wird ein Sammelruf (Broadcast) versendet, so hat dieser Eingang keine Bedeutung.

eAddrType

E_SMIAddrType

Legt fest, ob der Eingang dwAddr als Herstellercode, Adresse eines Teilnehmers, zur Gruppenadressierung oder als Slave-Id ausgewertet werden soll.

dwAddrOption

DWORD

Wird das SMI-Gerät per Slave-Id adressiert (eAddrType = eSMIAddrTypeSlaveId), so muss über diesen Eingang der Herstellercode angegeben werden.

eCommandPriority

E_SMICommandPriority

Priorität (hoch, mittel oder niedrig), mit der der Befehl von der SPS-Bibliothek abgearbeitet wird.

dwSlaveId

DWORD

Die Slave-Id, mit der die motorseitige Slave-Id verglichen wird.

FB_SMISlaveIdCompare 3: Ein-/Ausgänge

VAR_IN_OUT
  stCommandBuffer : ST_SMICommandBuffer;
END_VAR

Name

Typ

Beschreibung

stCommandBuffer

ST_SMICommandBuffer

Verweis auf die Struktur zur Kommunikation (Puffer) mit dem FB_KL6831KL6841Communication()-Baustein

FB_SMISlaveIdCompare 4: Ausgänge

VAR_INPUT
  bBusy                                : BOOL;
  bError                               : BOOL;
  udiErrorId                           : UDINT;
  eResSlaveAddrET0AndSlaveIdLTSerachId : E_SMICompResSlaveAddrET0AndSlaveIdLTSearchId;
  eResSlaveAddrET0AndSlaveIdGTSerachId : E_SMICompResSlaveAddrET0AndSlaveIdGTSearchId;
  eResSlaveAddrET0AndSlaveIdETSerachId : E_SMICompResSlaveAddrET0AndSlaveIdETSearchId;
  eResSlaveAddrNE0                     : E_SMICompResSlaveAddrNE0;
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).

eResSlaveAddrET0AndSlaveIdLTSerachId

E_SMICompResSlaveAddrET0AndSlaveIdLTSearchId

Bei mindestens einem Motor / Bei keinem Motor ist die Adresse gleich 0 und die Slave-Id ist kleiner als die gesuchte Slave-Id (dwSlave-Id) / Der Wert ist undefiniert.

eResSlaveAddrET0AndSlaveIdGTSerachId

E_SMICompResSlaveAddrET0AndSlaveIdGTSearchId

Bei mindestens einem Motor / Bei keinem Motor ist die Adresse gleich 0 und die Slave-Id ist größer als die gesuchte Slave-Id (dwSlave-Id) / Der Wert ist undefiniert.

eResSlaveAddrET0AndSlaveIdETSerachId

E_SMICompResSlaveAddrET0AndSlaveIdETSearchId

Bei mindestens einem Motor / Bei keinem Motor ist die Adresse gleich 0 und die Slave-Id ist ebenfalls gleich der gesuchten Slave-Id (dwSlave-Id) / Der Wert ist undefiniert.

eResSlaveAddrNE0

E_SMICompResSlaveAddrNE0

Bei mindestens einem Motor / Bei keinem Motor ist die Adresse ungleich 0 / Der Wert ist undefiniert.

Beispiele

Die folgenden Tabellen zeigen die Ergebnisse des Funktionsbausteins bei unterschiedlichen Ausgangssituationen. In allen Fällen sind zwei SMI-Geräte an einer SMI-Klemme angeschlossen und beide Adressen sind größer 0.

Die gesuchte Slave-Id (dwSlaveId) liegt zwischen den Slave-Ids der beiden Antriebe:

Ausgänge

Bedeutung

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdLTSearchId

Bei mindestens einem Motor ist die Slave-Adresse gleich 0 und die Slave-Id ist kleiner der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdGTSearchId

Bei mindestens einem Motor ist die Slave-Adresse gleich 0 und die Slave-Id ist größer der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdETSearchId

Bei keinem Motor ist die Slave-Adresse gleich 0 und die Slave-Id gleich der gesuchten Slave-Id.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

Bei keinem Motor ist die Slave-Adresse ungleich 0.

Die gesuchte Slave-Id (dwSlaveId) ist größer als die Slave-Ids der beiden Antriebe:

Ausgänge

Bedeutung

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdLTSearchId

Bei mindestens einem Motor ist die Slave-Adresse gleich 0 und die Slave-Id ist kleiner der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdGTSearchId

Bei keinem Motor ist die Slave-Adresse gleich 0 und die Slave-Id größer der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdLTSearchId

Bei keinem Motor ist die Slave-Adresse gleich 0 und die Slave-Id kleiner der gesuchten Slave-Id.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

Bei keinem Motor ist die Slave-Adresse ungleich 0.

Die gesuchte Slave-Id (dwSlaveId) ist kleiner als die Slave-Ids der beiden Antriebe:

Ausgänge

Bedeutung

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdLTSearchId

Bei keinem Motor ist die Slave-Adresse gleich 0 und die Slave-Id kleiner der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdGTSearchId

Bei mindestens einem Motor ist die Slave-Adresse gleich 0 und die Slave-Id größer der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdETSearchId

Bei keinem Motor ist die Slave-Adresse gleich 0 und die Slave-Id gleich der gesuchten Slave-Id.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

Bei keinem Motor ist die Slave-Adresse ungleich 0.

Die gesuchte Slave-Id (dwSlaveId) ist gleich der Slave-Id eines Antriebes:

Ausgänge

Bedeutung

eResSlaveAddrET0AndSlaveIdLTSerachId = eSMIDiagResNoSlaveAddrET0AndSlaveIdLTSearchId

Bei keinem Motor ist die Slave-Adresse gleich 0 und die Slave-Id kleiner der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdGTSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdGTSearchId

Bei mindestens einem Motor ist die Slave-Adresse gleich 0 und die Slave-Id größer der gesuchten Slave-Id.

eResSlaveAddrET0AndSlaveIdETSerachId = eSMIDiagResAtLeastOneSlaveAddrET0AndSlaveIdETSearchId

Bei mindestens einem Motor ist die Slave-Adresse gleich 0 und die Slave-Id gleich der gesuchten Slave-Id.

eResSlaveAddrNE0 = eSMIDiagResNoSlaveAddrNE0

Bei keinem Motor ist die Slave-Adresse ungleich 0.

Voraussetzungen

Entwicklungsumgebung

Einzubindende SPS-Bibliothek

TwinCAT ab v3.1.4020.14

Tc2_SMI ab 3.3.5.0