Giáo trình Hệ thống sản xuất tự động hóa với PLCs - Phần 19: Lập trình cấu trúc

19. LẬP TRÌNH CẤU TRÚC  
<TODO - find an implementation platform and write with examples>  
<Tìm một nền tảng thực thi và viết với các ví dụ>  
Chủ đề:  
Mục tiêu:  
19.1 GIỚI THIỆU  
Nếu bạn biết lập trình như thế nào trong một ngôn ngữ bậc cao như Basic hay  
C, bạn sẽ thoải mái với lập trình văn bản có cấu trúc (ST). Lập trình ST là thành phần  
của chuẩn IEC 61131. Một chương trình ví dụ được chỉ ra trong hình 19.1. Chương  
trình được gọi là main (chương trình chính) và được định nghĩa giữa các câu lệnh  
PROGRAM và END_PROGRAM. Mọi chương trình bắt đầu với các dòng lệnh chúng  
định nghĩa các biến. Trong trường hợp này biến i được định nghĩa là một số nguyên.  
Chương trình theo sau sự khai báo biến. Chương trình này đếm từ 0 tới 10 với một  
vòng lặp. Khi chương trình ví dụ này bắt đầu giá trị i của bộ nhớ số nguyên sẽ được  
đặt bằng không. Các lệnh REPEAT và END_REPEAT định nghĩa lặp này. Dòng lệnh  
UNTIL định nghĩa khi vòng lặp này phải kết thúc. Một dòng được đưa ra để tăng giá  
trị của i cho mỗi lần lặp.  
PROGRAM main  
VAR  
i : INT;  
END_VAR  
i := 0;  
REPEAT  
i := i + 1;  
UNTIL i >= 10;  
END_REPEAT;  
END_PROGRAM  
Figure 19.1 A Structured Text Example Program  
Một sự khác biệt quan trọng giữa ST và các ngôn ngữ lập trình truyền thống là  
sự tự nhiên của điều khiển dòng chương trình. Một chương trình ST sẽ được chạy từ  
đầu đến cuối nhiều lần một giây. Một chương trình truyền thống phải không đạt đến  
cuối cùng cho đến khi chúng được kết thúc một cách hoàn toàn. Trong ví dụ trước  
vòng lặp này có thể dẫn tới một chương trình mà chương trình này (với một vài thay  
đổi) có thể đi vào một vòng lặp vô hạn. Nếu điều này xảy ra trong khi một ứng dụng  
điều khiển bộ điều khiển sẽ dừng phản hồi, quá trình này có thể trở nên nguy hiểm,  
và bộ bấm giờ giám sát bộ điều khiển này sẽ đưa ra một lỗi.  
ST đã được thiết kế để làm việc với các ngôn ngữ lập trình PLC khác. Ví dụ, một  
chương trình logic bậc thang nào đó có thể gọi một chương trình con văn bản có cấu  
trúc nào đó. Tại thời điểm viết, Allen Bradley cung cấp sự hỗ trợ hạn chế cho lập  
trình ST, nhưng họ sẽ mở rộng sự hỗ trợ của họ trong tương lai.  
19.2 NGÔN NGỮ LẬP TRÌNH  
Ngôn ngữ này được bao gồm bởi các dòng lệnh được viết và phân cách bởi các  
dấu chấm phảy. Các câu lệnh sử dụng các câu lệnh được định nghĩa trước và các  
chương trình con để thay đổi các biến. Các biến này có thể được định nghĩa các giá  
trị một cách rõ ràng, lưu các biến bên trong, hay các đầu vào và các đầu ra. Các  
khoảng trắng có thể được dùng để phân cách các câu lệnh và các biến, mặc dù chúng  
không thường xuyên cần đến. Văn bản có cấu trúc là không phân biệt chữ hoa chữ  
thường, nhưng nó có thể hữu ích để làm các biến là chữ thường, và làm các câu lệnh  
là chữ hoa. Việc viết thụt vào và các ghi chú phải được dùng để tăng tính dễ đọc và  
làm tài liệu chương trình này. Xem xét ví dụ được chỉ ra trong hình 19.2.  
FUNCTION sample  
INPUT_VAR  
start : BOOL; (* a NO start input *)  
stop : BOOL; (* a NC stop input *)  
GOOD  
END_VAR  
OUTPUT_VAR  
motor : BOOL;(* a motor control relay *)  
END_VAR  
motor := (motor + start) * stop;(* get the motor output *)  
END_FUNCTION  
FUNCTION sample  
INPUT_VAR  
START:BOOL;STOP:BOOL;  
BAD  
END_VAR  
OUTPUT_VAR  
MOTOR:BOOL;  
END_VAR  
MOTOR:=(MOTOR+START)*STOP;END_FUNCTION  
Figure 19.2 A Syntax and Structured Programming Example  
Một ví dụ về cú pháp và lập trình có cấu trúc  
Các chương trình ST cho phép các biến được định nghĩa theo tên. Điều này  
tương tự với việc dùng các ký hiệu khi lập trình trong logic bậc thang. Khi lựa chọn  
các tên biến chúng phải bắt đầu với một chữ cái, nhưng sau chữ cái này chúng có thể  
bao gồm các chữ cái, các số, và một vài ký tự như là dấu gạch nối ’_’. Các tên biến là  
không phân biệt chữ hoa chữ thường và có thể bao gồm bất cứ kết hợp nào của các  
chữ thường và chữ hoa. Các tên biến cũng phải là như nhau như các từ khóa khác  
trong hệ này như được chỉ ra trong hình 19.3. Thêm nữa, các biến này phải không có  
cùng tên với các hàm được định nghĩa trước, hay các hàm người dùng định nghĩa.  
Các tên biến không đúng: START, DATA, PROJECT, SFC, SFC2, LADDER, I/O, ASCII,  
CAR, FORCE, PLC2, CONFIG, INC, ALL, YES, NO, STRUCTURED TEXT  
Các ví dụ tên bộ nhớ/biến đúng: TESTER, I, I:000, I:000/00, T4:0, T4:0/DN,  
T4:0.ACC  
Figure 19.3 Acceptable Variable Names – Các tên biến chấp nhận được  
Khi định nghĩa các biến một trong các khai báo trong hình 19 .4 có thể được sử  
dụng. Các cái này định nghĩa phạm vi của các biến. Các khai báo VAR_INPUT,  
VAR_OUTPUT and VAR_IN_OUT được dùng cho các biến mà chúng được truyền như  
là các đối tới chương trình hay hàm. Khai báo RETAIN được dùng giữ lại một giá trị  
biến, thậm chí khi nguồn PLC đã được xoay vòng. Điều này tương tự như một ứng  
dụng chốt.  
Khai báo  
VAR  
Mô tả  
the general variable declaration  
khai báo biến thông thường  
VAR _ INPUT  
VAR_OUTPUT  
VAR_IN_OUT  
defines a variable list for a function  
định nghĩa một danh sách cho một hàm  
defines output variables from a function  
định nghĩa các biến đầu ra từ một hàm  
defines variable that are both inputs and outputs from a function  
định nghĩa biến mà biến này là cả các đầu vào và các đầu ra từ một  
hàm  
VAR_EXTERNAL  
VAR_GLOBAL  
a global variable  
một biến toàn cục  
VAR_ACCESS  
RETAIN  
a value will be retained when the power is cycled  
một giá trị sẽ được duy trì khi điện là xoay vòng  
a value that cannot be changed  
một giá trị mà giá trị này không thể bị thay đổi  
can tie a variable to a specific location in memory (without this  
variable locations are chosen by the compiler  
CONSTANT  
AT  
có thể buộc một biến tới một vị trí trong bộ nhớ (không phải các vị  
trí bộ nhớ được lựa chọn bởi chương trình dịch)  
marks the end of a variable declaration  
END_VAR  
đánh dấu kết thúc của một khai báo biến  
Figure 19.4 Variable Declarations – Khai báo biến  
Các ví dụ của các khai báo biến được cho ở dưới  
Dòng chương trình văn bản  
Mô tả  
VAR AT %B3:0 : WORD; END_VAR  
a word in bit memory  
một từ trong bộ nhớ bit  
an integer in integer memory  
một số nguyên trong bộ nhớ số nguyên  
makes output bits retentive  
giữ lại các bit đầu ra  
VAR AT %N7:0 : INT; END_VAR  
VAR RETAIN AT %O:000 : WORD ; END_VAR  
VAR_GLOBAL A AT %I:000/00 : BOOL ; END_VAR  
VAR_GLOBAL A AT %N7:0 : INT ; END_VAR  
variable ‘A’ as input bit  
biến ‘A” như một bit đầu vào  
variable ‘A’ as an integer  
biến ‘A’ như một số nguyên  
an array ‘A’ of 15 real values  
một mảng ‘A’ của 15 giá trị số thực  
a boolean variable ‘A’  
VAR A AT %F8:0 : ARRAY [0..14] OF REAL;  
END_VAR  
VAR A : BOOL; END_VAR  
một biến Bun ‘A’  
VAR A, B, C : INT ; END_VAR  
integers variables ‘A’, ‘B’, ‘C’  
các biến số nguyên ‘A’, ’B’, ‘C’  
a string ‘A’ of length 10  
VAR A : STRING[10] ; END_VAR  
VAR A : ARRAY[1..5,1..6,1..7] OF INT; END_VAR  
một xâu ‘A’ độ dài 10  
a 5x6x7 array ‘A’ of integers  
một mảng ‘A’ cỡ 5x6x7 của các số nguyên  
a 5x6 array of integers, filled with zeros  
after power off  
VAR RETAIN RTBT A : ARRAY[1..5,1..6] OF INT;  
END_VAR  
một mảng cỡ 5x6 các số nguyên, điền  
đầy bởi các số không sau khi điện tắt  
‘A’ is data type ‘B’  
VAR A : B; END_VAR  
‘A’ là loại dữ liệu ‘B’  
VAR CONSTANT A : REAL := 5.12345 ; END_VAR  
VAR A AT %N7:0 : INT := 55; END_VAR  
VAR A : ARRAY[1..5] OF INT := [5(3)]; END_VAR  
VAR A : STRING[10] := ‘test’; END_VAR  
VAR A : ARRAY[0..2] OF BOOL := [1,0,1];  
a constant value ‘A’  
một giá trị hằng số ‘A’  
‘A’ starts with 55  
‘A’ bắt đầu ở giá trị 55  
‘A’ starts with 3 in all 5 spots  
‘A’ bắt đầu với 3 trong cả 5 vị trí  
‘A’ contains ‘test’ initially  
‘A’ khởi đầu bao gồm ‘test’  
an array of bits  
END_VAR  
một mảng các bit  
an array of integers filled with 1 for [0,x]  
and 2 for [1,x]  
VAR A : ARRAY[0..1,1..5] OF INT := [5(1),5(2)];  
END_VAR  
một mảng các số nguyên được điền đầy  
bởi 1 cho [0,x] và 2 cho [1,x]  
Figure 19.5 Variable Declaration Examples – Các ví dụ khai báo biến  
Các số cơ bản được chỉ ra ở dưới. Nhớ rằng dấu gạch nối ‘_’ có thể được bỏ  
qua, nó có thể được dùng để chia nhỏ các số dài, ví dụ: 10_000 = 10000.  
Kiểu số  
Các ví dụ  
Integers – các số  
nguyên  
-100, 0, 100, 10_000  
real numbers – các số  
thực  
real with exponents –  
số thực với các hàm mũ  
-100.0, 0.0, 100.0, 10_000.0  
-1.0E-2, -1.0e-2, 0.0e0, 1.0E2  
binary numbers – các số 2#111111111, 2#1111_1111, 2#1111_1101_0110_0101  
nhị phân  
octal numbers – các số 8#123, 8#777, 8#14  
bát phân  
hexadecimal numbers – 16#FF, 16#ff, 16#9a, 16#01  
các số thập lục phân  
Boolean – các giá trị  
Bun  
0, FALSE, 1, TRUE  
Figure 19.6 Literal Number Examples – Các ví dụ số dạng ký tự  
Các xâu ký tự được chỉ ra ở dưới:  
Ví dụ  
Mô tả  
‘’  
a zero length string  
một xâu rỗng có độ dài không  
‘ ‘, ‘a’, ‘$’’, ‘$$’  
a single character, a space, or ‘a ’, or a single quote, or a  
dollar sign $  
một ký tự đơn lẻ, một dấu trắng, hay ’a’, hay một dấu  
ngoặc kép, hay một ký hiệu dấu đô la  
produces ASCII CR, LF combination - end of line characters  
sinh ra tổ hợp ASCII CR, LF – kết thúc dòng các ký tự  
form feed, will go to the top of the next page  
sẽ đi tới đỉnh của trang tiếp theo  
‘$R$L’, ‘$r$l’,‘$0D$0A’  
‘$P’, ‘$p’  
‘$T’, ‘4t’  
tab  
‘this%Tis a test$R$L’  
a string that results in ‘this<TAB>is a test<NEXT LINE>’  
một xâu mà kết quả là ‘this<TAB>is a test<NEXT LINE>’  
Figure 19.7 Character String Data – Dữ liệu xâu ký tự  
Các giá trị duy trì thời gian cơ bản được mô tả ở dưới:  
Giá trị thời gian  
Ví dụ  
25ms  
5.5hours  
3days, 5hours, 6min,  
36sec  
T#25ms, T#25.0ms, TIME#25.0ms, T#-25ms, t#25ms  
TIME#5.3h, T#5.3h, T#5h_30m, T#5h30m  
TIME#3d5h6m36s, T#3d_5h_6m_36s  
Figure 19.8 Time Duration Examples – Các ví dụ duy trì thời gian  
Các giá trị ngày được cho ở dưới. Có nghĩa là được dùng để so sánh thời gian  
và ngày giờ hệ thống:  
Mô tả  
Ví dụ  
date values  
time of day  
date and time  
DATE#1996-12-25, D#1996-12-25  
TIME_OF_DAY#12:42:50.92, TOD#12:42:50.92  
DATE_AND_TIME#1996-12-25-12:42:50.92, DT#1996-12-25-12:42:50.92  
Figure 19.9 Time and Date Examples – Các ví dụ về giờ và ngày  
Các hàm toán học cơ bản bao gồm:  
:=  
+
-
assigns a value to a variable - gán một giá trị cho một biến  
Addition - Phép cộng  
Subtraction - Phép trừ  
/
Division - Phép chia  
*
Multiplication - Phép nhân  
MOD(A,B)  
modulo - this provides the remainder for an integer divide A/B -  
lấy phần dư  
SQR(A)  
FRD(A)  
TOD(A)  
NEG(A)  
LN(A)  
LOG(A)  
DEG(A)  
RAD(A)  
SIN(A)  
square root of A - căn bậc hai của A  
from BCD to decimal - từ BCD sang thập phân  
to BCD from decimal - tới BCD từ thập phân  
reverse sign +/- - quay ngược dấu +/-  
natural logarithm - lô ga rit tự nhiên  
base 10 logarithm - lô ga rit cơ số 10  
from radians to degrees - từ ra di an sang độ  
to radians from degrees - tới ra di an từ độ  
Sine - Lấy sin  
COS(A)  
TAN (A)  
ASN(A)  
ACS(A)  
ATN(A)  
XPY(A,B)  
A**B  
Cosine - Lấy cos  
Tangent - Lấy tg  
arcsine, inverse sine - arcsine, sin ngược  
arccosine - inverse cosine - arccosine - cosine ngược  
arctan - inverse tangent - arctan – tg ngược  
A to the power of B - Lũy thừa: B mũ A  
A to the power of B - Lũy thừa: B mũ A  
Figure 19.10 Math Functions - Các hàm toán học  
Các hàm cho so sánh logic bao gồm:  
>
greater than – lớn hơn  
>=  
=
greater than or equal – lớn hơn hay bằng  
Equal – bằng  
<=  
<
less than or equal – nhỏ hơn hay bằng  
less than – nhỏ hơn  
<>  
not equal – không bằng  
Figure 19.11 Comparisons – Các phép so sánh  
Các hàm cho đại số Bun và logic bao gồm:  
AND(A,B)  
OR(A,B)  
XOR(A,B)  
NOT(A)  
!
logical and – phép AND  
logical or – phép OR  
exclusive or – phép XOR  
logical not – phép NOT  
logical not – phép NOT  
Figure 19.12 Boolean Functions – Các hàm Bun  
Quyền ưu tiên của các phép toán được liệt kê dưới đây từ cao nhất đến thấp  
nhất. Như các biểu thức bình thường mà các biểu thức này là lồng nhau một  
cách sâu nhất giữa các ngoặc đơn sẽ được giải đầu tiên. (Ghi chú: khi nghi ngờ  
dùng các ngoặc đơn để chắc rằng bạn có được trình tự mà bạn muốn).  
!
()  
XPY, **  
SQR, TOD, FRD, NOT, NEG, LN, LOG, DEG, RAD, SIN, COS, TAN, ASN, ACS,  
ATN  
*, /, MOD  
+, -  
AND (for word)  
XOR (for word)  
OR (for word)  
>, >=, =, <=, <, <>  
AND (bit)  
XOR (bit)  
OR (bit)  
ladder instructions  
Figure 19.13 Operator Precedence – Độ ưu tiên của toán tử  
Các cấu trúc ngôn ngữ bao gồm dưới đây:  
IF-THEN-ELSIF-ELSE-END_IF;  
normal if-then structure  
cấu trúc if-then thông thường  
CASE-value:-ELSE-END_CASE; a case switching function  
một hàm rẽ nhánh case  
FOR-TO-BY-DO-END_FOR;  
for-next loop  
vòng lặp for-next  
WHILE-DO-END_WHILE;  
Figure 19.14 Flow Control Functions – Các hàm điều khiển dòng chương trình  
Các dòng lệnh đặc biệt bao gồm ở dưới:  
RETAIN() causes a bit to be retentive – gây ra một bit để giữ lại  
IIN();  
immediate input update – cập nhật đầu vào tức thời  
EXIT;  
will quit a FOR or WHILE loop – sẽ thoát khỏi một vòng lặp FOR hay WHILE  
EMPTY  
Figure 19.15 Special Instructions – Các lệnh đặc biệt  
Xem xét chương trình dưới để tìm giá trị trung bình của năm giá trị trong bộ  
nhớ dấu phảy động:  
F8:10 := 0;  
FOR (N7:0 := 0 TO 4) DO  
F8:10 := F8:10 + F8:[N7:0];  
END_FOR;  
Figure 19.16 A Program To Average Five Values In Memory With A For-Loop  
Một chương trình tính trung bình cộng  
của năm giá trị trong bộ nhớ bởi một vòng lặp For  
Xem xét chương trình sau để tìm giá trị trung bình của năm giá trị trong bộ  
nhớ dấu phảy động:  
F8:10 := 0;  
WHILE (N7:0 < 5) DO  
F8:10 := F8:10 + F8:[N7:0];  
N7:0 := N7:0 + 1;  
END_WHILE;  
Figure 19.17 A Program To Average Five Values In Memory  
With A While-Loop  
Một chương trình tính trung bình cộng  
của năm giá trị trong bộ nhớ bởi một vòng lặp While  
Ví dụ sau sẽ đặt các đầu ra khác nhau dựa trên thống kê của một đầu vào.  
IF (I:000/00 = 1) THEN  
O:001/00 := 1;  
ELSIF (I:000/01 = 1 AND T4:0/DN = 1) THEN  
O:001/00 := 1;  
IF (I:000/02 = 0) THEN  
O:001/01 := 1;  
END_IF;  
ELSE  
O:001/01 := 1;  
END_IF;  
Figure 19.18 Example With An If Statement – Ví dụ với một câu lệnh If  
Ví dụ sau sẽ đặt các bit đầu ra 00-03 dựa trên giá trị của số nguyên trong N7:0,  
nếu giá trị này không ở giữa 0 và 3 thì các đầu ra sẽ bị tắt tất cả.  
CASE N7:0 OF  
0:  
O:000/00 := 1;  
1:  
O:000/01 := 1;  
2:  
O:000/02 := 1;  
3:  
O:000/03 := 1;  
ELSE  
O:000 := 0;  
END_CASE;  
Figure 19.19 Use of a Case Statement – Sử dụng một câu lệnh Case  
Ví dụ sau chấp nhận một đầu vào BCD từ (I:000 ) và sẽ dùng nó để thay đổi thời  
gian trễ cho một bộ bấm giờ độ trễ-bật mà bộ bấm giờ này sẽ kiểm tra đầu vào  
I:002/00 điều khiển đầu ra O:001/00.  
FRD (I:000, DELAY_TIME);  
IF (I:002/00) THEN  
TON (T4:0, 1.0, DELAY_TIME, 0);  
ELSE  
RES (T4:0);  
END_IF;  
O:001/00 := T4:0.DN;  
Figure 19.20 Function Data Conversions – Chuyển đổi dữ liệu hàm  
Thử ví dụ dưới:  
Viết một chương trình văn bản có cấu trúc để điều khiển một máy ép mà nó tiến  
và lùi với các chuyển mạch giới hạn. Máy ép này được bắt đầu và dừng lại với một  
nút start và một nút stop.  
Các hàm đầu ra logic bậc thang bình thường có thể được sử dụng trừ ra  
những cái được liệt kê bên dưới:  
Các hàm đầu ra không đúng: JMP, END, MCR, FOR, BRK, NXT, MSG, SDS, DFA,  
AND, OR, XOR, TND  
Các hàm đầu ra đúng bao gồm: OTL, OTU, OTE, TON, TOF, RTO, CTU, CTD, RES,  
ADD, SUB, MUL, DIV, v.v...  
Figure 19.21 Acceptable Ladder Logic Functions  
Các hàm logic bậc thang được chấp nhận  
Danh sách sau cho hầu hết các hàm được định nghĩa theo IEC1131-3 với các  
đối. Một vài hàm có thể được quá tải (ví dụ ADD có thể có hơn hai giá trị để  
cộng), và các hàm khác có các đối tùy chọn. Trong hầu hết các trường hợp các  
đối tùy chọn là những thứ như các giá trị trước cho các bộ bấm giờ. Khi các  
đối bị bỏ qua chúng mặc định các giá trị, phổ biến là 0.  
Hàm  
Mô tả  
ABS(A);  
ACOS(A);  
absolute value of A - giá trị tuyệt đối của A  
the inverse cosine of A – cos ngược của A  
add A+B+... - cộng các giá trị  
logical and of inputs A,B,... - VÀ các đầu vào A, B  
the inverse sine of A – sin ngược của A  
the inverse tangent of A – tg ngược của A  
converts a BCD to an integer  
ADD(A,B,...);  
AND(A,B,...);  
ASIN(A);  
ATAN(A);  
BCD_TO_INT(A);  
chuyển một BCD sang một số nguyên  
will return strings A,B,... joined together  
sẽ trả về các xâu A, B, ... được nối với nhau  
finds the cosine of A – tìm cos của A  
down counter active <=0, A decreases, B loads preset  
kích hoạt bộ đếm xuống<=0, A giảm đi, B tải giá trị đặt  
trước  
CONCAT(A,B,...);  
COS(A);  
CTD(CD:=A,LD:=B,PV:=C);  
CTU(CU:=A,R:=B,PV:=C);  
up counter active >=C, A decreases, B resets  
kích hoạt bộ đếm lên>=C, A giảm đi, B đặt lại  
CTUD(CU:=A,CD:=B,R:=C,LD: up/down counter combined functions of the up and  
=D,PV:=E);  
down counters – các hàm kết hợp bộ đếm lên/xuống  
của các bộ đếm lên và xuống  
DELETE(IN:=A,L:=B,P:=C);  
DIV(A,B);  
will delete B characters at position C in string A  
sẽ xóa ký tự B tại vị trí C trong xâu A  
A/B – A chia cho B  
EQ(A,B,C,...);  
EXP(A);  
will compare A=B=C=. – sẽ so sánh A=B=C=.  
finds e**A where e is the natural number  
tìm e mũ A ở đó e là số tự nhiên  
A**B – B mũ A  
EXPT(A,B);  
FIND(IN1:=A,IN2:=B);  
will find the start of string B in string A  
sẽ tìm chỗ bắt đầu của xâu B trong xâu A  
a falling edge trigger – một bộ kích hoạt bờ xuống  
will compare A>=B, B>=C, C>=...  
sẽ so sánh A>=B, B>=C, C>=...  
F_TRIG(A);  
GE(A,B,C,...);  
GT(A,B,C,...);  
will compare A>B, B>C, C>...  
sẽ so sánh A>B, B>C, C>...  
INSERT(IN1:=A,IN2:=B,P:=C); will insert string B into A at position C  
sẽ chèn xâu B vào xâu A tại vị trí C  
INT_TO_BCD(A);  
INT_TO_REAL(A);  
LE(A,B,C,...);  
converts an integer to BCD  
chuyển một số nguyên sang BCD  
converts A from integer to real  
chuyển A từ số nguyên sang số thực  
will compare A<=B, B<=C, C<=...  
sẽ so sánh A<=B, B<=C, C<=...  
LEFT(IN:=A,L:=B);  
LEN(A);  
will return the left B characters of string A  
sẽ trả về từ các ký tự bên trái B của xâu A  
will return the length of string A  
sẽ trả về độ dài của xâu A  
LIMIT(MN:=A,IN:=B,MX:=C); checks to see if B>=A and B<=C  
kiểm tra để thấy nếu B>=A và B<=C  
LN(A);  
LOG(A);  
LT(A,B,C,...);  
natural log of A – lô ga rit tự nhiên của A  
base 10 log of A – lô ga rit cơ số 10 của A  
will compare A<B, B<C, C<...  
sẽ so sánh A<B, B<C, C<...  
MAX(A,B,...);  
MID(IN:=A,L:=B,P:=C);  
MIN(A,B,...);  
outputs the maximum of A,B,...  
đưa ra cực đại của A, B,...  
will return B characters starting at C of string A  
sẽ trả về B các ký tự bắt đầu tại C của xâu A  
outputs the minimum of A,B,...  
đưa ra cực tiểu của A, B, ...  
MOD(A,B);  
the remainder or fractional part of A/B  
phép chia lấy phần dư của A/B  
outputs the input, the same as :=  
đưa ra đầu vào, cũng như phép gán :=  
multiply values A*B*....  
nhân A và B  
the value of A will select output B,C,...  
giá trị của A sẽ lựa chọn đầu ra B, C, ...  
MOVE(A);  
MUL(A,B,...);  
MUX(A,B,C,...);  
NE(A,B);  
NOT(A);  
will compare A <> B – sẽ so sánh A<>B  
logical not of A – phủ định A  
OR(A,B,...);  
REAL_TO_INT(A);  
logical or of inputs A,B,... – phép OR các đầu vào A, B,..  
converts A from real to integer  
chuyển A từ số thực sang số nguyên  
will replace C characters at position D in string A with  
string B – sẽ thay thế các ký tự C tại vị trí D trong xâu A  
với xâu B  
REPLACE(IN1:=A,IN2:=B,L:=  
C,P:=D);  
RIGHT(IN:=A,L:=B);  
ROL(IN:=A,N:=B);  
ROR(IN:=A,N:=B);  
RS(A,B);  
will return the right A characters of string B  
sẽ trả về các ký tự bên phải A của xâu B  
rolls left value A of length B bits  
quay trái giá trị A của độ dài B bit  
rolls right value A of length B bits  
quay phải giá trị A của độ dài B bit  
RS flip flop with input A and B  
lật RS với đầu vào A và B  
RTC(IN:=A,PDT:=B);  
will set and/or return current system time  
sẽ đặt và/hoặc trả về thời gian hệ thống hiện thời  
a rising edge trigger – một bộ kích hoạt bờ lên  
if a=0 output B if A=1 output C  
R_TRIG(A);  
SEL(A,B,C);  
nếu a=0 đầu ra B nếu A=1 đầu ra C  
shift left value A of length B bits  
dịch trái giá trị A của độ dài B bit  
shift right value A of length B bits  
dịch phải giá trị A của độ dài B bit  
finds the sine of A – tìm sin của A  
square root of A – căn bậc hai của A  
SR flipflop with inputs A and B  
SHL(IN:=A,N:=B);  
SHR(IN:=A,N:=B);  
SIN(A);  
SQRT(A);  
SR(S1:=A,R:=B);  
Lật SR với các đầu vào A và B  
SUB(A,B);  
A-B – A trừ B  
TAN (A);  
finds the tangent of A – tìm tg của A  
off delay timer – bộ đếm giờ trễ-tắt  
on delay timer – bộ đếm giờ trễ-bật  
pulse timer - a rising edge fires a fixed period pulse  
bộ bấm giờ xung – một bờ lên gây ra một xung thời  
gian cố định  
TOF(IN:=A,PT:=B);  
TON(IN:=A,PT:=B);  
TP(IN:=A,PT:=B);  
TRUNC(A);  
converts a real to an integer, no rounding - chuyển  
một số thực sang một số nguyên, không làm tròn  
logical exclusive or of inputs A,B,...  
phép XOR cho các đầu vào A, B, ...  
XOR(A,B,...);  
Figure 19.22 Structured Text Functions – Các hàm văn bản có cấu trúc  
Thử ví dụ sau:  
Viết một chương trình văn bản có cấu trúc để sắp xếp mười số nguyên và sau  
đó tìm ra giá trị trung bình.  
Ta có thể định nghĩa các hàm mà nó trả về các giá trị đơn lẻ:  
....  
D := TEST(1.3, 3.4); (* sample calling program, here C will default to 3.14 –  
chương trình gọi mẫu, ở đây C sẽ mặc định là 3,14*)  
E := TEST(1.3, 3.4, 6.28); (* here C will be given a new value - ở đây C sẽ  
được cho một giá trị mới*)  
....  
FUNCTION TEST : REAL  
VAR_INPUT A, B : REAL; C : REAL := 3.14159; END VAR  
TEST := (A + B) / C;  
END_FUNCTION  
Figure 19.23 Declaration of a Function – Khai báo một hàm  
19.3 TÓM TẮT  
19.4 BÀI TẬP THỰC HÀNH  
19.5 GIẢI PHÁP CHO BÀI TẬP THỰC HÀNH  
19.6 ASSIGNMENT PROBLEMS  
1. Viết logic cho một bộ điều khiển đèn giao thông bằng cách dùng văn bản có cấu  
trúc.  
pdf 13 trang baolam 19741 Free
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 19: Lập trình cấu trúc", để 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:

  • pdfgiao_trinh_he_thong_san_xuat_tu_dong_hoa_voi_plcs_phan_19_la.pdf