FB_BACnet_WriteProp

Funktionsbaustein für den Zugriff auf BACnet Properties über ADS. Sämtliche BACnet Properties von Server und Client Objekten können über ADS gelesen bzw. geschrieben werden. Wird auf einen Client über ADS zugegriffen, dann werden die ADS Zugriffe in "Write_Property" BACnet-Abfragen umgewandelt und an den entfernten Server gesendet.

FB_BACnet_WriteProp 1:

Verwendung

Die Bausteininstanz wird im SPS Programm angelegt und zyklisch aufgerufen. Der Eingang BACnetDevicePort wird mit dem ADS Port aus der System Manager Konfiguration belegt (siehe Bild-1). Je nach Konfiguration können Ports für Server und Client variieren.

Durch Verwendung des WriteProp-Bausteins für den Zugriff z.B. auf das Present_Value kann WOC (Write On Change) auf lokale BACnet-Server-Objekte realisiert werden. Im Gegensatz zum Prozessdatenmapping kann die Priorität des Schreibzugriffs online angepasst werden. Zudem kommt es beim Prozessdatenmapping auf lokale Server-Objekte zum zyklischen Schreiben der Daten, so dass entfernte Clients nicht mit gleicher Priorität wie die lokale SPS zugreifen können.

FB_BACnet_WriteProp 2:
Bild-1: ADS Port im System Manager

Die NetId (AMS NetId) des BACnet Device kann ebenfalls im System Manager abgelesen werden (siehe Bild-2).

FB_BACnet_WriteProp 3:

Die NetId entspricht nicht der lokalen NetId und muss immer angegeben werden - keine Verwendung von Leerstrings möglich!). Eine andere Möglichkeit besteht darin, die NetId aus dem Device Baustein bzw. Adapter Baustein in der SPS abzufragen (siehe Bild-3).

FB_BACnet_WriteProp 4:
Bild-2: AMS NetId des BACnet Device

Für Informationen zur Funktionsweise des Adapter Bausteins siehe FB_BACnet_Adapter.

FB_BACnet_WriteProp 5:
Bild-3: AMS NetId des BACnet Device

VAR_INPUT

BACnetDevicePort : UINT := 16#FFFF;
bExecute         : BOOL;
sNetId           : T_AmsNetId;
ObjectType       : E_BACnetObjectType;
PropertyID       : E_BACnetPropertyIdentifier;
Priority         : E_BACnetPriority;
DataType         : E_BACnetDataTypes;
ObjectInstance   : UDINT;
ptrValue         : POINTER TO BYTE;
nLenValue        : UDINT; (* byte size of value (SIZEOF) *)

BACnetDevicePort: ADS Port unter dem das gewünschte Objekt angelegt wurde (siehe auch unter Verwendung).

bExecute: Steigende Flanke am Eingang startet den Lesevorgang. Fallende Flanke löscht den Ausgang bDone.

sNetId: AMS NetId des BACnet Devices (Adapter) unter dem der Server bzw. Client konfiguriert wurde.

ObjectType: Enumeration des Objekttypes (AnalogValue, BinaryInput...).

PropertyID: Enumeration des Property-Identifiers (Present_Value, Status_Flags...).

Priority: Enumeration der Priorität des Schreibzugriffs. Die Priorität wird bei Schreibzugriffen auf priorisierbare Properties benötigt (z.B. Present_Value). Ein Zugriff mit Priorität x erzeugt dann einen Eintrag im zugehörigen Priority_Array an x-ter Stelle.

ObjectInstance: Objekt-Nummer des BACnet Objekts (die unteren 22 Bit des Object_Identifier).

ptrValue: Zeiger auf die Variable aus der die zu schreibenden Daten entnommen werden (zu ermitteln mit ADR()).

nLenValue: Byte-Länge der Variable aus der die zu schreibenden Daten entnommen werden (zu ermitteln mit SIZEOF()).

VAR_OUTPUT

bDone        : BOOL;
bBusy        : BOOL;
bError       : BOOL;
nErrID       : UDINT;

bDone: Schreiben der Daten erfolgreich beendet. bDone bleibt so lange gesetzt bis bExecute zurückgesetzt wird. Wurde bExecute zurückgesetzt bevor bDone aktiv ist, dann wird bDone für einen Zyklus gesetzt.

bBusy: Der Baustein ist beschäftigt.

bError: Fehler während der Abarbeitung.

nErrID: ADS Fehlercode.

Beispiel

FB_BACnet_WriteProp 6:
Bild-4: Beispiel für die Verwendung
FB_BACnet_WriteProp 7:
Bild-5: Beispiel für das Schreiben bei Wertänderung (WOC)