PLC trong hệ thống tự động hóa
PLC (Programmable Logic Controller) là bộ não điều khiển của mọi hệ thống tự động hóa công nghiệp. Từ dây chuyền đóng gói thực phẩm, hệ thống băng tải trong kho hàng, đến điều khiển HVAC toà nhà — PLC có mặt ở khắp nơi.
Siemens S7-1200 là dòng PLC compact phổ biến nhất tại Việt Nam nhờ giá thành hợp lý, hiệu năng đủ dùng và hệ sinh thái hỗ trợ rộng rãi. Bài viết này sẽ đưa bạn từ zero đến có thể viết chương trình PLC đầu tiên.
Cấu hình phần cứng S7-1200
CPU phổ biến
| CPU | DI/DO/AI | Bộ nhớ | Use case | Giá tham khảo |
|---|---|---|---|---|
| 1211C | 6/4/2 | 50KB | Máy nhỏ, điều khiển đơn giản | ~3.5 triệu |
| 1212C | 8/6/2 | 75KB | Máy đóng gói, băng tải nhỏ | ~4.5 triệu |
| 1214C | 14/10/2 | 100KB | Phổ biến nhất, đa năng | ~5.5 triệu |
| 1215C | 14/10/2+2AO | 125KB | Hệ thống phức tạp, 2 Ethernet | ~7 triệu |
Mở rộng module
Mỗi CPU hỗ trợ mở rộng:
- Signal Board (SB): Gắn trực tiếp lên CPU, thêm I/O nhỏ gọn
- Signal Module (SM): Module mở rộng bên cạnh, thêm DI/DO/AI/AO
- Communication Module (CM): RS232/RS485, PROFIBUS, AS-i
Ví dụ cấu hình cho hệ thống băng tải phân loại sản phẩm:
- CPU 1214C DC/DC/DC (14 DI, 10 DO)
- SM 1231 AI (8 analog input cho cảm biến trọng lượng)
- CM 1241 RS485 (kết nối biến tần Mitsubishi)
- SB 1232 AQ (1 analog output cho điều khiển tốc độ)
Lập trình với TIA Portal
TIA Portal (Totally Integrated Automation) là môi trường phát triển tích hợp của Siemens. Phiên bản V17 trở lên được khuyến nghị vì hỗ trợ đầy đủ OPC UA và nhiều cải tiến.
Cấu trúc chương trình
Một project TIA Portal được tổ chức theo:
Project
├── PLC_1 [CPU 1214C]
│ ├── Program blocks
│ │ ├── OB1 (Main) — Chương trình chính, chạy mỗi cycle
│ │ ├── FB1 (Motor_Control) — Function Block điều khiển motor
│ │ ├── FC1 (Calculate_Speed) — Function tính toán
│ │ └── DB1 (Motor_Data) — Data Block lưu parameters
│ ├── Technology objects
│ │ └── PID_Compact — Bộ điều khiển PID
│ └── PLC tags
│ └── Tag table — Ánh xạ I/O vật lý
Ladder Diagram (LAD)
Ngôn ngữ trực quan nhất, phù hợp cho logic điều khiển on/off. Kỹ sư điện dễ đọc và bảo trì:
// Mạch tự giữ (self-holding) điều khiển motor
|---[ I0.0 ]---[/I0.1 ]---( Q0.0 )---| I0.0: Nút START
| | I0.1: Nút STOP (NC)
|---[ Q0.0 ]--------------------------| Q0.0: Contactor motor
// Điều khiển tuần tự 3 băng tải
|---[ I0.0 ]---[TON T1, 2s]---( Q0.0 )---| Băng tải 1: chạy ngay
|---[ Q0.0 ]---[TON T2, 3s]---( Q0.1 )---| Băng tải 2: delay 2s
|---[ Q0.1 ]---[TON T3, 3s]---( Q0.2 )---| Băng tải 3: delay thêm 3s
Function Block Diagram (FBD)
Phù hợp cho xử lý analog và thuật toán PID. Ví dụ điều khiển nhiệt độ lò nung:
┌─────────────┐
│ PID_Compact │
│ │
│ Setpoint ──┤── 180.0 (°C)
│ Input ─────┤── IW64 (Thermocouple)
│ Output ────┤── QW80 (Heater SSR)
│ Kp ────────┤── 2.5
│ Ti ────────┤── 10.0s
│ Td ────────┤── 1.0s
└─────────────┘
Structured Text (SCL)
Ngôn ngữ bậc cao, giống Pascal, cho phép viết thuật toán phức tạp. Đây là ngôn ngữ được khuyến khích khi cần logic phức tạp:
// Điều khiển nhiệt độ với hysteresis và alarm
FUNCTION_BLOCK "FB_TempControl"
VAR_INPUT
Temperature : REAL; // Nhiệt độ đo được
SetPoint : REAL; // Nhiệt độ mục tiêu
Hysteresis : REAL; // Khoảng chết (thường 2-5°C)
AlarmHigh : REAL; // Ngưỡng cảnh báo cao
AlarmLow : REAL; // Ngưỡng cảnh báo thấp
END_VAR
VAR_OUTPUT
HeaterOutput : BOOL;
CoolerOutput : BOOL;
AlarmActive : BOOL;
END_VAR
// Logic điều khiển
IF Temperature > SetPoint + Hysteresis THEN
HeaterOutput := FALSE;
CoolerOutput := TRUE;
ELSIF Temperature < SetPoint - Hysteresis THEN
HeaterOutput := TRUE;
CoolerOutput := FALSE;
END_IF;
// Kiểm tra alarm
AlarmActive := (Temperature > AlarmHigh) OR (Temperature < AlarmLow);
Kết nối SCADA và giám sát
S7-1200 hỗ trợ nhiều giao thức kết nối từ firmware V4.4:
OPC UA (khuyến nghị)
OPC UA là chuẩn công nghiệp cho giao tiếp M2M. S7-1200 V4.4+ tích hợp sẵn OPC UA Server:
# Python client đọc dữ liệu từ PLC qua OPC UA
from opcua import Client
client = Client("opc.tcp://192.168.0.1:4840")
client.connect()
# Đọc nhiệt độ từ PLC
temp_node = client.get_node("ns=3;s=\"DB_Process\".\"Temperature\"")
temperature = temp_node.get_value()
print(f"Nhiệt độ hiện tại: {temperature}°C")
# Ghi setpoint
sp_node = client.get_node("ns=3;s=\"DB_Process\".\"SetPoint\"")
sp_node.set_value(180.0)
client.disconnect()
S7 Protocol + Node-RED
Cho giải pháp nhanh và linh hoạt:
{
"nodes": [
{
"type": "s7 in",
"address": "DB1,REAL0",
"name": "Read Temperature",
"interval": 1000
}
]
}
Web Server tích hợp
S7-1200 có web server tích hợp, cho phép tạo dashboard HTML đơn giản. Phù hợp cho monitoring cơ bản không cần SCADA riêng.
Tích hợp PLC với Robot (ROS 2)
Đây là phần thú vị nhất — kết nối PLC với hệ thống robot hiện đại. Kiến trúc hybrid PLC + ROS 2 tận dụng được:
- PLC: Ổn định, deterministic, xử lý safety I/O theo tiêu chuẩn an toàn robot
- ROS 2: Linh hoạt, AI/ML, path planning, computer vision
┌─────────────────────────────────────────┐
│ ROS 2 System │
│ ┌──────────┐ ┌──────────┐ ┌───────┐ │
│ │ Nav2 │ │ MoveIt2 │ │ Vision│ │
│ │ (AMR) │ │ (Arm) │ │ (CV) │ │
│ └────┬─────┘ └────┬─────┘ └───┬───┘ │
│ └──────────────┼────────────┘ │
│ ┌───────┴───────┐ │
│ │ OPC UA Bridge │ │
│ └───────┬───────┘ │
└──────────────────────┼──────────────────┘
│ OPC UA
┌──────────────────────┼──────────────────┐
│ ┌───────┴───────┐ │
│ │ S7-1200 PLC │ │
│ └───────┬───────┘ │
│ ┌──────────────┼────────────┐ │
│ ┌────┴─────┐ ┌─────┴────┐ ┌───┴───┐ │
│ │ Sensors │ │ Actuators│ │ Safety│ │
│ │ (I/O) │ │ (Motor) │ │ (E-Stop)│ │
│ └──────────┘ └──────────┘ └───────┘ │
│ PLC Layer │
└─────────────────────────────────────────┘
Debugging và Best Practices
Diagnostic buffer
S7-1200 lưu log 50 events gần nhất. Luôn kiểm tra diagnostic buffer khi gặp lỗi:
- TIA Portal → Online & Diagnostics → Diagnostic buffer
Tips từ kinh nghiệm thực tế
- Luôn dùng Symbolic names — Đặt tên tag có ý nghĩa (
Motor_Conveyor_1_Runthay vìQ0.0) - Backup project lên Git — TIA Portal project là thư mục, có thể version control được
- Comment mọi network — 6 tháng sau bạn sẽ quên logic nếu không comment
- Dùng FB thay FC khi cần lưu trạng thái — FB có instance DB, FC không có
- Test trên PLCSIM trước — TIA Portal có simulator, test logic trước khi download xuống PLC thật
- Cycle time monitoring — Giữ cycle time < 10ms cho ứng dụng motion, < 100ms cho HVAC
Lỗi thường gặp
| Lỗi | Nguyên nhân | Giải pháp |
|---|---|---|
| LED SF đỏ | Hardware fault | Check diagnostic buffer |
| Không kết nối | IP conflict hoặc firewall | Ping PLC, check subnet mask |
| Program download fail | CPU ở STOP mode | Switch sang RUN, re-download |
| Analog đọc sai | Scaling chưa đúng | Check input range (0-27648 = 0-10V) |
Lời khuyên cho người mới
- Phần cứng: Bắt đầu với CPU 1214C DC/DC/DC — giá hợp lý (~5.5 triệu), đủ tính năng để học và làm dự án thực
- Phần mềm: Dùng TIA Portal V17 trở lên để có đầy đủ OPC UA và simulator
- Học lộ trình: LAD → SCL → FB/DB → OPC UA → Tích hợp robot
- Cộng đồng: Tham gia group Siemens VN trên Facebook, diễn đàn Siemens Support
- Chứng chỉ: Siemens có chương trình SITRAIN — chứng chỉ quốc tế giá trị cho career