Erweiterte Einstellungen

Im "Settings"-Reiter des BACnet-Device können erweiterte Einstellungen (Advanced Settings) vorgenommen werden, die im Folgenden erläutert werden sollen.

Erweiterte Einstellungen 1:

Speicherspezfische Parameter

Über die erweiterten Einstellungen können datenstrukturspezifische Parameter (Data Structures) angepasst werden. Im Wesentlichen beeinflussen diese Parameter den Speicherverbrauch des BACnet-Stack.

Parameter

Default-Wert (Min.-Max.)

Beschreibung

MAX_OBJ_SUBS_COV_ENTRIES

10 ( 1 - 255 )

Die COV-Subscriptions werden in TwinCAT BACnet/IP pro Objekt verwaltet. Per Default sind 10 Subscriptions pro BACnet-Objekt möglich. Mit Hilfe dieses Parameters kann die maximal mögliche Anzahl von COV-Subscriptions pro Objekt festgelegt werden. Aus Performancegründen kann es auch Sinn machen, den Wert dieses Parameters zu verringern. Damit beim Auftreten vieler Änderungen im System nicht zu viele COV-Notifications erzeugt werden.

MAX_PROPERTY_ARRAYELEMENTS

200 ( 10 - 10000 )

Bei BACnet-Properties mit Array-Datentypen in TwinCAT BACnet/IP (Datentyp endet auf []) wird beim Start Speicher für eine zuvor definierte Anzahl von Elementen angelegt damit während des Betriebs dynamisch Elemente hinzugefügt werden können. Per Default können maximal 200 Elemente in einer Array-Property gespeichert werden. Werden schon im Settings-Dialog mehr als 200 Elemente in eine Array-Property konfiguriert, wird bei Start automatisch mehr Speicher angelegt, um alle Elemente aufnehmen zu können.

LIST_ALLOC_MEM_BYTES

8192 ( 500 - 4294967295 )

Bei Properties mit Listen-Datentyp in TwinCAT BACnet/IP (Datentyp endet auf List) kann der pro Element benötigte Speicher variieren. Um auch bei diesen Properties dynamisch Elemente hinzufügen und verändern zu können, wird beim Start ein festgelegter Speicher angelegt. Per Default werden 8 kByte angelegt. Über diesen Parameter kann der Speicher pro Listen-Property definiert werden. Wie auch bei Array-Properties gilt, wenn im Settings-Dialog die Property mit mehr benötigtem Speicher konfiguriert wird, wird auch entsprechend mehr Speicher angelegt.

MAX_DEVICE_BINDINGS

1000 ( 10 - 10000 )

Jedes Gerät im BACnet-Netzwerk (das ein I-Am Paket sendet) wird in der DeviceBindings-Tabelle verwaltet. Dort werden alle für die Kommunikation mit einem Gerät benötigten Parameter gespeichert. Die Größe dieser Tabelle kann über diesen Parameter festgelegt werden. Die Tabelle wird bei jedem Neustart und beim Auslösen eines Scan-Vorgangs (z.B. im System Manager) gelöscht.

MAX_OBJECTS

1000 ( 10 - 4294967295 )

BACnet-Objekte pro BACnet-Client und BACnet-Server werden jeweils in einer Hash-Tabelle verwaltet. Dieser Parameter gibt die Größe dieser Tabellen an. Sollen in einer Konfiguration BACnet-Server und BACnet-Clients mit mehr als 1000 Objekten angelegt werden, muss dieser Parameter erhöht werden. Die Anzahl der Objekte bezieht sich auf die Summe aller unter BACnet-Server und BACnet-Clients projektierten Objekte und muss entsprechend gewählt werden. Beim Hinzufügen von BACnet-Objekten im System Manager sowie beim Einscannen von BACnet-Clients wird dieser Parameter automatisch in 100er Schritten inkrementiert. Soll zur Laufzeit das Anlegen vieler dynamischer Objekte unterstützt werden, sollte dieser Parameter manuell erhöht werden.

MAX_CLIENTS

255 ( 10 - 10000 )

Die im System Manager angelegten Clients werden in einer Liste verwaltet. Soll mit mehr als 255 (statisch im System Manager konfigurierten) Clients gearbeitet werden, muss dieser Parameterwert erhöht werden.

MAX_TRENDLOG_ENTRYSIZE

56 ( 56 - 10000 )

Auch bei TrendLog-Objekten wird der Speicher für den LogBuffer beim Start angelegt. Mit dem Parameter BufferSize kann die Anzahl der Einträge als BACnet-Property festgelegt werden. Der für einen Eintrag benötigte Speicher hängt von der geloggten Property ab. Die minimale Größe von 56 Byte ist ausreichend für FehlerLog-Einträge und für das Loggen einfacher Datentypen (REAL, Integer ...). Erscheint im LogBuffer der Eintrag: "Resources:No_space_to_write_property", reicht der verfügbare Speicher nicht aus und der Wert dieses Parameters muss erhöht werden.

DYN_TRENDLOG_BUFFERSIZE

100 ( 10 - 10000 )

Da der Speicher des TrendLog-LogBuffers beim Erzeugen des BACnet-Objekts angelegt wird, muss für dynamisch erzeugte TrendLog-Objekte bekannt sein, welchen Wert die BACnet-Property BufferSize besitzen soll. Dies wird über diesen Parameter festgelegt.

MAX_MULTISTATE_DYNSTATES

255 ( 2 - 10000 )

Bei MultiState-Objekten muss für die BACnet Property StateText beim Start Speicher angelegt werden. Hierfür muss die maximal mögliche Anzahl der Zustände (NumberOfStates) bekannt sein, da die BACnet-Property NumberOfStates während der Laufzeit verändert werden kann. Dieser Parameter legt fest, wie der Maximalwert der Property NumberOfStates sein kann und damit wie viel Speicher beim Start angelegt werden muss.

MAX_RECV_BAC_SEGM_FRAMES

1000 ( 100 - 10000 )

Segmentierte Frames müssen in ihren Bestandteilen zwischengespeichert werden, um nach dem Empfang aller Bestandteile zur ursprünglichen Nachricht vereinigt werden zu können. Je nach der angestrebten parallelen Verarbeitung segmentierter Nachrichten, muss dieser Parameter entsprechend eingestellt werden.

MAX_SEND_BAC_SEGM_FRAMES

1000 ( 100 - 10000 )

Auch beim Senden müssen Nachrichten potenziell segmentiert werden. Zum Versenden vorbereitete Frames werden in der Tabelle gespeichert. Die Größe dieser Tabelle ist über diesen Parameter einstellbar.

IO_STARTUP_TIMEOUT

2000 ( 0 - 10000 )

Die Initialisierung eines angeschlossenen Feldbusses (K-BUS, EtherCAT) kann potenziell länger dauern, als das Starten des BACnet-Servers. Dies kann dazu führen, dass über die automatische Feldbusüberwachung (Reliability, StatusFlags) alle IO-BACnet-Objekte in einen Fehlerzustand setzt, was zum einen Trendlog-Einträge mit gesetztem Fault-Bit in den StatusFlags erzeugt, aber auch potenziell Notifications versendet werden. Deshalb kann die StateMachine des BACnet Server um eine IO-Start-Zeit verzögert werden, um die erfolgreiche Initialisierung des verwendeten Feldbusses beim Start abzuwarten.

MAX_PARALLEL_COV_SUBS

250 ( 1 - 255 )

Bei bei Verwendung von Client-Prozessdaten im Modus COV kann es bei langsamen Gegenstellen zu Kommunikationsausfällen kommen bzw. COV-Anmeldungen nicht vollständig ausgeführt werden. Mit diesem Parameter kann die maximale Anzahl gleichzeitiger COV-Subscriptions-Requests pro BACnet-Client festgelegt werden.

AVERAGING_MAX_BUFFERSIZE

1000 ( 1 - 10000 )

Legt die Größe des internen Puffers beim Averaging fest. Dieser Puffer speichert Daten zur Berechnung statistischer Daten (Mittelwert etc.). Sollen mehr als 1000 Samples als Basis für die Berechnung dienen, muss dieser Parameter erhöht werden.

MAX_SENDFRAMES_PERCYCLE

4294967295 ( 1 - 4294967295 )

Um temporäre Spitzenlasten an gesendeten BACnet-Telegrammen zu begrenzen, kann die Anzahl zu sendender Frames pro Zyklus eingeschränkt werden. Bei einer Zykluszeit von 50 ms und einem Wert von 1 werden dann maximal 20 Frames/sec. versendet. Dieser Mechanismus kann dazu dienen ein Fluten des BACnet-Netzes in bestimmten Fällen zu verhindern. Generell gilt aber, dass besser die Ursache vieler gesendeter Frames gefunden und beseitigt werden sollte. Z.B. durch den Einsatz von Filtern für AnalogInput-Objekte.

PROPOSED_WINDOW_SIZE

16 ( 1 - 127 )

Bei der Übertragung großer Datenmengen wird in BACnet Segmentierung eingesetzt. Die maximale Anzahl offener unbestätigt gesendeter Nachrichten wird bei beim Verbindungsaufbau "ausgehandelt". Dieser Parameter bestimmt, welche "Fenstergröße" (also der Zahl unbestätigter Nachrichten) von diesem Gerät vorgeschlagen werden. Beim CX8091 muss dieser Wert auf 4 reduziert werden, da ansonsten Dateizugriffe auf Grund kleiner Netzspeicher nicht funktionieren.

FREERUN_CYCLETIME_MODULO

10 ( 1 - 100 )

Im Freerun werden die internen Zustandsmachinen der BACnet-Objekte mit einer Zykluszeit von 2 ms aufgerufen. Bei großen BACnet-Konfigurationen kann dies zu einer Überlastung des Systems führen. Dieser Parameter legt fest, alle wie viel Zyklen BACnet-Objekte aufgerufen werden. Im Default-Fall (10) werden die BACnet-Objekte also nur alle 20 ms verarbeitet.

ARCHIVE_BUFFER_SIZE

65535 ( 65535 - 16777216 )

Beim Speichern persistenter Daten wird ein Zwischenspeicher verwendet. Dieser Puffer sollte mindestens so groß wie die größte Property im System sein. Im typischen Fall handelt es sich dabei um die Property LogBuffer eines TrendLog-Objektes. Bei einer Größe von 40 Byte pro Eintrag (normaler Wert; kein Fehler) wird der Default-Wert 65535 dieses Parameters ab 1638 Einträgen überschritten. In diesem Fall sollte dieser Parameter erhöht werden. Bei einem LogBuffer von 3000 Einträgen sollte der Wert also auf 120.000 Byte eingestellt werden (40*3000)

Netzwerk-Adapter-Queues

Kleine Veränderungen können in BACnet leicht zum Versenden vieler Nachrichten führen. Z.B. weil viele COV-Subscriptions auf eine bestimmte Property existieren, oder viele Notification-Recipients in einer NotificationClass eingetragen wurden. Auf Grund dieser asynchronen Natur wird BACnet in einer nieder-prioren Task ausgeführt, um Verzögerungen der SPS bzw. des IO-Subsystems auszuschließen. Bei großen Konfigurationen sollte die Zykluszeit dieser Task im Bereich 40ms - 100ms konfiguriert werden. Diese Bearbeitung "im Hintergrund" führt, dazu das Netzwerkadapterfunktionen seltener ausgeführt werden. Beim Empfangen von Nachrichten können hierdurch Treiber-interne Puffer überlaufen und damit Nachrichten verloren gehen. Auch beim Senden von BACnet-Nachrichten kann es zu Überlast-Situationen der Netzwerk-Hardware kommen, wenn innerhalb eines Zyklus zu viele Nachrichten versendet, werden müssen.

Für die Verarbeitung der Netzwerknachrichten stehen deshalb in BACnet verschiedene Modi zur Verfügung, um die Funktionalität des Netzwerkadapters zu optimieren. Um Überlasten sowohl beim Senden als auch Empfangen abzufangen verwendet BACnet einen Sende- und einen Empfangspuffer deren Größe separat festgelegt werden kann. In der folgenden Abbildung ist die Arbeitsweise dieser "Queues" illustriert. Auf linke Seite werden BACnet-Nachrichten z.B. über den NDIS-Treiber empfangen. Eine Task (Q) kopiert diese in die Recv-Queue. Diese Nachrichten werden dann im Kontext der BACnet-Task (B) verarbeitet und potenziell Nachrichten versendet. Wenn genügend Ressourcen im Netzwerkadapter zur Verfügung stehen wird die Nachricht direkt versendet (1.); ansonsten werden Nachrichten in der Send-Queue zwischengespeichert und im Kontext der Task Q abgesendet.

Erweiterte Einstellungen 2:

BACnet unterstützt 3 Netzwerk-Adapter-Modi, die sich im Wesentlichen dadurch unterscheiden im Kontext welcher Task (im Bild Q) die Funktionen zum Empfangen und Senden des Netzwerk-adapters aufgerufen werden:

Über den Dialog "Network Adapter Settings" können netzwerk-adapter-spezifische Einstellungen vorgenommen werden. Die Größe der Sende- und Empfangsqueue kann separat festgelegt werden. Zusätzlich kann die Priorität der Queue-Task kann festgelegt werden und natürlich der Modus für den Netzwerk-Adapter-Betrieb ausgewählt werden.

Erweiterte Einstellungen 3:

Die einzelnen Modi sollten nach den folgenden Empfehlungen gewählt werden:

Typische Einstellung CX8091

BACnet-Task: 50ms – 100ms

SystemManager Settings

Im Dialog "BACnet System Manager Settings" können BACnet-spezifische Einstellung für die Konfigurations-Software - den TwinCAT SystemManager vorgenommen werden.

Erweiterte Einstellungen 4:

Über den Punkt "Generate ..." kann festgelegt werden, ob beim Aktivieren einer BACnet-Konfiguration StructuredView-spezifische Property-Inhalte automatisch erzeugt werden. Hierdurch ist es möglich die hierarchische Darstellung im SystemManager auch im BACnet-Netzwerk anzuzeigen. Diese Punkt ist per Default aktiviert, dass heißt die StructuredView-Informationen werden erzeugt. StructuredView ermöglichen prinzipiell die Darstellung mehrerer Sichtweisen (z.B. auf Aggregatebene, Ortsbezogen oder kaufmännisch). Sollen in einem Projekt spezifischen Vorgaben für StructuredView-Objekte implementiert werden, die über die reine Ordnung von BACnet-Objekten hinausgehen, kann dieser Punkt deaktiviert und StructuredView-Objekte manuell konfiguriert werden.

Über den Punkt "Optimize ..." kann festgelegt werden, ob die Interaktions-Modulo-Faktoren für die Interaktion mit entfernten BACnet-Geräten automatisch optimiert werden soll. Diese Funktion ist per Default aktiviert.

Über den Punkt "Fixed ..." kann festgelegt werden, dass die Objekt-Struktur unter einem BACnet-Client beim Scannen nicht verändert wird. Wenn nur wenige Objekte in die Querkommunikation integriert sind, kann es sinnvoll über das PLC-Automapping nur die verwendeten BACnet-Objekte anzufügen. Wenn dieser Punkt aktiviert wird, wird beim Scannen ein Abgleich der Objekt-Identifier anhand des BACnet-Objektnamen durchgeführt. Wenn hier Änderungen festgestellt werden, können neue ObjectIdentifier übernommen werden. Sinnvoll ist diese Funktion, auch wenn zum Projektierungszeitpunkt die ObjectIdentifier noch nicht feststehen, sondern nur die Objektnamen.

Über den Punkt "Plc ..." kann festgelegt werden, ab welcher Instanznummer beim PLC-Automapping automatisch generierte Objekt-Identifier beginnen. Diese Funktionalität wird für die Funktion Remap benötigt, um Kollisionen mit veralteten persistenten Daten (.wbp) zu vermeiden.

UDP-Port Settings

Erweiterte Einstellungen 5:

Über den Dialog "UDP Settings" kann der von BACnet verwendete UDP-Port festgelegt werden.

Zusätzlich kann hier die BACnet-Netzwerk-Nummer eingestellt werden. In reinen BACnet/IP ist die Konfiguration der Netzwerknummer in dem meisten Fällen nicht notwendig. Wenn zu Zwecken der zusätzlichen Aussplittung eines BACnet/IP-Netzwerkes die Netzwerk-Nummer auf einen Wert ungleich 0 festgelegt wird, dann wird im BACnet-Stack folgendes Verhalten umgesetzt:

Über den Punkt "Disable IP checksum check" kann die Überprüfung der IP-Checksumme deaktiviert werden. Diese Funktion sollte nur aktiviert werden, wenn unbedingt mit Geräten kommuniziert werden muss, die keine korrekte Checksummenberechnung umsetzen.