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.
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
| 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:
|
1 | Gateway Status: Repräsentiert den aktuellen Status des IP-Gateways:
|
8 - 15 | Device Statemachine: Spiegelt den Zustand der internen BACnet-Device-Statemachine wieder:
|
BACnet Server
| 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:
|
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
| 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:
|
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:
|
2 | Client WriteOnChange State: Aktivierungssteuerung für WriteOnChange, die im Client Control vorgegeben wird.
|
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:
|
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!
|
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
| 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.
- Die Properties von lokalen Objekten werden unterhalb eines BACnet-Server konfiguriert. Über den Dialog "Cyclic Data" kann konfiguriert werden, welche Properties als Prozessdaten verknüpftbar sind. Verknüpfbare Properties erscheinen unter einem Objekt als Prozessdatenvariablen und können mit Variablen einer SPS oder auch mit anderen I/O-Geräten (z.B. EtherCAT-Klemmen oder K-Bus-Klemmen) verknüpft werden. Properties können als lesende bzw. schreibende Prozessdaten aktiviert werden:
- Ausgangsdaten („SPS/IO -> BACnet“) sind Daten die aus einer SPS heraus in ein BACnet-Objekt kopiert werden. Diese sind als rote Variable dargestellt.
- Eingangsdaten ("BACnet -> SPS/IO"); gelb dargestellt; werden aus BACnet heraus zur SPS kopiert. Dies sind z.B. die StatusFlags eines Objekts, die in der SPS verarbeitet werden können.
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.
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
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).
- Von der SPS ist dies für BinaryOuput/-Value-Ojekte möglich. Wird in das PresentValue einer verknüpften Prioritätsstufe eines BinaryValue- oder BinaryOutput-Objekt ein Wert ungleich 0/1 geschrieben, wird der Wert NULL in das PriorityArray kopiert.
- Bei AnalogOutput/-Value-Objekten wird der Wert NULL im PriorityArray angenommen, wenn als Prozessdatum die spezielle Kodierung von REAL-Werten NaN (not a number) verwendet wird. Bei Server-Objekten wird außerdem NULL geschrieben, wenn der REAL-Wert der Prozessdaten-Variable außerhalb von Min-/MaxPresValue liegt.
- Bei MultistateOuput/-Value-Objekten wird der Wert NULL im PriorityArray angenommen, wenn als Prozessdatum eine 0 geschrieben wird. Bei Server-Objekten wird auch NULL angenommen wenn das Prozessdatum einen Wert größer als NumberOfStates annimmt.
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:
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.
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:
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.
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:
|
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:
|
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. |
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:
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:
- eine Property nicht von COV unterstützt wird (z.B. EventState)
- ein COV Increment ungleich 0.0 eingegeben wurde
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. |
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.
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.