FB_BACnet_Device

Der folgende Funktionsbaustein wird für die Anbindung des SPS-Programmes an ein lokales BACnet-Device Objekt (Server) verwendet. Die Verknüpfung des Funktionsbausteins erfolgt mit Hilfe von Prozessdaten.

Die Prozessdaten können manuell oder mittels PLC-Automapping automatisch verknüpft werden. Die für das PLC-Automapping nötigen Kommentare ( (* ~ (BACnet... | ??? | ??? ) *) ) sind bereits in der Deklaration des Funktionsbausteins enthalten. Zu den Prozessdaten des BACnet-Device Objekts sind ebenfalls die nötigen Prozessdaten für die Anbindung des BACnet Servers enthalten.

FB_BACnet_Device 1:
Bild-1: Prozessdaten des BACnet Device Objekts und -Server im System Manager.
FB_BACnet_Device 2:
Bild-2: Funktionsbaustein des BACnet Device Objekts und -Server im SPS-Programm.

Verwendung

Mit Hilfe des Funktionsbausteins "FB_BACnet_Device" wird der Zustand des lokalen BACnet Device Objects gelesen (System_Status) und im SPS-Programm ausgegeben. Zudem wird mit Hilfe des Prozessdatums "Server Control" der lokale BACnet Server gesteuert (Aktivierung und Handhabung des SPS-Backups).

Für die Verwendung des Bausteins "FB_BACnet_Device" wird zudem eine globale Instanz des Bausteins FB_BACnet_Adapter pro SPS-Projekt benötigt. Der Baustein FB_BACnet_Adapter stellt die Verbindung zwischen SPS und BACnet-Adapter im System Manager her. Diese globale Instanz wird bereits von der SPS-Bibliothek bereit gestellt. Im Folgenden ist die Hierarchie zwischen FB_BACnet_Adapter, "FB_BACnet_Device" bzw. FB_BACnet_RemoteDevice und einem Objekt vom Typ AnalogValue (AV) dargestellt:

FB_BACnet_Device 3:
Bild-3: Beispiel zur Verknüpfung der FB-Instanzen in der SPS.

Für Informationen zur Verwendung der Bausteine FB_BACnet_Adapter und -_RemoteDevice siehe FB_BACnet_Adapter bzw. FB_BACnet_RemoteDevice.

VAR_INPUT

bReset           : BOOL;
bSupportBackup   : BOOL;
nAdsPort         : UINT := 1000; (* Optional setting: Ads port of local BACnet-Server, default = 1000 *)

bReset: Zurücksetzen des Fehlerzustands bei Signalwechsel FALSE --> TRUE.

bSupportBackup: Bei Setzen des Eingangs auf TRUE wird das Sichern der persistenten Daten der SPS-Laufzeit über BACnet unterstützt. Ist dieser Modus aktiviert müssen die persistenten Dateien der SPS (standardmäßig unter: "C:\TwinCAT\Boot\") als BACnet-File Objekte angelegt und mit dem Wert "TwinCAT Configuration File" der Property File_Type versehen werden (damit sorgt der BACnet-Stack für die Sicherung der Dateien).
Bei Verwendung des BACnet-seitigen Backups der persistenten SPS-Daten sollte keine weitere Instanz des Bausteins FB_WritePersistentData in der SPS-Laufzeit verwendet werden (FB_WritePersistentData wird von FB_BACnet_Device ausgeführt)!

nAdsPort: ADS Port des lokalen BACnet-Servers. Im Standardfall ist dieser 1000 (vorausgesetzt der BACnet-Server ist das erste Element unterhalt des BACnet-Adapters im System Manager). Die Portnummer kann im System Manager abgelesen werden (siehe Bild-4):

FB_BACnet_Device 4:
Bild-4: ADS Port im System Manager

VAR_OUTPUT

eSystemStatus    : E_BACnetDeviceStatus;
sAmsNetId        : T_AmsNetId;
bBackupActive    : BOOL;
bOperational     : BOOL;
bFirstCycle      : BOOL;
bError           : BOOL;
nErrorId         : UINT;

eSystemStatus: Aktueller Status des BACnet Server Objekts (siehe BACnet-Spezifikation DIN EN ISO 16484-5 zum BACnet Device Objekt und Property System_Status).
0: BACnetDeviceStatus_Operational (Betriebsbereit)
1: BACnetDeviceStatus_OperationalReadOnly (Nur-Lese-Zugriff auf Properties)
2: BACnetDeviceStatus_DownloadRequired (Konfiguration-Laden erforderlich)
3: BACnetDeviceStatus_DownloadInProgress (Konfiguration-Laden wird ausgeführt)
4: BACnetDeviceStatus_NonOperational (Nicht-Betriebsbereit)
5: BACnetDeviceStatus_BackupInProgress (Datensicherung wird ausgeführt)

sAmsNetId: Ausgabe der AMS-NetID des lokalen BACnet-Adapters (kann für den asynchronen Zugriff via ADS auf BACnet-Objekte verwendet werden).

bBackupActive: Rückmeldung dass ein Backup via BACnet ausgeführt wird, wenn der Ausgang auf TRUE gestzt ist.

bOperational: BACnet-Device Objekt (des lokalen Servers) meldet "Operational" und der Device-Adapter meldet den Status "GetGatewayMAC" (0x03xx) oder "WaitGatewayMAC" (0x04xx) oder "Complete" (0x08xx). Fällt der Ausgang auf FALSE werden sämtliche verbundene Objekte (Bausteininstanzen) gesperrt.

bFirstCycle: Wird mit dem ersten Aufruf der Bausteininstanz nach SPS-Reset bzw. -Neustart für einen Zyklus gesetzt.

bError: Ein Fehler steht an.

nErrorId: Fehlernummer
0 = kein Fehler
1 = keine gültige AMS-NetID
20 = Fehler beim Schreiben der persistenten Daten
Die Fehlernummern können als Baustein-Konstanten über die FB-Instanz abgefragt werden (FB_BACnet_Device.nERR_xxx). Alle Fehler mit Fehlernummer größer oder gleich 20 müssen mittels bReset quittiert werden.

Eine Instanz des Bausteins FB_BACnet_Device ist immer dann nötig, wenn auf Objekte eines lokalen BACnet-Servers aus der SPS zugegriffen werden soll. Mehrere Instanzen des Bausteins FB_BACnet_Device können prinzipiell angelegt werden, führen jedoch zu einer Fehlermeldung bei Verwendung des SPS-Automappings im System Manager. Der Grund dafür liegt in der Architektur von BACnet. Unter einem BACnet-Adapter (Netzwerk-Device) kann immer nur ein BACnet-Server angelegt werden. Wird jedoch auf das SPS-Automapping verzichtet, können x-beliebige BACnet-Adapter und -Server in einem SPS-Projekt verwendet werden. Die Verknüpfung der Instanzen wird dann von Hand vorgenommen.

Der Baustein FB_BACnet_Device greift intern auf die globale Variable "pBACnet_Adapter" zu. Diese enthält eine Referenz zur globalen Instanz des Bausteins FB_BACnet_Adapter. Sollen mehrere Instanzen des Bausteins FB_BACnet_Device angelegt und von Hand im System Manager mit den entsprechenden BACnet-Servern verknüpft werden, so müssen auch mehrere Instanzen des Bausteins FB_BACnet_Adapter angelegt werden. Vor dem Aufruf der Instanz des BACnet-Server Bausteins muss zwingend vorab die zugehörige Instanz des BACnet-Adapters Bausteins erfolgen. Im Folgenden ein CFC-Beispiel (Wichtig ist die Aufrufreihenfolge der Bausteine zu beachten!):

FB_BACnet_Device 5:
Bild-5: Beispiel für das Verwenden von mehreren Adapter- und Server-Instanzen in einem SPS-Projekt.
FB_BACnet_Device 6:
Bild-6: Beispiel für den Aufruf von Bausteinen vom Typ FB_BACnet_AnalogValue mit unterschiedlichen lokalen BACnet-Servern in einem SPS-Projekt.

Die Verwendung von mehreren lokalen BACnet-Servern (-Adapter) pro SPS-Projekt ist ein Spezialfall und wird nicht empfohlen. Sinnvoll wäre (z.B. bei Verwendung mehrerer Netzwerkkarten und damit getrennte BACnet-Netzwerke) die Verwendung mehrerer SPS-Projekte und damit mehrere SPS-Laufzeiten. Der Datenaustausch zwischen den einzelnen Laufzeiten kann via Prozessdatenmapping oder ADS-Kommunikation realisiert werden. Somit wäre auch die Verwendung des SPS-Automappings für BACnet-Objekte möglich.