Trong lập trình PLC Mitsubishi dòng FX (như FX3U), lệnh DECO (Decode) có cơ chế hoạt động cụ thể giải thích lý do tại sao bạn gặp hiện tượng này.
Tại sao K > 8 không hoạt động như mong đợi?
Lệnh DECO S D K có ý nghĩa: Giải mã giá trị tại nguồn S, sau đó ghi kết quả vào các bit bắt đầu từ địa chỉ D, với số lượng bit chịu ảnh hưởng là 2^K.
Khi bạn dùng DECO D20 M0 K8:
-
Giá trị
ntrongD20(từ 0 đến 255) sẽ xác định bit nào trong dãyMđược bật lên. -
Cụ thể, bit
M(0 + n)sẽ được bật ON. -
Vì bạn dùng
K8, số lượng bit bị tác động là 2^8 = 256 bit (từM0đếnM255).
Vấn đề khi K > 8:
-
Theo quy định của tập lệnh PLC Mitsubishi, đối với lệnh DECO, giá trị của K bị giới hạn trong khoảng từ 1 đến 8.
-
Khi bạn nhập
Klớn hơn 8, trình biên dịch (GX Works2/GX Developer) thường sẽ báo lỗi cú pháp ngay khi kiểm tra hoặc nạp chương trình, vì số bit cần ghi sẽ vượt quá phạm vi địa chỉ bit cho phép hoặc vượt quá khả năng xử lý của định dạng lệnh này. -
Nếu bạn cố tình ép buộc hoặc nếu phần mềm cho phép nhập giá trị cao hơn, PLC sẽ không thực thi đúng vì nó chỉ được thiết kế để xử lý tối đa là 8 bit đầu vào (tương ứng giải mã ra 256 đầu ra).
Cách xử lý nếu bạn muốn giải mã nhiều hơn 256 bit (K > 8)
Lệnh DECO cơ bản chỉ hỗ trợ tối đa K8. Nếu bạn cần điều khiển nhiều hơn 256 bit dựa trên một giá trị số, bạn cần sử dụng các phương pháp thay thế:
-
Chia nhỏ vùng nhớ: Sử dụng các lệnh so sánh (
CMP,ZCP,==) để kiểm tra dải giá trị củaD20. Ví dụ:-
Nếu
D20từ 0-255: DùngDECO D20 M0 K8. -
Nếu
D20từ 256-511: DùngDECO (D20-256) M256 K8.
-
-
Sử dụng vòng lặp (FOR/NEXT): Nếu bạn cần quét một vùng dữ liệu lớn, hãy viết chương trình con sử dụng con trỏ (Index Register – V, Z) để bật/tắt các bit tương ứng.
-
Kiểm tra lại nhu cầu: Thông thường,
K8(256 bit) là quá đủ cho hầu hết các tác vụ điều khiển bit trong PLC. Nếu bạn cần điều khiển nhiều hơn, hãy xem xét lại xem liệu bạn có thể dùng lệnh ghi giá trị trực tiếp vào từ (Word) thay vì từng bit đơn lẻ hay không.
Tóm lại: Lệnh DECO bị giới hạn phần cứng ở K8 (2^8 = 256 bit). Để giải mã số lớn hơn, bạn buộc phải chia nhỏ vùng nhớ và sử dụng logic so sánh kết hợp.

Dùng X1 giả lập khi đầu vào D20 vượt quá k255



