SLC-5/04 Julian Date Generator Implementation Guide — figure 1

Hướng dẫn triển khai Bộ tạo ngày Julian SLC-5/04

Triển khai bộ tạo Ngày Julian trong SLC-5/04 để xuất ASCII cho máy in nhãn. Logic thang từng bước với các lệnh Compute.

Dòng SLC-5/04, bao gồm các bộ xử lý như 1747-L542, không cung cấp lệnh số ngày Julian (JDN) tích hợp sẵn. Các hệ thống đóng gói, mã hóa lô và máy in nhãn thường yêu cầu giá trị ngày trong năm hoặc chuỗi YYYYDDD dạng rút gọn, vì vậy logic phải được xây dựng từ các phép toán thông thường và thao tác với bảng dữ liệu. Hướng dẫn này trình bày một phương pháp dễ bảo trì bằng cách sử dụng biểu thức CPT, bảng ngày tích lũy theo tháng, xử lý năm nhuận và chuyển đổi ASCII cho dữ liệu gửi đến máy in, đồng thời lưu ý các giới hạn của phép toán 16 bit khiến nhiều triển khai ban đầu gặp lỗi.

Hướng dẫn triển khai bộ tạo ngày Julian cho SLC-5/04 — hình 1 Bộ xử lý SLC-5/04 tính ngày trong năm và mã kiểu Julian trong ladder bằng CPT, các tệp số nguyên và các giá trị RTC được lấy đúng cách.

Tài liệu nguồn đôi khi chỉ đến các từ trong tệp trạng thái thuộc vùng S:50–S:52 dành cho năm, tháng và ngày, trong khi một số tài liệu khác nhấn mạnh vùng đồng hồ thời gian thực rộng hơn quanh S:37, tùy theo bộ xử lý và bối cảnh firmware. Hãy xử lý cẩn thận các từ nguồn RTC: xác minh sơ đồ ánh xạ chính xác của tệp trạng thái cho catalog và series đang lắp đặt trước khi cố định các bí danh tag. Khi các trường lịch đã được xác nhận, bản thân thuật toán có thể được sử dụng cho nhiều dự án SLC-5/04.

Bố cục bảng dữ liệu

Bố cục số nguyên rõ ràng giúp kỹ thuật viên tiếp theo dễ đọc routine. Một cách bố trí điển hình sử dụng các thanh ghi N7 như sau: N7:0 là năm, N7:1 là tháng, N7:2 là ngày trong tháng, N7:3 là kết quả ngày trong năm, N7:4 là cờ năm nhuận và N7:5 dùng để lưu tạm các kết quả CPT trung gian. Lưu các độ lệch ngày tích lũy theo tháng trong một bảng số nguyên cố định—for example N10:1 đến N10:12 chứa các giá trị 0, 31, 59, 90, 120, 151, 151, 181, 212, 243, 273, 304 cho mốc cơ sở không nhuận đến hết tháng 11, trong đó việc xử lý tháng 2 được thực hiện thông qua cờ năm nhuận thay vì chỉnh sửa bảng khi chương trình đang chạy. Điều chỉnh bảng chính xác cho phù hợp với cách đánh chỉ mục bắt đầu từ 0 mà bạn chọn, nhưng hãy ghi chú ngay bên cạnh các rung.

Ví dụ về phương pháp tính DOY (mang tính khái niệm)
Leap = (Y chia hết cho 4) với các quy tắc thế kỷ khi cần
DOY = Day + Cumulative[Month] + (Leap AND Month>2)
Chuỗi YYYYDDD thông qua định dạng kiểu ASC / AIF cho máy in

Đối với nhiều nhà máy, ngày trong năm (DOY) ở dạng YYYYDDD là đủ và tránh được sự phức tạp của JDN thiên văn đầy đủ. Các số ngày Julian đầy đủ trải dài qua nhiều thế kỷ cần được xử lý số nguyên với phạm vi rộng hơn; các phép toán CPT của SLC trên số nguyên 16 bit sẽ bị tràn nếu các tích trung gian không được chia nhỏ. Nên tính DOY trong phạm vi 16 bit, sau đó ghép năm và DOY đã thêm số 0 ở đầu trong một tệp ASCII để gửi đến máy in, thay vì cố ép tất cả vào một số nguyên quá lớn.

Cấu trúc năm nhuận và CPT

Logic năm nhuận phải tuân theo các quy tắc lịch dân dụng được hệ thống chất lượng của bạn sử dụng. Tối thiểu, các năm chia hết cho 4 là năm nhuận; nếu vòng đời sản phẩm của bạn bao gồm các mốc chuyển thế kỷ, hãy áp dụng đầy đủ các ngoại lệ của lịch Gregorian (năm tròn thế kỷ chỉ là năm nhuận nếu chia hết cho 400). Gán N7:4 bằng một khi năm là năm nhuận. Khi cộng độ lệch tháng tích lũy, chỉ cộng thêm một ngày nếu cờ năm nhuận được bật và tháng lớn hơn tháng 2. Thực hiện phép cộng này trong một CPT riêng thay vì chôn các điều kiện lồng nhau trong một biểu thức khó đọc.

Sao chép năm, tháng và ngày từ các từ nguồn RTC đã xác minh vào các thanh ghi làm việc N7 trong một task định kỳ chậm hoặc ở lần quét đầu tiên cộng với một cạnh hằng ngày. Không nên đọc các từ RTC trong mọi rung chạy tự do nếu việc định dạng ASC ở phía sau tốn nhiều tài nguyên; làm mới một lần mỗi phút thường là đủ cho việc mã hóa ngày.

Hướng dẫn triển khai bộ tạo ngày Julian cho SLC-5/04 — hình 2 Chuỗi DOY được thêm số 0 ở đầu giúp máy in nhãn hoạt động đáng tin cậy hơn số nguyên thô khi độ dài mã vạch phải cố định.

Định dạng ASCII cho máy in nhãn

Hầu hết máy in công nghiệp yêu cầu chuỗi có độ rộng cố định. Sau khi tính DOY trong N7:3, hãy sử dụng các lệnh tệp ASCII để tạo chuỗi như YYYYDDD, trong đó trường ngày có các số 0 ở đầu. Xác thực độ dài trước khi kích hoạt quá trình bắt tay in. Nếu giao thức máy in cần dấu phân cách hoặc tiền tố riêng của nhà máy, hãy tạo chúng trong cùng bộ đệm chuỗi thay vì phụ thuộc vào máy in để thêm số 0.

  1. Xác nhận ánh xạ từ RTC cho firmware cụ thể của 1747-L542 (hoặc SLC-5/04 đang lắp đặt).
  2. Tạo các tag làm việc N7 và bảng tháng tích lũy trong một tệp số nguyên.
  3. Viết logic CPT cho năm nhuận và một CPT DOY để cộng ngày + giá trị tích lũy + điều chỉnh năm nhuận.
  4. Định dạng YYYYDDD qua ASC và kiểm tra với các ngày lịch đã biết, bao gồm ngày 28 tháng 2 và ngày 1 tháng 3 trong cả năm nhuận lẫn năm không nhuận.
  5. Ngăn tràn 16 bit nếu bất kỳ routine nào cố tính các tích JDN đầy đủ qua nhiều thế kỷ; chia nhỏ phép toán hoặc chuyển việc tính toán đó ra khỏi SLC.

Kiểm tra năm nhuận và số 0 ở đầu cho máy in

Các ngày kiểm tra phải bao gồm 2024-02-29, 2024-03-01, 2025-02-28 và các chuyển tiếp cuối năm vào ngày 12-31. So sánh DOY của PLC với một lịch độc lập. Các lỗi thường gặp gồm tin nhầm địa chỉ tệp trạng thái, quên điều chỉnh năm nhuận cho tháng 2, in giá trị DOY không được thêm số 0 khiến các trường mã vạch bị lệch và làm tràn các giá trị trung gian CPT khi sau này có người mở rộng routine theo hướng tính JDN đầy đủ. Hãy giữ các chú thích trong ladder, nêu rõ những từ nguồn RTC thực sự được sử dụng trên máy đó.

Khi mã ngày là một phần của cell đóng gói lớn hơn, hãy lưu bộ tạo dưới dạng một tệp có thể tái sử dụng và chuẩn hóa bố cục số nguyên giữa các dây chuyền. Các bộ xử lý dự phòng và tài liệu dành cho hệ thống PLC SLC-500 này nên bao gồm routine mã ngày để việc thay bộ xử lý không âm thầm quay lại một triển khai lịch cũ và sai.

Về tác giả

Mark Townsend | Kỹ sư tự động hóa cấp cao – Hệ thống Allen-Bradley

Mark Townsend là kỹ sư tự động hóa cấp cao với hơn 18 năm kinh nghiệm trên các nền tảng Allen-Bradley, bao gồm ControlLogix, CompactLogix và SLC-500 đời cũ. Công việc hằng ngày của ông là phát triển logic RSLogix / Studio 5000 và đưa HMI FactoryTalk View vào vận hành trên các hệ thống cũ và đội thiết bị hỗn hợp.

Hướng dẫn triển khai Bộ tạo ngày Julian SLC-5/04

Triển khai bộ tạo Ngày Julian trong SLC-5/04 để xuất ASCII cho máy in nhãn. Logic thang từng bước với các lệnh Compute.

Dòng SLC-5/04, bao gồm các bộ xử lý như 1747-L542, không cung cấp lệnh số ngày Julian (JDN) tích hợp sẵn. Các hệ thống đóng gói, mã hóa lô và máy in nhãn thường yêu cầu giá trị ngày trong năm hoặc chuỗi YYYYDDD dạng rút gọn, vì vậy logic phải được xây dựng từ các phép toán thông thường và thao tác với bảng dữ liệu. Hướng dẫn này trình bày một phương pháp dễ bảo trì bằng cách sử dụng biểu thức CPT, bảng ngày tích lũy theo tháng, xử lý năm nhuận và chuyển đổi ASCII cho dữ liệu gửi đến máy in, đồng thời lưu ý các giới hạn của phép toán 16 bit khiến nhiều triển khai ban đầu gặp lỗi.

Hướng dẫn triển khai bộ tạo ngày Julian cho SLC-5/04 — hình 1 Bộ xử lý SLC-5/04 tính ngày trong năm và mã kiểu Julian trong ladder bằng CPT, các tệp số nguyên và các giá trị RTC được lấy đúng cách.

Tài liệu nguồn đôi khi chỉ đến các từ trong tệp trạng thái thuộc vùng S:50–S:52 dành cho năm, tháng và ngày, trong khi một số tài liệu khác nhấn mạnh vùng đồng hồ thời gian thực rộng hơn quanh S:37, tùy theo bộ xử lý và bối cảnh firmware. Hãy xử lý cẩn thận các từ nguồn RTC: xác minh sơ đồ ánh xạ chính xác của tệp trạng thái cho catalog và series đang lắp đặt trước khi cố định các bí danh tag. Khi các trường lịch đã được xác nhận, bản thân thuật toán có thể được sử dụng cho nhiều dự án SLC-5/04.

Bố cục bảng dữ liệu

Bố cục số nguyên rõ ràng giúp kỹ thuật viên tiếp theo dễ đọc routine. Một cách bố trí điển hình sử dụng các thanh ghi N7 như sau: N7:0 là năm, N7:1 là tháng, N7:2 là ngày trong tháng, N7:3 là kết quả ngày trong năm, N7:4 là cờ năm nhuận và N7:5 dùng để lưu tạm các kết quả CPT trung gian. Lưu các độ lệch ngày tích lũy theo tháng trong một bảng số nguyên cố định—for example N10:1 đến N10:12 chứa các giá trị 0, 31, 59, 90, 120, 151, 151, 181, 212, 243, 273, 304 cho mốc cơ sở không nhuận đến hết tháng 11, trong đó việc xử lý tháng 2 được thực hiện thông qua cờ năm nhuận thay vì chỉnh sửa bảng khi chương trình đang chạy. Điều chỉnh bảng chính xác cho phù hợp với cách đánh chỉ mục bắt đầu từ 0 mà bạn chọn, nhưng hãy ghi chú ngay bên cạnh các rung.

Ví dụ về phương pháp tính DOY (mang tính khái niệm)
Leap = (Y chia hết cho 4) với các quy tắc thế kỷ khi cần
DOY = Day + Cumulative[Month] + (Leap AND Month>2)
Chuỗi YYYYDDD thông qua định dạng kiểu ASC / AIF cho máy in

Đối với nhiều nhà máy, ngày trong năm (DOY) ở dạng YYYYDDD là đủ và tránh được sự phức tạp của JDN thiên văn đầy đủ. Các số ngày Julian đầy đủ trải dài qua nhiều thế kỷ cần được xử lý số nguyên với phạm vi rộng hơn; các phép toán CPT của SLC trên số nguyên 16 bit sẽ bị tràn nếu các tích trung gian không được chia nhỏ. Nên tính DOY trong phạm vi 16 bit, sau đó ghép năm và DOY đã thêm số 0 ở đầu trong một tệp ASCII để gửi đến máy in, thay vì cố ép tất cả vào một số nguyên quá lớn.

Cấu trúc năm nhuận và CPT

Logic năm nhuận phải tuân theo các quy tắc lịch dân dụng được hệ thống chất lượng của bạn sử dụng. Tối thiểu, các năm chia hết cho 4 là năm nhuận; nếu vòng đời sản phẩm của bạn bao gồm các mốc chuyển thế kỷ, hãy áp dụng đầy đủ các ngoại lệ của lịch Gregorian (năm tròn thế kỷ chỉ là năm nhuận nếu chia hết cho 400). Gán N7:4 bằng một khi năm là năm nhuận. Khi cộng độ lệch tháng tích lũy, chỉ cộng thêm một ngày nếu cờ năm nhuận được bật và tháng lớn hơn tháng 2. Thực hiện phép cộng này trong một CPT riêng thay vì chôn các điều kiện lồng nhau trong một biểu thức khó đọc.

Sao chép năm, tháng và ngày từ các từ nguồn RTC đã xác minh vào các thanh ghi làm việc N7 trong một task định kỳ chậm hoặc ở lần quét đầu tiên cộng với một cạnh hằng ngày. Không nên đọc các từ RTC trong mọi rung chạy tự do nếu việc định dạng ASC ở phía sau tốn nhiều tài nguyên; làm mới một lần mỗi phút thường là đủ cho việc mã hóa ngày.

Hướng dẫn triển khai bộ tạo ngày Julian cho SLC-5/04 — hình 2 Chuỗi DOY được thêm số 0 ở đầu giúp máy in nhãn hoạt động đáng tin cậy hơn số nguyên thô khi độ dài mã vạch phải cố định.

Định dạng ASCII cho máy in nhãn

Hầu hết máy in công nghiệp yêu cầu chuỗi có độ rộng cố định. Sau khi tính DOY trong N7:3, hãy sử dụng các lệnh tệp ASCII để tạo chuỗi như YYYYDDD, trong đó trường ngày có các số 0 ở đầu. Xác thực độ dài trước khi kích hoạt quá trình bắt tay in. Nếu giao thức máy in cần dấu phân cách hoặc tiền tố riêng của nhà máy, hãy tạo chúng trong cùng bộ đệm chuỗi thay vì phụ thuộc vào máy in để thêm số 0.

  1. Xác nhận ánh xạ từ RTC cho firmware cụ thể của 1747-L542 (hoặc SLC-5/04 đang lắp đặt).
  2. Tạo các tag làm việc N7 và bảng tháng tích lũy trong một tệp số nguyên.
  3. Viết logic CPT cho năm nhuận và một CPT DOY để cộng ngày + giá trị tích lũy + điều chỉnh năm nhuận.
  4. Định dạng YYYYDDD qua ASC và kiểm tra với các ngày lịch đã biết, bao gồm ngày 28 tháng 2 và ngày 1 tháng 3 trong cả năm nhuận lẫn năm không nhuận.
  5. Ngăn tràn 16 bit nếu bất kỳ routine nào cố tính các tích JDN đầy đủ qua nhiều thế kỷ; chia nhỏ phép toán hoặc chuyển việc tính toán đó ra khỏi SLC.

Kiểm tra năm nhuận và số 0 ở đầu cho máy in

Các ngày kiểm tra phải bao gồm 2024-02-29, 2024-03-01, 2025-02-28 và các chuyển tiếp cuối năm vào ngày 12-31. So sánh DOY của PLC với một lịch độc lập. Các lỗi thường gặp gồm tin nhầm địa chỉ tệp trạng thái, quên điều chỉnh năm nhuận cho tháng 2, in giá trị DOY không được thêm số 0 khiến các trường mã vạch bị lệch và làm tràn các giá trị trung gian CPT khi sau này có người mở rộng routine theo hướng tính JDN đầy đủ. Hãy giữ các chú thích trong ladder, nêu rõ những từ nguồn RTC thực sự được sử dụng trên máy đó.

Khi mã ngày là một phần của cell đóng gói lớn hơn, hãy lưu bộ tạo dưới dạng một tệp có thể tái sử dụng và chuẩn hóa bố cục số nguyên giữa các dây chuyền. Các bộ xử lý dự phòng và tài liệu dành cho hệ thống PLC SLC-500 này nên bao gồm routine mã ngày để việc thay bộ xử lý không âm thầm quay lại một triển khai lịch cũ và sai.

Về tác giả

Mark Townsend | Kỹ sư tự động hóa cấp cao – Hệ thống Allen-Bradley

Mark Townsend là kỹ sư tự động hóa cấp cao với hơn 18 năm kinh nghiệm trên các nền tảng Allen-Bradley, bao gồm ControlLogix, CompactLogix và SLC-500 đời cũ. Công việc hằng ngày của ông là phát triển logic RSLogix / Studio 5000 và đưa HMI FactoryTalk View vào vận hành trên các hệ thống cũ và đội thiết bị hỗn hợp.

Để lại bình luận

Xin lưu ý, bình luận cần được phê duyệt trước khi được đăng.