← Quay lại Blog
otherplcautomation

Lập trình PLC Siemens S7-1200: Từ cơ bản đến ứng dụng

Tổng quan về lập trình PLC với TIA Portal — từ cấu hình phần cứng, viết ladder diagram đến kết nối SCADA trong hệ thống tự động hóa.

Nguyễn Anh Tuấn10 tháng 4, 20257 phút đọc
Lập trình PLC Siemens S7-1200: Từ cơ bản đến ứng dụng

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.

PLC Siemens trong tủ điều khiển công nghiệp

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:

Ví dụ cấu hình cho hệ thống băng tải phân loại sản phẩm:

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

Hệ thống SCADA giám sát nhà máy

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:

┌─────────────────────────────────────────┐
│              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:

Tips từ kinh nghiệm thực tế

  1. Luôn dùng Symbolic names — Đặt tên tag có ý nghĩa (Motor_Conveyor_1_Run thay vì Q0.0)
  2. Backup project lên Git — TIA Portal project là thư mục, có thể version control được
  3. Comment mọi network — 6 tháng sau bạn sẽ quên logic nếu không comment
  4. Dùng FB thay FC khi cần lưu trạng thái — FB có instance DB, FC không có
  5. Test trên PLCSIM trước — TIA Portal có simulator, test logic trước khi download xuống PLC thật
  6. 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

Bài viết liên quan

Bài viết liên quan

Tự động hóa nhà máy điện tử Bắc Ninh: Bài học thực tế
amrautomationfleet

Tự động hóa nhà máy điện tử Bắc Ninh: Bài học thực tế

Phân tích quá trình tự động hóa tại các nhà máy điện tử FDI ở Bắc Ninh — thách thức, giải pháp và bài học cho doanh nghiệp Việt.

19/2/202610 phút đọc
Top 5 Cobot 2026: UR vs Doosan vs FANUC vs ABB vs Techman
robot-armcobotautomation

Top 5 Cobot 2026: UR vs Doosan vs FANUC vs ABB vs Techman

So sánh 5 hãng cobot phổ biến nhất — payload, tầm với, giá thành và ứng dụng thực tế cho nhà máy Việt Nam.

13/1/202612 phút đọc
AGV vs AMR: Chọn gì cho nhà máy Việt Nam?
amrautomationfleet

AGV vs AMR: Chọn gì cho nhà máy Việt Nam?

So sánh chi tiết AGV và AMR — chi phí, tính linh hoạt, ROI và hướng dẫn chọn loại phù hợp cho nhà máy sản xuất tại Việt Nam.

5/1/202610 phút đọc