The I/Os are shown as "ports" in the body part of a Function Block object. There are input and output ports. Input ports are always shown on the left side of the object body, and output ports always on the right side. Bindings between Function Block objects are done between the ports. Each port has a specific data type, preventing the possibility to bind two incompatible ports together.
The input and outputs for the blocks, operators, etc. are defined by the I/Os built into the block definition, with exception to the Expressions blocks where the inputs are created by the user.
When hovering over a port when performing a binding action, the port gets highlighted to indicate it can be selected as a start or end port. If the port is not compatible, it will not be highlighted when hovering over it but instead show an "error cursor".
There are binary, real, integer and analog ports. Only compatible types can be bound together (e.g., a binary output port can only be bound to a binary input port), except from analog ports that are compatible with both integer and real ports.
The ports are color coded based on their data type to make it easier to see which ports are compatible:
Analog port color is dark grey.
Binary port color is purple.
Real port color is dark teal.
Integer port color is brown.
The analog port will switch color from the analog color to either the real or integer color, depending on what it is bound to. If the binding is removed from the analog port, it reverts back to the analog color.
The order of HFB block ports in a component reflects the order in which they are placed in the component, from top to bottom. HFB blocks cannot be added to the root level of a FB program, but on the component level only. For more information, see Hierarchical Function Blocks .