
Xác Định Thời Gian Mất Điện Trong Các Ứng Dụng PLC
Tổng Quan
Theo dõi thời gian mất điện là một yêu cầu phổ biến trong tự động hóa công nghiệp. Các ứng dụng bao gồm xác định xem quy trình có cần dừng lại sau sự cố mất điện kéo dài hay không, hoặc ghi lại lịch sử sự cố để phân tích bảo trì. Bài viết này trình bày các phương pháp tính toán thời gian mất điện sử dụng đồng hồ thời gian thực (RTC) của PLC và logic quét đầu tiên (first scan logic), với hướng dẫn cụ thể cho CPU AutomationDirect và các kỹ thuật áp dụng cho nền tảng ControlLogix, SLC 500 và MicroLogix.
Hiểu Về Thách Thức
Khi mất điện, PLC tắt hoàn toàn — nội dung RAM có thể được giữ lại tùy thuộc vào phần cứng (pin tụ điện trên các CPU mới hơn, pin backup trên các model cũ hơn). Khi điện được phục hồi, PLC thực thi quy trình Khởi động (Power-Up) trước tác vụ Chính (Main task), tạo cơ hội để:
Lấy lại thời gian (timestamp) đã lưu trước đó
Tính toán thời gian đã trôi qua kể từ khi mất điện
Đưa ra quyết định điều khiển dựa trên thời gian mất điện
Lưu ý quan trọng: Các phương pháp này theo dõi trạng thái hoạt động của bộ xử lý, không phải trạng thái nguồn điện thực sự. Nếu PLC vẫn được cấp điện qua UPS trong khi điện lưới bị mất, phương pháp này sẽ phát hiện chế độ Program hay chế độ Run. Để giám sát nguồn điện thực sự, hãy dùng một đầu vào số (DI) trên PLC được đấu dây tới rơ-le cảm biến điện áp bên ngoài.
Phương Pháp 1: Second-Based Timestamp (Đơn Giản Nhất)
Phương pháp này chuyển đổi giá trị RTC sang giây kể từ nửa đêm, cho phép tính thời gian đã trôi qua bằng phép trừ đơn giản.
Các Bước Triển Khai
Tạo các thẻ (tags):
Current_Time_Sec(DINT) — giây kể từ nửa đêmSaved_Time_Sec(DINT) — dấu thời gian lưu từ lần quét cuốiOutage_Duration(DINT) — số giây đã trôi qua được tính toán
Mỗi lần quét (cập nhật liên tục):
Current_Time_Sec := (RTC_Hour × 3600) + (RTC_Minute × 60) + RTC_SecondLưu vào bộ nhớ lưu trữ (retentive memory):
Sao chépCurrent_Time_SecvàoSaved_Time_Secđịnh kỳ (mỗi lần quét, mỗi giây, hoặc qua bộ đếm thời gian) trong thẻ lưu trữ.Tại lần quét đầu tiên / Khởi động:
Outage_Duration := Current_Time_Sec - Saved_Time_Sec
NếuOutage_Duration< 0, nghĩa là đã qua nửa đêm:Outage_Duration := Outage_Duration + 86400
Kiểm Chứng
Tình huống | Thời gian đã lưu | Thời gian hiện tại | Thời gian tính được |
|---|---|---|---|
Không qua nửa đêm | 10:30:00 (37800) | 10:35:00 (38100) | 300 giây |
Qua nửa đêm | 23:55:00 (86100) | 00:05:00 (300) | 600 giây |
Phương Pháp 2: Lưu Trữ Ngày Giờ Đầy Đủ (ControlLogix / RSLogix 5000)
Đối với các nền tảng có kiểu dữ liệu mạnh mẽ hơn, lưu trữ các giá trị ngày/giờ đầy đủ để theo dõi sự cố mất điện kéo dài nhiều ngày.
Cấu Trúc UDT (Kiểu Dữ Liệu Người Dùng Định Nghĩa)
Power_Event_UDT:
Year : DINT // Năm RTC
Month : DINT // Tháng RTC (1-12)
Day : DINT // Ngày RTC
Hour : DINT // Giờ RTC
Minute : DINT // Phút RTC
Second : DINT // Giây RTC
State : DINT // 0 = Mất điện, 1 = Có điệnTriển Khai Bộ Đệm Vòng (Circular Buffer)
Tạo mảng
Power_History[0..99]kiểuPower_Event_UDTDùng con trỏ chỉ mục
Buffer_Index(quay vòng tại 99)Khi Khởi Động:
Lưu dấu thời gian đã lưu với
State := 0Lưu dấu thời gian hiện tại với
State := 1
Liên tục: Cập nhật định kỳ dấu thời gian hiện tại vào thẻ
Saved_DateTimetrong bộ nhớ lưu trữ
Chi Tiết Về AutomationDirect DL260
CPU DL260 hỗ trợ:
Đồng hồ thời gian thực nội bộ (có pin backup)
Vùng dữ liệu lưu trữ: các vị trí V-memory được chỉ định là lưu giữ
Bit lần quét đầu:
S2:1/15(file S2, bit 15) — đặt lại khi khởi độngTác vụ Khởi động (Power-Up): có thể cấu hình trong thiết lập CPU
Lưu ý: Các vị trí V-memory của DL260 để truy cập RTC khác với các dòng CPU cũ hơn. Hãy kiểm tra trong Tài liệu Hướng dẫn Người dùng DL260 (thường trong phần Cấu hình Hệ thống mục Đồng hồ/Lịch). Các vị trí phổ biến bao gồm V2000–V2005 cho năm, tháng, ngày, giờ, phút, giây.
Ví Dụ Ứng Dụng: Quyết Định Dừng Quy Trình
Dựa trên trường hợp sử dụng ban đầu — dừng quy trình nếu mất điện vượt quá vài phút:
// Tại lần quét đầu tiên sau khi Khởi Động
IF Outage_Duration > 300 THEN // 300 giây = 5 phút
// Kích hoạt trình tự dừng an toàn
Process_State := SHUTDOWN_REQUIRED
ELSE
// Tiếp tục vận hành
Process_State := AUTO_RUN
END_IFXử Lý Các Trường Hợp Đặc Biệt
Vấn đề | Giải pháp |
|---|---|
Qua ranh giới tháng/năm | Chuyển sang ngày Julius hoặc ngày thứ tự (day-of-year) cho tính toán kéo dài nhiều tháng |
Pin hỏng | Phát hiện RTC không hợp lệ (năm = 0 hoặc 2160) và kích hoạt dừng hoàn toàn |
Chế độ Program vs Mất điện | Thêm cờ lưu trữ cho biết đang ở chế độ Run; so sánh với cờ đó |
UPS giữ PLC hoạt động | Dùng đầu vào cảm biến điện áp bên ngoài để phát hiện mất điện lưới |
So Sánh Các Nền Tảng
Nền tảng | Phương thức truy cập RTC | Bit lần quét đầu | Lưu trữ lưu giữ |
|---|---|---|---|
DL260 (AD) | Địa chỉ V-memory | S2:1/15 | Vùng V có thể cấu hình |
ControlLogix | GETRTC / GETTCM | S:firstscan | Retain theo tác vụ |
MicroLogix 1500 | S:50 – S:57 | S2:1/15 | File số nguyên được đánh dấu retain |
S7-1200 | RD_LOC_T | Tag FirstScan (hệ thống) | Vùng DB Retain |



