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