I/O-Automapping
TwinCAT BACnet/IP unterstützt eine automatisierte Abbildung der modularen IO-Systeme K-Bus und EtherCAT auf BACnet. Dabei wird automatisiert für jeden I/O-Kanal ein entsprechendes BACnet-Objekt der Typen BinaryInput, BinaryOutput, AnalogInput bzw. AnalogOutput angelegt, Prozessdaten entsprechend durch ein Device2Device-Mapping verknüpft und ggf. auch der Status der I/O-Systeme auf die BACnet-Property Reliability und StatusFlags übertragen.
Bei der Abbildung von I/O-Systemen werden I/O-Busse unterschieden, die jeweils eine Anzahl von I/O-Modulen zusammenfassen und jeweils einen I/O-Strang abstrahieren. Über die Zuordnung einer IoBusNr werden BACnet-I/O-Objekten einem I/O-Bus zugeordnet über den u.a. der Status abgebildet wird. Wird z.B. ein K-Bus-Strang verknüpft, kann über das Prozessdatum BusState erkannt werden, ob der K-Bus operationsbereit ist und die Property Reliability aller BACnet-Objekte mit der jeweiligen IoBusNr auf den Wert NO_FAULT_DETECTED - andernfalls auf NO_SENSOR bzw. NO_OUTPUT angepasst werden. Mit Hilfe der I/O-Busse kann mit TwinCAT BACnet/IP auch zusätzlich zu einem K-Bus z.B. ein BK9000 oder weitere EtherCAT-Stränge mit einem BACnet-Controller verknüpft werden.
Ein I/O-Bus-Automapping kann über den Reiter "Settings" eines BACnet-Servers ausgelöst werden. In dem entsprechenden Dialogfeld kann ein I/O-Bus angewählt und via Button "Map" die Verknüpfung veranlasst werden:

Derzeit werden folgende I/O-Bus-Typen unterstützt:
- EtherCAT
- BK1120, BK1250
- K-BUS: CX1100-BK, CX5000-BK, CX-8000-BK
- BK9000, BK9100, BK9050

Generell werden bei einem I/O-Automapping vom System-Manager alle Klemmen unterhalb eines I/O-Bus analysiert und entsprechende BACnet-Objekte erstellt und Prozessdaten verknüpft. In der Abbildung ist beispielhaft dargestellt wie eine digitale Ausgangsklemme (KL2114) an einem CX9001-KBus auf BACnet abgebildet wird. Es wurde entsprechend das BACnet-Objekt "Klemme 2 (KL2114)_Chn1" vom Typ BinaryOutput erstellt und die Ausgangsprozessdatenvariable "Ausgang" mit der BACnet-Prozessdatenvariable "RawIoBinaryValue" verknüpft. Diese Verknüpfung stellt sicher, dass der Status des digitalen Ausgangssignals immer dem PresentValue des BACnet-Objekts entspricht, sofern das Objekt nicht OutOfService ist. Dabei wird auch entsprechend die Polarität des "BinaryOutputs" betrachtet. Details hierzu können im Kapitel "Prozessdaten" nachgelesen werden.

Über einen entsprechenden Dialog kann das Automapping konfiguriert und festgelegt werden, ob eine automatische Bus-Status-Überwachung erfolgen soll bzw. ob die Prozessdaten entsprechend automatisch verknüpft werden können. Zusätzlich kann der Object-ID-Vergabe-Algorithmus der erstellten BACnet-Objekte festgelegt werden. Hierbei stehen zur Auswahl:
- "Use next available object identifier" - Für jedes neue BACnet-Objekt wird dabei von 0 beginnend, die nächste freie Objekt-ID für den entsprechenden Objekttyp verwendet.
- Module-basierte ID-Vergabe - Ausgehend von einer Start-ID wird die Objekt-ID bei jedem neuen I/O-Module um ein "Module increment" erhöht. Damit kann realisiert werden, dass immer an Hand BACnet-Objekt-ID ermittelt werden kann, welche Klemme verknüpft wurde. Z.B. bei einer Start-ID von 1000 und einem "Module increment" von 10 ist dem 3. binären Eingangskanal der 11. Klemme ein BinaryInput-Objekt mit der ID 1113 zugeordnet wird.
Die weiteren Konfigurationsoptionen des I/O-Automapping werden im Folgenden erläutert:
- "Create StructuredView object for mapping" - Alle für ein I/O-Mapping erzeugten BACnet-Objekte werden unterhalb eines neu erzeugten StructuredView-Objekts angelegt, um die Übersicht innerhalb des Projekts zu erhöhen
- "Default Resolution" - Analog-Objekte besitzen eine BACnet-Property "Resolution", welche die Skalierung von I/O-Prozessdaten auf das PresentValue des BACnet-Objekts bzw. umgekehrt bestimmt. Der hier konfigurierte Parameter wird bei allen erzeugten Analog-Objekten eingetragen. Sollen Hardware-Werte dabei original übernommen werden, sollte eine "Resolution" von 0 eingestellt werden.
- "Link raw PresentValue" - Um das PresentValue der BACnet-Objekte entsprechend mit den I/O-Modulen zu verknüpfen, müssen die entsprechenden RawIoPresentValue-Properties der BACnet-Objekte aktiviert und verknüpft werden. Dies kann mit Hilfe dieser Option aktiviert werden.
- "Link Status Byte" - Analoge Eingangsklemmen können über ein Statusbyte anzeigen, ob der jeweilige Prozessdatenwert gültig ist oder ggf. anzeigen, ob z.B. eine Bereichsüberschreitung oder ein Kabelbruch vorliegt. Ist diese Option aktiviert, wird bei analogen Eingangsklemmen (KX3XXX, EL3XXX) der Datenstatus der Klemme mit der BACnet-I/O-Property "RawIoStatus" verknüpft. Bei EtherCAT werden die Variablen "Underrange" und "Overrange" Bit-basiert verknüpft. Sind die entsprechenden Status-Bits gesetzt wird die Reliability zur Laufzeit wie folgt gebildet:
- Ist Bit 0 gesetzt, ist Reliability UNDER_RANGE
- Sonst ist wenn Bit 1 gesetzt Reliability OVER_RANGE
- Sonst ist wenn Bit 6 gesetzt Reliability UNRELIABLE_OTHER
- "Link coupler-/box state" - Beim K-Bus bzw. Buskopplern ( BK9000) kann über die Prozessdaten BusState/couplerState und "BoxState" der Kommunikations- und Operationszustand für alle Klemmen des Busses ermittelt werden. Die Überwachung des couplerState ist zentral über den BACnet-Server realisiert. Ist diese Option aktiviert werden vorhandene BusState/couplerState bzw. "BoxState" auf die IoBusState-Prozessdaten des BACnet-Server der jeweiligen IoBusNr verbunden. Der BusState eines K-Bus wird dabei mit couplerState verknüpft. Ist couplerState oder "BoxState" für einen I/O-Bus im BACnet-Server ungleich 0, wird die Reliability aller Objekten unter dem Server mit der entsprechenden IoBusNr auf den Wert NO_SENSOR für Eingangsobjekte bzw. NO_OUTPUT für Ausgangsobjekte gesetzt wenn die Objekte nicht OutOfService sind.
- "Link EtherCAT state" - Für EtherCAT steht ein ähnlicher Mechanismus wie Coupler/Box-State beim K-Bus zur Verfügung. Im Unterschied zum K-Bus kann bei EtherCAT der Zustand jeder Klemme ermittelt und so potentiell auch abgezogenen Klemmen erkannt werden. Deshalb wird die Status-Erkennung bei EtherCAT nicht zentral über den Server realisiert, sondern erfolgt in jedem Objekt durch die Verknüpfung der Prozessdaten-Property "RawIoECATState". Ist der Wert von "RawIoECATState" ungleich 8 (OP), wird entsprechend die Reliability des Objekts auf den Wert NO_SENSOR für Eingangsobjekte bzw. NO_OUTPUT für Ausgangsobjekte gesetzt, wenn die Objekte nicht OutOfService sind.
- "Link Wc State" - Die Überwachung des Wc-State von EtherCAT wird momentan noch nicht unterstützt.
- "Link Status Override" - Für Klemmen mit Handbetriebsmodus kann der jeweilige Handbetriebsstatus in BACnet über das Override-Bit in den StatusFlags abgebildet werden. Für die Klemmen KM4602 und KM2652 wird bei Aktivierung dieser Option eine entsprechende Verknüpfung mit der Prozessdaten-Property "RawIoStateOverride" generiert.
Die automatische Abbildung von EtherCAT- und K-Bus-Teilnehmern auf BACnet-Objekte ist nicht immer möglich. U.a. bei komplexen Klemmen ist in bestimmten Fällen nicht immer klar, ob für ein Prozessdatum ein BACnet-Objekt erstellt bzw. welches BACnet-Objekt erstellt werden soll. Für eine große Menge elementarer Ein-/Ausgabe Klemmen wird die Abbildung nach folgendem Algorithmus ausgeführt:
- Für alle 1er (KX-1XXX, EL-1XXX) Module wird für alle gefundenen Eingangsvariablen vom Typ BIT ein BACnet-BinaryInput-Objekt erstellt und das Prozessdatum verknüpft, wenn der Variablenname ungleich "WcState" und "InputToggle" ist.
- Für alle 2er (KX-2XXX, EL-2XXX) Module wird für alle gefundenen Ausgangsvariablen vom Typ BIT ein BACnet-BinaryOutput-Objekt erstellt und das Prozessdatum verknüpft.
- Für alle 3er (KX-3XXX, EL-3XXX) Module wird für alle gefundenen Eingangsvariablen vom Typ INT16 ein BACnet-AnalogInput-Objekt erstellt und das Prozessdatum verknüpft.
- Für alle 4er (KX-4XXX, EL-4XXX) Module wird für alle gefundenen Ausgangsvariablen vom Typ INT16 ein BACnet-AnalogOutput-Objekt erstellt und das Prozessdatum verknüpft.
Zusätzlich existiert eine Sonderbehandlung für folgende Klemmen:
- KL1859 - Es werden jeweils 8 BinaryInput- und 8 BinaryOutput-BACnet-Objekte angelegt.
Bei einem Automapping werden automatisch die folgenden BACnet-Properties konfiguriert:
- ObjektIdentifier - wird durch den Objekt-ID-Vergabe-Algorithmus bestimmt
- ObjektName - wird aus dem Klemmennamen plus "_ChnX" für die Kanalnummer gebildet
- IoBusNr - ausgehend von 0; wird mit jedem I/O-Automapping inkrementiert
- IoModuleNr - gibt ausgehend von 1 die Nummer der verknüpften Klemme an
- IoChannelNr - gibt ausgehend von 1 den Kanal an
- Resolution - wie im Konfigurationsdialog festgelegt