Prozessdaten

In diesem Abschnitt werden die Prozessdatenvariablen der einzelnen TwinCAT BACnet/IP Elemente beschrieben. Generell werden Prozessdaten eines BACnet/IP-Device über ein asynchrones Mapping mit der SPS bzw. einem Feldbus verknüpft. Dies ist notwendig, da BACnet azyklischer Natur ist und bestimmte Dienste viele Änderungen anderer BACnet-Properties und damit das Versenden vieler BACnet-Ethernet-Frames auslösen können. Damit Verknüpfungen mit BACnet-Prozessdaten nicht zu Zykluszeitüberschreitungen in der SPS bzw. zu Watchdog-Timeouts der Feldbusse führen, wird ein asynchrones Mapping verwendet; BACnet-, SPS- und Feldbus-Tasks laufen damit unabhängig voneinander.

Prozessdaten 1:

Die Verknüpfung zu einer Task erfolgt unter dem BACnet-Device im Reiter "Settings" und "Task Configuration". Dort kann eine Task gewählt werden. Im Auswahldialog erscheinen alle Tasks mit einem Port größer 350. Links unten im Screenshot ist zu erkennen, dass eine SPS-Task ("BACnet_Demo") asynchron mit der BACnet-Task verknüpft ist, die per Default mit Priorität 58 beim Hinzufügen eines BACnet-Objekts angelegt wird.

BACnet Device

Prozessdaten 2:

Unter einem BACnet-Device finden sich als Prozessdatenvariablen der Device Status, welcher den Link-Status des verknüpfen Ethernet-Adapters beinhaltet sowie den Zustand einer internen Statemachine. Der Device-Status wird in der anschließenden Tabelle erläutert.

Zusätzlich kann die AmsNetId des BACnet-Device mit einer SPS verknüpft werden, die via ADS auf BACnet-Funktionen zugreift.

Bit

Beschreibung

0

Ethernet Link Status: Repräsentiert den aktuellen Linkstatus des verknüpften Ethernet-Adapters:

  • 0 - Link ist vorhanden.
  • 1 - Kein Link ist vorhanden.

1

Gateway Status: Repräsentiert den aktuellen Status des IP-Gateways:

  • 0 - Gateway nicht vorhanden bzw. MAC-Addresse nicht aufgelöst
  • 1 - Gateway vorhanden und MAC-Addresse aufgelöst

8 - 15

Device Statemachine: Spiegelt den Zustand der internen BACnet-Device-Statemachine wieder:

  • Init (0) - Initialer Zustand
  • CheckIpAddress (1) - Initialisieren der IP-Adresse (u.a. Warten auf DHCP - Adresse)
  • CheckParameter (2) - Verifikation von Gateway und BBMD-Parametern
  • GetGatewayMAC (3) - Wenn ein Gateway konfiguriert wurde: Aussenden eines ARP-Request
  • WaitForGatewayMAC (4) - Warten auf Auflösen der Gateway-MAC-Adresse (ARP-Reply)
  • Complete (8) - Initialisierung beendet

BACnet Server

Prozessdaten 3:

Der ServerStatus enthält unter anderem den aktuellen Zustand der internen Server-Statemachine. Der Serverzustand aus BACnet-Sicht kann mit Hilfe der Property SystemStatus ermittelt werden, die zyklisch verknüpft werden kann.

Über die IoBusState-Prozessdatenvariablen kann der Zustand einer I/O-Anbindung zentral überwacht werden. Bei der Verknüpfung eines K-Bus oder z.B. eines BK9000 gibt es einen CouplerState bzw. BoxState die den Zustand mehrerer I/O-Module abbilden. Über ein I/O-Automapping nach BACnet verknüpfte Feldbusse, können mit Hilfe dieser Prozessdaten die Reliability automatisch abbilden. Jedem Feldbusstrang wird eine IoBusNr zugeordnet, die auch eine herstellerspezifische BACnet-Property ist. Ist der Wert Prozessdatenvariable couplerState oder boxState ungleich 0, werden alle relevanten (I/O-) BACnet-Objekte des Servers mit der entsprechenden IoBusNr informiert und die Reliability entsprechend auf NO_SERVER bzw. NO_OUTPUT gesetzt. Per Default stehen 8 Io-Busse zur Verfügung.

BACnet Server Status

Bit

Beschreibung

2

WriteOnChange disabled: WriteOnChange ist über das Server-Control-Bit deaktiviert.

8 - 15

BACnet Server Statemachine: Spiegelt den Zustand der internen BACnet-Server-Statemachine wieder:

  • Init (0) - Initialer Zustand
  • Send I-Am Request (1) - Es wird ein initialer I-Am Request in das BACnet-Netzwerk gesendet.
  • Wait IO Timeout (2) - Warten auf die Freigabe der SPS-Prozessdaten und Objekt-Statemachines
  • Set System Status (3) - Property SystemStatus vom Device-Objekt wird auf Operational gesetzt
  • Complete (4) - Der BACnet Server ist einsatzbereit und funktionsfähig.
  • Backup (5) - Es wird ein BACnet-Backup ausgeführt.

BACnet Server Control

Bit

Beschreibung

0

Backup PLC feedback Enable: Sollen bei einem BACnet-Backup von der SPS generierte Daten gesichert werden, kann über dieses Bit sichergestellt werden, dass die Backup-relevanten Dateien (Configuration Files) zunächst von der SPS geschrieben werden können. Ist dieses Bit gesetzt, wartet der BACnet-Stack mit dem Bestätigen des Backup-Request bis auch Bit 1 des Server-Control-Wortes gesetzt ist. Ist dieses Bit nicht gesetzt, wird vom BACnet-Stack dieses Hand-Shake Verfahren nicht ausgeführt. Weitere Informationen zum Thema Backup und Restore finden sich im entsprechenden Kapitel dieser Dokumentation.

1

Backup PLC feedback Complete: Wurden die Backup-relevante Daten der SPS gesichert, wird über dieses Bit der BACnet-Stack angewiesen mit dem Backup fortzufahren.

2

Disable WriteOnChange: Deaktiviert das Schreiben zyklischer Prozessdaten. Kann von der SPS verwendet werden um die schreibenden Prozessdaten zurückzusetzen ohne BACnet zu manipulieren

3

Elapse IO startup timeout: Beim Systemstart werden Prozessdaten im BACnet-Stack erst nach Ablauf der IO startup time verarbeitet. Diese ist als "Advanced Parameter" konfiguriert und ist als Default auf 2000 ms vorkonfiguriert. Dies ermöglicht der SPS schreibende Prozessdaten für BACnet vorzubereiten bevor potentiell Fehlermeldungen in das BACnet-Netz gesendet werden. Zum beschleunigten Start kann diese Zeit von der SPS verkürzt werden, indem dieses Bit auf den Wert 1 gesetzt wird. Die TcBACnet.lib verwendet diese Funktionalität automatisch.

BACnet Client

Prozessdaten 4:

Zusätzlich zur Überwachung des Client-Status sollte immer auch der SystemStatus des Device-Objekts des Client als Prozessdatum aktiviert werden. Da Fehler bei der Client-Kommunikation im Client-Status nur angezeigt werden, wenn Fehler in der Kommunikation auftreten, sollte regelmäßig eine Kommunikation sichergestellt werden. Hierzu empfiehlt sich die Property SystemStatus zyklisch (mit einer entsprechend niedrigen Zykluszeit) auszulesen bzw. zu pollen.

Das Prozessdatum SystemStatus ist eine Enumeration mit dem Namen BACnetDeviceStatus und im BACnet-Standard definiert. Folgende Werte sind nach BACnet vorgesehen:

  • operational (0)
  • operational-read-only (1)
  • download-required (2)
  • download-in-progress (3)
  • non-operational (4)
  • backup-in-progress (5)
  • ...

BACnet Client Status

Bit

Beschreibung

0

Client TimeOut: Bei einem BACnet-Service-Request ist ein Timeout abgelaufen.

1

Client Service Failure: Ein Dienst mit dem projektierten Client konnte nicht erfolgreich durchgeführt werden. Dieses Fehlerbit wird gesetzt wenn:

  • Ein Client nicht erreichbar ist.
  • Eine COV-Subscription nicht erfolgreich durchgeführt werden konnte.
  • Ein WriteProperty-/ReadProperty-Request ein negatives Ergebnis brachte.

2

Client WriteOnChange State: Aktivierungssteuerung für WriteOnChange, die im Client Control vorgegeben wird.

  • 0 - WriteOnChange ist aktiv. Bei Änderung der Client-Prozessdaten werden entsprechende BACnet-Netzwerkdienste ausgelöst.
  • 1 - WriteOnChange ist deaktiviert. Prozessdaten können geändert werden ohne das BACnet-Netzwerkdienste ausgelöst werden.

3

Client COV Subscription Control State: Zeigt den Zustand der COV-Subscription-Steuerung an. Ist das Client COV Subscription Control Bit gesetzt wird dieses Bit auf 1 gesetzt wenn die COV-Subscription-Datenstrukturen zurückgesetzt wurden. Ist das Client COV Subscription Control Bit nicht gesetzt ist auch State 0. Dieses Bit gibt keine Auskunft darüber, ob alle COV-Subscriptions erfolgreich durchgeführt wurden, sondern lediglich, dass alle COV-Subscriptions in Zukunft neu ausgeführt werden.

4

Client Force Output Update State: Force Output Update ist aktiv.

8 - 15

Client Remote State: Spiegelt den Zustand der internen Client-Statemachine wieder:

  • Init (0) - Intialer Zustand
  • Connecting (1) - Aussenden eines Who-Is-Request für die Client-ID
  • WaitingForConnection (2) - Warten auf I-Am und IP-Adresse des Client. Es wird 10 Sekunden auf eine Antwort gewarten, dann wird die WhoIs-Anfrage wiederholt (Connecting).
  • RequestDeviceInformation (3) - Auslesen der Properties ApduTimeout und NumberOfApduRetries und wenn Segmentierung unterstützt wird zusätzlich MaxSegmentsAccepted, ApduSegmentTimeOut
  • Complete (4) - Client vollständig initialisiert. Es kann mit dem BACnet-Client interagiert werden.

BACnet Client Control

Bit

Beschreibung

0

Client TimeOut Reset: Zurücksetzen des Client-TimeOut-Bit im Client Status.

1

Client Service Failure Reset: Zurücksetzen des Service-Failure-Bit im Client Status.

2

Client WriteOnChange Control: Aktivierungssteuerung für WriteOnChange. WriteOnChange ist deaktiviert, wenn im Client Status das entsprechende Bit gesetzt ist!

  • 0 - WriteOnChange ist aktiv. Bei Änderung der Client-Prozessdaten werden entsprechende BACnet-Netzwerkdienste ausgelöst.
  • 1 - WriteOnChange ist deaktiviert. Prozessdaten können geändert werden ohne das BACnet-Netzwerkdienste ausgelöst werden.

3

Client COV Subscription Control: Setzt den Status der COV-Subscriptions zurück bzw. löst die Neuanmeldung von COV-Subcriptions aus. Die internen Datenstrukturen werden genau einmal zurückgesetzt (und damit die COV-Subscriptions neu ausgelöst), wenn der die Wertänderung 0 -> 1 erkannt wird.

4

Client Force Output Update State: Bei einem Wechsel von 0 nach 1 werden zum nächsten möglichen Zeitpunkt alle schreibenden Prozessdaten auf einem BACnet Client aktualisiert. Dies kann verwendet werden, um sicherzustellen, dass Werte für die gesammte Querkommunikation auf einer Gegenstelle übernommen werden und nicht zwischenzeitlich von einem anderen Gerät überschrieben wurden.

Notification Sink

Prozessdaten 5:

Die TwinCAT BACnet/IP Notification Sink ermöglicht den Empfang von COV- und Event-Notifications. Über die Prozessdaten CovNotifications und EventNotifications kann jeweils die Anzahl der empfangenen Notifications ermittelt werden. Über die ADS-Schnittstelle der Notification Sink können Notifications gelöscht und gelesen werden.

BACnet-Objekte - Properties als Prozessdaten

Properties mit nicht-komplexen Datentypen (Signed Integer, Unsigned Integer, BitField, Boolean, Real, Enumerated) können als zyklische Prozessdaten konfiguriert werden. Bei den Property-Prozessdaten muss zwischen Objekten unter einem Server (lokale Objekte) und Objekten unter einem Client (entfernte Objekte) unterschieden werden.

Auch bei entfernten (engl. "remote") Objekten können die Properties eines entfernten Gerätes als zyklische Prozessdaten bereitgestellt werden. Die Daten der Properties können dabei entweder via COV (Change of Value) azyklisch übertragen werden oder zyklisch in einem festen Intervall. Auch bei entfernten Objekten sind Daten, die von einer SPS konsumiert werden, gelb dargestellt; produzierte Daten rot.

Prozessdaten 6:

Die Abbildung zeigt eine schematische Darstellung der Verwendung von Prozessdaten bei Client- und Server-Objekten. Im Beispiel ist auf einem Server ein BinaryOutput-Objekt angelegt. Hierbei ist die Property PresentValue als Prozessdatenvariable verknüpft. Das als RawInBinaryBoolValue umgesetzte PresentValue kann auf dem Server in einer SPS verwendet werden, um z.B. eine Funktionalität in einem SPS-Programm zu beeinflussen oder kann mit einer EtherCAT/KBus-Klemme verknüpft werden, um z.B. eine Beleuchtung zu aktivieren. RawInBinaryBoolValue  ist in diesem Fall auf Server-Seite eine gelbe SPS-Eingangsvariable. In einem 2. Gerät ist das Objekt als entferntes Objekt konfiguriert. In diesem Beispiel soll der Wert des PresentValue des Serverobjekts mit Hilfe einer SPS auf dem Client verändert werden. Hierfür ist das PresentValue auf dem Client als rote Ausgangsvariable verknüpft und kann so mit der SPS verknüpft werden.

Die folgende Tabelle zeigt die Abbildung von BACnet-Datentypen zu SPS-Datentypen:

BACnet Datentyp

SPS Datentyp

Boolean

BOOL

Unsigned Integer

UDINT

Signed Integer

DINT

Real

REAL

Double

wird nicht verwendet

Bit String ( StatusFlags, EventEnable, LimitEnable usw. )

WORD

(Bei Bit-Strings ist zu beachten, dass das niederwertigste Byte dazu verwendet wird, die Anzahl nicht verwendeter Bits des höherwertigsten Bytes anzuzeigen. Ein Beispiel ist 0xE005 einer EventEnable-Property: Die 5 gibt an, dass im höherwertigsten Byte 3 Bits verwendet werden [to_offnormal, to_fault, to_normal]. 0xE0 signalisiert, dass alle 3 Bits TRUE sind. Wird eine Bit-String-Property zyklisch von der SPS nach BACnet geschrieben, müssen diese Bits entsprechend codiert werden. Gültige Werte können im Reiter "Online" der BACnet-Objekte entnommen werden.)

Enumerated (EventState, Reliability, Polarity, BinaryPV usw.)

WORD

Prozessdaten von lokalen Objekten

Bei lokalen Objekten werden (schreibende) Prozessdaten generell einmalig beim Systemstart und danach bei Änderung geschrieben. Dies bedeutet, dass potenziell der von der SPS geschriebene Wert und der Wert der beschriebenen Property voneinander abweichen können. U.a. weil z.B. via BACnet oder ADS ein weiterer Akteur den Wert geändert hat. Deshalb empfiehlt es sich, für schreibende Prozessdaten eine Rückkopplung in die SPS umzusetzen. Dieses Verhalten wurde gegenüber der Revision 6 Implementierung geändert, bei der alle Properties in jedem Zyklus geschrieben wurden. Eine Ausnahme bilden die Raw*-Properties, die in jedem Zyklus geschrieben werden.

Kommandierbare Properties

Prozessdaten 7:

BACnet bietet die Möglichkeit bestimmte (kommandierbare) Properties über einen Prioritätsmechanismus zu steuern. Der Wert der Property PresentValue der Objekte BO, BO, AO,AV, MV und MO wird dabei durch die Einträge der Property PriorityArray gesteuert. Die verschiedenen Einträge entsprechen unterschiedlicher Wichtigkeit und können von verschiedenen Akteuren im BACnet-Netzwerk beschrieben werden. Mit TwinCAT BACnet/IP können Einträge im PriorityArray von der SPS beschrieben werden. Hierzu kann im Reiter "Cyclic Data" eine Prioritätsstufe für das Schreiben der Property PresentValue gewählt werden (Die Werte werden hierdurch intern auf die Property PriorityArray kopiert.)

Um niedrigere Prioritätsstufen zum Zuge kommen zu lassen, ist es möglich eine Prioritätsstufe mit dem Wert NULL zu schreiben (freizugeben).

Pro BACnet-Objekt können mehrere Prioritätsstufen gleichzeitig von der SPS beschreiben werden.

RawIoProperties

Prozessdaten-Properties dieser Kategorie werden für die Verknüpfung von BACnet-Objekten mit I/O-Modulen und SPS-Variablen verwendet. Diese Properties stellen direkt keine BACnet-sichtbaren BACnet-Properties dar, wirken aber auf standardisierte Properties der entsprechenden Objekte bzw. werden aus ihnen gebildet. Generell gilt für RawIo-Properties, dass die BACnet-Property OutOfService wirkt. Ein Objekt wird im Folgenden OutOfService genannt, denn die BACnet-Property OutOfService hat den Wert TRUE.

Property

Beschreibung

RawIoSignedValue

Vorzeichenbehafteter 16-Bit Wert (INT) der bei Analog*-Objekten Anwendung findet. Wenn ein AnalogInput-Objekt nicht OutOfService ist, bildet der Wert dieser Prozessdatenvariable den Wert des PresentValue. Dabei wird der Wert von RawIoSignedValue in einen REAL-Datentyp konvertiert, das Resultat mit der Property Resolution multipliziert und abschließend mit der Property ScaleOffset addiert. Für AnalogOutput-Objekte wird aus dem PresentValue der Wert von RawIoSignedValue nach dem inversen Verfahren gebildet. Überschreitet dabei der Wert des PresentValue den Wertebereich des Datentypes INT (-32768 bis 32767) hat RawIoSignedValue den Wert 0. Ist ein Objekt OutOfService bleibt je nach Konfiguration der Properties FaultFallbackValue bzw. OutOfServiceFallbackValue der letzte Wert bestehen bzw. der konfigurierte Wert wird verwendet.

RawIoUnsingedValue

Vorzeichenloser 16-Bit-Wert (UINT) der bei Analog*-Objekten Anwendung findet. Wenn ein AnalogInput-Objekt nicht OutOfService ist, bildet der Wert dieser Prozessdatenvariable den Wert des PresentValue. Dabei wird der Wert von RawIoSignedValue in einen REAL-Datentyp konvertiert, das Resultat mit der Property Resolution multipliziert und abschließen mit der Property ScaleOffset addiert. Für AnalogOutput-Objekte wird aus dem PresentValue der Wert von RawIoSignedValue nach dem inversen Verfahren gebildet. Überschreitet dabei der Wert des PresentValue den Wertebereich des Datentypes UINT (0 bis 65535) hat RawIoSignedValue den Wert 0. Ist ein Objekt OutOfService bleibt je nach Konfiguration der Properties FaultFallbackValue bzw. OutOfServiceFallbackValue der letzte Wert bestehen bzw. der konfigurierte Wert wird verwendet.

RawIoBinaryEnumValue

Aufzählungstyp (in der SPS als WORD verarbeitet) der bei Binary*-Objekten Anwendung findet. Wenn OutOfService nicht TRUE ist gilt.

Bei BinaryOutput-Objekten bildet sich der Wert der Property RawIoBinaryEnumValue:

  • RawIoBinaryEnumValue ist 0 wenn PresentValueACTIVE und die Polarität NORMAL oder wenn PresentValueINACTIVE und die Polarität REVERSE ist.
  • RawIoBinaryEnumValue ist 1 wenn PresentValueINACTIVE und die Polarity NORMAL oder wenn PresentValueACTIVE und Polarity REVERSE ist.

Ist OutOfServiceTRUE nimmt die Property RawIoBinaryEnumValue bei BinaryOutput-Objekten den Wert der Property OutOfServiceFallbackValue an wenn dieser aktiviert ist, ansonsten bleibt der letzte gültige Wert erhalten.

Bei BinaryInput-Objekten bildet sich das PresentValue aus der Property RawIoBinaryEnumValue.

  • PresentValue ist ACTIVE wenn RawIoBinaryEnumValue 0 und die Polarität NORMAL oder wenn RawIoBinaryEnumValue größer 0 und die Polarität REVERSE ist.
  • PresentValue ist INACTIVE wenn RawIoBinaryEnumValue größer 0 und die Polarity NORMAL oder wenn RawIoBinaryEnumValue 0 und Polarity REVERSE ist.

ist OutOfServiceTRUE nimmt PresentValue immer den Wert von FaultFallbackValue an wenn dieser aktiv ist andernfalls nimmt PresentValue den letzten Wert an als OutOfServiceFALSE war.

RawIoBinaryBoolValue

Binärer Wert (BOOL) der bei Binary*-Objekten Anwendung findet. Die Property PresentValue der Binary*-Objekte ist in BACnet ein Auszählungstyp. Für den optimierten Umgang mit binären Objekten wurde die Property RawIoBinaryBoolValue eingeführt, die an Stelle von RawIoBinaryEnumValue verwendet werden kann.

Bei BinaryOutput-Objekten bildet sich der Wert der Property RawIoBinaryBoolValue:

  • RawIoBinaryBoolValue ist FALSE wenn PresentValueACTIVE und die Polarität NORMAL oder wenn PresentValueINACTIVE und die Polarität REVERSE ist.
  • RawIoBinaryBoolValue ist TRUE wenn PresentValueINACTIVE und die Polarity NORMAL oder wenn PresentValueACTIVE und Polarity REVERSE ist.

Ist OutOfServiceTRUE nimmt die Property RawIoBinaryEnumValue bei BinaryOutput-Objekten den Wert der Property OutOfServiceFallbackValue an wenn dieser aktiviert ist, ansonsten bleibt der letzte gültige Wert erhalten.

Bei BinaryInput-Objekten bildet sich das PresentValue aus der Property RawIoBinaryBoolValue.

  • PresentValue ist ACTIVE wenn RawIoBinaryBoolValueFALSE und die Polarität NORMAL oder wenn RawIoBinaryBoolValueTRUE und die Polarität REVERSE ist.
  • PresentValue ist INACTIVE wenn RawIoBinaryBoolValueTRUE und die Polarity NORMAL oder wenn RawIoBinaryBoolValueFALSE und Polarity REVERSE ist.

ist OutOfServiceTRUE nimmt PresentValue immer den Wert von FaultFallbackValue an wenn dieser aktiv ist andernfalls nimmt PresentValue den letzten Wert an als OutOfServiceFALSE war.

RawIoStatus

Analoge Eingangsmodule können ein Prozessdatum besitzen, welches den Zustand des physikalischen Anschlusses anzeigt (z.B. Drahtbrucherkennung, Bereichsüber-/unterschreitungen. Ist die Property RawIoStatus (Datentyp USINT) aktiv, beeinflusst diese die Property Reliability.

Die Property Reliability bildet sich aus RawIoStatus wenn das Objekt nicht OutOfService, kein IoBus-Fehler vorliegt (siehe RawIoECATState, IoBusState) und kein Status-Override aktiv ist, (siehe RawIoStateOverride*) wie folgt:

  • 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

RawIoECATState

EtherCAT-Module besitzen einen Operationsstatus, der den aktuellen Betriebszustand abbildet. Mit EtherCAT-Modulen verknüpfte BACnet-Objekte können ihre Reliability über diesen Operationsstatus bilden. Mit Hilfe von RawIoECATState können so abgezogene Module (Module-Plug) sowie Teilbusausfälle erkannt und nach BACnet abgebildet werden. Die Property Reliability bildet sich aus RawIoECATState wenn das Objekt nicht OutOfService ist wie folgt:

  • Bei Ausgangsobjekten (BO, AO, MO) gilt: Hat der Wert von Bit 0 - Bit 3 ungleich 8 (OP), ist Reliability NO_OUTPUT.
  • Bei Eingangsobjekten (BI, AI, MI) gilt: Hat der Wert von Bit 0 - Bit 3 ungleich 8 (OP), ist Reliability NO_SENSOR.

RawIoWcState

Die WcState-Überwachung wird momentan noch nicht unterstützt.

RawIoStateOverride

Einige I/O-Module besitzen einen mechanischen Handbetrieb mit dem Feldbusprozessdaten lokal überschrieben (engl. override) können. Eine Handübersteuerung kann in BACnet über die Property StatusFlags mit dem Bit OVERRIDE abgebildet werden. Ist die Prozessdatenvariable RawIoStateOverrideTRUE ist beim zugeordneten BACnet-Objekt das Bit OVERRIDE in der Property StatusFlags gesetzt andernfalls nicht, genau wenn das BACnet-Objekt nicht OutOfService ist.

RawIoStateOverrideInverted

Einige I/O-Module besitzen einen mechanischen Handbetrieb mit dem Feldbusprozessdaten lokal überschrieben (engl. override) können. Eine Handübersteuerung kann in BACnet über die Property StatusFlags mit dem Bit OVERRIDE abgebildet werden. Ist die Prozessdatenvariable RawIoStateOverrideFALSE ist beim zugeordneten BACnet-Objekt das Bit OVERRIDE in der Property StatusFlags gesetzt andernfalls nicht, genau wenn das BACnet-Objekt nicht OutOfService ist. Beispiel für die Verwendung von RawIoStatusOverrideInverted sind die Module KM2642 und KM4602.

RawIoAccumulatorUnsignedValue

RawIoAccumulatorUnsignedValue ermöglich die Erfassung von Zählwerten über eine 16-Bit Prozessdatenvariable. Diese kann z.B. mit einer KL5101 verknüpft werden. bzw. können Zählimpulse von der SPS vorgegeben werden. Der BACnet-Stack führt hierbei eine Rotationserkennung bei 32767 durch. D.h. heißt beim Übergang von 32767 nach 1 werden 2 Pulse gezählt (nach 0 und nach 1). Um einem Datenverlust beim Stoppen der SPS vorzubeugen, werden bei einem aktuellen Wert von 0 keine Operationen durchgeführt. Erst bei einem neuen Wert von 1 würde entsprechend weiter akkumuliert.
Über die Property AccumulatorIntegrationMode kann ein integrierender Modus aktiviert werden. Hat diese Property den Wert TRUE, werden nicht Änderungen der Variable RawIoAccumulatorUnsignedValue akkumuliert sondern das Produkt aus RawIoAccumulatorUnsignedValue * vergangener Zeit (in ms). Bei einem Wert von 1 wird also nach einer Sekunde 1000 akkumuliert. Diese Funktion ermöglicht z.B. die Erfassung von Luftmengen auf Basis einer aktuellen Luftmenge.

RawIoPulseConverterUnsignedValue

RawIoPulseConverterUnsignedValue hat die gleiche Funktionsweise wie RawIoAccumulatorUnsignedValue. Der Integrationsmodus wird bei PulseConverter-Objekt nicht unterstützt.

Spezielle Datenvarianten des PresentValue

Property

Beschreibung

PresentValueBool

Schedule Objekt: Ist das PresentValue eines Schedule-Objekts vom BACnet-Datentyp Boolean, spiegelt die Prozessdaten-Property PresentValueBool den aktuellen Wert der Property PresentValue wieder.

Binary*-Objekte: Die Property PresentValue von Binary*-Objekten ist in BACnet vom Datentyp BinaryPV und damit eine Enumeration. Deshalb ist das zugehörige PresentValue als Prozessdatum vom Datentyp WORD, da Enumerationen in der SPS als 16-Bit-Wert verarbeitet werden. Als optimierte Variante kann das Prozessdatum PresentValueBool vom Datentyp BOOL verwendet werden. PresentValueBool ist TRUE wenn PresentValueACTIVE ist und FALSE wenn PresentValueINACTIVE ist.

PresentValueEnumerated

Ist das PresentValue eines Schedule-Objekts eine BACnet-Enumeration, spiegelt die Prozessdaten-Property PresentValueEnumerated den aktuellen Wert der Property PresentValue wieder.

PresentValueReal

Ist das PresentValue eines Schedule-Objekts vom BACnet-Datentyp Real, spiegelt die Prozessdaten-Property PresentValueBool den aktuellen Wert der Property PresentValue wieder.

PresentValueSigned

Ist das PresentValue eines Schedule-Objekts vom BACnet-Datentyp SignedInteger, spiegelt die Prozessdaten-Property PresentValueBool den aktuellen Wert der Property PresentValue wieder.

PresentValueUnsigned

Ist das PresentValue eines Schedule-Objekts vom BACnet-Datentyp UnsignedInteger, spiegelt die Prozessdaten-Property PresentValueBool den aktuellen Wert der Property PresentValue wieder.

Remote Prozessdaten

Bei Remote-Objekten müssen Daten zum entfernten BACnet-Server übertragen werden (mit Hilfe des BACnet-WriteProperty-Dienstes). Für die Übertragung der Daten stehen in TwinCAT BACnet/IP zwei Varianten zu Auswahl. Daten können „On Change“ also bei Veränderung geschrieben werden. Hierbei wird beim Verarbeiten der Prozessdaten innerhalb von TwinCAT BACnet/IP beim Erkennen einer Änderung des Prozessdatum ein Schreibzugriff auf die entsprechende BACnet-Property ausgelöst. Dieses Verfahren entspricht der Verarbeitung lokaler Objekte. Als 2. Variante können die Daten zyklisch geschrieben werden. Achtung: Bei "Write On Change" werden die Daten genau einmal bei einer Änderung geschrieben. Wird im Nachhinein der Wert der Property von einem anderen BACnet-Gerät überschrieben, kann der Wert der Client-SPS vom Property-Wert abweichen! Hier empfiehlt sich ggf. die Rückkopplung der BACnet-Properties als Eingangsvariable. Auch bei "Write On Change" werden Daten maximal mit der eingestellten Zykluszeit übertragen. Über den Dialog "Cyclic Out Data" können schreibende Prozessdaten für entfernte Objekte konfiguriert werden:

Prozessdaten 8:

Bei kommandierbaren Properties kann für den Schreibzugriff eine Priorität gewählt werden. Diese Priorität wird dann im WriteProperty-Request übertragen.

Eine Besonderheit bei schreibenden Remote-Prozessdaten ist eine automatische Verriegelung beim Stopp der SPS. Fällt im BACnet-Server-Steuerwort(Control) Bit3 (ElapseIoActiveTime) von 1 nach 0 wird automatisch für jeden BACnet-Client die DisableWriteOnChange-Funktion aktiviert. Erst bei einem erneuten Setzen dieses Bits auf 1 können wieder entfernte Prozessdaten geschrieben werden. Diese Verriegelung ist erforderlich um bei einem Stopp der SPS ein Fluten des BACnet-Netzes mit "0" zu verhindern.

Lesende Prozessdaten von entfernten BACnet-Objekten werden über den Reiter "Cyclic In Data" konfiguriert. Als Basiskonfiguration kann in diesem Dialog ausgewählt werden, ob Daten bei Änderung (COV) oder zyklisch übertragen werden sollen. Zusätzlich kann festgelegt werden, in welchem Abstand neue Abonnements für Änderungsmeldungen (Resubscription Intervall) durchgeführt werden sollen. Über das COV Increment kann bei Properties mit Gleitkommawerten vorgegeben werden, in welcher "Auflösung" Daten übertragen werden sollen. Die CycleTime gibt vor mit welcher Periodendauer zyklische Daten gelesen werden.

BACnet unterstützt zwei Dienste für die Übertragung von Änderungsmeldungen. Der Dienst COV-P erlaubt die Übertragung von Änderungen sämtlicher Properties. Zusätzlich kann bei Properties mit Gleitkommawerten pro Subscription ein COV-Increment vorgegeben werden. Der Dienst COV erlaubt nur die Übertragung von speziell festgelegten Properties bei ausgewählten Objekten (z.B. PresentValue, StatusFlags). COV wird von vielen Herstellern unterstützt; COV-P wird nur von einigen. Um maximale Kompatibilität zu erreichen wird, wenn immer möglich, versucht den Dienst COV zu verwenden.

COV-P wird verwendet wenn:

Prozessdaten 9:

Der TwinCAT BACnet/IP Stack der Revision 12 unterstützt umfangreichere weitere Modi für die Übertragung von Prozessdaten entfernter BACnet-Objekte. Diese Übertragungsmodi können nicht im Reiter "Cyclic In Data" konfiguriert werden, da immer mehrere BACnet-Properties gleichzeitig betroffen sind. Einige der in der folgenden Tabelle dargestellten Modi können nur über das SPS-Automapping oder mit dem Prozessdaten-Wizard aktiviert werden.

Voraussetzungen

Übertragungsart

Beschreibung

Unconfirmed COV

Dieser Modus wird im Dialog "Cyclic In Data" aktiviert. Property-Werte werden als unbestätigte Änderungsmeldungen verschickt (UnconfirmedCOV). Dass heißt der Absender stellt nicht sicher, dass die Daten tatsächlich ausgeliefert werden. Um diesen Modus verwenden zu können, muss die Gegenstelle den Dienst COV bzw. COV-P für die aktivierte Property unterstützen. Dieser Modus kann in zuverlässigen Netzwerken verwendet werden.

Confirmed COV

Bei diesem Modus werden Änderungsmeldungen bestätigt ausgeliefert (ConfirmedCOV). Der Sender wartet nach dem Absenden einer Änderungsmeldung die konfigurierte APDU-Timeout (Device-Objekt) ab. Wurde die Änderungsmeldung nicht bestätigt, wird die Meldung nochmals gesendet bis die APDURetries (Device-Objekt)  erreicht sind. Um diesen Modus verwenden zu können, muss die Gegenstelle den Dienst COV bzw. COV-P für die aktivierte Property unterstützen. Dieser Modus sollte in Netzwerken mit temporären Überlasten verwendet werden bzw. wenn sichergestellt sein muss, dass Änderungsmeldungen ausgeliefert wurde. Zu beachten ist, dass maximal 255 gleichzeitige Änderungen zu einer Gegenstelle übertragen werden können.

Unsolicited COV

Bei den Modi Unconfirmed COV und Confirmed COV werden Änderungen durch den Dienst SubscribeCOV abonniert. Die Gegenstelle speichert dieses Abonnement in einer Tabelle, die oft eine begrenzte Größe besitzt. Wenn sich in einem Netzwerk viele Geräte für Änderungen einer bestimmten Property registrieren (z.B. Wetterdaten), kann es sinnvoll sein, den Dienst Unsolicited COV zu verwenden. Hierbei kann auf eine Registrierung verzichtet werden. Änderungen werden vom Quellgerät als Broadcast (Nachricht an alle Teilnehmer im Netzwerk) automatisch versendet. Wenn dieser Modus für Client-Prozessdaten verwendet wird, wird beim TwinCAT-Start die entsprechende Property einmalig mittels ReadProperty gelesen (Initialwert), danach werden die zugehörigen Broadcast-Telegramme ausgewertet. Details zur Konfiguration von Unsolicited COV als Client und Server finden sich am Ende dieses Kapitels.

ReadProperty (Polling)

 Dieser Modus wird im Dialog "Cyclic In Data" aktiviert. Property-Werte werden zyklisch mittels ReadProperty übertragen.

ReadPropertyMultiple pro Objekt (RPM-O)

Mit dem Dienst ReadPropertyMultiple können in BACnet mehrere Property-Werte mit einer Nachricht übertragen werden. Müssen von einem entfernten BACnet-Geräte viele Property-Daten als Prozessdaten übertragen werden, kann der Modus RPM-O verwendet werden. Hierbei werden zyklische Read-Zugriffe auf mehrere Properties in einer Nachricht pro Objekt zusammengefasst.

ReadPropertyMultiple pro Client (RPM-C)

Mit dem Dienst ReadPropertyMultiple können in BACnet mehrere Property-Werte mit einer Nachricht übertragen werden. Müssen von einem entfernten BACnet-Geräte viele Property-Daten als Prozessdaten übertragen werden, kann der Modus RPM-C verwendet werden. Im Gegensatz zu RPM-O werden bei RPM-C alle Property-Werte aller Objekte zu einer Nachricht zusammengefasst. Der BACnet-Stack optimiert die Anfragegröße automatisch, dass eine Segmentierung auf BACnet-Ebene vermieden wird (Nachrichten werden auf ca. < 1400 Byte pro Nachricht begrenzt.
Diese Übertragungsart kann bei langsamen Netzwerken eingesetzt werden in denen viele Property-Daten übertragen werden müssen.

Unsolicited COV - Client Konfiguration

Bei der Funktionalität Unsolicited COV werden Änderungsmeldungen ohne vorherige Anmeldung (COV-Subscription) im BACnet-Netzwerk verschickt. Diese Funktion wird z.B. von Raumbediengeräten oder Wetterstationen verwendet. Um diese Änderungsmeldungen als Client-Prozessdaten zu konsumieren, kann der Modus Unsolicited COV verwendet werden. Über den Property-Wizard kann dieser Modus gewählt werden, indem alle gewünschten Objekte des BACnet-Client ausgewählt, Properties selektiert und abschließend der neue Modus im Feld "Change Process Data In Configuration (Read)" aktiviert wird. In diesem Modus wird einmalig beim Start ein Initialwert via ReadProperty gelesen und anschließend die Änderungsmeldungen verarbeitet.

Prozessdaten 10:

Unsolicited COV - Server-Konfiguration

TwinCAT BACnet/IP unterstützt auch die Unsolicited COV Server Funktionalität. Das heißt, es können Änderungsmeldungen ohne vorherige Anmeldung als Broadcast im BACnet-Netz versendet werden. Unsolicited COV wird über eine (oder mehrere) Notification Sinks konfiguriert. Über das Kontextmenü im "Settings"-Reiter kann Unsolicited COV über die CheckBox "Use unsolicited COV Broadcasts" aktiviert werden. Dies bewirkt, das alle konfigurierten COV Subscriptions intern mit Broadcast-Repicient (Empfänger) gespeichert und verarbeitet werden. Über die COV-Subscription-Liste können auch Einstellung wie das COV-Increment festgelegt werden.

Über den Property-Wizard im Kontext-Menü können über eine Liste die Properties ausgewählt werden, bei denen bei Änderung Meldungen verschickt werden sollen.

Prozessdaten 11: