ZONCE và ZEDGE trong macro thời gian thực FANUC: vì sao điều kiện đúng về sau mà hành động vẫn không xảy ra?
Dựa trên quy tắc macro thời gian thực của 30i-A, dùng cửa sổ thực thi giả định 100 mili giây để so sánh ZONCE, ZEDGE và trạng thái đúng ban đầu; phân biệt thời hạn chờ của macro một lần với khả năng nhận biết xung ngắn.
Mục lục
Sau khi viết “thực hiện khi điều kiện thỏa mãn” trong macro thời gian thực, điều kiện thực sự đúng về sau nhưng hành động vẫn không xảy ra. Ở đây có ít nhất hai câu hỏi độc lập: đang dùng kiểm tra một lần hay chờ cạnh, và cửa sổ thực thi chứa khoảng chờ đã kết thúc hay chưa.
Ba quy tắc quyết định quan hệ thời gian
Sổ tay người dùng chung 30i/31i/32i-A B-63944EN/03, §17.1.1 và §17.4.1–17.4.2, trang 581, 599–600 (bản sao công khai của sổ tay nhà sản xuất) quy định: ZONCE kết thúc nếu điều kiện được đánh giá là sai, không chờ điều kiện đúng về sau; ZEDGE chờ chuyển đổi từ sai sang đúng, trạng thái đã đúng ngay từ đầu không được tính là một cạnh mới. RTM một lần khởi động cùng lệnh NC đầu tiên theo sau và chỉ có hiệu lực đến khi lệnh NC đó kết thúc.
Bài viết chỉ xét các câu lệnh một lần của chức năng macro tùy chỉnh thời gian thực trong phiên bản này. Không coi IF của macro thông thường, RTM dạng modal hoặc logic quét PLC là cùng một cơ chế. Khả năng sử dụng chức năng và ánh xạ tín hiệu phải phù hợp với cấu hình điều khiển thực tế.
Đặt khoảng chờ trong một cửa sổ cụ thể
Ví dụ logic do bài viết xây dựng giả sử khối NC liên quan bắt đầu tại t=0 và kết thúc tại t=100 ms. “Hành động” chỉ có nghĩa ghi một sự kiện phần mềm, không phát tín hiệu đầu ra hay chuyển động trục. Bảng giả định rằng các thay đổi điều kiện được liệt kê đều đã được lấy mẫu hợp lệ.
| Thay đổi điều kiện | ZONCE một lần | ZEDGE một lần |
|---|---|---|
| Ban đầu sai, chuyển đúng tại 60 ms và giữ nguyên | Kết thúc ngay khi lần kiểm tra đầu tiên cho kết quả sai | Thực hiện sau khi nhận biết cạnh lên trong cửa sổ |
| Ban đầu sai, đến 120 ms mới đúng | Đã kết thúc | Cửa sổ 100 ms đã kết thúc, không chờ nữa |
| Ban đầu đúng, sai tại 40 ms, đúng lại tại 70 ms | Thực hiện khi trạng thái ban đầu là đúng | Đúng ban đầu không kích hoạt; lần chuyển sai→đúng về sau mới kích hoạt |
Hàng thứ hai không phải lỗi viết biểu thức điều kiện, mà là sự kiện xảy ra ngoài thời hạn hiệu lực. Hàng thứ ba cho thấy “trạng thái hiện tại là đúng” và “đã quan sát được một cạnh mới” có mục đích khác nhau: một điều kiểm tra trạng thái có thỏa mãn hay không, điều kia xác nhận có chuyển đổi xảy ra về sau hay không.
Thứ tự dòng trong chương trình không quyết định độ dài cửa sổ thời gian
Viết macro thời gian thực một lần ở vị trí sớm hơn không đủ để kết luận rằng nó bắt đầu chờ sớm hơn; trước hết phải xác định lệnh NC thực sự kích hoạt nó. Nếu công nghệ yêu cầu giám sát qua nhiều khối NC, chỉ kéo dài thời gian chạy dự kiến của một khối cũng không chứng minh logic đáng tin cậy, vì hệ số hiệu chỉnh tốc độ, dừng và nhánh thực thi đều có thể thay đổi quan hệ thời gian.
Cũng phải phân biệt “thời gian hiệu lực đủ dài” với “lấy mẫu có nhìn thấy sự kiện”. Giả sử chu kỳ kiểm tra là 4 ms, một xung 1 ms có thể nằm hoàn toàn giữa hai lần kiểm tra. Đây là phản ví dụ lấy mẫu nói chung; 4 ms không phải thông số chu kỳ macro thời gian thực FANUC mà bài viết công bố. ZEDGE không phải bảo đảm bắt xung phần cứng cho mọi xung ngắn tùy ý.
Xác định lớp nào cần kiểm tra
Nếu ban đầu sai là không bao giờ thực hiện, trước hết kiểm tra có dùng nhầm ZONCE hay không. Nếu điều kiện đúng trong khối có thể kích hoạt nhưng sau khi khối kết thúc thì không, hãy kiểm tra thời hạn hiệu lực một lần. Nếu chỉ các sự kiện rất ngắn đôi lúc bị bỏ sót, mới phân tích chuỗi đầu vào và lấy mẫu. Ba hiện tượng có nguyên nhân khác nhau, không nên quy tất cả thành “macro không chạy thời gian thực”. Xem thêm phân tích cơ chế tại chuyên mục OPTION.