CIP Suite — EtherNet/IP Node
A CIP Suite node for communicating with Rockwell Automation and Allen-Bradley PLCs using the EtherNet/IP (Ethernet Industrial Protocol) protocol.
Overview
This node provides a robust interface for connecting FlowFuse flows to industrial control systems, specifically Rockwell Automation and Allen-Bradley programmable logic controllers (PLCs). It wraps the st-ethernet-ip library to enable real-time tag monitoring and data collection from industrial automation equipment.
The CIP Suite EtherNet/IP node is not available by default. It is part of the FlowFuse Edge Certified Nodes paid add-on. Please contact our sales team at Contact us to learn more or to request access.
What is EtherNet/IP?
EtherNet/IP (Ethernet Industrial Protocol) is an industrial network protocol that adapts the Common Industrial Protocol (CIP) to standard Ethernet. It's the primary communication protocol used by Rockwell Automation and Allen-Bradley industrial controllers, including:
- ControlLogix PLCs
- CompactLogix PLCs
- MicroLogix PLCs
- PowerFlex Drives
- PanelView HMIs
- Other Rockwell Automation/Allen-Bradley devices
How It Works with Rockwell/Allen-Bradley Hardware
This node establishes a client connection to Allen-Bradley PLCs over EtherNet/IP and provides the following capabilities:
1. Controller Discovery
When connecting, the node automatically:
- Reads controller properties (model, serial number, firmware version)
- Discovers available tags in the controller
- Retrieves controller time and status
2. Tag Subscription
The node subscribes to specific tags (variables) in the PLC and monitors them for changes:
- BOOL tags (Boolean/Digital I/O)
- DINT tags (Double Integer/32-bit integers)
- REAL tags (Floating-point values)
- STRING tags (Text data)
- Custom data types (UDTs)
3. Real-Time Monitoring
- Polls the PLC at a configurable scan rate (50ms to 36000s)
- Emits messages only when tag values change
- Maintains a cache of current tag values
- Handles Allen-Bradley string encoding (82-character strings with 4-byte length prefix)
4. Connection Management
- Automatic connection lifecycle management
- Proper cleanup on deployment or shutdown
- Error handling and status reporting
- Support for different slot configurations (backplane addressing)
Installation
Because this node is part of the FlowFuse Edge Certified Nodes add-on, make sure your account has access before installing. Contact our sales team if you don't.
Existing devices and hosted instances will not see newly added nodes until they are restarted. Restart any instance you plan to install nodes on so it picks up the updated catalogue.
Install via the Palette Manager (recommended)
- Open the Palette Manager from the top-right menu in the FlowFuse editor.
- Switch to the Install tab.
- Search for the FlowFuse Edge Certified Nodes collection.
- Locate
@flowfuse-certified-nodes/cip-suiteand click Install.
Install via npm
If you manage your palette from the command line, install the package directly:
npm install @flowfuse-certified-nodes/cip-suite
Usage
Input Message Format
Send a message with the following payload structure to initiate a PLC connection:
{
"address": "192.168.1.100",
"slot": 0,
"scanRate": 500,
"tagConfig": [
{
"scope": "",
"tags": [
{
"tagName": "ProductionCount",
"tagType": "DINT"
},
{
"tagName": "ConveyorRunning",
"tagType": "BOOL"
},
{
"tagName": "Temperature",
"tagType": "REAL"
},
{
"tagName": "PartNumber",
"tagType": "STRING"
}
]
}
]
}
Configuration Parameters
- address: IP address of the PLC (required)
- slot: Backplane slot number where the processor is located (typically 0 for CompactLogix, varies for ControlLogix)
- scanRate: Polling interval in milliseconds (50-36000000ms)
- tagConfig: Array of tag scopes containing tags to monitor
- scope: Tag scope in the controller (empty string for controller-scoped tags)
- tags: Array of tag objects
- tagName: Name of the tag in the PLC program
- tagType: Data type (BOOL, DINT, REAL, STRING, etc.)
Outputs
Output 1: PLC Data
Emits updated tag values when changes are detected:
{
"payload": {
"ProductionCount": 1250,
"ConveyorRunning": true,
"Temperature": 72.5,
"PartNumber": "ABC-123-XYZ"
},
"changedTagName": "ProductionCount",
"changedTagValue": 1250
}
Output 2: Debug/Metadata
Provides diagnostic information and PLC metadata:
{
"payload": {
"category": "plcProps",
"value": {
"name": "CompactLogix Controller",
"serial": "12345678",
"slot": 0,
"version": "31.011"
}
}
}
Categories:
plcConfig: Echoes the input configurationplcProps: Controller properties (model, serial, etc.)plcTime: Controller clock timeplcTags: Complete list of available tagsdebug: Diagnostic messageserror: Error information
Connection States
Monitor the node status to track connection health:
| State | Color | Meaning |
|---|---|---|
| connecting | blue | Initiating connection to PLC |
| reading props | blue | Reading controller properties |
| discovering tags | blue | Scanning for available tags |
| connected | green | Active and monitoring tags |
| closing | gray | Shutting down connection |
| closed | red | Disconnected and idle |
| warn - end | yellow | PLC terminated connection |
| warn - closed | yellow | Connection closed |
| error - config | red | Invalid input message |
| error - connect | red | Cannot reach PLC |
| error - prop read | red | Cannot read properties |
| error - tag discovery | red | Cannot read tag list |
| error - scan | red | Error during tag scanning |
| error - disconnect | red | Error during shutdown |
| error - controller | red | Incompatible controller type |
Example Flow
[
{
"id": "inject1",
"type": "inject",
"name": "Connect to PLC",
"topic": "",
"payload": "{\"address\":\"192.168.1.100\",\"slot\":0,\"scanRate\":500,\"tagConfig\":[{\"scope\":\"\",\"tags\":[{\"tagName\":\"Tag1\",\"tagType\":\"DINT\"}]}]}",
"payloadType": "json",
"wires": [["plcNode"]]
},
{
"id": "plcNode",
"type": "eth-ip",
"name": "Production Line PLC",
"wires": [["output"], ["debug"]]
}
]
Best Practices
Connection Management
- Any new input message will close the existing connection and establish a new one
- Use a status node to monitor connection health and implement retry logic
- Handle reconnection logic externally to the node
Network Configuration
- Ensure your FlowFuse instance can reach the PLC IP address
- Configure firewall rules to allow TCP port 44818 (EtherNet/IP)
- Use static IP addresses for PLCs in production environments
Tag Selection
- Only subscribe to tags you need to minimize network traffic
- Use appropriate scan rates based on how quickly data changes
- Faster scan rates increase CPU and network load
Error Handling
- Connect a catch node to handle errors gracefully
- Monitor the debug output for diagnostic information
- Implement reconnection strategies for production reliability
Compatibility
Tested Hardware
- Allen-Bradley ControlLogix (L7x, L8x series)
- Allen-Bradley CompactLogix (L1x, L2x, L3x series)
- Allen-Bradley MicroLogix (1100, 1400, 1500 series)
Supported Data Types
- BOOL (Boolean)
- SINT (Short Integer)
- INT (Integer)
- DINT (Double Integer)
- REAL (Floating Point)
- STRING (82-character Allen-Bradley strings)
- Custom UDTs (User Defined Types)
Troubleshooting
Cannot Connect to PLC
- Verify IP address and network connectivity (ping test)
- Check slot number matches your controller configuration
- Ensure PLC firmware supports EtherNet/IP messaging
- Verify firewall settings allow TCP 44818
Tags Not Updating
- Confirm tag names match exactly (case-sensitive)
- Verify tag scope is correct
- Check scan rate isn't too slow for your application
- Ensure tags exist in the controller
Connection Drops Frequently
- Reduce scan rate to decrease network load
- Check network stability and switch configuration
- Verify PLC isn't overloaded with connections
- Consider using unconnected messaging for multiple clients
Technical Details
This node uses unconnected messaging mode by default with a 5064ms timeout, which:
- Reduces timeout issues with multiple clients
- Works better in high-latency networks
- Allows multiple nodes to connect to the same PLC
String handling automatically decodes Allen-Bradley's proprietary format:
- First 4 bytes contain Little-Endian INT32 length
- Remaining bytes contain ASCII character data
- Maximum length of 82 characters
