The ALLEN_BRADLEY route enables communication with Rockwell Automation PLCs using native protocols. It supports ControlLogix, CompactLogix, PLC5, SLC500, Micro800, and MicroLogix families with TAG-based addressing and bidirectional communication.
Allen-Bradley PLCs use tag-based programming. Access PLC tags directly by their symbolic names for the most intuitive configuration.
The Allen-Bradley route is on beta testing. It is planned for a future release.
DEFINE ROUTE AllenBradleyPLC WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.100" WITH DEVICE_FAMILY 0 WITH SLOT 0 ADD MAPPING ProcessData WITH EVERY 500 MILLISECONDS ADD TAG Temperature WITH ADDRESS "MainProgram:Temperature" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "plc/temperature"
ADD TAG MotorSpeed WITH ADDRESS "Motor1.ActualSpeed" WITH ADDRESS_TYPE "SYMBOL" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "plc/motor1/speed" WITH SCALING 1 WITH OFFSET 0 WITH UNIT "RPM" WITH DECIMAL_PLACES 2 WITH MIN_VALUE 0 WITH MAX_VALUE 3600 WITH DEADBAND 10 WITH PUBLISH_MODE "JSON" WITH WRITABLE "false" WITH DESCRIPTION "Motor 1 actual speed in RPM"
For on-demand Allen-Bradley operations (not polling), use the EVENT syntax. Publish a message to SOURCE_TOPIC to trigger the operation; the route executes it and publishes the result to DESTINATION_TOPIC.
DEFINE ROUTE ControlLogixBasic WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.100" WITH DEVICE_FAMILY 0 WITH SLOT 0 ADD MAPPING ProcessTags WITH EVERY 500 MILLISECONDS ADD TAG Temperature WITH ADDRESS "Temperature" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "plc/temperature" WITH UNIT "°F" ADD TAG Pressure WITH ADDRESS "Pressure" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "plc/pressure" WITH UNIT "PSI" ADD TAG Running WITH ADDRESS "SystemRunning" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "plc/running"
Access tags within specific programs:
DEFINE ROUTE ProgramTags WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.100" WITH DEVICE_FAMILY 0 WITH SLOT 0 ADD MAPPING MainProgramTags WITH EVERY 500 MILLISECONDS ADD TAG Counter WITH ADDRESS "MainProgram:ProductionCounter" WITH DATA_TYPE "DINT" WITH SOURCE_TOPIC "plc/production/count" ADD TAG CycleTime WITH ADDRESS "MainProgram:CycleTimeMs" WITH DATA_TYPE "DINT" WITH SOURCE_TOPIC "plc/production/cycletime" WITH UNIT "ms" ADD TAG BatchNumber WITH ADDRESS "MainProgram:CurrentBatch" WITH DATA_TYPE "STRING" WITH SOURCE_TOPIC "plc/production/batch"
Access User Defined Type (UDT) members:
DEFINE ROUTE MotorControl WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.100" WITH DEVICE_FAMILY 0 WITH SLOT 0 ADD MAPPING Motor1Data WITH EVERY 200 MILLISECONDS ADD TAG Speed WITH ADDRESS "Motor1.ActualSpeed" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "motor1/speed" WITH UNIT "RPM" ADD TAG Current WITH ADDRESS "Motor1.Current" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "motor1/current" WITH UNIT "A" ADD TAG Running WITH ADDRESS "Motor1.Running" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "motor1/running" ADD TAG Faulted WITH ADDRESS "Motor1.Faulted" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "motor1/faulted" ADD TAG SpeedCommand WITH ADDRESS "Motor1.SpeedCmd" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "motor1/speed/cmd" WITH WRITABLE "true" WITH DESTINATION_TOPIC "motor1/speed/set"
Read array elements:
DEFINE ROUTE ArrayData WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.100" WITH DEVICE_FAMILY 0 WITH SLOT 0 ADD MAPPING SensorArrays WITH EVERY 1 SECOND ADD TAG Temp0 WITH ADDRESS "Temperatures[0]" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "sensors/temp/0" ADD TAG Temp1 WITH ADDRESS "Temperatures[1]" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "sensors/temp/1" ADD TAG Temp2 WITH ADDRESS "Temperatures[2]" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "sensors/temp/2" ADD TAG Status0 WITH ADDRESS "StatusBits[0]" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "status/bit/0"
Read values and write setpoints:
DEFINE ROUTE ControlLoop WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.100" WITH DEVICE_FAMILY 0 WITH SLOT 0 ADD MAPPING TempControl WITH EVERY 200 MILLISECONDS ADD TAG PV WITH ADDRESS "TIC100.PV" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "control/tic100/pv" WITH UNIT "°F" WITH PUBLISH_MODE "JSON" ADD TAG SP WITH ADDRESS "TIC100.SP" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "control/tic100/sp" WITH UNIT "°F" WITH WRITABLE "true" WITH DESTINATION_TOPIC "control/tic100/sp/set" WITH MIN_VALUE 32 WITH MAX_VALUE 212 ADD TAG Output WITH ADDRESS "TIC100.OUT" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "control/tic100/output" WITH UNIT "%" ADD TAG Auto WITH ADDRESS "TIC100.Auto" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "control/tic100/auto" WITH WRITABLE "true" WITH DESTINATION_TOPIC "control/tic100/auto/set"
CompactLogix typically in slot 0:
DEFINE ROUTE CompactLogix WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.50" WITH DEVICE_FAMILY 0 WITH SLOT 0 WITH TIMEOUT 5000 ADD MAPPING IOData WITH EVERY 100 MILLISECONDS ADD TAG DigitalInputs WITH ADDRESS "Local:1:I.Data" WITH DATA_TYPE "DINT" WITH SOURCE_TOPIC "compactlogix/di" ADD TAG DigitalOutputs WITH ADDRESS "Local:2:O.Data" WITH DATA_TYPE "DINT" WITH SOURCE_TOPIC "compactlogix/do" WITH WRITABLE "true" WITH DESTINATION_TOPIC "compactlogix/do/set"
Continuous monitoring with on-demand read and write events in the same route:
DEFINE ROUTE FullABSetup WITH TYPE ALLEN_BRADLEY ADD ALLEN_BRADLEY_CONFIG WITH IP "192.168.1.100" WITH DEVICE_FAMILY 0 WITH SLOT 0 ADD MAPPING ProcessTags WITH EVERY 500 MILLISECONDS ADD TAG Temperature WITH ADDRESS "Temperature" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "plc/temperature" WITH UNIT "°F" ADD TAG Pressure WITH ADDRESS "Pressure" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "plc/pressure" WITH UNIT "PSI" ADD EVENT ReadTag WITH SOURCE_TOPIC "ab/commands/read" WITH DESTINATION_TOPIC "ab/responses/read" WITH QUERY "{operation: READ, variable: MainProgram:ProductionCounter, data_type: DINT}" ADD EVENT WriteSetpoint WITH SOURCE_TOPIC "ab/commands/write" WITH DESTINATION_TOPIC "ab/responses/write" WITH QUERY "{operation: WRITE, variable: TIC100.SP, data_type: REAL, value: 0}"
The MAPPING continuously reads temperature and pressure. To trigger an on-demand counter read, publish any message to ab/commands/read. To write a setpoint, publish to ab/commands/write.