Thanh ghi trạng thái Khi thực hiện lệnh, CPU sẽ ghi nhận lại trạng thái của phép tính trung gian cũng như của kết quả vào một thanh ghi 16 bit và được gọi là thanh ghi trạng thái status
Trang 1
PHẦN I ĐIỀU KHIỂN LẬP TRÌNH (PLC)
Các bộ chức năng định thời và đếm Các lệnh điều khiển chương trình
Mục đích:
Sử dụng và gán biến cho các địa chỉ
Vận dụng các lệnh để viết chương trình ứng dụng
Hiểu rõ mối quan hệ chương trình với kết nối thiết bị
Trang 23.1 GIỚI THIỆU
Các loại PLC nói chung thường có nhiều ngôn ngữ lập trình để phục vụ các đối tượng sử dụng khác nhau Tuy nhiên hầu hết đề xoay quanh 3 ngôn ngữ cơ bản Đó là: Ngôn ngữ “ kiểu liệt kê”, kí hiệu là STL (Statement List) Đây là dạng của ngôn ngữ Assembler máy tính
Ngôn ngữ “hình thang”, kí hiệu là LAD (Ladder Logic) Đây là dạng ngôn ngữ theo kiểu thiết kế mạch điều khiển logic rờ le
Ngôn ngữ “hình khối”, kí hiệu là FBD (Function Block Diagram) Đây là dạng ngôn ngữ theo kiểu thiết kế mạch điều khiển logic số
Function Block Diagram
Statement List Ladder Diagram
Hình 3.1-Ba kiểu ngôn ngữ lập trình
M
Một chương trình có thể viết trên LAD hoặc FBD có thể chuyển được sang dạng STL, nhưng ngược thì có thể không Trong STL có những lệnh mà trong LAD hoặc FBD không diễn tả được Tuy vậy về mặt lập trình, ngôn ngữ LAD rất đơn giản dễ dàng cho lập trình Chính vì lý do này, tài liệu quan tâm đến ngôn ngữ STL và lấy nó để lập trình
Chú ý: Hiện nay trên thế giới có rất nhiều loại PLC do nhiều hãng của nhiều nước sản xuất
khác nhau và đa dạng Nhưng bản chất, phương pháp lập trình của ngôn ngữ không khác nhau mà chỉ khác nhau ở chỗ là các kí hiệu địa chỉ, tên gọi của các I/O, vùng nhớ mà thôi
Trang 33.2 CẤU TRÚC LỆNH VÀ TRẠNG THÁI KẾT QUẢ
3.2.1 Kiểu dữ liệu và phân chia bộ nhớ
3.2.1.1 Kiểu dữ liệu
Các kiểu dữ liệu được sử dụng trong S7-300:
1) BOOL: với dung lượng một bit và có giá trị 1 hoặc 0 ( đúng hoặc sai) Đây là kiểu
dữ liệu cho biến hai trị
2) Byte: gồm 8 bit, thường được biểu diễn một số nguyên dương từ 0 đến 255 hoặc là
mã ASCII của một ký tự
3) Word: gồm 2 byte, biểu diễn số nguyên từ 0 đến 65535
4) Int: cũng có dung lượng 2 byte, dùng để biểu diễn một số nguyên từ –32768 đến
32767
5) Dint: gồm 4 byte, dùng để biểu diễn số nguyên từ –2147483648 đến 2147483647 6) Real: gồm 4 byte, dùng để biểu diễn số thực có dấu phẩy động
7) S5t: khoảng thời gian, được tính bằng giờ, phút, giây, miligiây
8) Tod: biểu diễn giá trị thời gian tính theo giờ/phút/giây
9) Date: biểu diễn giá trị thời gian tính theo năm/tháng/ngày
10) Char: biểu diễn một ký tự hay nhiều ký tự (nhiều nhất là 4 ký tự)
3.2.1.2 Phân chia bộ nhớ
Bộ nhớ S7-300 chia làm ba vùng chính:
1) Vùng chứa chương trình ứng dụng Vùng nhớ chia thành 3 miền:
a) OB (Organization Block): Miền chứa chương trình tổ chức
b) FC (Function): Miền chứa chương trình con, được tổ chức thành hàm và có biến hình thức để trao đổi dữ liệu với chương trình gọi nó
c) FB (Function Block): Miền chứa chương trình con, được tổ chức thành hàm và có khả năng trao đổi dữ liệu với bất kỳ một khối chương trình nào khác Các dữ liệu này phải được xây dựng thành một khối dữ liệu riêng (gọi là DB – Data Block) 2) Vùng chứa tham số của hệ điều hành và chương trình ứng dụng, được chia thành 7 miền khác nhau, bao gồm:
a) I (Process image input): Miền bộ đệm các dữ liệu cổng vào số Trước khi bắt đầu thực hiện chương trình, PLC sẽ đọc tất cả các giá trị logic của tất cả các cổng vào và lưu trữ
ở vùng nhớ I Chương trình ứng dụng không đọc trực tiếp trạng thái logic của cổng vào số mà chỉ lấy dữ liệu của cổng vào từ bộ đệm I
b) Q (Process image output): Miền bộ đệm các dữ liệu cổng ra số Kết thúc giai đoạn thực hiện chương trình, PLC sẽ chuyển giá trị logic của bộ đệm Q đến các cổng ra số Chương trình không trực tiếp gán giá trị tới cổng ra mà chỉ chuyển chúng vào bộ đệm
Q
c) M: Miền các biến cờ Chương trình sử dụng các vùng nhớ này để lưu trữ các tham số cần thiết và có thể truy nhập theo kiểu bit (M), byte (MB), từ đơn (MW)hay từ kép (MD)
d) T: Miền nhớ phục vụ bộ thời gian (timer) bao gồm lưu trữ giá trị thời gian đặt trước (PV – preset value), giá trị đếm thời gian tức thời (CV – Current value) cũng như giá trị logic ở đầu ra của timer
Trang 4e) C: Miền nhớ phục vụ bộ đếm (counter) bao gồm lưu trữ giá trị thời gian đặt trước (PV – preset value), giá trị đếm tức thời (CV – Current value) cũng như giá trị logic ở đầu ra của bộ đếm
f) PI: Miền địa chỉ cổng vào của các module tương tự (I/O External input) Các giá trị tương tự tại cổng vào của module tương tự sẽ được module đọc và chuyển tự động theo những địa chỉ Chương trình ứng dụng có thể truy nhập miền nhớ PI theo các kiểu biến byte (PIB), từ đơn (PIW) hay từ kép (PID)
g) PQ: Miền địa chỉ cổng ra của các module tương tự (I/O External output) Các giá trị theo những địa chỉ này sẽ được module tương tự chuyển tự động tới các cổng ra tương tự Chương trình ứng dụng có thể truy nhập miền nhớ PQ theo các kiểu biến byte (PQB), từ đơn (PQW) hay từ kép (PQD)
3) Vùng chứa các khối dữ liệu
a) DB (Data Block): miền chứa dữ liệu được tổ chức thành hình khối Kích thước và số lượng khối cũng do người dùng quy định tùy theo chương trình Chương trình ứng dụng có thể truy nập tới miền nhớ này theo bit (DBX), byte (DBB), từ đơn (DBW) hặoc từ kép (DBD)
b) L (Local data bolck): Miền dữ liệu cục bộ, được các khối chương trình OB, FC, FB tổ chức và sử dụng cho các biến nháp tức thời và trao đổi dữ liệu của biến hình thức với những khối chương trình đã gọi nó Nội dung của một số dữ liệu trong miền nhớ này sẽ
bị xóa khi kết thúc chương trình tương ứng trong OB, FC, FB Miền này có thể truy nhập được từ chương trình theo bit (L), byte (LB), từ (LW) hoặc từ kép (LD)
3.2.2 Cấu trúc lệnh và trạng thái kết quả
3.2.2.1 Toán hạng là dữ liệu
a) Dữ liệu logic True và False có độ dài 1 bit Ví dụ
Bit_1 = True //giá trị logic 1 được gán cho bit_1
b) Số nhị phân Ví dụ
L 2#00101101 //nạp số nhị phân vào thanh ghi ACCU1
c) Số Hexadecimal x có độ dài 1 byte(B#16#x), 1 từ (W#16#x) hoặc 1 từ kép (DW#16#x)
Ví dụ
L B#16#2E //nạp số 2E vào byte thấp thanh ghi ACCU1
L W#16#4D2 //nạp số 4D2 vào 2 byte thấp thanh ghi ACCU1
L DW#16#D1B2E //nạp số D1B2E vào thanh ghi ACCU1
d) Số nguyên x với độ dài 2byte cho biến kiểu INT Ví dụ
Trang 5i) DATE: biểu diễn giá trị thời gian tính theo năm/tháng/ngày Ví dụ
3.2.2.2 Toán hạng là địa chỉ
Địa chỉ ô nhớ được cấu tạo thành hai phần: phần chữ và phần số Ví dụ
M0.9PQW272
Phần chữ Phần số Phần chữ Phần số
Phần chữ chỉ vị trí và kích thước của ô nhớ (tham khảo 3.2.1)
Phần số chỉ địa chỉ của byte hoặc bit trong miền nhớ đã xác định
3.2.2.3 Thanh ghi trạng thái
Khi thực hiện lệnh, CPU sẽ ghi nhận lại trạng thái của phép tính trung gian cũng như của kết quả vào một thanh ghi 16 bit và được gọi là thanh ghi trạng thái (status word) Tuy nhiên nó chỉ sử dụng với 9 bit và cấu trúc được mô tả như sau:
8 7 6 5 4 3 2 1 0
- FC (First check ): Khi phải thực hiện một dãy các lệnh logic liên tiếp nhau gồm các
phép tính và, hoặc và nghịch đảo, bit FC có giá trị bằng 1 Ngược lại, FC=0 khi dãy lệnh logic tiếp điểm vừa hoàn tất
Trang 6Ví dụ:
AN I1.0
Cả hai lệnh đều gán cho STA cùng một giá trị là nội dung của ngõ vào số I1.0
- OR: Ghi lại giá trị logic của phép toán và cuối cùng được thực hiện để giúp đỡ cho việc thực hiện phép toán hoặc sau đó Điều này là cần thiết vì cùng một biểu thức hàm hai trị thì bao giờ phép toán và cũng thực hiện trước phép toán hoặc
- OS (Stored overflow bit): Ghi lại giá trị bit bị tràn ra ngoài mảng ô nhớ
- OV (Overflow bit): Bít báo kết quả bị tràn ra ngoài mảng ô nhớ
- CC0 và CC1 (Condition code): Hai bit báo trạng thái kết quả phép tính với số nguyên,
số thực, phép dịch chuyển hoặc phép tính logic trong ACCU
- BR (Binary result bit): Bit trạng thái cho phép liên kết hai loại ngôn ngữ lập trình STL
và LAD Chẳng hạn cho phép người sử dụng có thể viết một khối chương trình FB hoặc
FC trên STL nhưng gọi và sử dụng trong chương trình viết trên LAD Để tạo ra mối liên kết đó, ta phải thực hiện việc kết thúc chương trình trong FB, FC bằng lệnh ghi: a) 1 vào BR, nếu chương trình chạy không có lỗi
b) 0 vào BR, nếu chương trình chạy có lỗi
Chú ý: Một chương trình có thể có một hay nhiều network tùy thuộc vào tính chất, mức độ
trạng thái hoạt động của hệ thống Nhưng mỗi Network chỉ chứa một đoạn chương trình thực hiện một nhiệm vụ cụ thể
3.3 CÁC LỆNH LOGIC
Lệnh logic làm việc trên hệ thống số nhị phân với hai bit số, đó là : bit 1 và bit 0
Trong điều khiển người ta thường quy định 1 là trạng thái hoạt động hay có năng lượng, 0
là trạng thái không hoạt động hay không năng lượng
Các lệnh Logic trên bit thể hiện các trạng thái tín hiệu 1 và 0 và liên kết chúng thành phép toán logic Kết quả của kết hợp này là 1 hoặc 0 và được gọi là RLO
Lệnh toán logic bao gồm các lệnh cơ bản sau:
• A Và (And)
• AN Phủ định và (And Not)
Trang 7Chúng ta có thể sử dụng các lệnh sau để thực hiện các biểu thức lồng vào nhau:
• A( Và với lồng mở
• AN( Phủ định và với lồng mở
• O( Hoặc với lồng mở
• ON( Phủ định hoặc với lồng mở
• X( Loại trừ với lồng mở
• XN( Phủ định loại trừ với lồng mở
• ) Đóng lồng kết thúc đoạn lệnh
Chúng ta có thể kết thúc chuỗi lệnh biểu thức logic bằng các lệnh:
• = Phép gán (Assign)
• R Xoá nhớ (Reset)
• S Nhớ (Set)
Chúng ta có thể sử dụng một trong những lệnh sau để thay đổi kết quả của phép toán logic (RLO):
• NOT Phủ định RLO
• SET Nhơ RLO (=1)
• CLR Xóa RLO (=0)
• SAVE Lưu trữ RLO ở thanh ghi BR
Hay là sử dụng một lệnh sau để phát hiện sườn lên và xuống của tín hiệu:
• FN Phát hiện cạnh xuống (Edge Negative)
• FP Phát hiện cạnh lên (Edge Positive)
Trang 83.3.2 Lệnh thực hiện phép tính va ø
Cú pháp A <toán hạng>
Toán hạng
A kiểm tra không biết trạng thái của bit địa chỉ (toán hạng) là 1 hay không, và AND kết
quả kiểm tra với RLO
Ví dụ:
Q0.2 mức tín hiệu 0 I1.1 mức tín hiệu 0 I1.0 mức tín hiệu 0 Nguồn điện
A I1.1
= Q0.2
A I1.0
Rờ le logic Chươnh trình STL
Cuộn dây
NO tiếp điểm
NO tiếp điểm
3.3.3 Lệnh thực hiện phép tính va ø với giá trị nghịch đảo
Cú pháp AN <Toán hạng>
AN kiểm tra không biết trạng thái của bit địa chỉ (toán hạng) là 0 hay không, và AND kết
quả kiểm tra với RLO
I1.0 mức tín hiệu 0 Nguồn điện
A I1.1
= Q0.2
A I1.0
Rờ le logic Chươnh trình STL
Ví dụ:
Trang 93.3.4 Lệnh thực hiện phép tính hoặc
Cú pháp O <Toán hạng>
O kiểm tra không biết trạng thái của bit địa chỉ (toán hạng) là 1 hay không, và OR kết quả
kiểm tra với RLO và ghi lại kết quả vào RLO
NO tiếp điểm
Cuộn dây
Nguồn điện I1.0 mức tín hiệu 0 I1.1 mức 0
Q0.2 mức tín hiệu 0
Ví dụ:
3.3.5 Lệnh thực hiện phép tính hoặc với giá trị nghịch đảo
Cú pháp ON <Toán hạng>
ON kiểm tra không biết trạng thái của bit địa chỉ (toán hạng) là 0 hay không, và OR kết
quả kiểm tra với RLO và ghi lại kết quả vào RLO
Ví dụ 5:
Trang 103.3.6 Lệnh thực hiện phép tính exclusive or
Cú pháp X <Toán hạng>
X I0.1
= Q1.2
X I0.0
Rờ le logic Chươnh trình STL
3.3.6 Lệnh thực hiện phép tính exclusive or not
Cú pháp XN <Toán hạng>
XN I0.1
= Q1.2
X I0.0
Rờ le logic Chươnh trình STL
Trang 113.3.7 Lệnh thực hiện phép tính và với giá trị một biểu thức
Chú ý: lệnh không có Toán hạng
A( thực hiện phép tính và giữa RLO với biểu thức trong dấu ngoặc sau nóvà ghi lại kết quả vào RLO
Rờ le logic Chươnh trình STL
3.3.8 Lệnh thực hiện phép tính hoặc với giá trị nghịch đảo một biểu thức
Chú ý: lệnh không có Toán hạng
O( thực hiện phép tính hoặc giữa RLO với giá trị logic của biểu thức trong dấu ngoặc sau nóvà ghi lại kết quả vào RLO
Ví dụ:
Q1.2 cuộn dây
I0.4 I0.0
M1.1 M1.4
A M1.4
O(
AN M1.1 )
Trang 12Ví dụ: Viết chương trình khởi động động không đồng bộ 3 phase mô tả hình 3.2 Nhấn nút Start PB động cơ chạy, nhấn nút Stop PB thì động cơ dừng
• Bảng gán nhiệm vụ I/O
• Bảng gán nhiệm vụ I/O
Input (ngỏ vào) Output (ngỏ ra)
Tên gọi Địa chỉ Tên gọi Địa chỉ
Stop PB I0.1
I0.0 I0.1
Hình 3.2 – Mạch điện động cơ
Input (ngỏ vào) Output (ngỏ ra)
1YP
Hình 3.3 – Cơ cấu cắt sản phẩm theo kích thước
Q0.2 Cutting Knife
I0.2 Cutting Finish Sensor
I0.1 Dimension sensor
Biểu đồ trạng thái theo thời gian
Q0.0
R "Motor Brake"
Trang 133.3.9 Lệnh gán giá trị logic 1 vào ô nhớ (Set bit)
Cú pháp S <Toán hạng>
Rờ le logic Chươnh trình STL
3.3.10 Lệnh gán giá trị logic 0 vào ô nhớ (Reset bit)
Cú pháp R <Toán hạng>
Toán hạng
R sẽ đặt giá trị 0 vào ô nhớ của bit địa chỉ,
nếu RLO=1 Xem ở lệnh Set bit
Hình 3.4 – Cơ cấu khoan
Ví dụ:
Viết chương trình cho PLC điều khiển thiết bị
khoan thủy lực của một đầu khoan tự động mô tả
hình 3.4, với yêu cầu kỹ thuật như sau: Đưa chi
tiết vào vị trí cần khoan, rồi ấn nút Drill Start,
mũi khoan xoay, đầu khoan tịnh tiến và khoan chi
tiết Đạt đủ chiều sâu khoan cần thiết (S4 tác
động), đầu khoan tự động quay về và kết thúc
một chu kỳ khoan tại S3 Trong quá trình gia công
nếu xảy ra sự cố ta ấn nút Home Back, đầu khoan
tự động lui về
Trang 14• Bảng gán nhiệm vụ I/O
Input (ngỏ vào) Output (ngỏ ra)
Tên gọi Địa chỉ Tên gọi Địa chỉ
Drill Start I0.0 Sol 1Y Q0.0
Home Back I0.1
Biểu đồ trạng thái theo thời gian
S "Solenoid 1Y" R "Solenoid 1Y"
3.3.11 Lệnh đảo giá trị của RLO
NOT đảo nội dung của RLO Chú ý: lệnh không có Toán hạng
Ví dụ:
I1.0
I1.0 Q4.0
Signal state diagram
1 0
0 1
A I1.0 NOT = Q4.0
Coil Q4.0
NC contact Nguồn điện
Rờ le logic Chươnh trình STL
3.3.12 Lệnh ghi giá trị 1 vào RLO
Lệnh không có toán hạng và có tác dụng ghi 1 vào RLO
Ví dụ:
Mức tín hiệu Kết qủa trạng thái logic
Trang 153.3.13 Lệnh ghi giá trị 0 vào RLO
Lệnh không có toán hạng và có tác dụng ghi 0 vào RLO
xem ở lệnh SET (3.3.12)
3.3.14 Lệnh chuyển giá trị RLO vào BR
Lệnh chuyển nội dung của RLO vào bit trạng thái BR Lệnh không làm thay đổi nội dung các bit còn lại của thanh ghi trạng thái
3.3.15 Lệnh phát hiện sườn xuống
Cú pháp FN <Toán hạng>
FN sẽ phát hiện sườn xuống của tín hiệu khi RLO chuyển từ 1 sang 0 và sẽ ghi giá
trị 1 vào RLO Đặc điểm được mô tả ở hình 3.5
Ví dụ: Viết chương trình điều khiển đóng mở cửa kho tự động mô tả hình 3.6
Khi xe đang tiến về gần cửa kho, cảm biến Ultrasounic SS1 nhận dạng được xe và cửa sẽ được mở ra đến gặp giới hạn hành trình trên LS2 thì cửa dừng lại rồi xe chạy vào Khi cảm biến quang SS2 đặt phía trong cổng cửa nhận dạng được xe đã đi qua khỏi cửa thì cửa sẽ
Trang 16được đóng lại, chạm vào giới hạn hành trình dưới LS1 thì cửa dừng lại Chú ý xe chỉ đi một
chiều
• Bảng gán nhiệm vụ các I/O
• Chương trình điều khiển
Network1: // Khi SS1 là 1 (có xe vào) thì cửa cuốn lên
A "SS1"
S "Raisedoor"
Cảm biến Ultrasounic SS1
Động cơ kéo cửa
Cảm biến vị trí {LS1, LS2}
Cảm biến quang SS2
SS1Network2:// Khi LS1 là 1 thì cửa dừng lại tại giới hạn
R "Raisedoor"
Network3: // Khi SS2 chuyển trạng thái 1sang 0 (xe
qua khỏi nó) thì cửa cuốn xuống để đóng cửa
3.3.16 Lệnh phát hiện sườn lên
Cú pháp FP <Toán hạng>
Trang 17Khi PLC phát hiện sườn lên ở tiếp điểm I1.0, nó sẽ tạo ra một xung tại địa chỉ ngõ ra Q0.4 ứng với một vòng quét OB1
Biển đồ trạng thái tín hiệu Chươnh trình STL
Ví dụ:
Viết chương trình cho máy dập thủy lực mô tả
hình 3.7, với yêu cầu kỹ thuật như sau:Lúc đầu, đầu dập
ở vị trí chờ (S4), khi đưa chi tiết cần dập vào ta ấn nút S1,
đầu dập tịnh tiến ra và dập chi tiết và trở về khi gặp S5
Trong quá trình gia công nếu xảy ra sự cố, ấn nút S3 đầu
dập sẽ dừng lại ở vị trí đó Sau đó, ta ấn nút S2 đầu dập
1Y2
Biểu đồ trạng thái theo thời gian
S5 1Y1
t t
t
Xy lanh
L
Input (ngỏ vào) Output (ngỏ ra)
Tên gọi Địa chỉ
Trang 183.4 LỆNH NẠP VÀ CHUYỂN NỘI DUNG THANH GHI
Trong CPU của S7-300 thường có hai thanh ghi Accumulator (ACCU) kí hiệu là ACCU1 và ACCU2 Hai thanh ghi có cùng kích thước 32 bit (~ 1 Double Word) Chúng có cấu trúc như sau:
Từ thấp Từ cao
Lệnh nạp (L - Load) và chuyển (T – Transfer) cho phép chúng ta có khả năng lập trình thay đổi thông tin lẫn nhau giữa các module ngõ vào hoặc ra và các vùng nhớ, hoặc giữa các vùng nhớ
3.4.1 Lệnh nạp vào ACCU
Cú pháp L <Toán hạng>
Toán hạng
Kiểu dữ liệu Vùng biến nhớ Địa chỉ nguồn BYTE
WORD DWORD I, Q, PQ, M, L, D
0…65535 0…65334 0…65332
Lệnh L có tác dụng chuyển dữ liệu hoặc nội dung ô nhớ có địa chỉ là toán hạng vào thanh ghi ACCU1 Nội dung cũ của ACCU1 được chuyển vào ACCU2 Trong trường hợp giá trị chuyển vào có kích thước nhỏ hơn từ kép thì nó sẽ được ghi theo thứ tự từ byte thấp của từ thấp đến byte cao của từ cao Những bit còn trống trong ACCU1 được ghi 0
Trang 1924 23 16 15 8 7 0
31
Lệnh không thay đổi trạng thái của thanh ghi (Status word)
3.4.2 Lệnh chuyển nội dung ACCU vào ô nhớ
Cú pháp T <Toán hạng>
Toán hạng
Kiểu dữ liệu Vùng biến nhớ Địa chỉ nguồn BYTE
WORD DWORD
I, Q, PQ, M, L, D 0…65535 0…65334
0…65332
Lệnh chuyển nội dung của ACCU1 vào ô nhớ có địa chỉ là toán hạng Lệnh không thay đổi nội dung trong ACCU2 Trong trường hợp ô nhớ có kích thước nhỏ hơn từ kép thì nội dung của ACCU1 được chuyển ra theo thứ tự từ byte thấp của từ thấp đến byte cao của từ thấp, byte thấp của từ cao, byte cao của từ cao
Ví dụ:
T QB1 //sẽ chuyển nội dung của byte thấp của từ thấp trong ACCU1vào QB1
T MW12 //sẽ chuyển byte cao của từ thấp của ACCU1 vào MB12 và byte thấp của từ thấp
của ACCU1 vào MB13
Lệnh không thay đổi trạng thái của thanh ghi (Status word)
Ví dụ:
Viết chương trình điều khiển tốc độ dịch chuyển của một pít tông thủy lực mô tả hình 3.8
Muốn thay đổi tốc độ của pít tông ta phải thay đổi lưu lượng
lưu chất tác động vào pít tông Để thay đổi lưu lượng ta sử
dụng van servo thủy lực Nguyên lý làm việc của van này là
sự thay đổi tuyến tính của điện áp cấp cho cuộn dây của van
dẫn đến sự thay đổi lưu lượng tuyến tính của van Đặc tính của
van này có thể cho: q = 0 ÷ 100 l/ph ⇔ u = 0 ÷10 volt
• Bảng gán nhiệm vụ I/O
PQW274Địa chỉ
Input (ngỏ vào) Output (ngỏ ra)
Tên gọi Địa chỉ Tên gọi
Giá trị nhập từ bàn
phím số nguyên 2 byte MW0 Van tuyến tính 1Y1
Hình 3.8 - Điều khiển tốc độ
• Chương trình
Network1: //Giá trị số nguyên 2 byte trong ô nhớ MW0 được chuyển vào ô nhớ ngoại vi PQW272
Trang 203.5 LỆNH SO SÁNH (comparison instruction)
3.5.1 Giới thiệu
Chúng ta có thể dùng các lệnh so sánh để so sánh cặp giá trị số sau:
Hai số nguyên đơn ( 16 bit)
Hai số nguyên kép ( 32 bit)
Hai số thực (dấu chấm động – 32 bit)
Các giá trị số này được nạp vào 2 thanh ghi, thanh ghi 1(ACCU 1) và thanh ghi 2 (ACCU 2) Lệnh so sánh so sánh giá trị trong thanh ghi 2 với giá trị trong thanh ghi 1 theo các phép
toán cơ bản được liệt kê ở bảng 3-1
Kết quả của phép so sánh là số nhị phân, đó là có thể 1 hoặc 0 1 biểu diễn phép toán là đúng và 0 biểu diễn phép toán là sai, kết quả được lưu giữ trong RLO bit
Bảng 3-1 Phép toán so sánh
Giá trị số chứa trong
thanh ghi 2
Phép toán so sánh Kí hiệu lệnh Giá trị số chứa
trong thanh ghi 1
3.5.2 So sánh hai số nguyên 16 bit
Cú pháp ==I, <>I, <I, >I, <=I, >=I
So sánh hai số nguyên là so sánh nội dung của thanh ghi ACCU 2 với ACCU 1 Nội dung của hai thanh ghi là số nguyên 16 bit Kết quả của phép so sánh là bit RLO =1 nếu kết quả so sánh là đúng; RLO = 0 nếu kết quả so sánh là sai
Trang 21L MW10 // Chuyển nội dung của MW10 vào ACCU 1 (16-bit integer).
L IW24 // Chuyển nội dung của IW24 vào ACCU 1 (16-bit integer).
>I // So sánh ACCU 2 (MW10) lớn hơn ACCU 1 (IW24) hay không?
= M 2.0 // RLO = 1 nếu MW10 > IW24.
3.5.3 So sánh hai số nguyên 32 bit
Cú pháp ==D, <>D, <D, >D, <=D, >=D
So sánh hai số nguyên là so sánh nội dung của thanh ghi ACCU 2 với ACCU 1 Nội dung của hai thanh ghi là số nguyên 32 bit Kết quả của phép so sánh là bit RLO =1 nếu kết quả so sánh là đúng; RLO = 0 nếu kết quả so sánh là sai
L MD10 // Chuyển nội dung của MD10 vào ACCU1.
L ID24 // Chuyển nội dung của ID24 vào ACCU1.
>D // So sánh ACCU 2 (MD10) lớn hơn ACCU 1 (ID24) ?
= M 2.0 // RLO = 1 nếu MD10 > ID24
3.5.4 So sánh hai số thực 32 bit
Cú pháp ==R, <>R, <R, >R, <=R, >=R
So sánh hai số thực là so sánh nội dung của thanh ghi ACCU 2 với ACCU 1 Nội dung của hai thanh ghi là số thực 32 bit Kết quả của phép so sánh là bit RLO =1 nếu kết quả so sánh là đúng; RLO = 0 nếu kết quả so sánh là sai
Thực hiện
lệnh Kết quả RLO nếu ACCU2>ACCU1 Kết quả RLO nếu ACCU2=ACCU1 Kết quả RLO nếu ACCU2<ACCU1
Trang 22L MD10 // Chuyển nội dung của MD10 vào ACCU 1(floating-point number)
L 1.359E+02 // Chuyển hằng số1.359E+02 vào ACCU 1
>R // So sánh ACCU 2 (MD10) lớn hơn ACCU 1 (1.359-E+02)không?
= M 2.0 // RLO = 1 nếu MD10 > 1.359E+02.
Ví dụ:
Viết chương trình cho PLC điều khiển cơ cấu xả của một phễu chứa bột mì khi trọng lượng đạt tới một mẻ cân là 30 Kg (bao gồm 25 kg bột và 5 kg trọng lượng của phễu, khung lắp)
mô tả hình 3.9 Trọng lượng của phễu được đo lường bằng cảm biến tải trọng (Loadcell)
Cho biết đặc tính kỹ thuật của Loadcell như sau: Tầm đo khối lượng: m = 0 ÷ 100 Kg; Tín hiệu ra điện áp u = 0 ÷ 10 volt; giá trị đọc được từ ngõ vào của cảm biến qua kênh PIW là
0 ÷ 26460
• Bảng gán nhiệm vụ I/O
Input (ngỏ vào) Output (ngỏ ra)
Tên gọi Địa chỉ Tên gọi Địa chỉ
P
1Y
Loadcell PIW272 Van khí 1Y Q1.0
Hình 3.9 – Cơ cấu cân và xả bột
• Chương trình
Network1: //Tín hiệu điện áp từ Loadcell
được đọc vào cổng PIW272 Khi chưa có bột,
với trọng lượng của cơ cấu phễu 5Kg giá
trị số nguyên 2 byte là 1323 Cửa phễu đóng
tức Q1.0 ở trạng thái “0”
L PIW 2.72
L 1323
==I
R Q 1.0
Network2: //Khi phễu chứa đạt tới 30 Kg,
tức là PIW272 = 7938 Lúc này Q1.0 là “1”
do đó cửa xả mở để xả bột.
Trang 23Sử dụng phép toán số học, ta thực hiện 4 phép toán cộng (+), trừ (-), nhân (*), chia (/) với 2 loại :số nguyên (integer number)16 bit và 32 bit; Số thực (real number)
Ngoài ra còn có một số phép toán khác: trị tuyệt đối, bình phương, căn bậc 2, …
3.6.2 Phép toán trên số nguyên 16 bit
3.6.2.1 Phép cộng
Lệnh thực hiện phép cộng số nguyên 16 bit trong từ thấp của ACCU 1 và ACCU 2 Kết quả là số nguyên 16 bit được ghi vào từ thấp của thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 16 bit (-32768 ÷ 32767) thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L IW10 // Nạp giá trị của IW10 vào ACCU1
L MW14 // Nạp nội dung của ACCU 1 vào ACCU 2 Nạp giá trị MW14 vào ACCU 1.
+I // Cộng nội dung ACCU 1 và ACCU 2, ghi vào ACCU 1.
T MW20 // Nội dung của ACCU 1 được chuyển vào ô nhớ MW20.
3.6.2.2 Phép trừ
Lệnh thực hiện phép trừ số nguyên 16 bit trong từ thấp ACCU 2 cho số nguyên trong từ thấp của ACCU 1 Kết quả là số nguyên 16 bit được ghi vào từ thấp của thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 16 bit (-
32768 ÷ 32767) thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ 27:
L IW6 // Nạp giá trị của IW6 vào ACCU1
L MW8 // Nạp nội dung của ACCU 1 vào ACCU 2 Nạp giá trị MW8 vào ACCU 1.
-I // Trừ nội dung ACCU 1 bằng ACCU 2, ghi vào ACCU 1.
T MW10 // Nội dung của ACCU 1 được chuyển vào ô nhớ MW10.
3.6.2.3 Phép nhân
Lệnh thực hiện phép nhân hai số nguyên 16 bit trong từ thấp của ACCU 1 và ACCU 2 Kết quả là số nguyên 32 bit được ghi vào từ thấp của thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 16 bit (-32768 ÷ 32767) thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L IW2 // Nạp giá trị của IW2 vào ACCU1
L MW2 // Nạp nội dung của ACCU 1 vào ACCU 2 Nạp giá trị MW2 vào ACCU 1.
*I // Nhân nội dung ACCU 1 và ACCU 2, ghi vào ACCU 1.
T MW6 // Nội dung của ACCU 1 được chuyển vào ô nhớ MW6.
3.6.2.4 Phép chia
Cú pháp /I
Lệnh thực hiện phép chia số nguyên 16 bit trong từ thấp của ACCU 2 cho số nguyên 16 bit trong từ thấp của ACCU 1 Kết quả là số nguyên 16 bit được ghi vào từ thấp của thanh ghi ACCU 1.Phần dư dược ghi vào từ cao của ACCU 1 Nội dung của thanh ghi
Trang 24ACCU 2 không thay đổi Nếu kết quả nằm ngoài 16 bit (-32768 ÷ 32767) thì bit trạng thái
OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L MW6 // Nạp giá trị của IW6 vào ACCU1
L MW8 // Nạp nội dung của ACCU 1 vào ACCU 2 Nạp giá trị MW8 vào ACCU 1.
/I // Chia nội dung ACCU 1 bằng ACCU 2, ghi vào ACCU 1.
T MW10 // Nội dung của ACCU 1 được chuyển vào ô nhớ MW10.
Chẳng hạn: 13 chia 4
Nội dung của ACCU 2-L (MW6): "13"
Nội dung của ACCU 1-L (MW8): "4"
Phép chia /I (ACCU 2-L / ACCU 1-L): "13/4"
Nội dung của ACCU 1-L sau khi thực hiện phép chia (quotient): "3"
Nội dung của ACCU 1-H sau khi thực hiện phép chia (remainder):”1”
3.6.3 Phép toán trên số nguyên 32 bit
3.6.3.1 Phép cộng
Lệnh thực hiện phép cộng số nguyên 32 bit của ACCU 1 và ACCU 2 Kết quả là số
nguyên 32 bit được ghi vào thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 32 bit (-2147483648 ÷ 2147483647) thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L ID10 //Nạp giá trị của ID10 vào ACCU 1.
L MD14 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị của MD14 vào ACCU 1
+ D //Cộng ACCU 2 với ACCU 1; ghi kết quả vào ACCU 1.
T DB1.DBD25 //Nội dung của ACCU 1 (result) được chuyển vào DBD25của DB1.
3.6.3.2 Phép trừ
Lệnh thực hiện phép trừ số nguyên 32 bit trong ACCU 2 cho số nguyên của ACCU
1 Kết quả là số nguyên 32 bit được ghi vào ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 32 bit thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví du:
L ID10 //Nạp giá trị của ID10 vào ACCU 1.
L MD14 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị của MD14 vào ACCU 1
- D //ACCU 2 trừ ACCU 1; ghi kết quả vào ACCU 1.
T DB1.DBD25 //Nội dung của ACCU 1 được chuyển vào DBD25của DB1.
3.6.3.3 Phép nhân
Lệnh thực hiện phép nhân hai số nguyên 32 bit trong ACCU 2 và số nguyên của ACCU 1 Kết quả là số nguyên 32 bit được ghi vào ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 32 bit thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Trang 25Ví dụ:
L ID10 //Nạp giá trị của ID10 vào ACCU 1.
L MD14 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị của MD14 vào ACCU 1
* D //ACCU 2 nhân với ACCU 1; ghi kết quả vào ACCU 1.
T DB1.DBD25 //Nội dung của ACCU 1 được chuyển vào DBD25của DB1.
3.6.3.4 Phép chia
Lệnh thực hiện phép chia số nguyên 32 bit trong ACCU 2 cho số nguyên của ACCU 1 Kết quả của phép chia (số thương – quotient) là số nguyên 32 bit được ghi vào ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 32 bit thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Chú ý: không đề cập đến phần dư (remainder)
Ví dụ:
L ID10 //Nạp giá trị của ID10 vào ACCU 1.
L MD14 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị của MD14 vào ACCU 1
/ D //ACCU 2 chia cho ACCU 1; ghi kết quả vào ACCU 1.
T DB1.DBD25 //Nội dung của ACCU 1 được chuyển vào DBD25của DB1.
Chẳng hạn: 13 chia 4
Nội dung của ACCU 2 (ID10): "13"
Nội dung của ACCU 1 (MD14): "4"
Phép chia /D (ACCU 2 / ACCU 1): "13/4"
Nội dung của ACCU 1 sau khi thực hiện phép chia (quotient): "3"
3.6.3.5 Phép chia lấy phần dư
Lệnh thực hiện phép chia số nguyên 32 bit trong ACCU 2 cho số nguyên của ACCU 1 Kết quả của phép chia (số dư – remainder) là số nguyên 32 bit được ghi vào ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm ngoài 32 bit thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L ID10 //Nạp giá trị của ID10 vào ACCU 1.
L MD14 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị của MD14 vào ACCU 1
/ D //ACCU 2 chia cho ACCU 1; ghi kết quả (remainder) vào ACCU 1.
T DB1.DBD25 //Nội dung của ACCU 1 được chuyển vào DBD25của DB1.
Chẳng hạn: 13 chia 4
Nội dung của ACCU 2 (ID10): "13"
Nội dung của ACCU 1 (MD14): "4"
Phép chia MOD (ACCU 2 / ACCU 1): "13/4"
Nội dung của ACCU 1 sau khi thực hiện phép chia (remaider): "1"
3.6.4 Phép toán trên số thực (Real) 32 bit
3.6.4.1 Phép cộng
Trang 26Lệnh thực hiện phép cộng số thực 32 bit của ACCU 1 và ACCU 2 Kết quả là số thực 32 bit được ghi vào thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm trong khoảng (-3,402823E+38 ÷ -1,175495E-38) hoặc bằng 0 hoặc nằm trong khoảng (+1,175495E-38 ÷ 3,402823E+38) thì bit OV nhận giá trị 0, ngược lại thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L MD4 //Nạp giá trị của MD4 vào ACCU 1.
L MD8 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị của MD8 vào ACCU 1
+ R //Cộng ACCU 2 với ACCU 1; ghi kết quả vào ACCU 1.
T MD12 //Nội dung của ACCU 1 (result) được chuyển vào ô nhớ MD12.
3.6.4.2 Phép trừ
Lệnh thực hiện phép trừ số thực 32 bit trong ACCU 2 và số thực trong ACCU 1 Kết quả là số thực 32 bit được ghi vào thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm trong khoảng (-3,402823E+38 ÷ -1,175495E-38) hoặc bằng 0 hoặc nằm trong khoảng (+1,175495E-38 ÷ 3,402823E+38) thì bit OV nhận giá trị 0, ngược lại thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L MD4 //Nạp giá trị của MD4 vào ACCU 1.
L MD8 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị của MD8 vào ACCU 1
- R //ACCU 2 trừ ACCU 1; ghi kết quả vào ACCU 1.
T MD12 //Nội dung của ACCU 1 (result) được chuyển vào ô nhớ MD12.
3.6.4.3 Phép nhân
Lệnh thực hiện phép nhân số thực 32 bit trong ACCU 2 và số thực trong ACCU 1 Kết quả là số thực 32 bit được ghi vào thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm trong khoảng (-3,402823E+38 ÷ -1,175495E-38) hoặc bằng 0 hoặc nằm trong khoảng (+1,175495E-38 ÷ 3,402823E+38) thì bit OV nhận giá trị 0, ngược lại thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L MD4 //Nạp giá trị của MD4 vào ACCU 1.
L 3.1415 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị số pi vào ACCU 1
* R //ACCU 2 trừ ACCU 1; ghi kết quả vào ACCU 1.
T MD12 //Nội dung của ACCU 1 (result) được chuyển vào ô nhớ MD12.
3.6.4.4 Phép chia
Lệnh thực hiện phép chia số thực 32 bit trong ACCU 2 cho số thực trong ACCU 1 Kết quả là số thực 32 bit được ghi vào thanh ghi ACCU 1 Nội dung của thanh ghi ACCU 2 không thay đổi Nếu kết quả nằm trong khoảng (-3,402823E+38 ÷ -1,175495E-38) hoặc bằng 0 hoặc nằm trong khoảng (+1,175495E-38 ÷ 3,402823E+38) thì bit OV nhận giá trị 0, ngược lại thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
Trang 27L MD4 //Nạp giá trị của MD4 vào ACCU 1.
L 3.1415 //Nạp giá trị của ACCU 1 to ACCU 2 Nạp giá trị số pi vào ACCU 1
/ R //ACCU 2 trừ ACCU 1; ghi kết quả vào ACCU 1.
T MD12 //Nội dung của ACCU 1 (result) được chuyển vào ô nhớ MD12.
3.6.4.5 Phép lấy trị tuyệt đối
Không có toán hạng và xác định giá trị tuyệt đối của số thực 32 bit trong thanh ghi ACCU 1 Kết quả được lưu giữ trong ACCU 1 Lệnh này không liên quan, ảnh hưởng đến nội dung của các bit trạng thái
Ví dụ:
L ID8 //Nạp giá trị ID8 vào ACCU 1 (example: ID8 = -1.5E+02).
ABS //Xác định trị tuyệt đối; ghi kết quả vào ACCU 1.
T MD10 //Chuyển kết quả tới MD10 (example: result = 1.5E+02).
L MD10 //Nạp giá trị MD10 vào ACCU 1.
SQR //Xác định trị bình phương; ghi kết quả vào ACCU 1.
T MD20 //Chuyển kết quả tới MD20.
3.6.4.7 Phép lấy căn bậc hai
Lệnh tính giá trị căn bậc hai của số thực trong ACCU 1 và lưu kết quả là số thực không âm vào ACCU 1 Nội dung của ACCU 2 không bị thay đổi
Ví dụ:
L MD10 //Nạp giá trị MD10 vào ACCU 1
SQRT //Lấy căn bậc hai; ghi kết quả vào ACCU 1.
T MD20 //Chuyển kết quả tới MD20.
3.6.4.8 Phép tính Sin
Lệnh tính Sin của số thực trong ACCU 1 và lưu kết quả là số thực vào ACCU 1 Nội dung của ACCU 2 không bị thay đổi Nếu kết quả nằm trong khoảng (-3,402823E+38
÷ -1,175495E-38) hoặc bằng 0 hoặc nằm trong khoảng (+1,175495E-38 ÷ 3,402823E+38) thì bit OV nhận giá trị 0, ngược lại thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L MD10 //Nạp giá trị MD10 vào ACCU 1.
SIN //Tính SIN; ghi kết quả vào ACCU 1.
T MD20 //Chuyển kết quả tới MD20.
3.6.4.9 Phép tính Cos
Trang 28Lệnh tính Cos của số thực trong ACCU 1 và lưu kết quả là số thực vào ACCU 1 Nội dung của ACCU 2 không bị thay đổi Nếu kết quả nằm trong khoảng (-3,402823E+38
÷ -1,175495E-38) hoặc bằng 0 hoặc nằm trong khoảng (+1,175495E-38 ÷ 3,402823E+38) thì bit OV nhận giá trị 0, ngược lại thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L MD10 //Nạp giá trị MD10 vào ACCU 1.
Cos //Tính Cos; ghi kết quả vào ACCU 1.
T MD14 //Chuyển kết quả tới MD14.
3.6.4.10 Phép tính TAN
Lệnh tính Tan của số thực trong ACCU 1 và lưu kết quả là số thực vào ACCU 1 Nội dung của ACCU 2 không bị thay đổi Nếu kết quả nằm trong khoảng (-3,402823E+38
÷ -1,175495E-38) hoặc bằng 0 hoặc nằm trong khoảng (+1,175495E-38 ÷ 3,402823E+38) thì bit OV nhận giá trị 0, ngược lại thì bit trạng thái OV và OS sẽ có cùng giá trị 1 (bị tràn)
Ví dụ:
L MD10 //Nạp giá trị MD10 vào ACCU 1.
Tan //Tính Tan; ghi kết quả vào ACCU 1.
T MD14 //Chuyển kết quả tới MD14.
3.6.4.11 Phép tính ASIN
Lệnh tính arcsin của số thực trong ACCU 1, số thực này phải nằm [-1÷1] Kết quả là số thực [-π/2 ÷ π/2] và được ghi vào ACCU 1 Nội dung của ACCU 2 không bị thay đổi
3.6.4.12 Phép tính ACOS
Lệnh tính arccos của số thực trong ACCU 1, số thực này phải nằm [-1÷1] Kết quả là số thực [0 ÷ π] và được ghi vào ACCU 1 Nội dung của ACCU 2 không bị thay đổi
3.6.4.13 Phép tính ATAN
Lệnh tính arctg của số thực trong ACCU 1, số thực này phải nằm [-1÷1] Kết quả là số thực [-π/2 ÷ π/2] và được ghi vào ACCU 1 Nội dung của ACCU 2 không bị thay đổi
Ví dụ: Hệ thống điều khiển bãi đậu xe chứa tối đa là 12
chiếc mô tả hình 3.10 Mỗi lần xe vào, PLC tự động
tăng thêm 1 bởi cảm biến phát hiện xe S1 Bất kỳ một
chiếc xe nào đi ra khỏi bãi, PLC sẽ tự động giảm đi 1
bởi cảm biến phát hiện S2 Khi 12 chiếc xe được đăng
ký, bảng hiệu đầy xe sẽ được sáng lên thông báo đến
các xe không được vào nữa
• Bảng gán nhiệm vụ I/O
Input (ngỏ vào) Output (ngỏ ra)
Tên gọi Địa chỉ Tên gọi Địa chỉ
S1 I0.0 Car park full Q0.0
Trang 29_001: NOP 0 // Kết thúc
Network2: // Khi LS2 là 1 thì cửa dừng lại tại giới hạn dưới
= "CAR PARK FULL"
3.7 LỆNH CHUYỂN ĐỔI DỮ LIỆU (conversion instruction)
3.7.1 Khái niệm
Khi giao tiếp thiết bị tương tự với PLC để thực hiện các nhiệm vụ thì tín hiệu thu nhận và xuất ra cần phải được xử lý thích hợp để đảm bảo được bản chất thực của nó Ví dụ khi ta đọc tín hiệu từ các cảm biến tải trọng của một hệ thống cân đo tải trọng xe ô tô, việc đọc này phải được thực hiện qua các ngõ vào tương tự và ta nhận được số liệu dưới dạng nguyên 16 bit mang giá trị tín hiệu tương tự (cấu trúc vật lý) chứ không phải bản thân giá trị đó, bởi vậy để xử lý tiếp ta phải chuyển đổi số nguyên đó thành đúng giá trị thực, dấu phẩy động của tín hiệu tương tự ở ngõ vào Tiếp cận với chuyển đổi dữ liệu chúng ta sẽ có một số lệnh cơ bản sau:
Chuyển BCD sang số nguyên 16 bit (Integer)
Chuyển số nguyên 16 bit sang BCD
Chuyển BCD sang số nguyên 32 bit (Double Integer)
Chuyển số nguyên 32 bit sang BCD
Chuyển số nguyên 16 bit sang số nguyên 32 bit
Chuyển số nguyên 32 bit sang số thực 32 bit
Một số dạng dữ liệu khác
Trang 303.7.2 Chuyển BCD sang số nguyên 16 bit (Integer)
Lệnh không có toán hạng và thực hiện chuyển đổi một số BCD có 3 chữ số chứa trong nội dung của ACCU 1 thành số nguyên 16 bit Kết quả được lưu giữ trong từ thấp của ACCU 1 Từ cao của ACCU 1 và nội dung ACCU 2 không bị thay đổi Lệnh không làm thay đổi thanh ghi trạng thái
Giới hạn cho phép của số BCD là –999 ÷ +999 do đó chỉ sử dụng 12 bit đầu của từ thấp Bit 15 chỉ định dấu, 0 cho dấu (-) còn 1 cho dấu (+) Bit 12 đến bit 14 không sử dụng
Nếu số BCD cần chuyển đổi có cấu trúc sai, ví dụ có chữ số (4 bits nhị phân) không nắm trong khoảng 0-9 thì CPU sẽ báo lỗi và chuyển về Stop mode hoặc sẽ gọi chương trình xử lý lỗi OB121
Ví dụ:
L MW10 //Nạp số BCD vào từ thấp ACCU 1.
BTI //Chuyển đổi BCD thành số nguên 16 bits; ghi kết quả vào từ thấp ACCU 1.
T MW20 //Chuyển kết quả (số nguyên) vào ô nhớ MW20.
3.7.3 Chuyển số nguyên 16 bit (Integer) sang BCD
Lệnh không có toán hạng và thực hiện chuyển đổi số nguyên 16 bit chứa trong nội dung của ACCU 1 thành một số BCD có 3 chữ số Kết quả được lưu giữ trong từ thấp của ACCU 1 Bit 0 đến bit 11 chứa giá trị số BCD Bit 12 đến bit 15 được chỉ định dấu của của số BCD (0000 = dấu cộng, 1111 = dấu trừ) Từ cao của ACCU 1 và nội dung ACCU 2 không bị thay đổi Lệnh không làm thay đổi thanh ghi trạng thái
Giới hạn cho phép của số BCD là –999 ÷ +999 Nếu số BCD vượt ra khỏi giới hạn trên thì bit trạng thái OV và OS sẽ nhận giá trị 1 (tràn).
Ví dụ:
L MW10 //Nạp số nguyên 16 bit MW10 vào từ thấp ACCU 1.
BTI //Chuyển đổi số nguên thành số BCD 16 bits; ghi kết quả vào từ thấp ACCU 1.
T MW20 //Chuyển kết quả (số nguyên) vào ô nhớ MW20.
Trang 313.7.4 Chuyển BCD sang số nguyên 32 bit (Double Integer)
Lệnh không có toán hạng và thực hiện chuyển đổi một số BCD có 7 chữ số chứa trong nội dung của ACCU 1 thành số nguyên 32 bit Kết quả được lưu giữ trong ACCU 1 Nội dung ACCU 2 không bị thay đổi Lệnh không làm thay đổi thanh ghi trạng thái
Giới hạn cho phép của số BCD là “–9,999,999 ÷ +9,999,999 “ do đó chỉ sử dụng 28 bit đầu Bit 31 chỉ định dấu, 0 cho dấu (-) còn 1 cho dấu (+) Bit 28 đến bit 30 không sử dụng
Nếu số BCD cần chuyển đổi có cấu trúc sai, ví dụ có chữ số (4 bits nhị phân) không nắm trong khoảng 0-9 thì CPU sẽ báo lỗi và chuyển về Stop mode hoặc sẽ gọi chương trình xử lý lỗi OB121
Ví dụ:
L MD10 //Nạp số BCD vào ACCU 1.
BTD //Chuyển đổi BCD thành số nguên 32 bits; ghi kết quả vào ACCU 1.
T MD20 //Chuyển kết quả (số nguyên) vào ô nhớ MD20.
3.7.5 Chuyển số nguyên 16 bit sang số nguyên 32 bit (Double Integer)
Lệnh chuyển nội dung số nguyên 16 bits trong từ thấp ACCU 1 sang số nguyên 32 bit Kết quả được lưu trong ACCU 1 Nội dung trong thanh ghi ACCU 2 không thay đổi
Ví dụ:
L MW12 // Nạp số nguyên vào ACCU 1.
ITD // Chuyển đổi số nguyên 16 bit sang 32 bit; ghi kết quả vào ACCU 1.
T MD20 // Chuyển kết quả (số nguyên) vào ô nhớ MD20.
Chẳng hạn: MW12 = "-10" (Integer, 16-bit); kết quả mô tả ở bảng dưới
Trước thực hiện ITD xxxx xxxx xxxx xxxx 1111 1111 1111 0110 Sau thực hiện ITD 1111 1111 1111 1111 1111 1111 1111 0110
( x = 0 hoặc 1, bits không được sử dụng để chuyển đổi)
3.7.6 Chuyển số nguyên 32 bit (Integer) sang BCD
Lệnh không có toán hạng và thực hiện chuyển đổi số nguyên 32 bit chứa trong nội dung của ACCU 1 thành một số BCD có 7 chữ số Kết quả được lưu giữ trong ACCU 1 Bit