Lập trình Modbus TCP/IP trên Siemens S7-1200 là kỹ năng rất quan trọng khi cần kết nối với HMI, biến tần, hoặc thiết bị bên thứ 3. Dưới đây là hướng dẫn đầy đủ từ cơ bản đến triển khai thực tế trong TIA Portal.
1. Tổng quan Modbus TCP/IP
- Giao thức: Modbus TCP
- Port: 502
- Mô hình:
- Client (Master): PLC chủ động đọc/ghi
- Server (Slave): PLC bị đọc/ghi
PLC S7-1200 hỗ trợ cả:
- Modbus TCP Client
- Modbus TCP Server
2. Chuẩn bị
Phần mềm:
- TIA Portal
Thư viện:
- Thư viện Modbus TCP (MB_CLIENT / MB_SERVER) (có sẵn trong TIA)
3. Cấu hình Modbus TCP Client (PLC đọc thiết bị khác)
3.1 Thêm thư viện Modbus
Trong TIA:
- Instructions → Communication → Modbus TCP
- Sử dụng block:
- MB_CLIENT
3.2 Tạo Data Block
Tạo DB để lưu dữ liệu:
- Ví dụ:
- DB1:
HoldingReg[0..9](Word)
- DB1:
3.3 Gọi hàm MB_CLIENT
Cấu trúc cơ bản:
- MB_CLIENT có các chân quan trọng:
| Chân | Ý nghĩa |
|---|---|
| REQ | Trigger gửi lệnh |
| DISCONNECT | Ngắt kết nối |
| MB_MODE | 0=Read, 1=Write |
| MB_DATA_ADDR | Địa chỉ Modbus |
| MB_DATA_LEN | Số lượng thanh ghi |
| CONNECT | Thông tin kết nối |
| DONE | Hoàn thành |
| ERROR | Báo lỗi |
3.4 Cấu hình kết nối (CONNECT)
Tạo một DB kết nối:
- IP thiết bị:
- Ví dụ:
192.168.1.20
- Ví dụ:
- Port:
502
3.5 Ví dụ đọc Holding Register
- MB_MODE = 0 (Read)
- MB_DATA_ADDR = 40001 (hoặc offset = 0)
- MB_DATA_LEN = 2
4. Cấu hình Modbus TCP Server (PLC cho thiết bị khác đọc)
4.1 Dùng block MB_SERVER
- PLC sẽ đóng vai trò Slave
4.2 Cấu hình vùng dữ liệu
- Gán vùng nhớ PLC:
| Modbus | PLC |
|---|---|
| Coil | M |
| Holding Register | DB |
Ví dụ:
- Holding Register → DB1.DBW0
4.3 Gọi MB_SERVER
- Enable = TRUE
- Port = 502
5. Mapping địa chỉ Modbus
Quy đổi chuẩn:
| Modbus | Địa chỉ PLC |
|---|---|
| 00001 | Coil (M bit) |
| 10001 | Input |
| 30001 | Input Register |
| 40001 | Holding Register |
Ví dụ:
- 40001 → DB1.DBW0
- 40002 → DB1.DBW2
6. Ví dụ thực tế
PLC đọc biến tần qua Modbus TCP
- IP biến tần: 192.168.1.50
- Đọc:
- Tần số: 40001
- Dòng: 40002
→ Dùng MB_CLIENT đọc 2 thanh ghi → lưu vào DB
7. Lỗi thường gặp
7.1 ERROR = TRUE
Nguyên nhân:
- Sai IP
- Sai port
- Thiết bị không hỗ trợ Modbus TCP
7.2 DONE không lên
- Chưa kích REQ đúng cách
- Chưa tạo trigger xung
7.3 Đọc sai dữ liệu
- Sai offset (0-based vs 1-based)
- Sai kiểu dữ liệu (Word/Float)
7.4 Không kết nối được
- Firewall chặn port 502
- Khác dải IP
8. Kinh nghiệm thực tế
- Luôn dùng xung cạnh lên (rising edge) cho REQ
- Không gọi MB_CLIENT liên tục trong OB1
- Nên dùng timer (100–500ms) để poll dữ liệu
- Nếu đọc nhiều → chia thành nhiều request
9. Debug nhanh
- Kiểm tra bằng:
- Ping IP
- Dùng tool Modbus test (Modscan)
10. Kết luận
Lập trình Modbus TCP/IP trên Siemens S7-1200 trong TIA Portal không quá khó nếu nắm rõ:
- Client vs Server
- Mapping địa chỉ
- Cách dùng MB_CLIENT / MB_SERVER
Đây là nền tảng để kết nối:
- HMI ngoài (Wecon, Delta…)
- Biến tần
- SCADA bên thứ 3

