
Gửi email cảnh báo tự động từ PLC S7-1200 qua giao thức SMTP
Khi một sự cố xảy ra trên dây chuyền — quá nhiệt, dừng máy đột ngột, hết nguyên liệu — việc người vận hành biết ngay lập tức, kể cả khi không có mặt tại nhà máy, là điều rất giá trị. S7-1200 hỗ trợ sẵn lệnh TM_MAIL để gửi email trực tiếp từ CPU qua giao thức SMTP, không cần thêm phần cứng hay phần mềm trung gian. Bài viết này sẽ hướng dẫn bạn cách cấu hình và sử dụng lệnh này.
1. TM_MAIL hoạt động như thế nào?
TM_MAIL gửi email bằng giao thức SMTP (Simple Mail Transfer Protocol) qua kết nối TCP/IP trên cổng Industrial Ethernet của CPU. Trường hợp không có kết nối Internet qua Ethernet, bạn có thể dùng thêm Teleservice adapter để kết nối qua đường dây điện thoại.
Lệnh này hoạt động bất đồng bộ (asynchronous) — một lần gửi email thực chất trải qua nhiều lần gọi lệnh TM_MAIL liên tiếp. Khi đặt lệnh vào chương trình, bạn cần gán một Instance DB riêng, và DB này không được đặt thuộc tính retentive, để đảm bảo dữ liệu được khởi tạo lại đúng cách mỗi khi CPU chuyển từ STOP sang RUN.
Việc gửi email được kích hoạt bằng cách đưa tham số REQ từ mức 0 lên mức 1 (sườn lên). Bạn theo dõi tiến trình xử lý qua ba tham số đầu ra: BUSY, DONE, ERROR:
DONE | BUSY | ERROR | Ý nghĩa |
|---|---|---|---|
— | 1 | — | Đang xử lý |
1 | 0 | 0 | Gửi thành công |
0 | 0 | 1 | Gửi thất bại (xem thêm mã lỗi ở STATUS) |
0 | 0 | 0 | Không có tác vụ nào đang chạy |
Lưu ý: Các tham số đầu ra DONE, ERROR, STATUS chỉ có giá trị hợp lệ trong đúng một vòng quét — ngay tại thời điểm BUSY chuyển từ 1 về 0. Vì vậy chương trình của bạn cần lưu tạm các giá trị này vào biến trung gian để xử lý ở các vòng quét sau.
2. Các tham số quan trọng của TM_MAIL
Tham số | Kiểu dữ liệu | Mô tả |
|---|---|---|
REQ | Bool | Sườn lên để bắt đầu gửi email |
ID | Int | Định danh kết nối, không được trùng với các instance khác đang dùng |
TO_S | String (tối đa 240 ký tự) | Danh sách địa chỉ người nhận |
CC | String (tối đa 240 ký tự) | Địa chỉ nhận bản sao (tùy chọn) |
SUBJECT | String (tối đa 240 ký tự) | Tiêu đề email |
TEXT | String (tối đa 240 ký tự) | Nội dung email (nếu để rỗng, email gửi đi không có nội dung) |
ATTACHMENT | Variant | Con trỏ tới dữ liệu đính kèm, tối đa 65534 byte |
ADDR_MAIL_SERVER | DWord | Địa chỉ IP của mail server, ở dạng hex |
WATCH_DOG_TIME | Time | Thời gian chờ tối đa để thiết lập kết nối với server |
USERNAME / PASSWORD | String (tối đa 180 ký tự) | Thông tin xác thực với mail server (nếu có) |
FROM | String (tối đa 240 ký tự) | Địa chỉ người gửi |
Cách ghi địa chỉ IP mail server dạng hex: ví dụ địa chỉ IP là 192.168.0.10, bạn cần chuyển từng octet sang hex rồi ghép lại: 192 = C0, 168 = A8, 0 = 00, 10 = 0A → ADDR_MAIL_SERVER = DW#16#C0A8000A .
Thời gian chờ (WATCH_DOG_TIME): nên bắt đầu với khoảng 2 phút, và có thể giảm nếu dùng kết nối ISDN.
3. Quy tắc viết chuỗi địa chỉ TO_S, CC, FROM
Đây là phần rất dễ mắc lỗi vì cú pháp không được kiểm tra tự động (do giới hạn về thời gian thực thi và bộ nhớ), nên nếu sai định dạng, giao dịch với mail server sẽ thất bại ngay cả khi không báo lỗi cú pháp rõ ràng. Quy tắc cụ thể:
Phải nhập đúng các từ khóa
TO_S:,CC:,FROM:kèm dấu hai chấm.Trước mỗi địa chỉ phải có một dấu cách và dấu ngoặc nhọn mở
<.Sau mỗi địa chỉ phải có dấu ngoặc nhọn đóng
>.Với
TO_S:vàCC:, sau mỗi địa chỉ (kể cả khi chỉ có một địa chỉ) phải có dấu phẩy,.Với
FROM:, chỉ được dùng một địa chỉ duy nhất, và không có dấu phẩy ở cuối.
Ví dụ đúng cú pháp:
TO_S: <wenna@mydomain.com>, <ruby@mydomain.com>,
CC: <admin@mydomain.com>, <judy@mydomain.com>,
FROM: <admin@mydomain.com>4. Yêu cầu về mail server
TM_MAIL chỉ giao tiếp với mail server qua SMTP trên cổng 25 — con số cổng này không thể thay đổi. Đây là điểm cần lưu ý vì nhiều bộ phận IT hoặc nhà cung cấp email bên ngoài hiện nay chặn cổng 25 để ngăn chặn máy tính nhiễm virus trở thành nguồn phát tán email rác.
Giải pháp thường dùng là kết nối tới một mail server nội bộ (ví dụ Microsoft Exchange), để server nội bộ đó xử lý các yêu cầu bảo mật cần thiết khi chuyển tiếp email ra ngoài Internet.
Ví dụ cấu hình với Microsoft Exchange: vào Server configuration > Hub transport > Receive connectors > IP relay, sau đó thêm địa chỉ IP của CPU đang chạy TM_MAIL vào mục "Receive mail from remote servers that have these IP addresses". Với cách này, không cần xác thực (authentication) khi kết nối.
Nếu dùng mail server hỗ trợ xác thực, TM_MAIL hỗ trợ phương thức AUTH LOGIN, dùng tham số USERNAME và PASSWORD để xác thực. Nếu không gán giá trị cho USERNAME, email sẽ được gửi mà không cần xác thực.
5. Xử lý lỗi thường gặp
TM_MAIL trả về mã lỗi qua tham số STATUS. Một số mã lỗi phổ biến:
Mã lỗi | Ý nghĩa |
|---|---|
| Kết nối thất bại — có thể do sai địa chỉ IP mail server hoặc WATCH_DOG_TIME quá ngắn |
| Lỗi cú pháp lệnh — có thể do mail server không hỗ trợ xác thực LOGIN; thử để trống USERNAME |
| Lỗi cú pháp tham số — có thể do sai định dạng địa chỉ ở TO_S hoặc CC |
| Lệnh không xác định — kiểm tra lại tham số FROM, có thể thiếu ký tự "@" hoặc "." |
| Xác thực SMTP không hoàn tất — có thể sai username hoặc password |
| Không thể kết nối mail server — sai thông tin đăng nhập, hoặc sai tên miền sau ký tự "@" |
| Gửi thất bại — thử lại sau |
Lưu ý đặc biệt: Nếu bạn nhập sai địa chỉ người nhận, TM_MAIL không báo lỗi ở tham số STATUS — vì vậy không có gì đảm bảo rằng những người nhận khác (với địa chỉ đúng) trong cùng danh sách sẽ nhận được email. Đây là lý do bạn nên kiểm tra kỹ danh sách địa chỉ trước khi đưa vào vận hành thực tế.
6. Lưu ý khi chỉnh sửa chương trình có TM_MAIL
Theo tài liệu, chỉ nên chỉnh sửa các phần chương trình liên quan trực tiếp đến lệnh TM_MAIL khi:
CPU đang ở chế độ STOP, và
Không có email nào đang được gửi (REQ và BUSY đều bằng 0)
Nếu không tuân thủ, các chức năng giao tiếp TCP/IP có thể rơi vào trạng thái không xác định. Sau khi tải lại (download) một khối chương trình đã chỉnh sửa, cần thực hiện khởi động lại CPU (warm restart hoặc cold start) để đảm bảo hoạt động ổn định.
Ngoài ra, nếu CPU chuyển sang STOP trong khi TM_MAIL đang hoạt động, hoặc có sự cố trên mạng Industrial Ethernet, kết nối tới mail server sẽ bị ngắt và email sẽ không được gửi đi — quá trình gửi bị treo giữa chừng.
7. Ứng dụng thực tế trong nhà máy
Một số tình huống phổ biến để ứng dụng TM_MAIL:
Gửi cảnh báo khi nhiệt độ, áp suất vượt ngưỡng cho phép
Thông báo khi máy dừng đột ngột ngoài kế hoạch (unplanned downtime)
Gửi báo cáo định kỳ về sản lượng, số lần dừng máy trong ca
Cảnh báo khi nguyên liệu trong bồn chứa xuống dưới mức tối thiểu
Với các ứng dụng này, bạn có thể kết hợp TM_MAIL với logic điều kiện đơn giản trong chương trình (ví dụ so sánh giá trị cảm biến với ngưỡng đặt trước) để tự động kích hoạt REQ khi điều kiện cảnh báo xảy ra, giúp giảm thời gian phản ứng của đội vận hành mà không cần đầu tư thêm hệ thống SCADA hay dịch vụ SMS trả phí.
Kết luận
TM_MAIL là công cụ đơn giản nhưng hiệu quả để bổ sung khả năng cảnh báo từ xa cho hệ thống dùng S7-1200. Điểm mấu chốt khi triển khai là: cấu hình đúng cú pháp địa chỉ email (dễ sai nhất!), chọn mail server phù hợp (ưu tiên mail server nội bộ nếu mail server ngoài chặn cổng 25), và luôn theo dõi tham số STATUS để phát hiện lỗi kịp thời — vì bản thân TM_MAIL không đảm bảo 100% rằng email đã thực sự đến tay người nhận.
Ở bài viết tiếp theo, chúng ta sẽ tìm hiểu về Data Logging trên S7-1200 — cách ghi dữ liệu ra thẻ nhớ và xuất file CSV để phục vụ phân tích, báo cáo sản xuất.



