Giáo trình Hệ thống sản xuất tự động hóa với PLCs - Phần 18: Lập trình bằng danh sách lệnh
18. LẬP TRÌNH BẰNG DANH SÁCH LỆNH
Chủ đề:
Các mã lệnh và các phép tính danh sách dòng lệnh (IL)
Chuyển từ logic bậc thang sang IL
Độ trễ dòng lệnh hướng ngăn xếp
Phiên bản IL của Allen Bradley
Mục tiêu:
Học được các nền tảng của lập trình IL
Hiểu được mối quan hệ giữa logic bậc thang và các chương trình IL
18.1 GIỚI THIỆU
Lập trình IL được định nghĩa như là thành phần của chuẩn IEC 61131. Nó dùng
các dòng lệnh rất đơn giản tương tự như các ngôn ngữ lập trình gợi nhớ nguyên thủy
mà các ngôn ngữ này được phát triển cho các PLC. (Ghi chú: một vài người đọc sẽ
nhận ra sự tương tự với ngôn ngữ lập trình assembly). Nó là mức cơ bản nhất của
ngôn ngữ lập trình – mọi ngôn ngữ lập trình khác có thể được chuyển tới các chương
trình IL. Hầu hết các lập trình viên không dùng lập trình IL trong một ngày liên tục, trừ
khi họ dùng các bộ lập trình bằng tay.
18.2 PHIÊN BẢN IEC 61131
Để dễ hiểu, chương này sẽ tập trung vào quá trình chuyển đổi logic bậc thang
sang các chương trình IL. Một ví dụ đơn giản được chỉ ra trong hình 18.1 bằng cách
sử dụng các định nghĩa tìm được trong chuẩn IEC này. Bậc của logic bậc thang này
bao gồm bốn đầu vào, và một đầu ra. Nó có thể biểu diễn trong một phương trình
Bun bằng cách dùng các dấu ngoặc đơn. Phương trình này sau đó có thể được
chuyển đổi một cách trực tiếp tới các dòng lệnh. Phần đầu của chương trình này bắt
đầu tại nhãn START:. Tại điểm này giá trị đầu tiên được tải, và phần còn lại của biểu
thức này được chia thành những đoạn nhỏ. Thay đổi đáng kể duy nhất là AND NOT
trở thành ANDN.
Nhãn
START: LD
Mã lệnh Toán hạng
Ghi chú
(* Load input bit 00 *)
Tải bit đầu vào 00
(* Start a branch and load input bit 01 *)
Bắt đầu một nhánh và tải bit đầu vào 01
(* Load input bit 02 *)
Tải bit đầu vào 02
(* Load input bit 03 and invert *)
Tải bit đầu vào 03 và lộn ngược
%I:000/00
%I:000/01
%I:000/02
%I:000/03
AND(
OR(
ANDN
)
)
ST
%O:001/00 (* SET the output bit 00 *)
ĐẶT bit đầu ra 00
Figure 18.1 An Instruction List Example – Một ví dụ danh sách lệnh
Một ý tưởng quan trọng trong ngôn ngữ lập trình này là ngăn xếp. (Ghi chú: nếu
bạn dùng một máy tính với RPN bạn đã quen thuộc với điều này). Bạn có thể nghĩ về
nó như một danh sách làm về sau. Với phương trình trong hình 18.1 số hạng đầu tiên
trong biểu thức này là LD I:000/00, nhưng phép tính đầu tiên phải là (I:000/02 AND
NOT I:000/03). Các giá trị dòng lệnh này được đẩy vào ngăn xếp cho đến khi số hạng
lồng nhau sâu nhất được thấy. Hình 18.2 minh họa biểu thức này được đẩy vào ngăn
xếp như thế nào. Dòng lệnh LD đẩy giá trị đầu tiên vào ngăn xếp. Câu lệnh tiếp theo
là AND, nhưng nó được theo sau bởi một dấu mở ngoặc đơn ’(’ vì thế ngăn xếp này
phải hạ xuống. Dòng OR( mà nó theo sau cũng có cùng hiệu ứng. Lệnh ANDN không
cần đợi, vì thế tính toán được làm xong một cách tức thời và một result_1 vẫn còn.
Các lệnh hai dấu đóng ngoặc đơn ‘)’ tiếp theo loại bỏ lệnh ngăn chặn ‘(’ ra khỏi ngăn
xếp, và cho phép duy trì các dòng lệnh OR I:000/1 và AND I:000/0 được thực hiện
xong. Kết quả cuối cùng phải là một bit đơn lẻ result_3. Hai ví dụ sau theo sau được
cho các điều kiện đầu vào khác nhau. Nếu kết quả cuối cùng trong ngăn xếp là 0, thì
đầu ra ST O:001/0 sẽ thiết đặt đầu ra này, ngược lại nó sẽ tắt nó đi.
Figure 18.2 Using a Stack for Instruction Lists
Dùng một ngăn xếp cho các danh sách lệnh
Một danh sách của các phép toán được cho trong hình 18.3. Các bổ nghĩa là:
N – phủ định một đầu vào hay một đầu ra
( - lồng một phép toán và đặt nó trong một ngăn xếp để được kéo ra bởi ‘)’
C – bắt buộc một kiểm tra cho các kết được đánh giá hiện thời tại đỉnh của
ngăn xếp này
Các toán tử này có thể sử dụng nhiều kiểu dữ liệu, như được chỉ ra trong cột các
kiểu dữ liệu. Danh sách này phải được hỗ trợ bởi mọi nhà cung cấp, nhưng các hàm
bổ sung có thể được gọi bằng cách dùng hàm CAL.
Toán
tử
Bổ
nghĩa
N
Các kiểu Mô tả
dữ liệu
LD
many
many
BOOL
BOOL
BOOL
set current result to value
Đặt kết quả hiện thời tới giá trị
store current result to location
Lưu kết quả hiện thời tới vị trí
set or reset a value (latches or flip-flops)
Đặt hay đặt lại một giá trị (các chốt hay các mạch lật)
boolean and
ST
N
S, R
AND, & N, (
OR N, (
Phép toán Bun VÀ
boolean or
Phép toán Bun HOẶC
boolean exclusive or
Phép toán Bun XOR
mathematical add
XOR
ADD
SUB
MUL
DIV
GT
N, (
BOOL
many
many
many
many
many
many
many
many
many
many
LABEL
NAME
(
Phép toán toán học THÊM
mathematical subtraction
Phép toán toán học TRỪ
mathematical multiplication
Phép toán toán học NHÂN
mathematical division
Phép toán toán học CHIA
comparison greater than >
Phép toán so sánh lớn hơn >
comparison greater than or equal >=
Phép toán so sánh lớn hơn hay bằng >=
comparison equals =
Phép toán so sánh bằng =
comparison not equal <>
Phép toán so sánh không bằng <>
comparison less than or equals <=
Phép toán so sánh nhỏ hơn hay bằng <=
comparison less than <
(
(
(
(
GE
(
EQ
(
NE
(
LE
(
LT
(
Phép toán so sánh nhỏ hơn <
jump to LABEL
nhảy tới NHÃN
JMP
CAL
RET
)
C, N
C, N
C, N
call subroutine NAME
Gọi chương trình con NAME
return from subroutine call
trở về từ cuộc gọi chương trình con
get value from stack
Lấy giá trị từ ngăn xếp
Figure 18.3 IL Operations – Các phép toán IL
18.3 PHIÊN BẢN ALLEN-BRADLEY
Allen Bradley chỉ hỗ trợ lập trình IL trên dòng Micrologix 1000, và không có kế
hoạch hỗ trợ nó trong tương lai. Các ví dụ tương ứng của logic bậc thang và các
chương trình IL được chỉ trong hình 18.4 và 18.5. Các chương trình trong hình 18.4
chỉ ra các biến thể khác nhau khi chỉ có một đầu ra đơn lẻ. Nhiều chương trình IL
được cho ở chỗ nó có sẵn. Khi nhìn vào các ví dụ này ta nhớ lại ý tưởng của ngăn
xếp. Khi một dòng lệnh LD hay LDN được gặp phải nó sẽ đặt một giá trị vào đỉnh của
ngăn xếp. Các dòng lệnh ANB và ORB sẽ loại bỏ hai giá trị ở đỉnh của ngăn xếp, và
thay thế chúng bởi một giá trị đơn mà giá trị ấy là kết quả của một phép toán Bun.
Các hàm AND và OR lấy một giá trị ra khỏi đỉnh của ngăn xếp, thực thi một phép toán
Bun và đặt kết quả trên đỉnh của ngăn xếp. Các chương trình tương ứng (tới phía
phải) là ngắn hơn và sẽ chạy nhanh hơn.
Figure 18.4 IL Equivalents for Ladder Logic – IL tương ứng với logic bậc thang
Hình 18.5 chỉ ra các chương trình IL mà chúng được sinh ra khi có nhiều đầu ra.
Điều này thường yêu cầu cái mà ngăn xếp được sử dụng để giữ các giá trị mà chúng
sẽ được lấy mất một cách bình thường bằng cách sử dụng các hàm MPS, MPP và
MRD. Dòng lệnh MPS sẽ lưu giá trị hiện thời của đỉnh của ngăn xếp. Xem xét ví dụ
đầu tiên với hai đầu ra, giá trị của A được tải vào ngăn xếp bởi LD A. Dòng lệnh ST X
kiểm tra đỉnh của ngăn xếp, nhưng không loại bỏ giá trị, vì thế nó vẫn có sẵn cho
dòng ST Y. Trong ví dụ thứ ba giá trị ở đỉnh ngăn xếp sẽ không đúng khi bậc đầu ra
thứ hai được kiểm tra. Vì thế, khi nhánh đầu ra này xuất hiện giá trị ở đỉnh ngăn xếp
được sao chép bằng cách sử dụng MPS, và được đẩy vào đỉnh của ngăn xếp. Bản sao
này sau đó được AND với B và được sử dụng để thiết đặt X. Sau đó giá trị ở đỉnh
được kéo ra với lệnh MPP, để lại giá trị này tại đỉnh cái là nó trước bậc đầu ra thứ
nhất. Ví dụ cuối chỉ ra nhiều bậc đầu ra. Trước khi bậc đầu tiên giá trị được sao chép
vào ngăn xếp bằng cách dùng MPS. Trước khi bậc cuối giá trị ở đỉnh của ngăn xếp
được loại bỏ bởi câu lệnh MPP. Nhưng, hai câu lệnh trung tâm dùng MRD để sao
chép giá trị đúng tới đỉnh ngăn xếp – nó có thể được thay thế bởi MPP sau đó MPS.
Figure 18.5 IL Programs for Multiple Outputs – Các chương trình cho các đầu ra
Các lệnh phức tạp có thể được trình bày trong IL, như được chỉ trong hình 18.6.
Ở đây hàm được liệt kê bởi sự gợi nhớ của chúng, và điều này được theo sau bởi các
đối cho các hàm này. Dòng thứ hai không có bất cứ công tắc đầu vào nào, vì thế ngăn
xếp ấy được tải với một giá trị đúng.
START:LD I:001/0
TON(T4:0, 1.0, 5, 0)
LD 1
ADD (3, T4:0.ACC, N7:0)
END
Figure 18.6 A Complex Ladder Rung and Equivalent IL
Một bậc thang phức tạp và IL tương ứng
Một ví dụ của một chương trình con ngôn ngữ lập trình lệnh được chỉ ra trong
hình 18. 7. Chương trình này sẽ kiểm tra một đầu vào BCD trên thẻ I:000, và nó trở
nên cao hơn 100 thì 2 giây sau đầu ra O:001/00 sẽ bật lên.
Tệp chương trình 2:
Nhãn Mã lệnh Toán hạng Ghi chú
START: CAL
3
(* Jump to program file 3 *) – Nhảy tới tệp chương
trình 3
Tệp chương trình 3:
Nhãn Mã lệnh
TEST: LD
Toán hạng Ghi chú
%I:000
(* Load the word from input card 000 *)
Tải từ từ thẻ đầu vào 000
BCD_TO_INT
(* Convert the BCD value to an integer *)
Chuyển giá trị BCD này sang một số nguyên
(* Store the value in N7:0 *)
ST
%N7:0
100
Lưu giá trị trong N7:0
GT
(* Check for the stored value (N7:0) > 100 *)
Kiểm tra cho giá trị được lưu (N7:0)> 100
(* If true jump to ON *)
Nếu đúng nhảy tới ON
(* Reset the timer *)
JMPC
CAL
ON
RES(C5:0)
2
Đặt lại bộ bấm giờ
ON:
LD
(* Load a value of 2 - for the preset *)
Tải một giá trị của 2 – cho giá trị đặt trước
(* Store 2 in the preset value *)
Lưu 2 trong giá trị đặt trước
ST
%C5:0.PR
CAL
LD
TON(C5:0) (* Update the timer *)
Cập nhật bộ bấm giờ này
%C5:0.DN (* Get the timer done condition bit *)
Lấy bit điều kiện bộ bấm giờ làm việc xong
ST
%O:001/00 (* Set the output bit *)
Đặt bit đầu ra
RET
(* Return from the subroutine *)
Trở về từ chương trình con
Figure 18.7 An Example of an IL Program – Một ví dụ về một chương trình IL
18.4 TÓM TẮT
Logic bậc thang có thể được chuyển tới các chương trình IL, nhưng các
chương trình IL không luôn luôn được chuyển sang logic bậc thang.
Các chương trình IL dùng một ngăn xếp để trì hoãn các hành động được chỉ ra
bởi các dấu ngoặc đơn.
Phiên bản Allen Bradley là tương tự, nhưng không giống với phiên bản IEC
61131 của IL.
18.5 BÀI TẬP THỰC HÀNH
18.6 GIẢI PHÁP CHO BÀI TẬP THỰC HÀNH
18.7 GIAO BÀI TẬP
1. Giải thích hoạt động của một ngăn xếp
2. Chuyển logic bậc thang sau sang các chương trình IL:
3. Viết các chương trình sơ đồ bậc thang mà nó tương ứng với các chương trình Bun
sau:
LD 001
OR 003
LD 002
OR 004
AND LD
LD 005
OR 007
AND 006
LD 001
AND 002
LD 004
AND 005
OR LD
OR 007
LD NOT 001
AND 002
LD 004
OR 007
AND 005
OR LD
LD 003
LD 003
OR NOT 006
OR NOT 006
OR LD
OUT 204
AND LD
AND LD
OR NOT 008
OUT 204
AND 009
OUT 206
AND NOT 010
OUT 201
Bạn đang xem tài liệu "Giáo trình Hệ thống sản xuất tự động hóa với PLCs - Phần 18: Lập trình bằng danh sách lệnh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
giao_trinh_he_thong_san_xuat_tu_dong_hoa_voi_plcs_phan_18_la.pdf

