Gửi email cảnh báo tự động từ PLC S7-1200 qua giao thức SMTP
PLC13 tháng 7, 2026· 11 phút đọc · 2 lượt xem

Gửi email cảnh báo tự động từ PLC S7-1200 qua giao thức SMTP

Hướng dẫn dùng lệnh TM_MAIL gửi email cảnh báo tự động từ PLC S7-1200 qua SMTP: cú pháp, mail server và lỗi thường gặp

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: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

8014

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

8500

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

8501

Lỗi cú pháp tham số — có thể do sai định dạng địa chỉ ở TO_S hoặc CC

8502

Lệnh không xác định — kiểm tra lại tham số FROM, có thể thiếu ký tự "@" hoặc "."

8535

Xác thực SMTP không hoàn tất — có thể sai username hoặc password

8550

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ự "@"

8554

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.

Chưa biết chọn UPS công suất bao nhiêu?
Nhập danh sách thiết bị, công cụ sẽ tính tự động và gợi ý model phù hợp.
Tính công suất miễn phí

Cần tư vấn giải pháp UPS?

UPSsmart hỗ trợ tư vấn miễn phí, không ràng buộc.