Optimization ¶ Function blocks for building automation optimization duties are collected in this folder. EnergyLevelSetpoint (FunctionBlock) VDI 3814 reference HeatCoolUsingOutdoorAir (FB) Functionality Cooling mode Heating mode
AzureMQTTClient (FB) ¶ FUNCTION_BLOCK AzureMQTTClient Function block to connect to Azure IoT Hub via MQTT. InOut: Scope Name Type Initial Comment Input xEnable BOOL TRUE: Opens a connection, FALSE: Close connection uiKeepAlive UINT 10 Keep alive interval in seconds (default: 10s) tPingInterval TIME TIME#2s0ms Ping interval (default: 2s) udiTimeOut UDINT 0 Defines the time (µs) after which the connection setup aborts with xError. tReconnectTime TIME TIME#0ms Time for an automatically reconnection, default is T#0s and reconnection is not acitve. sHubDomainName STRING(255) Domain name of the IoT Hub sDeviceId STRING(255) Device ID wsSaS WSTRING(255) Shared Access Signature (SAS Token) pbWillMessage POINTER TO BYTE 0 Pointer to the ‘Last Will’ message (optional) uiWillMessageSize UINT 0 Size of ‘Last Will’ message (optional) itfTLSContext NBS.ITLSContext 0 Encapsulates all the data neccecray to handle encrypted tcp connections Static initialization, as shown in the following code snippet. VAR commonName : STRING := 'MyRrasPi' ; ciCertInfo : NBS.CERT_INFO := ( psInfo := ADR ( commonName ), udiSize := LEN ( commonName )); myTLSContext : NBS.TLSContext := ( ePurpose := NBS.PURPOSE.CLIENT_SIDE , sUseCaseName := 'NBSTest' , sTLSVersion := '1.3' , ciCertInfo := ciCertInfo , udiVerificationMode := 2 ); END_VAR itfAsyncProperty NBS.IAsyncProperty 0 Runs the connect process in a own background task. Use this property if the connection setup takes longer than one task cycle (e.g. TLS connections) Output xError BOOL TRUE, if an error occurred xBusy BOOL TRUE, while the function block is active eError MQTT.MQTT_ERROR The error id xConnectedToBroker BOOL FALSE FALSE when there is no connection to Azure IoT Hub, otherwise TRUE
DeviceTwin ¶ GetMQTTDeviceTwin (FunctionBlock) SubscribeMQTTDeviceTwinDesiredProperties (FunctionBlock) UpdateMQTTDeviceTwin (FunctionBlock)
DirectMethods ¶ IMethodInvoker (Interface) Invoke (Method) IMethodInvoker2 (Interface) Invoke (Method) SubscribeMQTTMethods (FunctionBlock) SubscribeMQTTMethods2 (FunctionBlock)
EnergyLevelSetpoint (FB) ¶ FUNCTION_BLOCK EnergyLevelSetpoint Selects the energy level releated setpoint of a building (part) or system part (like a HVAC plant powering a building). The purpose of selecting an energy level is to optimize energy consumption. EnergyLevelSetpoint differentiates between four levels with increasing energy demands: “protection” “economy” “pre-comfort” “comfort” The “protection” energy level is using the minimum energy amount to prevent damage to the building fabric and the building technical installation. The building / system part is controlled using this level if temporarily out of use. The “economy” energy level is an energy saving mode of a building or system part which is not occupied or not being used for longer periods (at night, weekend etc.). The “pre-comfort” energy level is an energy saving mode of a building or system part which is supposed to reach “comfort” level within a short period. The “comfort” energy level is the state intended for nomal usage of an occupied building. VDI 3814 reference ¶ EnergyLevelSetpoint is oriented towards VDI 3814 3.1 “Optimisation functions” “Energy Mode” (6.3.6.1), but is different in some aspects. VDI 3814 “Energy Mode” (6.3.6.1) implies some aspects which at least give room for discussions: room occupation state and window contact Operation mode computation in room controllers is more complex than those two aspects. So EnergyLevelSetpoint doesnt provide those isolated aspects and leaves them up to a more complex room controller function block. Because of this there is no need for an output “current operation mode”. hysteresis for building protection limit The “no energy zone” between heat setpoint and cool setpoint is sufficient to ensure building protection and avoiding unneccesary energy consumption. Requesting a hysteresis does imply kind of two-position control - which is neither needed to request nor fully specified in VDI 3814 “Energy Mode”. So EnergyLevelSetpoint doesnt provide this and leaves this aspect up to a more complex room controller function block. current setpoint Providing just one current setpoint does imply single sequence control driven by this setpoint. Control algorithm tend to be more complex than this, multi-sequence-control is quiet often the default. So EnergyLevelSetpoint provides the current heat setpoint and cool setpoint. InOut: Scope Name Type Initial Comment Input eLevel EnergyLevel Energy level rSetptHeatComfort REAL 21.0 Heat setpoint comfort level rSetptCoolComfort REAL 23.0 Cool setpoint comfort level rSetptHeatPreComfort REAL 19.0 Heat setpoint pre-comfort level rSetptCoolPreComfort REAL 25.0 Cool setpoint pre-comfort level rSetptHeatEconomy REAL 16.0 Heat setpoint economy level rSetptCoolEconomy REAL 28.0 Cool setpoint economy level rSetptHeatProtection REAL 10.0 Heat setpoint protection level rSetptCoolProtection REAL 40.0 Cool setpoint protection level Output rSetptHeat REAL Current heat setpoint rSetptCool REAL Current cool setpoint
Message ¶ SendMQTTMessage (FunctionBlock) SubscribeMQTTMessage (FunctionBlock)
Functions ¶ GenerateSasToken (Function) SignMessage (Function) StringTokenizer (Function)
GenerateSasToken (FUN) ¶ FUNCTION GenerateSasToken : WSTRING(255) SaS Token Generator InOut: Scope Name Type Initial Comment Return GenerateSasToken WSTRING(255) Input strUrl STRING(255) Url to device for example: myHub.azure- devices.net/devices/device1 strPrimaryKey STRING Primary key of device (see Azure IoT Hub Portal) strPolicyName STRING ‘’ Policy name, e.g. empty string (‘’) for c2d or d2c messages or (‘iothubowner’) to read/write device twins. uiExpiry UINT 3600 Expiry in seconds default 3600
HeatCoolUsingOutdoorAir (FB) ¶ FUNCTION_BLOCK HeatCoolUsingOutdoorAir Using passiv cooling (and eventually heating) using outdoor air (and an outdoor air actuator) in “economy” energy level to get the indoor air temperature in the “comfort” energy level setpoint range. For an explanation of the different energy levels see EnergyLevelSetpoint . The purpose of this functionality is to optimize energy consumption. Functionality ¶ HeatCoolUsingOutdoorAir provides a optimization strategy for room temperature control using an outdoor air actuator for passive cooling (and eventually but unlikely heating). WindowActuator or an outdoor air damper / fan assembly can be used as an outdoor air actuator. Operating the outdoor air actuator is enabled only if the room is set to “economy” energy level and the outdoor air temperature is inbetween the “protection” energy level setpoints. Cooling mode ¶ In case indoor air temperature is above (comfort level) cool setpoint plus hysteresis and outdoor air temperature is below cool setpoint minus treshold the outdoor air actuator is opened. In case the indoor air temperature is falling below (comfort level) cool setpoint the outdoor air actuator is closed. Heating mode ¶ Heating mode operates vise versa, is unlikely given typical building usage and climate patterns, but it’s no hazzle to use it by chance. HeatCoolUsingOutdoorAir is oriented towards VDI 3814 3.1 “Optimisation functions” “Night-time cooling” (6.3.6.5). InOut: Scope Name Type Initial Comment Input xEnable BOOL TRUE Enable eLevel EnergyLevel Energy level rSetptHeatComfort REAL 21.0 Heat setpoint comfort level rSetptCoolComfort REAL 23.0 Cool setpoint comfort level rSetptHeatProtection REAL 10.0 Heat setpoint protection level rSetptCoolProtection REAL 40.0 Cool setpoint protection level rOdaTemp REAL 10.0 Outdoor air temperature rIdaTemp REAL 22.0 Indoor air temperature rTreshold REAL 2.0 Treshold to switch on passiv cooling / heating (in K) rHysteresis REAL 0.5 Hysteresis to switch off passiv cooling / heating (in K) Output xOpenOdaActuator BOOL Open outdoor air actuator
SignMessage (FUN) ¶ FUNCTION SignMessage : ULINT InOut: Scope Name Type Return SignMessage ULINT Input sMessage REFERENCE TO STRING(255) sKey STRING abySignature REFERENCE TO ARRAY [0..255] OF BYTE