48
Nguyễn Đức Thành 46 CHƢƠNG 2 LP TRÌNH LAD VÀ STL 1. CÁC NGÔN NGLP TRÌNH S7-300 có thlp trình bng mt trong ba ngôn ngLAD (Ladder Diagram, Giản đồ thang) STL (Statement List, Bng phát bi u) và FBD (Function Block Diagram, Giản đồ khi hàm), ngoài ra còn hai ngôn ngna là Graph và SCL (Structured Control Language, Ngôn ngđi u khin cu trúc). - Ngôn ngLAD dhiu, dl p trình - Ngôn ngSTL gn, khó hi u - Ngôn ngFBD rườm rà Vi c chn ngôn ngnào là tùy ý, tuy nhiên thông dng nht là LAD và STL. Các ngôn ngcó thchuyển đổi cho nhau. 2. STEP7 - SIMATIC MANAGER Chương trình STEP 7 dùng để lp 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 biu tượng Simatic Manager sxut hi n ca sHình 1-b, bấm Next để chn loi CPU Hình 1a Step7 Simatic Manager Hình 1b

c2 Lap Trinh Lad Va Stl

Embed Size (px)

Citation preview

Page 1: 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

Page 2: c2 Lap Trinh Lad Va Stl

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)

Page 3: c2 Lap Trinh Lad Va Stl

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).

Page 4: c2 Lap Trinh Lad Va Stl

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

Page 5: c2 Lap Trinh Lad Va Stl

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.

Page 6: c2 Lap Trinh Lad Va Stl

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

Page 7: c2 Lap Trinh Lad Va Stl

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

Page 8: c2 Lap Trinh Lad Va Stl

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

Page 9: c2 Lap Trinh Lad Va Stl

Nguyễn Đức Thành 54

Hình 12

Hình 13

Hình 14

Page 10: c2 Lap Trinh Lad Va Stl

Nguyễn Đức Thành 55

Hình 15

Hình 16

Page 11: c2 Lap Trinh Lad Va Stl

Nguyễn Đức Thành 56

Hình 17

Page 12: c2 Lap Trinh Lad Va Stl

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

Page 13: c2 Lap Trinh Lad Va Stl

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.

Page 14: c2 Lap Trinh Lad Va Stl

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.

Page 15: c2 Lap Trinh Lad Va Stl

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

Page 16: c2 Lap Trinh Lad Va Stl

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.

Page 17: c2 Lap Trinh Lad Va Stl

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

Page 18: c2 Lap Trinh Lad Va Stl

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

Binh Dong
Note
O: la song song
Binh Dong
Note
O cho nay khac voi O() O() la lenh OR
Page 19: c2 Lap Trinh Lad Va Stl

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

Page 20: c2 Lap Trinh Lad Va Stl

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

)

Page 21: c2 Lap Trinh Lad Va Stl

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

Page 22: c2 Lap Trinh Lad Va Stl

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

Page 23: c2 Lap Trinh Lad Va Stl

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

Page 24: c2 Lap Trinh Lad Va Stl

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

Page 25: c2 Lap Trinh Lad Va Stl

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

Page 26: c2 Lap Trinh Lad Va Stl

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

Page 27: c2 Lap Trinh Lad Va Stl

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

Page 28: c2 Lap Trinh Lad Va Stl

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

Page 29: c2 Lap Trinh Lad Va Stl

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

Page 30: c2 Lap Trinh Lad Va Stl

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

Page 31: c2 Lap Trinh Lad Va Stl

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)

Page 32: c2 Lap Trinh Lad Va Stl

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

Page 33: c2 Lap Trinh Lad Va Stl

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

Page 34: c2 Lap Trinh Lad Va Stl

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ụ:

Page 35: c2 Lap Trinh Lad Va Stl

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:

Page 36: c2 Lap Trinh Lad Va Stl

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

Page 37: c2 Lap Trinh Lad Va Stl

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

Page 38: c2 Lap Trinh Lad Va Stl

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

Page 39: c2 Lap Trinh Lad Va Stl

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

Page 40: c2 Lap Trinh Lad Va Stl

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.

Page 41: c2 Lap Trinh Lad Va Stl

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

Page 42: c2 Lap Trinh Lad Va Stl

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.

Page 43: c2 Lap Trinh Lad Va Stl

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

Page 44: c2 Lap Trinh Lad Va Stl

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.

Page 45: c2 Lap Trinh Lad Va Stl

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:

Page 46: c2 Lap Trinh Lad Va Stl

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

Page 47: c2 Lap Trinh Lad Va Stl

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]

Page 48: c2 Lap Trinh Lad Va Stl

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