Skip to main content
Logic blocks are the building components of FDD routines. Each block performs a specific operation, and you connect them to create the detection logic for fault conditions.

Read blocks

Read blocks bring point data into your FDD routine. Each Read block has three inputs (Name, Main/Secondary, Field) and two outputs (Status, Value).

Configuration fields

Field
Click inside the Field input box to open a selection dialog. Available points are scoped based on the entities defined in the routine. If you do not see a required point, verify that the routine’s entities include the field you need.
Select Field dialog in the Logic tab showing a Base dropdown expanded with Required Fields listing occupied_mode and run_status as selectable options, with Cancel and Save buttons

The Select Field dialog shows required fields scoped by the entities defined in the routine

Field
A free-form input where you assign a label to the block. Use a name that matches or closely resembles the point name for easy reference during debugging and reporting.
Toggle
Designate whether the point is the main reference point or a supporting point. Every routine must have exactly one main Read block (set to Main). When an event is generated, the system uses the main point as the reference to other modules in Cloud BMS. All other Read blocks are supporting points (Secondary).

Point types

Each Read block type outputs a different data type.

String Point

Outputs the current string reading from the selected point.
String Point block with Name, Main or Secondary, and Field inputs, and Status and Value outputs

Number Point

Outputs the current number values from the selected point.
Number Point block with Name, Main or Secondary, and Field inputs, and Status and Value outputs

Boolean Point

Outputs the current boolean values from the selected point.
Boolean Point block with Name, Main or Secondary, and Field inputs, and Status and Value outputs

Enum Point

Outputs the current enum-mapped values from the selected point. The Field input is derived from device entities and enum mapping.
Enum Point block with Name, Main or Secondary, and Field inputs, and Status and enum value outputs

Read arrays

Within a device, it is possible to have two distinct fields that share the same name. In these cases, the field is appended with an identifying number, and the status of that field is an aggregate of the numbered variants. FDD identifies the array potential of these fields and allows you to select an array Read block. For example, if a device has two compressor stages, determining whether the compressor is running requires checking both stage points. With a Read Array block, you bring in a single block instead of separate Read blocks for each stage. This simplifies the routine logic and covers all variations of multi-stage equipment within a single routine. Array blocks have Name and Field inputs and output lists where each item represents a point in the array.

String Array

Outputs a list of string values from points in the array.
String Array block with Name and Field inputs, and Status and Value list outputs

Number Array

Outputs a list of number values from points in the array.
Number Array block with Name and Field inputs, and Status and Value list outputs

Boolean Array

Outputs a list of boolean values from points in the array.
Boolean Array block with Name and Field inputs, and Status and Value list outputs

Enum Array

Outputs a list of enum values from points in the array.
Enum Array block with Name and Field inputs, and Status and Value list outputs

Parameter blocks

Parameter blocks let you define adjustable values that can be customized per project without modifying the routine logic. Values set in parameter blocks become available when configuring a routine on the Configs page. Each parameter block has three inputs (Name, Hint, Value) and one Output.
Field
A human-readable label for the parameter. Use a descriptive name that can be understood by anyone reviewing the routine. Clear naming minimizes confusion when troubleshooting or understanding the parameter’s intent later.
Field
A string input that appears when hovering over the information icon during configuration. Use as many words as necessary to communicate the parameter’s intent, expected range, and purpose.
Parameter hint tooltip showing Pressure Min Threshold value 0.40 with info icon expanded to display the hint text: How much should the duct pressure be minimally

The Hint text appears as a tooltip when hovering over the info icon during configuration

Field
The default value for the parameter. When you configure the routine on the Configs page, you alter this input to the algorithm. Most parameters require a default value.

Parameter types

String

Outputs the string specified in the value field. Values are available for customization during configuration.
String parameter block with Name, Hint, and Value inputs, and Output

Number

Outputs the number specified in the value field. Values are available for customization during configuration.
Number parameter block with Name, Hint, and Value inputs showing default 0, and Output

Boolean

Outputs the boolean specified in the value field. Values are available for customization during configuration.
Boolean parameter block with Name, Hint, and Value inputs showing default False, and Output

Arithmetical blocks

Arithmetical blocks perform mathematical operations on number inputs. Use these blocks to calculate differences, ratios, and derived values from your point data. Arithmetical blocks come in two forms: Single-input blocks accept one number input (or a static value) and produce one result.
Absolute block with one number input, a static value field, and Result output

Absolute block: outputs the absolute value of the input

Multi-input blocks accept two or more number inputs (or static values) and produce one result. Select the + button to add additional input fields.

Available operations

Sum

Outputs the post-calculated value from adding all inputs.
Sum block with two number inputs, Add Operands button, and Result output

Difference

Outputs the post-calculated value from subtracting inputs.
Difference block with two number inputs, Add Operands button, and Result output

Product

Outputs the post-calculated value from multiplying inputs.
Product block with two number inputs, Add Operands button, and Result output

Quotient

Outputs the post-calculated value from dividing inputs.
Quotient block with two number inputs, Add Operands button, and Result output

Modulo

Outputs the remainder from calculating the quotient of the inputs.
Modulo block with two number inputs and Result output

Absolute

Outputs the absolute value of the input value.
Absolute block with one number input, a static value field, and Result output

Max

Outputs the largest input value.
Max block with two number inputs, Add Inputs button, and Result output

Min

Outputs the smallest input value.
Min block with two number inputs, Add Inputs button, and Result output

Mean

Outputs the average of input values.
Mean block with two number inputs, Add Inputs button, and Result output

Array operation blocks

Array operation blocks process a series of data points collected from the same source over time. Use these blocks to analyze trends, detect patterns, and compute statistics. Each block accepts a list input and returns a single result.

Available operations

Delta

Returns the difference between the minimum value and the maximum value in the list.
Delta block with list input and Result output showing the difference between min and max values

Length

Returns the count of items in the provided list. Accepts lists of numbers, booleans, or strings.
Length block with list input and Result output showing the count of items

Max Array

Returns the largest number in the list.
Max Array block with list input and Result output showing the largest value

Min Array

Returns the smallest number in the list.
Min Array block with list input and Result output showing the smallest value

Mean Array

Returns the mean of the numbers in the list. Select between Weighted or Simple calculation mode.
Mean Array block with Weighted or Simple selector, list input, and Result output

Std Deviation

Returns the standard deviation of the numbers in the list. Select between Weighted or Simple calculation mode.
Std Deviation block with Weighted or Simple selector, list input, and Result output

Sort Array

Returns the input list sorted in the specified order. Select between Ascending or Descending.
Sort Array block with Ascending or Descending selector, list input, and sorted list Result output

Sum Array

Returns the sum of all the numbers in the list.
Sum Array block with list input and Result output showing the sum of all values

Variance

Returns the variance of the numbers in the list. Select between Weighted or Simple calculation mode.
Variance block with Weighted or Simple selector, list input, and Result output

Example workflows

Difference between highest and lowest values over five minutes: Read Number > Buffer Time (5 min) > Array Sort (Ascending) > Array Delta This workflow captures five minutes of data, sorts the values, and calculates the difference between the highest and lowest readings. 15-minute rolling average: Read Number > Buffer Time (15 min) > Array Mean This workflow buffers 15 minutes of readings and outputs the running average.

Conditional and switch blocks

Conditional and switch blocks direct the routine’s execution path based on input data.

If

The If block evaluates a boolean input and routes to one of two outputs. The Do output fires when the condition is true, and the Else output fires when the condition is false.
If block with boolean input, Do output for true condition, and Else output for false condition

Switch blocks

Switch blocks evaluate a conditional input and output the corresponding value based on whether the condition is true or false. Each switch type outputs a different data type.

String Switch

Outputs the corresponding string associated to the evaluated true or false condition.
String Switch block with conditional input, two return value inputs with static value fields, and string Result output

Numeric Switch

Outputs the corresponding number associated to the evaluated true or false condition.
Numeric Switch block with conditional input, two return value inputs with static value fields, and number Result output

Boolean Switch

Outputs the boolean associated to the evaluated true or false condition.
Boolean Switch block with conditional input, True and False return values, and boolean Result output

Logical and comparison blocks

Logical and comparison blocks perform boolean operations on inputs. Select the + button on multi-input blocks to add additional conditionals.

Logical blocks

And

Outputs true if all input values are true.
And block with two boolean inputs, Add Operands button, static value fields, and boolean Result output

Or

Outputs true if any input value is true.
Or block with two boolean inputs, Add Operands button, static value fields, and boolean Result output

Not

Returns the opposite boolean from the input.
Not block with one boolean input and inverted boolean Result output

All

Outputs true if all items in the input list match the provided value. Accepts lists of numbers, booleans, or strings.
All block with list Input, Value input, and boolean Result output

Merge

Sends data from any of its inputs to the output as observations are received, regardless of order. Inputs must be of the same data type. Select + to add additional inputs.
Merge block with 1st Input and 2nd Input, Add Inputs button, and output matching the input type

Comparison blocks

Equals

Outputs true if both inputs are evaluated as equal. Accepts number, boolean, or string operands of the same type.
Equals block with Left Operand and Right Operand inputs and boolean Result output

Greater Than

Outputs true if the left operand is greater than the right. Accepts number inputs or static values.
Greater Than block with two number inputs, static value fields, and boolean Result output

Less Than

Outputs true if the left operand is less than the right. Accepts number inputs or static values.
Less Than block with two number inputs, static value fields, and boolean Result output

In

Outputs true if the data observation received by the Value input is found as an item in the input list. Accepts lists of numbers, booleans, or strings.
In block with list Input, Value input, and boolean Result output
Combine these blocks to build complex conditions that evaluate multiple fault criteria simultaneously.

Timing and buffering blocks

Timing blocks

Timing blocks introduce delays and time windows into the detection logic. Each timing block accepts a time unit (seconds, minutes, or hours) and a count value that can be set as a static number or linked from another block’s output.

Audit

Waits for the specified amount of time and outputs the last value received from the input.
Audit block with time unit selector, count input with static value, data Input, and typed Output

Debounce

Waits for the specified amount of time and outputs a value only if that value has been unchanged during that period.
Debounce block with time unit selector, count input with static value, data Input, and typed Output

Buffer blocks

Buffer blocks collect data over a specified time window or count for use with array operations.

Buffer Time

Collects values from the input into a list that is returned after the specified amount of time.
Buffer Time block with time unit selector, count input with static value, data Input, and list Output

Buffer Count

Collects values from the input into a list that is returned when the count is satisfied.
Buffer Count block with count input with static value, data Input, and list Output

Alarm blocks

Every FDD routine must include and end with an Alarm Trigger block. When the Alarm Trigger receives a true boolean input, the system generates an event.
Alarm Trigger block with boolean input that generates an event when it receives a true value
A routine without an Alarm Trigger block cannot generate events. Verify that your logic path connects to an Alarm Trigger before saving.

Next steps

Routines

Create, test, and manage routines using the logic builder and debugger.

FDD configuration

Apply routines to your devices and configure monitoring parameters.
Last modified on August 18, 2026