PLC Reader¶
Class: PLCReaderBlockV1
Source: inference.enterprise.workflows.enterprise_blocks.sinks.plc.v1.PLCReaderBlockV1
The PLC Reader block reads tag values from a PLC and makes them available to the rest of the Workflow.
This block can reach the PLC three ways, selected by Connection mode in the advanced section:
- Roboflow PLC Relay (default): sends tags to the on-device PLC Relay service over HTTP. The relay owns the protocol (Allen-Bradley, Modbus, or Siemens S7), the device IP, and the tag schema, so the same Workflow runs unchanged across devices. Tags are sent in a single batch request per frame over a persistent keep-alive connection (high FPS).
- Direct (EtherNet/IP): connects straight to the PLC with
pylogix. Tags are addressed by name (e.g.Program:MainProgram.Tag1). - Direct (Modbus TCP): connects straight to the PLC with
pymodbus. Tags are addressed asarea:address(holding:100,coil:0,input:5,discrete:2); a bare number defaults to a holding register.
Address is the relay host in relay mode, or the PLC's IP address in either direct mode. The advanced section exposes the relevant extras per mode (relay port, processor slot, Modbus port / unit id).
On any failure the error is logged and that tag's entry in the output is set to
"ReadFailure" / "WriteFailure"; error_status is True if any tag failed.
Type identifier¶
Use the following identifier in step "type" field: roboflow_core/plc_reader@v1to add the block as
as step in your workflow.
Properties¶
| Name | Type | Description | Refs |
|---|---|---|---|
name |
str |
Enter a unique identifier for this step.. | ❌ |
tags_to_read |
List[str] |
PLC tags to read, entered comma-separated (e.g. camera_msg, sku_number). Relay and Direct (EtherNet/IP) modes use tag names. Direct (Modbus TCP) mode uses area:address, where area is holding, input (read-only), coil, or discrete (read-only); a bare number means a holding register (100 = holding:100). Example for Modbus: holding:100, coil:0.. |
✅ |
ip_address |
str |
Address of the PLC Relay (relay mode) or of the PLC itself (direct modes). A bare host/IP is accepted; in relay mode a full URL may also be given.. | ✅ |
connection_mode |
str |
How to reach the PLC: through the on-device PLC Relay, or directly over EtherNet/IP or Modbus TCP.. | ❌ |
relay_port |
int |
Port of the PLC Relay service (relay mode).. | ✅ |
request_timeout |
int |
Read timeout in seconds for each request to the PLC Relay service (relay mode). This must cover the relay's synchronous PLC batch transaction, which can run for seconds against a slow or disconnected PLC (especially Modbus / S7); if it is exceeded the request is abandoned and every tag in the batch is reported as a failure. Raise it for slow or flaky PLCs. (Connecting to the relay itself uses a separate short timeout, so a down relay still fails fast.). | ✅ |
processor_slot |
int |
EtherNet/IP processor slot of the PLC (direct EtherNet/IP mode).. | ✅ |
modbus_port |
int |
Modbus TCP port of the PLC (direct Modbus mode).. | ✅ |
modbus_unit_id |
int |
Modbus unit / slave id of the PLC (direct Modbus mode).. | ✅ |
The Refs column marks possibility to parametrise the property with dynamic values available
in workflow runtime. See Bindings for more info.
Available Connections¶
Compatible Blocks
Check what blocks you can connect to PLC Reader in version v1.
- inputs:
Google Gemma,Qwen 3.6 API,Clip Comparison,Buffer,Anthropic Claude,PLC EthernetIP,Anthropic Claude,Llama 3.2 Vision,Dynamic Zone,Motion Detection,Camera Focus,Roboflow Visual Search Classifier,Qwen 3.5 API,Google Gemini,Image Stack,Clip Comparison,Google Gemini,Detections List Roll-Up,GeoTag Detection,Qwen-VL,PLC ModbusTCP,Google Gemini,Google Gemma API,MoonshotAI Kimi,Roboflow Visual Search,OpenRouter,Florence-2 Model,Llama 3.2 Vision,Size Measurement,OpenAI,Dimension Collapse,OpenAI,Florence-2 Model,MoonshotAI Kimi,Anthropic Claude,OpenAI - outputs:
Keypoint Visualization,Twilio SMS/MMS Notification,Keypoint Detection Model,OPC UA Writer Sink,Blur Visualization,PLC EthernetIP,Object Detection Model,SAM 3,Segment Anything 2 Model,Color Visualization,PLC Writer,Per-Class Confidence Filter,Dynamic Zone,Motion Detection,Single-Label Classification Model,Trace Visualization,Polygon Zone Visualization,Icon Visualization,Time in Zone,Model Comparison Visualization,BoT-SORT Tracker,Image Stack,MQTT Writer,Instance Segmentation Model,Mask Visualization,Reference Path Visualization,Twilio SMS Notification,Instance Segmentation Model,Microsoft SQL Server Sink,PTZ Tracking (ONVIF),Text Display,Gaze Detection,Halo Visualization,SAM 3 Interactive,Webhook Sink,Ellipse Visualization,Pixelate Visualization,Time in Zone,Classification Label Visualization,Polygon Visualization,Instance Segmentation Model,Event Writer,Roboflow Dataset Upload,Time in Zone,Single-Label Classification Model,Keypoint Detection Model,Bounding Box Visualization,Template Matching,Slack Notification,Heatmap Visualization,Email Notification,Circle Visualization,Roboflow Custom Metadata,Multi-Label Classification Model,Perspective Correction,Roboflow Asset Library Attributes,Camera Calibration,Detections Consensus,Crop Visualization,Polygon Visualization,Keypoint Detection Model,Multi-Label Classification Model,Background Color Visualization,Model Monitoring Inference Aggregator,Stability AI Inpainting,Corner Visualization,SAM 3,Object Detection Model,Google Gemini,Roboflow Vision Events,Multi-Label Classification Model,Object Detection Model,Email Notification,Single-Label Classification Model,Triangle Visualization,Roboflow Dataset Upload,Dot Visualization,SIFT Comparison,Line Counter Visualization,Halo Visualization,Instance Segmentation Model,Label Visualization
Input and Output Bindings¶
The available connections depend on its binding kinds. Check what binding kinds
PLC Reader in version v1 has.
Bindings
-
input
tags_to_read(list_of_values): PLC tags to read, entered comma-separated (e.g.camera_msg, sku_number). Relay and Direct (EtherNet/IP) modes use tag names. Direct (Modbus TCP) mode usesarea:address, where area isholding,input(read-only),coil, ordiscrete(read-only); a bare number means a holding register (100=holding:100). Example for Modbus:holding:100, coil:0..ip_address(string): Address of the PLC Relay (relay mode) or of the PLC itself (direct modes). A bare host/IP is accepted; in relay mode a full URL may also be given..relay_port(integer): Port of the PLC Relay service (relay mode)..request_timeout(integer): Read timeout in seconds for each request to the PLC Relay service (relay mode). This must cover the relay's synchronous PLC batch transaction, which can run for seconds against a slow or disconnected PLC (especially Modbus / S7); if it is exceeded the request is abandoned and every tag in the batch is reported as a failure. Raise it for slow or flaky PLCs. (Connecting to the relay itself uses a separate short timeout, so a down relay still fails fast.).processor_slot(integer): EtherNet/IP processor slot of the PLC (direct EtherNet/IP mode)..modbus_port(integer): Modbus TCP port of the PLC (direct Modbus mode)..modbus_unit_id(integer): Modbus unit / slave id of the PLC (direct Modbus mode)..
-
output
tag_values(dictionary): Dictionary.error_status(boolean): Boolean flag.
Example JSON definition of step PLC Reader in version v1
{
"name": "<your_step_name_here>",
"type": "roboflow_core/plc_reader@v1",
"tags_to_read": [
"camera_msg",
"sku_number"
],
"ip_address": "127.0.0.1",
"connection_mode": "relay",
"relay_port": 8007,
"request_timeout": 10,
"processor_slot": 0,
"modbus_port": 502,
"modbus_unit_id": 1
}