1. Giới thiệu
Trong thời đại tự động hóa và công nghiệp 4.0, việc kết nối PLC với các nền tảng phần mềm cấp cao như Python giúp mở rộng rất nhiều khả năng:
-
Xây dựng HMI tùy biến
-
Thu thập dữ liệu (Data logging)
-
Kết nối IoT, AI, Vision
-
Điều khiển và giám sát từ PC
Trong bài viết này, Factory Automation sẽ hướng dẫn bạn xây dựng một ứng dụng HMI đơn giản bằng Python, giao tiếp trực tiếp với PLC Siemens S7 (S7-300/400/1200/1500) thông qua thư viện Snap7, kết hợp giao diện PyQt5.
2. Chức năng chính của ứng dụng
Ứng dụng HMI Python – PLC Siemens có các chức năng sau:
-
✅ Kết nối / ngắt kết nối PLC qua địa chỉ IP
-
✅ Đọc / ghi dữ liệu kiểu BIT (ON/OFF)
-
✅ Đọc / ghi dữ liệu kiểu INT (số nguyên 16-bit)
-
✅ Đọc / ghi dữ liệu kiểu REAL (số thực 32-bit)
-
✅ Gửi xung điều khiển 100ms (Pulse) cho Start / Stop
-
✅ Giao diện trực quan, dễ mở rộng
Ứng dụng phù hợp cho:
-
Sinh viên làm đồ án PLC – SCADA – HMI
-
Kỹ sư cần test nhanh PLC bằng PC
-
Các dự án giám sát, điều khiển bán công nghiệp
3. Yêu cầu hệ thống
3.1 Phần cứng
-
PLC Siemens: S7-300 / S7-400 / S7-1200 / S7-1500
-
Máy tính PC/Laptop
-
PLC và PC kết nối cùng mạng LAN
3.2 Phần mềm
-
Python 3.x
-
TIA Portal (để cấu hình PLC)
-
Qt Designer (thiết kế giao diện)
4. Cài đặt thư viện Python
Cài đặt các thư viện cần thiết bằng pip:
💡 Khuyến nghị sử dụng Python 3.8 – 3.11 để đảm bảo tính ổn định.
5. Cấu trúc dự án
| File | Mô tả |
|---|---|
plc.py |
Class PLC – xử lý toàn bộ giao tiếp Snap7 |
main.py |
Chương trình chính, kết nối UI với PLC |
main.ui |
File giao diện thiết kế bằng Qt Designer |
test.py |
Phiên bản test giao diện code thuần Python |
Cấu trúc tách riêng logic PLC và giao diện giúp:
-
Code rõ ràng
-
Dễ bảo trì
-
Dễ mở rộng nhiều DB, nhiều tag PLC
6. Giải thích code chi tiết
6.1 File plc.py – Class giao tiếp PLC
Class PLC chịu trách nhiệm:
-
Kết nối PLC
-
Đọc / ghi dữ liệu DB
-
Che giấu chi tiết Snap7 khỏi giao diện HMI
6.2 Các phương thức quan trọng
| Phương thức | Chức năng |
|---|---|
connect() |
Kết nối PLC |
disconnect() |
Ngắt kết nối |
read_bit(db, byte, bit) |
Đọc 1 bit |
write_bit(db, byte, bit, value) |
Ghi 1 bit |
read_int(db, byte) |
Đọc INT |
write_int(db, byte, value) |
Ghi INT |
read_real(db, byte) |
Đọc REAL |
write_real(db, byte, value) |
Ghi REAL |
7. Địa chỉ Data Block (DB) sử dụng
Mặc định trong chương trình sử dụng DB5:
| Kiểu dữ liệu | Địa chỉ | Giải thích |
|---|---|---|
| BIT | DB5.DBX0.0 |
Byte 0 – Bit 0 |
| INT | DB5.DBW2 |
Bắt đầu từ byte 2 (2 byte) |
| REAL | DB5.DBD10 |
Bắt đầu từ byte 10 (4 byte) |
| START | DB5.DBX0.0 |
Xung Start |
| STOP | DB5.DBX0.1 |
Xung Stop |
8. Cách đọc / ghi dữ liệu PLC
8.1 Đọc BIT
8.2 Ghi BIT
8.3 Đọc / ghi INT
8.4 Đọc / ghi REAL
9. Giao diện HMI (main.ui)
Giao diện được thiết kế bằng Qt Designer, bao gồm:
-
🔹 GroupBox Kết nối PLC: IP, Rack, Slot, Connect / Disconnect
-
🔹 GroupBox BIT: nút ON/OFF + LED trạng thái
-
🔹 GroupBox Pulse: nút START / STOP dạng xung
-
🔹 GroupBox INT: nhập và hiển thị số nguyên
-
🔹 GroupBox REAL: nhập và hiển thị số thực
👉 Giao diện trực quan, dễ sử dụng và dễ nâng cấp.
10. Tính năng Pulse 100ms (Start / Stop)
Xung 100ms thường dùng để:
-
Start động cơ
-
Reset lỗi
-
Điều khiển nút nhấn PLC
11. Chạy chương trình
Chạy ứng dụng chính:
Hoặc chạy phiên bản test:
12. Cấu hình PLC trong TIA Portal (BẮT BUỘC)
Để Snap7 hoạt động, PLC phải cho phép PUT/GET:
-
Vào PLC Properties
-
Chọn Protection & Security
-
Mục Connection mechanisms
-
Tick chọn Permit access with PUT/GET communication
❗ Nếu không bật, Python sẽ không đọc/ghi được PLC.
13. Tùy chỉnh địa chỉ DB
Trong main.py có thể chỉnh nhanh:
14. Lưu ý quan trọng
14.1 Rack / Slot mặc định
-
S7-300 / S7-400:
Rack = 0,Slot = 2 -
S7-1200 / S7-1500:
Rack = 0,Slot = 1
14.2 Lỗi thường gặp
-
❌ Không kết nối được → Sai IP / Rack / Slot
-
❌ Không đọc ghi được → Chưa bật PUT/GET
-
❌ Lỗi địa chỉ → DB chưa tồn tại hoặc sai offset
15. Kết luận
Giải pháp Python + Snap7 + PyQt5 là một hướng tiếp cận mạnh mẽ, linh hoạt và hiện đại để:
-
Giao tiếp PLC Siemens
-
Xây dựng HMI tùy chỉnh
-
Phục vụ học tập, nghiên cứu và dự án thực tế
📌 Nếu bạn cần:
-
Source code hoàn chỉnh
-
Mở rộng đọc nhiều DB
-
Kết nối PLC – Vision – IoT
-
Thiết kế HMI chuyên nghiệp
👉 Hãy theo dõi Factory Automation để cập nhật thêm nhiều tài liệu giá trị!
Link Tài Liệu : Tài Liệu Ở Đây ___ Google Drive
- HƯỚNG DẪN GIAO TIẾP PLC SIEMENS VỚI PYTHON (Snap7 + PyQt5)
- Module 16 IN 16 OUT RS485 Modbus RTU – Hướng Dẫn Kết Nối & Điều Khiển Chi Tiết
- CÁCH SỬA LỖI AUTOMATION LICENSE MANAGEMENT CỦA SIEMENS
- Download EasyBuilder Pro V6.09s – Phần Mềm Lập Trình HMI Weintek (New Version)
- [HMI & PLC] HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM EB8000 WEINVIEW – DÒNG TK6070 & TK8070




