Scannen anderer BACnet-Devices
In manchen Fällen ist es notwendig, das BACnet-Netzwerk zu scannen (z. B. von einer Visualisierung aus), um externe BACnet-Devices zu identifizieren. Der FB_BACnet_Adapter bietet zwei Methoden, um einen Scanvorgang zu starten:
StartScan
StartScanEx
Der Aufruf einer dieser Funktionen erzeugt eine BACnet Who-Is-Anfrage an das Netzwerk. Alle Geräte, die diese Anfrage erhalten und den Anfrageparametern entsprechen, antworten mit dem I-Am-Service. Das Ergebnis dieses Scanvorgangs kann nach einer angemessenen Wartezeit mit der FB_BACnet_Adapter-Methode GetScanResult abgefragt werden.
GetScanResult gibt die Anzahl der im Netz gefundenen externen Geräte zurück, unabhängig von der Puffergröße zum Speichern der Ergebnisse. Im Falle eines Fehlers gibt diese Funktion -1 zurück.
Beispiel-Scanning für andere BACnet-Devices:
VAR
fbDevice : FB_BACnet_Device;
a_stScanResult : ARRAY[0..MAX_SCANRESULTS] OF ST_BACnetRM_ScanResult;
bSuccessScan : BOOL;
bScan : BOOL;
fbWaitTimer : TON;
nScanResult : DINT;
END_VAR
VAR CONSTANT
MAX_SCANRESULTS : UDINT := 200;
tWaitTime : TIME := T#5S;
END_VAR
------------------------------------------------------------------
fbDevice();
fbWaitTimer( IN := NOT fbWaitTimer.Q, PT := tWaitTime );
IF bScan THEN
bScan := FALSE;
nScanResult := -1;
bSuccessScan := BACnet_Globals.DefaultAdapter.StartScan();
END_IF
IF bSuccessScan AND fbWaitTimer.Q THEN
bSuccessScan := FALSE;
nScanResult := BACnet_Globals.DefaultAdapter.GetScanResult( ADR( a_stScanResult ), MAX_SCANRESULTS );
END_IF