Utilizzo di BACnet Blocchi funzione client
Inoltre BACnet oggetti, BACnet i client possono anche essere inseriti come "dispositivi" sotto a BACnet server.
Come gli oggetti e il server, anche ogni dispositivo client porta con sé un blocco funzione istanziato con lo stesso nome del dispositivo client.
A differenza di BACnet oggetti, a BACnet il client non richiede una configurazione complessa (statica). Di conseguenza, un blocco funzione client può essere utilizzato anche senza creare un file BACnet client come "dispositivo". In questo caso, però, è necessario "accedere" al proprio file BACnet server tramite RegisterToServer() nell'IEC il codice ed essere attivato in questo modo. Questa "attivazione" avviene automaticamente quando a BACnet il client viene inserito come "dispositivo".
IL BACnet i blocchi funzione client implementano il "modello di comportamento comune" e quindi forniscono input e output per il controllo del flusso.
Ingressi
xExecuteexAbortUscite
xBusy,xDone,xError, ExAbortedInput e output per i parametri e i risultati della richiesta del client
Il codice seguente utilizza il blocco funzione BACnetClientReadProperty dal BACnet libreria per inviare una richiesta di proprietà di lettura del client a un file specifico BACnet dispositivo client in BACnet rete. La risposta ricevuta viene letta in una variabile locale:
PROGRAM PLC_PRG
VAR
initDone : BOOL := FALSE;
readProp : BACnet.BACnetClientReadProperty;
readPropCnt : INT := 0;
readPropErrorCnt : INT := 0;
readPropCancelCnt : INT := 0;
readPropVal : REAL;
END_VAR
IF NOT initDone THEN
readProp.RegisterToServer(BACnet_Server);
readProp(
dwTargetDeviceNumber:= 43,
objType:= BACnet.CmpBACnet.IEC_BACNET_OBJECT_TYPE.OBJ_ANALOG_VALUE,
objInst:= 1,
propID:= BACnet.CmpBACnet.IEC_BACNET_PROPERTY_ID.PROP_PRESENT_VALUE,
nIndex:= -1);
END_IF
IF readProp.xExecute AND readProp.xBusy AND readProp.iState = 3 THEN
IF readPropCnt MOD 2 = 0 THEN // cancel every second request
readProp.xAbort := TRUE;
readPropCancelCnt := readPropCancelCnt + 1;
END_IF
END_IF
IF NOT readProp.xExecute AND NOT readProp.xAborted AND NOT readProp.xDone THEN
readProp.xExecute := TRUE;
readPropCnt := readPropCnt + 1;
END_IF
IF readProp.xExecute THEN
IF readProp.xDone THEN
readProp.xExecute := FALSE;
END_IF
IF readProp.xError THEN
readProp.xExecute := FALSE;
readPropErrorCnt := readPropErrorCnt + 1;
END_IF
IF readProp.xAborted THEN
readProp.xExecute := FALSE;
readProp.xAbort := FALSE;
END_IF
END_IF
readProp();
IF readProp.xDone OR readProp.xError THEN
IF readProp.xError THEN
// handle error
;
ELSE
readPropVal := BACnet.GetRealFromContents(readProp.result);
END_IF
END_IFFinché una richiesta del client invia una risposta, il contenuto della risposta viene fornito sotto forma di una o più variabili di output, come nell'esempio precedente. Tuttavia, questo può variare a seconda dell'azione del client. L'esempio utilizza anche la funzione ausiliaria GetRealFromContents() per leggere la variabile di output readProp.result di tipo IEC_BACNET_PROPERTY_CONTENTS.