
PID Control trên S7-1200: PID_Compact và PID_3Step khác nhau ra sao ?
Điều khiển PID là bài toán kinh điển trong tự động hóa — giữ nhiệt độ, áp suất, lưu lượng hay mức chất lỏng ổn định quanh giá trị mong muốn. S7-1200 tích hợp sẵn hai lệnh PID khác nhau: PID_Compact và PID_3Step. Nhiều người mới dễ nhầm lẫn nên dùng loại nào — bài viết này sẽ làm rõ sự khác biệt và giúp bạn chọn đúng ngay từ đầu.
1. Điểm khác biệt cốt lõi: loại thiết bị chấp hành
Đây là tiêu chí quan trọng nhất để chọn giữa hai lệnh:
PID_Compact dùng để điều khiển các quá trình kỹ thuật có tín hiệu vào và ra dạng liên tục (continuous) — ví dụ điều khiển van tuyến tính, biến tần, bộ gia nhiệt qua tín hiệu analog 4-20mA hoặc PWM.
PID_3Step dùng để điều khiển các thiết bị chấp hành bằng động cơ (motor-actuated devices) — điển hình là van điều khiển bằng động cơ (motorized valve), cần tín hiệu dạng rời rạc (discrete) để ra lệnh mở hoặc đóng, thay vì một giá trị liên tục.
Nói ngắn gọn: nếu thiết bị chấp hành của bạn nhận tín hiệu analog liên tục → dùng PID_Compact. Nếu thiết bị chấp hành là động cơ chỉ nhận được lệnh "chạy mở" / "chạy đóng" (như nhiều loại van công nghiệp) → dùng PID_3Step.
2. Cả hai đều là bộ điều khiển PIDT1 có tự chỉnh (self-tuning)
Về bản chất thuật toán, cả PID_Compact và PID_3Step đều là bộ điều khiển kiểu PIDT1 với anti-windup và có trọng số (weighting) cho thành phần P và D, đồng thời hỗ trợ khả năng tự chỉnh thông số (self-tuning) — nghĩa là bạn không bắt buộc phải tự tính toán tay các hệ số Kp, Ti, Td.
Ba thành phần P-I-D hoạt động theo nguyên lý quen thuộc:
P (Proportional): giá trị ngõ ra tỷ lệ thuận với sai lệch giữa setpoint và giá trị quá trình hiện tại.
I (Integral): giá trị ngõ ra tăng dần theo thời gian tồn tại của sai lệch, giúp triệt tiêu hoàn toàn sai lệch còn sót lại.
D (Derivative): giá trị ngõ ra phản ứng theo tốc độ thay đổi của sai lệch, giúp đưa hệ thống về setpoint nhanh hơn.
Điểm khác biệt trong công thức: PID_3Step tính đạo hàm của sai lệch theo tốc độ thay đổi của ngõ ra (Δy), phù hợp với đặc tính "tích lũy vị trí" của động cơ 3 điểm — trong khi PID_Compact tính trực tiếp giá trị ngõ ra y.
3. PID_3Step có thêm hai ngõ ra riêng cho động cơ
Vì điều khiển thiết bị dạng động cơ (mở/đóng), PID_3Step cung cấp thêm hai tham số ngõ ra dạng Boolean mà PID_Compact không có:
OutputUP: lệnh điều khiển động cơ chạy theo chiều tăng (mở van)
OutputDN: lệnh điều khiển động cơ chạy theo chiều giảm (đóng van)
Ngoài ra, PID_3Step còn có các tham số liên quan đến phản hồi vị trí thực tế của van như Feedback, FeedbackPer, ActuatorH, ActuatorL — dùng để đọc tín hiệu phản hồi từ chính thiết bị chấp hành, giúp thuật toán biết được vị trí van hiện tại thay vì chỉ "đoán" dựa trên lệnh đã gửi.
Trong khi đó, PID_Compact có tham số Output_PWM — hỗ trợ xuất tín hiệu dạng điều chế độ rộng xung (PWM), phù hợp khi thiết bị chấp hành nhận tín hiệu bật/tắt theo chu kỳ thay vì tín hiệu analog liên tục thuần túy.
4. Quy trình tạo và cấu hình PID trong TIA Portal
Khi bạn chèn lệnh PID_Compact hoặc PID_3Step vào chương trình, STEP 7 sẽ tự động tạo technological object và Instance DB tương ứng — DB này lưu toàn bộ tham số cấu hình của vòng điều khiển. Mỗi lệnh PID phải có Instance DB riêng để hoạt động đúng (manual, trang 348-349).
Bạn cũng có thể tạo technological object trước, từ project navigator, rồi mới gán vào lệnh PID khi cần — thuận tiện khi muốn chuẩn bị cấu hình trước khi viết logic chương trình.
Sau khi tạo, bạn cần vào cửa sổ cấu hình (configuration editor) để thiết lập các thông số cơ bản, ví dụ:
Controller type: chọn đơn vị kỹ thuật sử dụng
Invert control logic: đảo chiều tác động — nếu không chọn, ngõ ra tăng khi giá trị quá trình nhỏ hơn setpoint (direct-acting); nếu chọn, ngõ ra tăng khi giá trị quá trình lớn hơn setpoint (reverse-acting)
Enable last mode after CPU restart: tự khởi động lại vòng điều khiển ở chế độ trước đó sau khi CPU reset hoặc sau khi giá trị input vượt giới hạn rồi quay lại phạm vi hợp lệ
Input / Output: chọn dùng tham số dạng kỹ thuật (Real) hay dạng tín hiệu analog trực tiếp (Input_PER/Output_PER) kết nối thẳng vào module vào/ra analog
5. Lưu ý quan trọng khi gọi lệnh PID trong chương trình
Đây là điểm rất dễ gây lỗi cho người mới lập trình PID trên S7-1200: tuyệt đối không gọi lệnh PID trong main program cycle OB (như OB1). Thay vào đó, cần gọi ở một cyclic interrupt OB, với chu kỳ gọi cố định đúng bằng sampling time đã cấu hình.
Lý do: vòng điều khiển PID cần một khoảng thời gian nhất định để phản ứng với sự thay đổi của giá trị điều khiển, nên không nên (và không cần) tính lại giá trị ngõ ra ở mọi vòng quét. Bản thân bộ điều khiển sẽ tự đo khoảng thời gian giữa hai lần gọi để giám sát và tính trung bình sampling time, dùng làm cơ sở tính toán.
Lỗi phổ biến liên quan: nếu lệnh PID không được gọi đúng trong khoảng sampling time đã cấu hình, hệ thống sẽ báo lỗi Sampling time error (mã 0800 — xem bảng lỗi bên dưới).
Lưu ý khác: nếu bạn thay đổi cấu hình PID và download xuống CPU trong khi CPU đang RUN, thay đổi đó sẽ không có hiệu lực ngay — chỉ áp dụng sau khi CPU chuyển từ STOP sang RUN lần tiếp theo.
6. Cơ chế tự chỉnh: Pre-tuning và Fine-tuning
Cả hai lệnh PID đều hỗ trợ hai chế độ tự động xác định thông số điều khiển:
Pre-tuning: thực hiện lúc khởi động hệ thống, tính toán các thành phần P-I-D ban đầu dựa trên đặc tính phản hồi của quá trình.
Fine-tuning: cho phép tối ưu lại các thông số sau khi hệ thống đã chạy pre-tuning, giúp bám sát đặc tính thực tế hơn.
Nhờ hai cơ chế này, bạn không bắt buộc phải tự tay tính toán thông số PID bằng phương pháp thủ công (như Ziegler-Nichols) — dù vậy, với các ứng dụng đòi hỏi độ chính xác cao, việc hiểu và tinh chỉnh thủ công vẫn hữu ích để đạt hiệu suất tối ưu.
7. Một số mã lỗi thường gặp
Cả hai lệnh dùng chung nhiều mã lỗi qua tham số ErrorBit dạng nhị phân cộng dồn (nếu nhiều lỗi cùng xảy ra, giá trị hiển thị là tổng các mã lỗi tương ứng):
Mã lỗi (DW#16#) | Ý nghĩa |
|---|---|
| Giá trị Input vượt quá giới hạn giá trị quá trình cho phép |
| Giá trị Input_PER không hợp lệ — kiểm tra lỗi ở ngõ vào analog |
| Lỗi fine-tuning: không duy trì được dao động của giá trị quá trình |
| Lỗi khi bắt đầu pre-tuning: giá trị quá trình quá gần setpoint |
| Cấu hình giới hạn giá trị ngõ ra không đúng |
| Lỗi sampling time: PID không được gọi đúng chu kỳ interrupt đã cấu hình |
| Giá trị Setpoint không hợp lệ về định dạng số |
Riêng PID_3Step có thêm các mã lỗi liên quan đến tín hiệu phản hồi vị trí, ví dụ 2000 (lỗi Feedback_PER), 4000 (lỗi Feedback), 8000 (lỗi tín hiệu phản hồi số khi cả ActuatorH và ActuatorL cùng bằng TRUE) — những lỗi này không tồn tại ở PID_Compact vì bản chất không có cơ chế phản hồi vị trí động cơ.
8. Nên chọn PID_Compact hay PID_3Step?
Tóm lại, quyết định chọn lệnh nào phụ thuộc hoàn toàn vào loại thiết bị chấp hành thực tế, không phải vào độ phức tạp của bài toán điều khiển:
Điều khiển nhiệt độ qua SSR/PWM, điều khiển biến tần qua analog, điều khiển van tuyến tính (linear valve) nhận tín hiệu 4-20mA → PID_Compact
Điều khiển van bi hoặc van bướm dùng động cơ điện (motorized ball/butterfly valve) chỉ nhận được lệnh chạy mở/chạy đóng, có hoặc không có tín hiệu phản hồi vị trí → PID_3Step
Kết luận
PID_Compact và PID_3Step đều dựa trên cùng một nền tảng thuật toán PIDT1 với khả năng tự chỉnh, nhưng được thiết kế cho hai nhóm thiết bị chấp hành khác nhau. Việc chọn đúng lệnh ngay từ đầu — dựa trên tín hiệu điều khiển mà thiết bị chấp hành của bạn thực sự nhận được — sẽ giúp việc triển khai và tinh chỉnh vòng điều khiển đơn giản hơn rất nhiều, tránh phải chuyển đổi lại toàn bộ cấu hình giữa chừng dự án.






