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.
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:
giao_trinh_he_thong_san_xuat_tu_dong_hoa_voi_plcs_phan_19_la.pdf

