PLC & AI Integration
Connect AI systems with Programmable Logic Controllers, SCADA, and industrial protocols to create intelligent, adaptive process control systems.
Understanding PLCs
A Programmable Logic Controller (PLC) is a ruggedized computer designed for industrial control. PLCs execute deterministic, real-time logic to control machinery, processes, and production lines. They are the backbone of industrial automation, running 24/7 in harsh factory environments.
Integration Architecture
OPC UA Gateway
Read PLC data and write setpoints via OPC UA. The standard protocol for IT/OT convergence with built-in security.
MQTT Broker
Lightweight pub/sub messaging for streaming sensor data from PLCs to AI services. Low latency and efficient bandwidth use.
Edge AI Device
Industrial PC or edge gateway runs AI models and communicates with PLCs. Processes data locally for real-time decisions.
Cloud Analytics
Historical data analysis, model training, and dashboard visualization in the cloud. Not for real-time control, but for insights.
Reading PLC Data with Python
from opcua import Client
# Connect to PLC via OPC UA
client = Client("opc.tcp://192.168.1.100:4840")
client.connect()
# Read sensor values
temperature = client.get_node("ns=2;s=Sensor.Temperature")
vibration = client.get_node("ns=2;s=Sensor.Vibration")
pressure = client.get_node("ns=2;s=Sensor.Pressure")
temp_value = temperature.get_value()
vib_value = vibration.get_value()
pres_value = pressure.get_value()
print(f"Temperature: {temp_value}°C")
print(f"Vibration: {vib_value} mm/s")
print(f"Pressure: {pres_value} bar")
# AI makes a decision based on sensor data
if predict_anomaly(temp_value, vib_value, pres_value):
# Write recommendation back to PLC
speed_setpoint = client.get_node("ns=2;s=Motor.SpeedSetpoint")
speed_setpoint.set_value(reduced_speed)
client.disconnect()
Industrial Data Collection with MQTT
import paho.mqtt.client as mqtt
import json
def on_message(client, userdata, msg):
"""Process incoming sensor data."""
data = json.loads(msg.payload)
timestamp = data['timestamp']
sensor_id = data['sensor_id']
values = data['values']
# Store for model training
store_to_database(timestamp, sensor_id, values)
# Run real-time inference
prediction = model.predict([values])
if prediction == 'anomaly':
publish_alert(sensor_id, values)
client = mqtt.Client()
client.on_message = on_message
client.connect("mqtt-broker.factory.local", 1883)
client.subscribe("factory/line1/sensors/#")
client.loop_forever()
Industrial Protocol Comparison
| Protocol | Use Case | AI Integration | Real-Time |
|---|---|---|---|
| OPC UA | IT/OT convergence | Excellent (standard API) | Good |
| MQTT | IoT data collection | Excellent (pub/sub) | Good |
| Modbus TCP | Legacy PLC communication | Basic (register read/write) | Good |
| EtherNet/IP | Allen-Bradley PLCs | Good (via gateway) | Excellent |
| PROFINET | Siemens PLCs | Good (via gateway) | Excellent |
Safety Considerations
- AI should advise, not override: AI recommendations should go through safety-validated PLC logic before acting
- Fail-safe defaults: If the AI system fails, PLCs should revert to safe operating parameters
- Rate limiting: Limit how often AI can change setpoints to prevent oscillation
- Human approval: Critical parameter changes should require operator confirmation
Lilly Tech Systems