c2 Lap Trinh Lad Va Stl
-
Upload
ha-duy-tung -
Category
Documents
-
view
44 -
download
3
Transcript of c2 Lap Trinh Lad Va Stl
Nguyễn Đức Thành 46
CHƢƠNG 2 LẬP TRÌNH LAD VÀ STL
1. CÁC NGÔN NGỮ LẬP TRÌNH
S7-300 có thể lập trình bằng một trong ba ngôn ngữ LAD (Ladder Diagram, Giản đồ
thang) STL (Statement List, Bảng phát biểu) và FBD (Function Block Diagram, Giản đồ khối
hàm), ngoài ra còn hai ngôn ngữ nữa là Graph và SCL (Structured Control Language, Ngôn ngữ
điều khiển cấu trúc).
- Ngôn ngữ LAD dễ hiểu, dễ lập trình
- Ngôn ngữ STL gọn, khó hiểu
- Ngôn ngữ FBD rườm rà
Việc chọn ngôn ngữ nào là tùy ý, tuy nhiên thông dụng nhất là LAD và STL. Các ngôn
ngữ có thể chuyển đổi cho nhau.
2. STEP7 - SIMATIC MANAGER
Chương trình STEP 7 dùng để lập trình cho PLC S7-300, S7-400. Chương trình này có
version 5.0 dùng cho Win 98, Version 5.1 và 5.3 dùng cho WinXP. Khi kích chuột vào biểu
tượng Simatic Manager sẽ xuất hiện cửa sổ Hình 1-b, bấm Next để chọn loại CPU
Hình 1a Step7 Simatic Manager
Hình 1b
Nguyễn Đức Thành 47
Hình 2
Bấm tiếp Next để chọn các khối OB, bắt buộc là OB1, các OB khác có thể thêm vào sau.
Hình 3
Chọn cách lập trình STL, LAD hay FBD, trong lùc lập trình có thể tùy ý thay đổi. Bấm
tiếp Next đặt tên cho Project, sau đó bấm Finish, xuất hiện cửa sổ lập trình (Hình 5)
Nguyễn Đức Thành 48
Hình 4
Hình 5
Nửa cửa sổ bên trái sắp xếp dạng thư mục, kích chuột vào đó để mở ra các mục con.
Bấm vào dòng SIMATIC 300 Station bên trái rồi bấm tiếp vào Hardware bên phải để xem cấu
hình phần cứng của PLC (Hình 6) (công việc này cũng có thể thực hiện sau).
Gỉa sử cấu hình đơn giản gồm các module DI/DO, AI/AO, ta kích chuột vào dòng
SIMATIC 300, SM- 300, chọn các module phù hợp, dùng chuột kéo vào các slot của Station từ
số 4 trở đi, (slot 3 dùng cho module IM), thay đổi địa chỉ các ngõ vào ra module, sau đó vào
menu Station – Save rồi Close (Hình 7).
Nguyễn Đức Thành 49
Kết nối PLC với máy tính, cấp nguồn PLC , đặt PLC ở chế độ STOP, ta vào menu
Options-Set PG/PC Interface chọn kết nối PC Adapter (Auto). Có thể Upload cấu hình PLC
lên máy tính, thay đổi đia chỉ I/O, địa chỉ mạng… rồi download trở lại xuống PLC
Nguyễn Đức Thành 50
Cài đặt địa chỉ cho PLC bằng cách nhấn vào nút download, rồi chọn địa chỉ PLC (mặc
định là 2) trong mạng nhiều PLC
Ta sẽ trở lại vấn đề cấu hình ở phần sau.
Nguyễn Đức Thành 51
Trở lại Project, bấm vào mục Blocks, ta thấy xuất hiện OB1, bấm vào OB1 nếu lập trình
tuyến tính, nghĩa là không dùng các khối logic FC, FB (Hình 8,9).
Hình 6
Hình 7
Hình 8
Nguyễn Đức Thành 52
Hình 9
Bấm vào menu View, chọn STL, LAD, FBD chọn cách lập trình.
Ta chọn LAD
Hình 10
Nguyễn Đức Thành 53
Dùng các biểu tượng trên menu hay các hàm ở cửa sổ bên trái ta
bắt đầu lập trình. Chương trình gồm nhiều network, bấm chuột phải vào thanh đứng để thêm
network. (Hình 11). Sau khi lập trình ta bấm biểu tượng save để lưu file.
Nếu lập trình dùng STL thì các hàm không hiện ra, vào menu Help, chọn Help on
Statement List để tìm các lệnh mong muốn (Hình 12).
Có thể mô phỏng chương trình bằng phần mềm PLCSim tích hợp. Bấm biểu
tượng Simulation ở menu của Simatic Manager , cửa sổ PLCSim xuất hiện, ta vào menu File
để thêm PLC, vào menu Insert thêm các vùng nhớ cần quan sát (Hình 13, 14).
Trở lại Simatic Manger, bấm chuột vào ô Blocks rồi bấm chuột vào biểu tượng
Download để download Project xuống PLCSim. Nếu chỉ download một số file ta dùng chuột
trái kết hợp với phím Ctrl để chọn file download.
Trở lại PLCSim, cho PLC Run và tác động lên các địa chỉ cần thiết để xem kết
quả (Hình 15). Có thể xem mô phỏng trên cửa sổ OB1 bằng cách chọn Debug-Monitor.
Sau khi mô phỏng thành công ta download project xuống PLC, nối PLC với máy
tính bằng cáp lập trình, đóng cửa sổ PLCSim, cấp nguồn cho PLC, chế độ STOP, vào menu
Simatic Manger- Options- Set PG/PC Interface, mở ra cửa sổ chọn kết nối (Hình 16) , ta chọn
PC Adapter (Auto) sau đó bấm Properties chọn địa chỉ trạm và vận tốc truyền phù hợp. Khi cài
đặt xong đóng cứa sồ và tiến hành download. Cấp nguồn cho PLC. Nếu PLC đang RUN thì phải
chuyển sang STOP bằng nút MODE Select hay tác động từ máy tính thông qua menu PLC-
Diagnostic/Settings- Operating Mode (Hình 17). Sau khi download xong cho PLC RUN và ta
monitor hoạt động trên máy tính.
Hình 11
Nguyễn Đức Thành 54
Hình 12
Hình 13
Hình 14
Nguyễn Đức Thành 55
Hình 15
Hình 16
Nguyễn Đức Thành 56
Hình 17
Nguyễn Đức Thành 57
1. ĐỊA CHỈ KÝ HIỆU
Khi lập trình ta có thể dùng địa chỉ tuyệt đối ( I0.0, MW2, T5…) hay địa chỉ ký hiệu
(Start, Speed, Delay…). Địa chỉ ký hiệu giúp chương trình dễ hiểu hơn. Có hai loại là địa chỉ ký
hiệu cục bộ (biến cục bộ) và ký hiệu tòan cục (hay chia xẻ) , ký hiệu cục bộ khai báo trong bảng
khai báo biến của khối và chỉ có ý nghĩa trong phạm vi khối đó, ký hiệu tòan cục khai khai báo
trong bảng ký hiệu Symbols, có ý nghĩa trong tòan bộ các khối của project. Việc khai báo ký hiệu
tòan cục thực hiện trước hay sau khi viết mã. Khối logíc có thể có tối đa 999 network, mỗi
network có tối đa 2000 hàng , mỗi hàng gồm nhãn , lệnh, địa chỉ và chú thích (sau //)
Thủ tục lập ký hiệu toàn cục như sau: bấm chuột vào đối tượng Symbols (Xem hình 6,10
).
Hình 18
Caùc bieán kyù hieäu ñöôïc ñöa vaøo töøng doøng moät, daøi toái ña 24 kyù töï chöõ soá, kyù töï ñaëc
bieät, tröø daáu nhaùy “ , khoâng phaân bieät chöõ hoa vaø chöõ thöôøng. Baûng kyù hieäu chöùa toái ña
16380 kyù hieäu.
Trong vuøng Address ta khai baùo caùc vuøng nhôù I, Q, M, PI, PQ (loaïi BOOL, BYTE,
CHAR, WORD, INT, S5TIME, DATE, DWORD, DINT, REAL, TOD, TIME) T (Timer), C
(Counter), cac khoái chöông trình OB, FB, FC, SFB, SFC, khoái döõ lieäu DB, baûng bieán VAT,
loaïi döõ lieäu ngöôøi duøng UDT
Sau khi ñaõ bieân taäp xong, vaøo menu Symbol Table- Save ñeå löu baûng. Vaøo cöûa soå bieân
taäp cuûa khoái choïn View- Display with - Symbolic Representation ñeå nhìn thaáy ñòa chæ kyù hieäu
trong chöông trình, kyù hieäu toaøn cuïc ñöôïc ñoùng khung baèng daáu “, coøn kyù hieäu cuïc boä coù daáu
# ñöùng tröôùc. Neáu duøng View- Display with- Symbol Information thì hieån thò caû kyù hieäu, ñòa
chæ tuyeät ñoái , vaø chuù thích ñi keøm. Caùc loaïi bieán cho pheùp trình baøy trong baûng 1 , taàm ñòa
chæ cuï theå phuï thuoäc loaïi CPU
I
EC Description Data Type
I Input bit BOOL
I
B Input byte BYTE, CHAR
I
W Input word
WORD, INT, S5TIME,
DATE
Nguyễn Đức Thành 58
I
D Input double word DWORD, DINT, REAL, TOD, TIME
Q Output bit BOOL
Q
B Output byte BYTE, CHAR
Q
W Output word WORD, INT, S5TIME, DATE
Q
D Output double word DWORD, DINT, REAL, TOD, TIME
M Memory bit BOOL
M
B Memory byte BYTE, CHAR
M
W Memory word WORD, INT, S5TIME, DATE
M
D Memory double word DWORD, DINT, REAL, TOD, TIME
P
IB Peripheral input byte BYTE, CHAR
P
QB Peripheral output byte BYTE, CHAR
P
IW Peripheral input word WORD, INT, S5TIME, DATE
P
QW Peripheral output word WORD, INT, S5TIME, DATE
P
ID Peripheral input double word DWORD, DINT, REAL, TOD, TIME
P
QD Peripheral output double word DWORD, DINT, REAL, TOD, TIME
T Timer TIMER
C Counter COUNTER
O
B Organization block OB
F
B Function block FB
D
B Data block DB, FB, SFB, UDT
F
C Function FC
S
FB System function block SFB
S
FC System function SFC
V
AT Variable table
U
DT User defined data type UDT
Bảng1 Các vùng nhớ và loại biến
Chöông trình OB coù theå söû duïng caùc bieán taïm döôùi hình thöùc kyù hieäu (coù daáu # ôû
tröôùc) hay ñòa chæ L trong vuøng baûng khai baùo bieán cuûa khoái , baét ñaàu töø ñòa chæ 20.0 trôû ñi.
Ví duï1: ñoaïn chöông trình sau söû duïng bieán taïm Enable khai baùo trong baûng bieán cuïc
boä, ñòa chæ 20.0, chuyeån sang daïng STL, duøng theâm bieán phuï L21.0 coøn troáng maø khoâng caàn
khai baùo trong baûng neáu
khoâng duøng ñòa chæ
kyù hieäu.
Nguyễn Đức Thành 59
4. CÁC LỆNH BIT
Hình 18 Các lệnh bit
Các lệnh bit thao tác trên các bit vùng nhớ I, Q, M, L, D, T, C, kết quả phép tính logic gọi
là RLO (Result of Logic Operation) . RLO là một bit trong Status Word
RLO là kết quả chuỗi lệnh bit hay lệnh so sánh. Chuỗi này kết thúc khi thực hiện phép
gán RLO cho một bit nhớ (S, R, =) hay thực hiện lệnh nhảy có điều kiện.
Trong Status Word có bit /FC (First Check), khi /FC=0 có nghĩa là kết thúc chuỗi logic
và bắt đầu chuỗi mới. Khi /FC=1 RLO là giá trị của RLO kết hợp với lệnh bit hiện tại. Bắt đầu
một network /FC là 1.
Nguyễn Đức Thành 60
4.1 Lệnh LAD
- Trong LAD, các bit biểu thị bởi contact thường hở và thường đóng . Bắt đầu
một network luôn luôn là một trong hai contact này. Với RLO là 1 nếu bit ở địa
chỉ đó là 1, Với RLO là 0 nếu bit ở địa chỉ đó là 1.
Hai tiếp điểm nối tiếp thì RLO AND với nhau, hai tiếp điểm song song thì RLO OR với
nhau.
- Lệnh gán RLO cho một bit I, Q, M, L, D
- Lệnh đảo trạng thái của RLO
- Lệnh SET coil cho một bit I, Q, M, L, D lên 1 nếu RLO là 1, nếu RLO là 0 bit
không đổi.
- Lệnh RESET coil cho một bit I, Q, M, L, D,T, C xuống 0 nếu RLO là 1, nếu
RLO là 0 bit không đổi.
- Lệnh Set Reset Flip flop set, reset một bit I, Q, M, L, D với ưu tiên cho reset
Nếu S=1, R=0, bit address và Q là 1, nếu R=1, bit address và Q là 0
Nếu S=0, R=0, bit address và Q không đổi
- Lệnh Reset-Set Flip flop set, reset một bit I, Q, M, L, D với ưu tiên cho Set
Nguyễn Đức Thành 61
Nếu S=1, bit address và Q là 1, nếu S=0, R=1 bit address và Q là 0
Nếu S=0, R=0, bit address và Q không đổi
- Lệnh gán giữa hàng gán RLO cho một bit I, Q, M, D, riêng bit L được dùng nếu có
khai báo biến trong vùng TEMP bảng khai báo khối logic tương ứng.
- Lệnh vi phân cạnh lên cho kết quả là 1 khi bit điều kiện thay đổi từ 0 lên 1.
Địa chỉ bit I, Q, M, L, D
M0.1 là 1 trong một chu kỳ máy khi I0.0 chuyển từ 0 lên 1.
- Lệnh vi phân cạnh xuống cho kết quả RLO là 1 trong một chu kỳ khi RLO trước
lệnh thay đổi từ 1 xuống 0.
- Lệnh POS khi được cho phép, Q là 1 trong một chu kỳ quét nếu bit
address1 chuyển trạng thái từ 0 lên 1, address1, address 2 và Q thuộc vùng I,Q, M, L, D
M0.3 là 1 trong một chu kỳ máy khi I0.0 và M0.0 là 1 và I0.2 chuyển từ 0 lên 1
- Lệnh NEG tương tự, dùng phát giác cạnh xuống của address1.
Nguyễn Đức Thành 62
- Lệnh SAVE cất RLO vào BR, BR (binary result) là một bit trong Status word.
Với lệnh SAVE, /FC vẫn là 1, nghĩa là khi sang network khác BR sẽ dùng làm RLO cho bắt đầu
network . BR dùng tạo sự liên kết giữa hai network.
4.2 Lệnh STL
- Trong STL khi thực hiện lệnh bit, trạng thái bit đầu tiên được kiểm tra bằng lệnh A
(And), AN (And Not), O (Or), ON (Or Not) và nạp vào RLO, sau đó RLO sẽ thay đổi tùy theo
tổ hợp logic các bit tiếp theo.
- Lệnh = gán RLO cho một bit và cho /FC là 0
A I 0.0
AN I 0.1
O I 0.2
= Q 0.0
Q0.0 là 1 khi (I0.0 and /I0.1) or I0.2 là 1
A I 0.0
AN I 0.1
O I 0.2
= Q 0.0
A M 0.0
= M 0.1
Lệnh tương đương
Q0.0 là 1 khi (I0.0 and /I0.1) or I0.2 là 1, M0.1 là 1 khi M0.0 là 1 vì sau lệnh = Q0.0
RLO được tính từ đầu. Nếu muốn M0.0 phụ thuộc nhánh trên thì ta phải lưu RLO nhánh trên vào
biến tạm L kể từ địa chỉ L20.0
A I 0.0
AN I 0.1
O I 0.2
= L 20.0
= Q 0.0
A L 20.0
A M 0.0
= M 0.1
Nguyễn Đức Thành 63
Chú ý là chương trình STL ở trên không chuyển sang LAD được, giả sử ta lập trình LAD
sơ đồ bên phải rồi chuyển sang STL ta được chương trình sau
A I 0.0
AN I 0.1
O I 0.2
= L 20.0
A L 20.0
BLD 102
= Q 0.0
A L 20.0
A M 0.0
= M 0.1
BLD (Program Display Instruction) dùng để
hiển thị lệnh STL dưới dạng LAD và được
tự động thêm vào khi chuyển từ LAD sang
STL
Kết luận là chương trình LAD có điểm rẽ nhánh thì trong STL phải lưu giá trị RLO ở
điểm rẽ nhánh vào vùng nhớ cục bộ. Cần cẩn thận khi lập trình STL.
- Lệnh NOT đảo RLO
- Lệnh SET cho RLO là 1
- Lệnh CLR cho RLO là 0
- Lệnh Exclusive or X thực hiện XOR bit với RLO
X I 0.0
X I 0.1
= Q 0.0
Thực hiện phép tính Q0.0= I0.0 XOR I0.1
Q0.1 là 1 nếu I0.0 và I0.1 khác nhau
- Lệnh Exclusive Not XN thực hiện XOR NOT bit với RLO
X I 0.0
XN I 0.1
= Q 0.0
Thực hiện phép tính Q0.0= I0.0 XOR I0.1
Q0.1 là 1 nếu I0.0 và I0.1 giống nhau
- Lệnh O (And before Or) không toán hạng, dùng để nối song song hai nhánh gồm các
lệnh A, AN
A I 0.0
AN I 0.1
A T 0
O
A M 0.0
A M 0.1
= Q 0.0
- Lệnh A( ) dùng để And RLO với RLO nhóm lệnh logic giữa hai dấu () và cất vào
stack (tối đa là 7), sử dụng khi nhiều nhóm nối tiếp
A(
O I 0.0
O M 0.0
)
A(
AN I 0.1
A T 0
O M 0.1
)
AN I 0.2
Nguyễn Đức Thành 64
= Q 0.0
- Lệnh AN( ) dùng để tạo And RLO với RLO nhóm lệnh logic giữa hai dấu (), đảo nó
và cất vào stack (tối đa là 7)
- Lệnh O( ) dùng để tạo Or RLO với RLO một nhóm lệnh logic giữa hai dấu (), và cất
vào stack (tối đa là 7), sử dụng khi nhiều nhóm song song. Lệnh này thường được thay bằng lệnh
O không toán hạng.
- Lệnh ON( ) tương đương O( ) rồi đảo RLO
- Lệnh X( ) XOR nhóm lệnh với RLO cất vào stack
- Lệnh XN() thực hiện X() rồi đảo.
- Lệnh S bit (I,Q,M,L,D) set bit khi RLO là 1, sau lệnh này /FC là 0
- Lệnh R bit (I,Q,M,L,D) reset bit khi RLO là 1, sau lệnh này /FC là 0
- Lệnh FP bit cho RLO là 1 trong một chu kỳ quét khi RLO chuyển từ 0 lên 1
- Lệnh FN bit cho RLO là 1 trong một chu kỳ quét khi RLO chuyển từ 1 xuống 0
- Lệnh SAVE cất RLO vào BR
5. LỆNH SO SÁNH
5.1 Lệnh LAD
- So sánh hai số nguyên có dấu, số nguyên kép có dấu, số thực thuộc loại I, Q, M, L, D,
hằng số. Lệnh được thực hiện khi RLO trước đó là 1, kết quả so sánh là RLO dùng cho lệnh kế
hay gán cho một bit I, Q, M, L, D. Lệnh có thể đặt ở đầu network và có thể nối tiếp hay song
song các lệnh so sánh
Nguyễn Đức Thành 65
5.2 Lệnh STL
- Lệnh so sánh được sử dụng với thanh ghi tích lũy ACC1 và ACC2, đây là các thanh
ghi 32 bit. Ta nạp nội dung ô nhớ hay hằng số vào ACC1 bằng lệnh L địa chỉ hay L hằng số.
Vùng địa chỉ gồm có I, Q, M, L, D, PI, P#, chiêu dài dữ liệu là byte, word, dword. Mỗi khi thực
hiện lệnh L nội dung của ACC1 được chuyển qua ACC2 trước khi nhận giá trị mới.
- Giá trị ACC1 được chuyển qua ô nhớ bằng lệnh T địa chỉ.
- So sánh ACC2 với ACC1, kết quả so sánh là RLO, là 1 nếu thóa mãn điều kiện so
sánh. Kết quả so sánh còn ảnh hưởng đến hai bit CC1 và CC0 trong Status Word
- So sánh số nguyên 16 bit ==I, <>I, <I, >I, <=I, >=I
- So sánh số nguyên 32 bit ==D, <>D, <D, >D, <=D, >=D
- So sánh số thực 32bit ==R, <>R, <R, >R, <=R >=R
Ví dụ: A(
A(
L MW 0
L 15
==I
)
A(
L MD 4
L L#12
>D
A(
L MW 2
L MW 0
<I
)
A(
L MD 8
L -5.000000e-001
>=R
)
Nguyễn Đức Thành 66
)
O
)
A T 0
= Q 0.0
6. LỆNH TIMER
Timer là bộ đếm xuống 10 bit, ký hiệu Tx, x đi từ 0 đến tối đa 255 tùy loại CPU. Ta nạp
giá trị ban đầu vào ACC1 dưới hai dạng
- W#16#bxyz, b là đơn vị thời gian gồm bit 13, 12; xyz là ba số BCD từ 0 đến 999, từ
bit 11 đến bit 0.
Đơn vị thời gian b là 2 bit có giá trị thập phân theo bảng dưới:
10 ms 0
100 ms 1
1 s 2
10 s 3
- S5T#aH_bM_cS_Dms, giá trị tối đa là 9990 s hay S5T#2H_46M_30S.
- Timer có hai ngõ ra để đọc giá tri đưa vào ô nhớ word, ngõ ra BI là giá trị Timer dạng
nhị phân, không bao gồm b, ngõ ra BCD là giá trị timer dạng số Hex W#16#bxyz
6.1 Dạng LAD Khối
- Pulse Timer: tạo xung có bề rộng xác định
Tno Số hiệu Timer Timer
S Ngõ vào Start, khi S chuyển trạng thái lên 1, Timer đếm
xuống từ giá trị TV, Timer reset khi S =0
Bool
TV Gía trị đặt ban đầu, giá trị b do CPU tự chọn nếu dùng
dạng S5T#, có thể ghi trực tiếp với dạng S5T# hay dùng
ô nhớ I, Q, M, L, D cho cả hai dạng
Dạng
Q Ngõ ra, cũng là Tno, lên 1 khi S=1. Sau thời gian TV, Q
xuống 0, S phải duy trì lớn hơn TV, khi không dùng bỏ
trống
Bool
R Reset, khi =1 làm Q và Tno = 0, Muốn Timer chạy lại
phải kích lại bằng S, khi không dùng bỏ trống
Bool
BI Gía trị còn lại của Timer, dạng số nguyên , 0 đến 999 Word
BCD Gía trị còn lại của Timer, dạng số BCD bao gồm đơn vị
thời gian , W#16#0 đến W#16#3999, khi không dùng bỏ
trống
Word
Nguyễn Đức Thành 67
- Extended Pulse Timer
Giống Pulse Timer, tuy nhiên có hai điểm khác:
- Tín hiệu S chỉ cần kích cạnh lên mà không cần duy trì
- Khi chưa hết thời gian timer, nếu S chuyển từ 0 lên 1 thì timer hoạt động lại từ đầu, tức
là bề rộng xung được kéo dài.
- On Delay Timer
- S chuyển trạng thái từ 0 lên 1 và giữ ở mức 1, timer bắt đầu đếm xuống, sau thời gian
timer, Tno và Q ON, Khi R=1 hay S=0 Ton và Q OFF
Nguyễn Đức Thành 68
- Retentive On Delay Timer
Giống On Delay Timer, tuy nhiên có hai điểm khác:
- Tín hiệu S chỉ cần kích cạnh lên mà không cần duy trì
- Khi chưa hết thời gian timer, nếu S chuyển từ 0 lên 1 thì timer hoạt động lại từ đầu, tức
là thời gian delay được kéo dài.
- Khi R On thì xóa Timer
- OFF Delay Timer
- Khi S ON thì Q ON, S chuyển sang OFF, Timer bắt đầu làm việc, sau thời gian delay Q
= Tno = 0.
- Khi Timer đang chạy nếu S hay R chuyển lên 1 thì timer reset
Nguyễn Đức Thành 69
6.2 Dạng LAD Coil
-Pulse Timer Coil
Khi RLO ON timer bắt đầu chạy, Tno ON,
hết thời gian delay Tno OFF. Reset Timer
bằng lệnh R Tno
- Các loại timer khác
6.3 TIMER Dạng STL
- Có tên gọi giống Timer dạng coil
- Các bước lập trình timer gồm:
- Khai báo tín hiệu S
- Khai báo giá trị TV bằng lệnh L S5T# hay L W#16#bxyz hoặc L địa chỉ
- Khai báo loại timer (SP, SE, SD, SS, SF) và số timer
Nguyễn Đức Thành 70
- Khai báo tín hiệu R (có thể bỏ qua)
- Đọc nội dung timer (12 bit) bằng lệnh
L Tno
T địa chỉ
(có thể bỏ qua)
- Đọc nội dung timer (14 bit BCD) bằng lệnh
LC Tno
T địa chỉ
(có thể bỏ qua)
Ví dụ:A I 2.1
L S5T#10s //Preset 10 seconds into ACCU 1.
SD T1 //Start timer T1 as an on-delay timer.
A I 2.2
R T1 //Reset timer T1.
A T1 //Check signal state of timer T1.
= Q 4.0
L T1 //Load current timer value of timer T1 as
binary.
T MW10
LC T1 //Load current timer value of timer T1 as
BCD.
T MW12
Ví dụ: Lập trình đèn giao thông Xanh A 30sec, Vàng A 3sec, Đỏ A 18sec, Vàng B 3 sec
//Network1
AN "YELLOW_B_TIME"
L S5T#30S SD "GREEN_A_TIME"
A "GREEN_A_TIME"
L S5T#3S
SD "YELLOW_A_TIME"
A "YELLOW_A_TIME"
L S5T#15S
SD "GREEN_B_TIME"
A "GREEN_B_TIME"
L S5T#3S
SD "YELLOW_B_TIME"
//Network 2 AN "GREEN_A_TIME"
= "Green A"
A "GREEN_A_TIME"
AN "YELLOW_A_TIME" = "Yellow A"
A "YELLOW_A_TIME"
AN "GREEN_B_TIME"
= "Green B"
A "GREEN_B_TIME"
= "Yellow B"
O "Green A"
O "Yellow A"
= "Red B"
O "Green B"
O "Yellow B" = "Red A"
Ví dụ: lập trình lại đèn giao thông dùng một Timer và các lệnh so sánh
AN "CYCLE_TIME"
L W#16#2051
SD "CYCLE_TIME"
L "CYCLE_TIME"
L 21
>=I
= "Green A"
S "Red B"
R "Red A"
A(
L "CYCLE_TIME"
L 21
<I
)
A(
L "CYCLE_TIME"
L 18
>=I
Nguyễn Đức Thành 71
)
= "Yellow A"
A(
L "CYCLE_TIME"
L 18 <I
)
A(
L "CYCLE_TIME"
L 3
>=I
)
= "Green B"
S "Red A"
R "Red B"
A( L "CYCLE_TIME"
L 3
<I
)
= "Yellow B"
Ví dụ: Tạo xung nhịp
Đôi khi ta cần một công việc thực hiện theo chu kỳ lặp lại, ví dụ đọc ngõ vào analog
PIW2 theo chu kỳ 1s, ta có thể dùng Khối ngắt OB35, dùng timer hay dùng Clock Memory
- Dùng Timer AN T0
L S5T#1s
SD T0 A T0
JCN next
L PIW2
T MW2
next:
// Thêm các lệnh
- Dùng Timer tạo nhiều xung nhịp:
AN T1 //If timer T 1 has expired,
L S5T#250ms //load the time value 250 ms into T 1 and
SE T1 //start T 1 as an extended-pulse timer.
NOT //Negate (invert) the result of logic operation.
BEB //If the timer is running, end the current block.
L MB100 //If the timer has expired, load the contents of memory byte MB100,
INC 1 //increment the contents by 1,
T MB100 //and transfer the result to memory byte MB100.
Các bit của MB0 nhịp với chu kỳ
Bits of MB100 Tần số (Hz) Chu kỳ
M 100.0 2.0 0.5 s
M 100.1 1.0 1 s
M 100.2 0.5 2 s
M 100.3 0.25 4 s
M 100.4 0.125 8 s
M 100.5 0.0625 16 s
M 100.6 0.03125 32 s
M 100.7 0.015625 64 s
- Dùng Clock Memory: ta vào Hardware , bấm vào Slot CPU →Cycle/Clock Memory,
chọn vùng nhớ MB làm xung nhịp rồi download cấu hình xuống PLC. Có tất cả 8
xung nhịp theo bảng sau
Nguyễn Đức Thành 72
7. COUNTER
Counter là bộ đếm ba số thập phân từ 0 đến 999 . Có tối đa 256 Counter , ký hiệu
counter là Cx, x=0..255. Các ngõ vào ra trong vùng nhớ I, Q, M, L, D
7.1 Counter dạng khối
- Đếm tăng giảm
- Đếm tăng và đếm giảm
Nguyễn Đức Thành 73
Ví dụ:
7.2 Counter dạng coil
Gồm các lệnh
Ví dụ:
7.3 Counter dạng STL
- Set Counter
Ví dụ: khi I0.0 có cạnh lên , nạp vào C0 giá trị 100
A I0.0
L C#100
SC C0
- Khai báo xung đếm
Ví dụ: I0.1 đếm lên khi I0.2=1
Nguyễn Đức Thành 74
A I0.2
A I0.1
CU C0
- Reset counter
Ví dụ: reset khi I0.3 là 1
A I0.3
R C0
- Đọc giá trị counter dạng số nguyên
L C0
T MW2
- Đọc giá trị counter dạng số BCD
LC C0
T MW4
8. LỆNH DI CHUYỂN
8.a Lệnh LAD
Lệnh này chép ô nhớ hay hằng số ở IN ra ô nhớ OUT, các ngõ vào ra thuộc vùng nhớ I,
Q, M, L, D. Dữ liệu ở IN không đổi. Khi IN có chiều dài lớn hơn OUT, các byte dư bị cắt bỏ.
Khi OUT có chiều dài lớn hơn IN, các byte cao được thêm vào giá trị 0
8.b Lệnh STL
- Dùng lệnh L (Load) nạp giá trị hằng số hay ô nhớ (I, PI, I, M, L, D, Pointer, Parameter)
vào Accumulator1 Lệnh T (Transfer) chuyển ACC1 ra ô nhớ (I, Q, PQ, M, L, D). Trước khi
thực hiện lệnh L giá trị của ACC1 được chuyển cho ACC2, giá trị ACC1 là 0. Chiều dài ô nhớ có
thể là byte, word, double word. Lệnh được thực hiện không điều kiện.
- TAK tráo đổi ACC1 và ACC2
- CAW tráo đổi hai byte thấp của ACC1 (B0 B1 B2 B3) → (B0 B1B3 B2)
- CAD tráo đổi 4 byte của ACC1 (B0 B1 B2 B3) → (B3 B2 B1 B0)
- POP chép ACC2 → ACC1, ACC3 → ACC2, ACC4 → ACC3
- PUSH ACC3 → ACC4, ACC2 → ACC3, ACC1 → ACC2
Nguyễn Đức Thành 75
Ví dụ: Khi I0.0 chuyển trạng thái, chép hai DW MD0 MD4 sang MD4 MD8
A I 0.0
FP M 100.0
JCN NEXT
L MD 0
T LD 20
L MD 4 T LD 24
L LD 20
T MD 4
L LD 24
T MD 8
NEXT: BE
9. LỆNH CHUYỂN ĐỔI
9.a Lệnh LAD
Lệnh này chuyển đổi loại dữ liệu IN sang loại dữ liệu khác ở OUT
Chuyển đổi số BCD ra số nguyên và ngược lại:
- Lệnh BCD_I nhận vào số BCD (dấu và ba số thập phân, dạng W#16#syyy, s là 0 nếu
số dương, s là 1 (hay F) nếu số âm, yyy là ba số thập phân) hằng hay ô nhớ word (I, Q, M, L, D)
chuyển sang số nguyên 16 bit đưa vào ô nhớ OUT (số nguyên âm biểu thị bằng mã bù 2).
- Lệnh I_BCD thực hiện ngược lại, nếu IN có trị tuyệt đối lớn hơn 999, lệnh không được
thực hiện và ENO = 0.
- Lệnh BCD_DI, DI_BCD thực hiện với số BCD 7 digit (số âm có bit 28..31 là 1) và số
nguyên kép
Ví dụ: đổi số BCD âm -234 ra số nguyên chứa trong MW2, MW2 sẽ chứa số FF16
- Lệnh I_DINT đổi số nguyên 16 bit ra số nguyên 32 bit , các byte cao là 0 nếu số
dương và 1 nếu là số âm
- Lệnh DI_REAL đổi số nguyên 32 bit ra số thực.
- Số thực có chiều dài 32 bit theo cấu trúc sau
Nguyễn Đức Thành 76
Và có trị số tính theo công thức )127(2).1(1 esf
- Lệnh đổi số thực ra số nguyên kép
- ROUND : làm tròn đến số nguyên gần nhất, nếu số thực có trị tuyệt đối lớn hơn số 32
bit, ENO bằng 0, lệnh không thực hiện
- TRUNC (Truncate): bỏ phần lè
- CEIL (Ceiling): làm tròn đến số nguyên lớn hơn số thực
- FLOOR: làm tròn đến số nguyên nhỏ hơn số thực
- Lệnh bù 1: đảo các bit của số nguyên
- Lệnh đảo dấu: đổi số dương ra âm và ngược lại
9.b Lệnh STL
Lệnh chuyển đổi STL làm việc trên ACC1 và kết quả chứa trong ACC1. Vậy phải dùng
lệnh L để đưa toán hạng vào ACC1. Lệnh làm việc không điều kiện, muốn lệnh được thực hiện
khi thỏa điệu kiện logic, ta dùng lệnh Nhảy xét Status Word.
- BTI (BCD to Integer)
- ITB (Integer to BCD), nếu bị tràn lệnh không được thực hiện và hai bit OV, OS trong
Status Word là 1
- BTD (BCD To Double Integer)
- DTB (Double integer to BCD), nếu bị tràn lệnh không được thực hiện và hai bit OV,
OS trong Status Word là 1
- ITD (Integer To Double integer)
- DTR (Double integer To Real)
Nguyễn Đức Thành 77
- RND (Round),
- TRUNC (Truncate)
- RND+( Ceiling)
- RND- (Floor), các lệnh chuyển đổi số thực sang số nguyên kép nếu bị tràn sẽ không
thực hiện và hai bit OV, OS là 1
- INVI (Invert Integer)
- INVD (Invert Double integer)
- NEGI (2’s complement Integer)
- NEGD (2’s complement Double Integer), hai lệnh NEGI và NEGD tác động đến hai
bit CC0, CC1 và OV, OS như sau
Kết quả CC1 CC0 OV OS
0 0 0 0
Âm 0 1 0
Dương 1 0 0
Tràn âm 0 1 1 1
- NEGR (Negate Real)
Ví dụ:
A M0.0
JNB next
L MW0
ITD
T MD2
next:
10. LỆNH TOÁN HỌC SỐ NGUYÊN
10.1 LỆNH LAD
Lệnh thực hiện với hai số nguyên có dấu 16 bit hay 32 bit IN1, IN2 là hằng số hay ô nhớ
(I, Q, L, M, D), kết quả đưa ra ô nhớ OUT (I, Q, L, M, D). Nếu kết quả ngoài tầm thì ENO=0,
lệnh không được thực hiện và OV=OS= 1. Tùy theo dấu kết quả, các bit CC1, CC0 bị ảnh
hưởng.
Các lệnh gồm OUT= IN1+IN2, OUT= IN1-IN2, OUT=IN1*IN2 và OUT=IN1/IN2
Lệnh MOD_DI tính dư số phép chia IN1 cho IN2
Nguyễn Đức Thành 78
Kết quả CC1 CC0 OV OS
0 0 0 0 -
âm 0 1 0 -
dương 1 0 0 -
tràn x x 1 1
10.2 Lệnh STL
Lệnh thực hiện với ACC2 là toán hạng thứ nhất, ACC1 là toán hạng thứ hai, kết quả chứa
trong ACC1, ACC2 không đổi. Status Word thay đổi như bảng trên. Lệnh thực hiện không điều
kiện. Với CPU có bốn thanh ghi thì ACC3->ACC2, ACC4-> ACC3.
+I ACC1 =ACC2 + ACC1 (Integer )
-I ACC1= ACC2 - ACC1 (Integer )
*I ACC1= ACC2 * ACC1 (Integer )
/I ACC1= ACC2 - ACC1 (Integer )
+ hằng số ACC1= ACC1 + hằng số
+D ACC1= ACC2 + ACC1 (Double Integer )
-D ACC1= ACC2 - ACC1 (Double Integer )
*D ACC1= ACC2 * ACC1 (Double Integer )
/D ACC1= ACC2 / ACC1 (Double Integer )
MOD ACC1= ACC2 MOD ACC1 (Double Integer )
INC hằng số 8 bit : byte thấp nhất của ACC1 được cộng với hằng số 8bit
DEC hằng số 8 bit : byte thấp nhất của ACC1 được trừ với hằng số 8bit
Ví dụ: tính DB1.DBW25= IW10+ MW14+ 23
L IW10 / /Load the value of IW10 into ACC 1-L.
L MW14 //Load the contents of ACCU 1-L to ACCU 2-L. Load the value of MW14 into ACC1-L.
+I //Add ACCU 2-L and ACCU 1-L; store the result in ACC 1-L.
+25 //Add ACCU 1-L and 25; store the result in ACC1-L. T DB1.DBW25 / /Transfer the contents of ACC1-L (result) to DBW25 of DB1.
Ví dụ: tính MD4 = ((IW0 + DBW3) x 15) / MW2
L IW 0 .
L DB5.DBW 3
+I L 15
*I
L MW 2
/I
T MD 4
11. LỆNH TOÁN HỌC SỐ THỰC
11.1 LỆNH LAD
- Lệnh cộng trừ nhân chia thực hiện phép tính OUT= IN1 phép tính IN2 tương tự lệnh số
nguyên
Nguyễn Đức Thành 79
- Các lệnh sau chỉ có một toán hạng vào, lệnh lượng giác dùng đơn vị góc là radian
11.2 Lệnh STL
Các lệnh cũng giống như trong LAD, phép tính thực hiện giữa ACC2 và ACC1, kết quả
chứa trong ACC1. Các lệnh một toán hạng tính toán trên ACC1. Lệnh được thực hiện không
điều kiện.
+R ACC1=ACC2+ ACC1
-R ACC1=ACC2- ACC1
*R ACC1=ACC2* ACC1
/R ACC1=ACC2/ ACC1
ABS
SQR
SQRT
EXP
LN
SIN
COS
TAN
ASIN
ACOS
ATAN
12 LỆNH NHẢY
12.1 LỆNH LAD
Lệnh nhảy chuyển chương trình đến lệnh đứng sau nhãn (label), nhãn đứng đầu network.
Nhãn là chuỗi ký tự tối đa là 4, nhãn không bắt đầu bằng số.
- Lệnh Jump nhảy đến lệnh sau nhãn khi điều kiện là 1
- Lệnh Jump if not nhảy đến lệnh sau nhãn khi điều kiện là 0
Ví dụ:
Nguyễn Đức Thành 80
Khi I0.0 ON thì thực hiện network 3, khi I0.0 OFF thì thực hiện network 2 rồi network 3
12.2 LỆNH STL
Trong STL các lệnh nhảy phong phú hơn, nhãn được đặt ở đầu chuỗi logic.
- Nhảy không điều kiện
o JU nhãn: nhảy không điều kiện đến nhãn, có thể nhảy tới hoặc lui, khoảng
cách là -32768 đến 32767 word mã chương trình
Ví dụ: nếu I1.0 và I1.2 ON thì tăng MB10, nếu không cho MB10=0 A I 1.0
A I 1.2
JC DELE //Jump if RLO=1 to jump label DELE.
L MB10 INC 1
T MB10
JU FORW //Jump unconditionally to jump label FORW.
DELE: L 0
T MB10
FORW: A I 2.1 //Program scan resumes here after jump to jump label FORW.
o JL nhãn: Jump list, kiểm tra byte thấp của ACC1, tùy theo giá trị này sẽ nhảy
đến các nhãn khác nhau
Ví dụ: tùy theo giá trị MB0 sẽ nhảy đến các nhãn khác nhau, MB0 = 0 nhảy đến seg0,
MB0 = 1 nhảy đến seg1, MB0 = 2 nhảy đến seg2, MB0 = 3 nhảy đến seg3, MB0 > 3 nhảy đến
comm
L MB0 //Nạp địa chỉ nhảy vào byte thấp của ACC1
JL lstx //Nhảy nếu MB0 > 3.
JU seg0 // Nhảy nếu MB0 = 0.
JU seg1 // Nhảy nếu MB0= 1.
JU seg2 // Nhảy nếu MB0= 2. JU seg3 // Nhảy nếu MB0= 3.
lstx: JU comm
seg0:
//các lệnh
JU comm
seg1:
//các lệnh
JU comm
seg2:
//các lệnh
JU comm seg3:
//các lệnh
JU comm
comm:
Nguyễn Đức Thành 81
- Lệnh nhảy phụ thuộc RLO, dùng sau lệnh bit hay lệnh so sánh
o JC <nhãn> : nhảy nếu RLO là 1, bắt đầu chuỗi logic mới với RLO là 1,
nếu RLO là 0 thì thực hiện lệnh kế JC, RLO = 1 và bắt đầu chuỗi logic
mới
o JCN <nhãn>: nhảy nếu RLO là 0
Ví dụ: nếu 20<MW0<50 thì Q0.0 ON, ngược lại Q0.1 ON
A(
L MW 0
L 20
>I
)
A(
L MW 0
L 50
<I
)
JCN SEG0 = Q 0.0
R Q 0.1
JU NEXT
SEG0: = Q 0.1
R Q 0.0
NEXT: BE
Chương trình tương đương
A(
L MW 0
L 20
>I
)
A(
L MW 0
L 50
<I
) = L 20.0
A L 20.0
= Q 0.0
A L 20.0
NOT
= Q 0.1
o JCB <nhãn> Cất RLO vào BR rồi thực hiện giống JC
o JNB<nhãn> Cất RLO vào BR rồi thực hiện giống JCN
- Lệnh nhảy phụ thuộc BR: BR là bit trong SW dùng để liên kết chương trình STL và
LAD/FBD
o JBI <nhãn> Nhảy nếu BR=1
o JNBI <nhãn> Nhảy nếu BR=0
- Lệnh nhảy phụ thuộc CC1 CC0, dùng sau lệnh toán học, lệnh so sánh, RLO và /FC
không thay đổi
o JZ <nhãn> nhảy nếu CC1 CC=00, nghĩa là kết quả tính là 0.
o JN<nhãn> nhảy nếu kết quả khác 0
o JP<nhãn> nhảy nếu kết quả dương
o JM<nhãn> nhảy nếu kết quả âm
o JPZ<nhãn> nhảy nếu kết quả dương hay bằng 0
o JMZ<nhãn> nhảy nếu kết quả âm hay bằng 0
- Lệnh nhảy khi kết quả tính quá tầm OV =1
Nguyễn Đức Thành 82
o JO <nhãn>
- Lệnh nhảy khi kết quả tính quá tầm OS=1, OS là bit lưu lại của OV, OS chỉ bị xóa
sau lệnh JOS, gọi khối, kết thúc khối
o JOS <nhãn>
Ví dụ: Nhân MW2 với 3, nếu bị tràn thì cho M4.0 on
L MW10
L 3
*I
JO OVER
T MW10
A M 4.0
R M 4.0
JU NEXT
OVER: AN M 4.0
S M 4.0
NEXT: NOP 0
Ví dụ: thực hiện một loạt phép tính và kiểm tra tràn dùng OS
L IW10
L MW12
*I
L DBW25
+I
L MW14
-I
JOS OVER
- Lệnh nhảy khi CC1 CC0=11, xảy ra khi chia cho 0, số thực không đúng format
o JUO <nhãn> jump unordered
- Lệnh lập vòng LOOP <nhãn>, thực hiện đoạn chương trình giữa LOOP và nhãn, dùng
word thấp của ACC1 làm biến đếm số vòng. Khi gặp lệnh LOOP, giảm ACC1 đi 1, nếu ACC1>0
thì nhảy đến nhãn, nếu ACC1=0 thì thực hiện lệnh sau LOOP
Ví dụ: tính giai thừa 5
L L#1
T MD20
L 5 //Nạp số vòng lặp
NEXT: T MW10 //Nhãn nhảy, cất số vòng còn lại vào MW10
L MD20
* D T MD20
L MW10 //Nạp số vòng đếm vào ACC1
LOOP NEXT //Giảm số vòng đếm và nhảy đến NEXT nếu chưa bằng 0
//Các lệnh thực hiện sau khi đủ năm vòng
12. CÁC LỆNH ĐIỀU KHIỂN CHƢƠNG TRÌNH
12.1 CÁC LỆNH LAD
- Lệnh gọi chƣơng trình con
Nguyễn Đức Thành 83
- --( RET ) Return , trở về chương trình gọi khi RLO=1
12.2 CÁC LỆNH STL
- Gọi chương trình con không điều kiện, có hay không có tham số kèm theo (IN, OUT,
IN_OUT)
o Call FCn; Call SFCn; Call FBn1, DBn2; Call SFBn1, DBn2
- Gọi chương trình con FC, SFC không tham số
o UC FCn, UC SFCn
- Gọi chương trình con khi RLO=1, không tham số
o CC khối
- BE (Block End), BEU (Block End Unconditional), khi gặp BE, BEU trở về chương
trình gọi hay trở về đầu OB1
Ví dụ: A I 1.0
JC NEXT //Jump to NEXT jump label if RLO = 1 (I 1.0 = 1).
L IW4 //Continue here if no jump is executed.
T IW10 A I 6.0
A I 6.1
S M 12.0
BE //Block end
NEXT: NOP 0 //Continue here if jump is executed.
- BEC (Block end unconditional) giống BE, chỉ thực hiện khi RLO=1
13. LỆNH MCR MASTER CONTROL RELAY
MCR dùng để đóng khung một nhóm network, nhóm này sẽ được thực hiện hay không
tùy theo điều kiện;
- MCRA (MCR Activate) và MCRD (MCR Deactivate) đóng khung một nhóm
network, lệnh được thực hiện không điều kiện.
- Nhóm được đóng khung chia thành nhiều nhóm nhỏ, được bao bởi lệnh ---(MCR<) ,
MCR(, (Open a Master Control Relay zone) và --(MCR>), )MCR, (close the last
opened MCR zone)
- Trong các nhóm nhỏ, nếu được cho phép thì các lệnh hoạt động bình thường, nếu
không được cho phép các trường hợp sau xảy ra:
o Với lệnh --( ) , ---( # )---, = bit là 0
Nguyễn Đức Thành 84
o Lệnh R, S, RS, SR không tác dụng
o Lệnh MOVE OUT là 0, T kết quả truyền là 0
Ví dụ:
Việc thực hiện chương trình được điều khiển bởi I0.0, I0.1,
I0.0 I0.1 Kết quả
0 0 Các network 4 và 6 không hoạt động, Q4.0 giữ nguyên giá trị, Q4.1=0
0 1 Như trên
1 0 Network 4 không hoạt động, Q4.0 giữ nguyên giá trị, Network 6 hoạt động,
Q4.1=I0.4
1 1 Các network 4 và 6 hoạt động, Q4.0 là 1 nếu I0.3 là 1, Q4.1=I0.4
Ví dụ: MCRA //Activate MCR area.
A I 1.0
MCR( //Save RLO in MCR stack, open MCR area. MCR = "on" when RLO=1 (I 1.0 ="1");
MCR = "off" when RLO=0 (I 1.0 ="0")
A I 4.0
= Q 8.0 //If MCR = "off," then Q 8.0 is set to "0" regardless of I 4.0.
L MW20 T QW10 //If MCR = "off," then "0" is transferred to QW10.
)MCR //End MCR area.
MCRD //Deactivate MCR area.
A I 1.1
= Q 8.1 //These instructions are outside of the MCR area and are not dependent upon the MCR
bit.
14. LỆNH DỜI
Nguyễn Đức Thành 85
14.1 LỆNH LAD
o Lệnh SHR_I dời IN N bit về bên phải rồi chuyễn sang OUT, 1<N<16, bit
trống ở bên trái được thêm vào bởi bit dấu
EN BOOL I, Q, M, L, D Enable input
ENO BOOL I, Q, M, L, D Enable output
IN INT I, Q, M, L, D Ô nhớ phải dời
N WORD I, Q, M, L, D Số bit dời
OUT INT I, Q, M, L, D Kết quả
o SHR_DI tương tự , dời phải ô nhớ 32 bit, 0<N<32, IN và OUT là
DINTEGER
o SHR_W tương tự SHR_I, bit dấu là 0, IN và OUT là WORD
o SHR_DW tương tự SHR_W, IN và OUT là DWORD
o SHL_W dời trái WORD, bit thêm vào bên phải là 0
o SHL_DW dời trái DWORD, bit thêm vào bên phải là 0
14.2 LỆNH STL
Lệnh Dời không điều kiện, dời hai byte thấp của ACC1 hay cả bốn byte, két quả đưa vào
ACC1, số bit dời là số sau lệnh, nếu không có số này thì số bit dời là byte thấp của ACC2. Bit
dời phải đưa vào CC1.
Nguyễn Đức Thành 86
o SSI Dời phải số nguyên có dấu (16-Bit) , bit dấu là bit 15
o SSD Dời phải số nguyên kép có dấu (32-Bit), bit dấu là bit 31
o SLW Dời trái Word (16-Bit)
o SRW Dời phải Word (16-Bit)
o SLD Dời trái Double Word (32-Bit)
o SRD Dời phải Double Word (32-Bit)
15. LỆNH QUAY
15.1 LỆNH LAD
o ROL_DW Quay trái ô nhớ DWORD N bit, bit 31 đưa vào bit 0, số bit quay là
N, 0<N<32
o ROR_DW Quay phải ô nhớ DWORD N bit
Nguyễn Đức Thành 87
15.2 Lệnh STL
Lệnh STL không điều kiện, quay cà ACC1 bên trái hay bên phải, số bit quay là số đi sau
lệnh hay byte thấp của ACC2, bit dời ra chứa trong CC1
o RLD Quay trái Double Word , bit 31 → bit 0→ CC1
o RRD Quay phải Double Word , bit 0 → bit 31 →CC1
o RLDA Quay trái qua CC 1 , CC1 → bit 0, bit 31 → CC1
o RRDA Quay phải qua CC 1, CC1 → bit 31, bit 0 → CC1
16. Lệnh LOGIC WORD
16.1 LỆNH LAD
Lệnh thực hiện phép tinh AND, OR, XOR giữa hai toán hạng IN1 và IN2, kết quả đưa ra
OUT và làm thay đổi CC1 . Nếu OUT ≠ 0, CC1=1, Nếu OUT = 0, CC1=0
16.2 LỆNH STL
Lệnh thực hiện phép tính AND, OR, XOR giữa ACC1và ACC2 hay hằng số, kết quả đưa
vào ACC1, kết quả là 1 thì CC1=1
o AW AND Word
o OW OR Word
o XOW Exclusive OR Word
o AD AND Double Word
o OD OR Double Word
o XOD Exclusive OR Double Word
17. LỆNH KHỐI DỮ LIỆU
Khối dữ liệu Data Block chứa dữ liệu người dùng, kich thước khoảng 16 Kbyte, chia
thành nhiều khối và được đánh số DB1, DB2… Shared DB chứa dữ liệu dùng chung cho các
khối chương trình, Instance DB chứa dữ liệu dùng riêng cho khối FB, SFB. Dữ liệu trong DB
không bị mất khi ra khỏi chương trình và ta có thể cấu hình CPU để lưu trữ dữ liệu DB khi mất
nguồn.
Nguyễn Đức Thành 88
Khi thêm DB vào chương trình ta phải chọn loại DB và số DB. Các dữ liệu trong shared
DB được khai báo biến và loại trong Declaration View, còn dữ liệu của Instance DB phụ thuộc
khối FB liên kết
Nguyễn Đức Thành 89
Trong chương trình ta truy cập đến ô nhớ trong DB theo cấu trúc DBn1.DBXy.z,
DBn1.DBBy, DBn1.DBWy, DBn1.DBDy DIn1.DIXy.z, DIn1.DIBy, DIn1.DIWy, Din1.DIDy
hoặc mở khối DB bằng lệnh OPN DBn1, OPN DIn2 sau đó trong các lệnh truy cập ta có thể
dùng trực tiếp các địa chỉ mà không cần ghi khối DB
Ví dụ:
OPN DB10 //Open data block DB10 as a shared data block.
L DBW35 //Load data word 35 of the opened data block into ACCU 1-L.
T MW22 //Transfer the content of ACCU 1-L into MW22.
OPN DI20 //Open data block DB20 as an instance data block.
L DIB12 //Load data byte 12 of the opened instance data block into ACCU 1-L.
Nguyễn Đức Thành 90
T DBB37 //Transfer the content of ACCU 1-L to data byte 37 of the opened
shared data block.
18. ĐỊA CHỈ GIÁN TIẾP
Địa chỉ gián tiếp thuận tiện khi truy cập địa chỉ theo vòng lặp. Cấu trúc địa chỉ gián tiếp
là Vùng địa chỉ[Con trỏ].
- Vùng địa chỉ
o bit: I, Q, M, L, DIX, DBX
o byte, WORD, DW: I, Q, M, L, DI, DB, PQ, PI
o T, C, DB, DI, FB, FC
- Con trỏ có hai dạng, chứa trong vùng nhớ M, L, DB, DI, STAT
o Con trỏ WORD chứa số nguyên : dùng cho các địa chỉ T,C, DB, DI, FB, FC
Ví dụ:
A M 2.0
JC next
L 10
T MW 0
= M 2.0
next: A I 0.0
L S5T#10S
SD T [MW 0]
A T [MW 0]
= Q 0.0
o Con trỏ DW có dạng P#byte.bit dùng để trỏ đến địa chỉ bit và P#byte.0 dùng
để trỏ đến byte, word, dw
Ví dụ:
L P#8.7 //Load ACCU 1 with pointer value.
T MD2 //Transfer pointer into MD2.
A I [MD2] //Scan state of input bit 8.7, and assign its
= Q [MD2] //signal state to output bit Q 8.7.
Ví dụ:
A I [MD 2] Perform an AND logic operation on the input bit whose address is located in memory
double word 2.
= DIX [DBD 2] Assign the RLO Bit signal state to the instance data bit DI whose location is in
data double word DBD2.
L IB [DID 4] Load ACCU 1 with the input byte whose address is located in instance double word
DID4.
OPN DB [LW 2] Open the DB (data block) whose data block number is located in local data word LW2.
o Con trỏ chỉ đến vùng địa chỉ P#VùngđịachỉByte.bit ví dụ như P#M2.0 trỏ đến
M2.0 có cấu trúc sau:
Nguyễn Đức Thành 91
Mã HEX Vùng nhớ
b#16#81 I
b#16#82 Q
b#16#83 M
b#16#84 DB
b#16#85 DI
b#16#86 L
- Dùng AR1, AR2 làm con trỏ
AR1, AR2 (Address Register) là hai thanh ghi 32 bit, rất thuận tiện để làm con trỏ. Sau
đây là các lệnh liên quan
o LARx ACC1 → ARx, đầu tiên ta nạp vào ACC1 con trỏ P#Byte.bit
o LARx <D> (32-Bit Pointer) → ARx, nạp trực tiếp con trỏ vào ARx
Ví dụ: L P#2.0
L AR2 //AR2 chứa con trỏ 2.0
//Cách khác
L L#2 SLD 3
LAR1 //AR1 chứa con trỏ 2.0
LAR1 DBD20 //Load AR1 with the pointer in data double word DBD20.
LAR1 DID30 //Load AR1 with the pointer in instance data double word DID30.
LAR1 LD180 //Load AR1 with the pointer in local data double word LD180.
LAR1 MD24 //Load AR1 with the contents of memory double word MD24.
LAR1 P#M100.0 //Load AR1 with a 32-bit pointer constant.
//Cách khác
L L#100 SLD 3
L DW16#83000000
OD
LAR1
Nguyễn Đức Thành 92
LAR2 Load Address Register 2 from ACCU 1
LAR1 P#1.0 //internal area
LAR2 P#M10.0 //crossing area
A [ AR2,P#1.3] /M11.3
= Q[AR1,P#0.2] / Q1.2 M11.3
L IB[AR1,P#0.0] T B[AR2,P#0.0] /MB10 IB1
- LAR1 AR2 : AR2 →AR1
- CAR : AR1 ↔ AR2
- TAR1 : AR1 →ACC1
- TAR1 <D>: AR1 → Memory
- TAR1 AR2 : AR1 → AR2
- +AR1 : AR1 =AR1+ ACC1 _L
- +AR1 n16: AR1 =AR1+ n16
- +AR1 <P#Byte.Bit>: AR1 =AR1+ Byte.bit
Ví dụ:
o L +300 //ACC1_L=300
o +AR1 //AR1 =AR1+300
o +AR1 P#300.0 //AR1=AR1+300.0
Với AR2 ta cũng có các lệnh tương tự
- TAR2: AR2 →ACC1
- TAR2 <D>: AR2 → Memory
- +AR2: AR2 =AR2+ offset ACC1 _L
- +AR2 n16 : AR2 =AR2+ offset n16
- +AR2 <P#Byte.Bit>: AR2 =AR2 + offset Byte.bit
Có hai cách dùng AR:
- Con trỏ chỉ địa chỉ , không chỉ miền nhớ (Area-Internal Register Indirect Addressing)
Ví dụ:
LAR1 P#0.0 LAR2 P#0.0
A I[AR1, P#0.1]
= Q[AR1, P#1.3]
L MW[AR1, P#0.0] T MW[AR2, P#10.0]
T PQW[AR1, P#2.0]
+AR1 P#2.0
- Con trỏ chỉ miền nhớ và địa chỉ (Area-Crossing Register Indirect Addressing)
Ví dụ:
LAR1 P#I0.0
LAR2 P#Q0.0
A [AR1,P#2.3]
= [AR2, P#0.5]
Nguyễn Đức Thành 93
L B[AR1, P#3.0]
T B[AR2, P#1.0]
LAR1 P#M0.0
L W[AR1, P#2.0]
T W[AR1, P#4.0]
Ví dụ: cộng 10 ô nhớ từ MW0 đến MW18, cất vào DB1.DBW0, biến COUNT trong
vùng TEMP
//OB1 LAR1 P#M 0.0
L 0
T DB1.DBW 0
L 10
next: T #COUNT
L DB1.DBW 0
L W [AR1,P#0.0]
+I
T DB1.DBW 0
+AR1 P#2.0
L #COUNT
LOOP next
BE