Giáo trình Hệ thống sản xuất tự động hóa với PLCs - Phần 16: Những hàm logic bậc thang nâng cao

16. NHỮNG HÀM LOGIC BẬC THANG NÂNG CAO  
Chủ đề:  
Dịch chuyển các thanh ghi, các ngăn xếp và các bộ sắp xếp dãy  
Điều khiển chương trình: rẽ nhánh, vòng lặp, chương trình con, các kết thúc tạm thời  
và các thứ chỉ dùng một lần (one shots)  
Các ngắt, bấm giờ, lỗi và điều khiển đầu vào  
Các đầu vào và các đầu ra tức thời  
Chuyển đổi khối  
Chuyển đổi các sơ đồ trạng thái bằng cách sử dụng các chương trình con  
Các ví dụ thiết kế  
Mục tiêu:  
Hiểu dịch chuyển các thanh ghi, các ngăn xếp và các bộ sắp xếp dãy.  
Hiểu các câu lệnh điều khiển chương trình.  
Hiểu việc dùng các ngắt.  
Hiểu hoạt động của các câu lệnh đầu vào/ra tức thời.  
Được chuẩn bị cho dùng lệnh chuyển đổi khối sau này.  
Có khả năng áp dụng hàm nâng cao trong thiết kế logic bậc thang.  
16.1 GIỚI THIỆU  
Chương này nói đến các hàm nâng cao, nhưng sự xác định này là phần nào mang tính  
chủ quan. Các hàm mảng trong chương cuối có thể được phân loại như các hàm nâng cao.  
Các hàm trong phần này có xu hướng làm những việc mà các việc này là không được định  
hướng cho các giá trị dữ liệu đơn giản. Các hàm liệt kê sẽ cho phép lưu và khôi phục các bit  
và các từ. Các hàm này là có ích khi thực thi các hệ đệm và các hệ hàng đợi. Các hàm điều  
khiển chương trình sẽ làm các việc mà các việc này không theo mô hình đơn giản của việc  
thực thi logic bậc thang – các hàm này nhận ra chương trình được thực thi từ trái sang phải  
từ đỉnh tới đáy. Cuối cùng, các hàm đầu vào và các hàm đầu ra sẽ được thảo luận, và chúng  
cho phép ta làm việc xung quanh các quét đầu vào thông thường và quét đầu ra thông  
thường như thế nào.  
16.2 CÁC HÀM DANH SÁCH  
16.2.1 Dịch chuyển các thanh ghi  
Dịch chuyển các thanh ghi được định hướng tới các bit dữ liệu đơn. Một dịch chuyển  
thanh ghi có thể chỉ giữ nhiều bit, vì thế khi một bit mới được đặt vào, một bit phải được loại  
đi. Một ví dụ của một dịch chuyển thanh ghi được cho trong hình 16.1. Dịch chuyển thanh ghi  
này là từ B3:1, và nó dài 5 bit. Khi A trở thành đúng tất cả các bit này chuyển sang phải tới bit  
có nghĩa bé nhất. Khi chúng dịch chuyển một bit mới là được cần đến, và nó được lấy từ  
I:000/0. Bit này mà nó bị đẩy ra, về phía tay phải, được chuyển tới bit UL (unload – dỡ tải) từ  
điều khiển R6:2/UL. Hàm này sẽ không hoàn thành trong một quét logic bậc thang đơn, vì thế  
từ điều khiển R6:2 được sử dụng. Hàm này là khía cạnh kích hoạt, vì vậy A sẽ phải bật lên 5  
lần trở lên trước khi bit này được tải từ I:000/0 sẽ xuất hiện tới bit dỡ tải này. Khi A có một  
khía cạnh tích cực các bit trong B3:1 sẽ được dịch chuyển tới bộ nhớ. Trong trường hợp này  
nó lấy giá trị của bit B3:1/0 và đặt nó trong bit từ điều khiển R6:2/UL. Nó sau đó dịch chuyển  
các bit một lần tới bên phải, B3:1/0 = B3:1/1 sau đó B3:1/1 = B3:1/2 sau đó B3:1/2 = B3:1/3  
sau đó B3:1/3 = B3:1/4. Sau đó bit đầu ra được đặt bên trong bit có nghĩa lớn nhất B3:1/4 =  
I:000/00. Các bit trong thanh ghi dịch chuyển này cũng có thể bị dịch chuyển tới phía trái bởi  
hàm BSL.  
BSL – dịch chuyển trái từ LSB tới MSB. LSB phải được bù vào  
BSR – tương tự với BSL, trừ ra bit đi vào MSB và được dịch chuyển tới LSB  
Figure 16.1 Shift Register Functions – Các hàm dịch chuyển thanh ghi  
Có nhiều loại của dịch chuyển các thanh ghi không được thực thi trong các PLC-5. Chúng  
được chỉ ra trong hình 16.2. Sự khác biệt chính là các phép dịch chuyển số học sẽ đặt một số  
không vào trong thanh ghi dịch chuyển ấy, thay vì cho phép một bit tùy ý. Các hàm quay dịch  
chuyển các bit xung quanh trong một vòng bất tận. Các hàm này cũng có thể được thực thi  
bằng cách sử dụng các câu lệnh BSR và BSL khi được cần đến.  
Figure 16.2 Shift Register Variations – Các loại dịch chuyển thanh ghi  
16.2.2 Các ngăn xếp  
Các ngăn xếp lưu các từ số nguyên trong một bộ đệm hai đầu. Có hai loại cơ bản của các  
ngăn xếp; vào trước ra trước (FIFO) và vào sau ra trước (LIFO). Khi các từ được đẩy vào ngăn  
xếp nó trở nên to hơn, khi các từ được kéo ra nó trở nên nhỏ hơn. Khi bạn lấy một từ từ một  
ngăn xếp LIFO bạn nhận cái từ mà nó là mục cuối của ngăn xếp này. Nhưng, khi bạn lấy một  
từ từ một ngăn xếp FIFO bạn nhận được từ đầu thoát của ngăn xếp này (nó cũng đã được ở  
đó lâu nhất). Một sự tương tự hữu ích là một chồng công việc trên bàn làm việc của bạn. Một  
công việc mới đến bạn thả nó lên đỉnh của ngăn xếp. Nếu ngăn xếp của bạn là LIFO, bạn nhặt  
công việc kế tiếp của bạn từ đỉnh của đống này. Nếu ngăn xếp của bạn là FIFO, bạn nhặt công  
việc của bạn từ đáy của đống này. Các ngăn xếp là rất hữu ích khi làm việc với các tình huống  
thực tế như là các bộ đệm trong các dây chuyền sản xuất. Nếu bộ đệm này chỉ là một độ trễ  
thì một ngăn xếp FIFO sẽ giữ dữ liệu theo thứ tự. Nếu sản phẩm được đệm hóa bởi việc chất  
đống nó lên thì một ngăn xếp LIFO làm việc tốt hơn, như được chỉ ra trong hình 16.3. Trong  
một ngăn xếp FIFO các vật thể qua một cổng vào, nhưng được dừng lại tại cổng thoát. Trong  
ngăn xếp LIFO các vật thể vào ngăn xếp này và làm thấp đường ray, khi nhiều vật thể được  
cần đến đường ray này được nâng lên. Trong sự sắp xếp này thứ tự của các vật thể trong  
ngăn xếp ấy sẽ được đảo ngược.  
Figure 16.3 Buffers and Stack Types – Các bộ đệm và các loại ngăn xếp  
Hàm logic bậc thang là FFL để tải ngăn xếp này, và FFU dỡ tải nó đi. Ví dụ trong hình 16.4  
chỉ ra hai câu lệnh để tải và dỡ tải một ngăn xếp FIFO. Lần đầu tiên FFL được kích hoạt (khía  
cạnh kích hoạt) nó sẽ lấy từ (16 bit) từ thẻ đầu vào I:001 và lưu chúng trong ngăn xếp này, tại  
N7:0. Giá trị tiếp theo sẽ được lưu tại N7:1, và cứ như thế cho đến khi độ dài ngăn xếp này  
đạt đến tại N7:4. Khi FFU là kích hoạt từ tại N7:0 sẽ được di chuyển tới thẻ đầu ra O:003. Các  
giá trị trên ngăn xếp này được dịch chuyển lên để giá trị trước đó trong N7:1 di chuyển tới  
N7:0, N7:2 di chuyển tới N7:1, v.v... Nếu ngăn xếp này là đầy hay rỗng, và một tải hay dỡ tải  
xuất hiện bit lỗi sẽ được thiết đặt R6:0/ER.  
Figure 16.4 FIFO Stack Instructions – Các lệnh ngăn xếp FIFO  
Các lệnh ngăn xếp LIFO được chỉ ra trong hình 16.5. Khi các giá trị được tải vào ngăn xếp  
chúng sẽ được thêm một cách tuần tự N7:0, N7:1, N7:2, N7:3 rồi N7:4. Khi các giá trị được dỡ  
tải chúng sẽ được làm từ vị trí được tải cuối cùng, vì thế nếu ngăn xếp này là đầy thì giá trị tại  
N7:4 được gỡ bỏ đầu tiên.  
Figure 16.5 LIFO Stack Commands – Các lệnh ngăn xếp LIFO  
16.2.3 Các bộ sắp xếp dãy  
Một hộp âm nhạc cơ học là một ví dụ đơn giản của một bộ sắp xếp dãy. Khi trống trong  
hộp nhạc này bật nó có các chân nhỏ mà các chân này sẽ phát âm thanh các nốt khác nhau.  
Trình tự bài hát là cố định, và nó luôn theo sau cùng một dạng. Các bộ điều khiển đèn giao  
thông bây giờ được điều khiển bằng điện, nhưng trước đây chúng đã dùng các bộ sắp xếp  
dãy mà các bộ này đã được dựa trên một trống quay với các cam mà các cam này sẽ mở và  
đóng các đầu cuối rơ le. Một trong những cam này được chỉ ra trong hình 16.6. Cam này  
quay một cách chậm chạp, và các bề mặt dưới các công tắc sẽ kéo lên và hạ xuống để mở và  
đóng các công tắc. Với một bộ điều khiển đèn giao thông tốc độ quay sẽ đặt tổng thời gian  
quay vòng cho các đèn giao thông này. Mỗi cam sẽ điều khiển một đèn, và bằng cách chỉnh  
độ dài chu vi của các nâng lên và các hạ xuống các lần bật và tắt có thể được điều chỉnh.  
Khi cam quay nó làm công tắc với không,  
một, hay hai đầu cuối, như được xác định  
bởi các hạ xuống và nâng lên trong cam  
quay này.  
Figure 16.6 A Single Cam in a Drum Sequencer  
Một cam đơn trong một bộ sắp xếp dãy trống  
Một bộ sắp xếp dãy dùng một danh sách các từ trong bộ nhớ. Nó gọi lại các từ một lần  
trong một thời điểm và chuyển những từ này tới vị trí bộ nhớ khác hay tới các đầu ra. Khi  
điểm cuối của danh sách này được đạt tới bộ sắp xếp dãy sẽ trở lại từ đầu tiên và quá trình  
bắt dầu lại một lần nữa. Một bộ sắp xếp dãy được chỉ ra trong hình 16.7. Lệnh SQO sẽ lấy các  
từ từ bộ nhớ bit bắt đầu tại B3:0. Độ dài là 4 vì thế kết thúc của dãy sẽ tại B3:0+4 hay B3:4  
(độ dài thực sự là 5). Bộ sắp xếp dãy này là khía cạnh kích hoạt, và mỗi khi A trở thành đúng  
nó lấy một từ trong danh sách ấy và chuyển tới O:000. Khi bộ sắp xếp dãy này đạt tới cuối  
danh sách nó sẽ trở lại vị trí thứ hai trong danh sách B3:1. Mục đầu tiên trong danh sách này  
là B3:0, và nó sẽ chỉ được gửi tới đầu ra nếu lệnh SQO là kích hoạt trong quét đầu của PLC,  
ngược lại từ đầu tiên được gửi tới đầu ra là B3:1. Mặt nạ giá trị là 000Fh, hay  
0000000000001111b vì thế chỉ bốn bit có nghĩa nhỏ nhất sẽ được chuyển tới đầu ra, các bit  
đầu ra khác sẽ không bị thay đổi. Các dòng lệnh khác cho phép các từ được thêm vào hay loại  
bỏ khỏi danh sách bộ sắp xếp dãy này.  
SQO(start,mask,destination,control,length) Đầu ra bộ sắp xếp dãy từ bảng tới bộ  
- sequencer output from table to memory nhớ  
SQI(start,mask,source,control,length) -  
Đầu vào bộ sắp xếp dãy từ địa chỉ bộ  
sequencer input from memory address to nhớ tới bảng  
table  
SQL(start,source,control,length) -  
sequencer load to set up the sequencer  
parameters  
Bộ sắp xếp dãy tải để đặt các tham số  
bộ sắp xếp dãy này  
Figure 16.7 The Basic Sequencer Instruction – Câu lệnh bộ sắp xếp dãy cơ bản  
Một ví dụ của một bộ sắp xếp dãy được cho trong hình 16.8 cho điều khiển đèn giao  
thông. Các dạng có thể có của đèn được lưu trong bộ nhớ (được nhập vào bằng tay bởi người  
lập trình). Chúng sau đó được chuyển ra tới các thẻ đầu ra khi hàm này được kích hoạt. Mặt  
nạ (003F = 0000000000111111) được dùng để chỉ 6 bit có nghĩa nhỏ nhất được thay đổi.  
Figure 16.8 A Sequencer For Traffic Light Control  
Một bộ sắp xếp dãy cho điều khiển đèn giao thông  
Hình 16.9 chỉ ra các ví dụ của các hàm sắp xếp dãy khác. Khi A đi từ sai tới đúng, hàm  
SQL sẽ di chuyển tới vị trí tiếp theo trong danh sách sắp xếp dãy, ví dụ N7:21, và tải một giá  
trị từ I:001. Nếu A sau đó duy trì đúng giá trị trong N7:21 sẽ được ghi đè mỗi quét. Khi mục  
cuối của danh sách sắp xếp này được thấy, vị trí này sẽ được đặt lại thành 1.  
Hàm đầu vào sắp xếp dãy (SQI) sẽ so sánh các giá trị trong danh sách sắp xếp dãy với  
nguồn I:002 trong khi B là đúng. Nếu hai giá trị này phù hợp B3/10 sẽ vẫn là bật trong khi B  
duy trì đúng. Giá trị mặt nạ là 0005h hay 0000000000000101b, vì thế chỉ các bit đầu tiên và  
thứ ba sẽ được so sánh. Dòng lệnh này không thay đổi vị trí một cách tự động, vì thế logic  
được chỉ ra sẽ tăng vị trí mọi quét trong khi C là đúng.  
Figure 16.9 Sequencer Instruction Examples  
Các ví dụ câu lệnh sắp xếp dãy  
Các dòng lệnh này là phù hợp với các quá trình với một dòng thực thi đơn lẻ, như là các  
đèn giao thông.  
16.3 ĐIỀU KHIỂN CHƯƠNG TRÌNH  
16.3.1 Rẽ nhánh và Lặp  
Các hàm này cho phép các phần của các chương trình logic bậc thang được bao gồm hay  
loại trừ ra khỏi mỗi quét chương trình. Các hàm này là tương tự với các hàm trong các ngôn  
ngữ lập trình khác như C, C++, Java, Pascal, v.v...  
Toàn bộ các phần của các chương trình có thể được bỏ qua bằng cách sử dụng câu lệnh  
JMP trong hình 16.10. Nếu A là đúng chương trình sẽ nhảy qua ba dòng lệnh tiếp theo tới  
dòng có ghi LBL 01. Nếu A là sai dòng lệnh JMP sẽ bị bỏ qua, và quét chương trình này sẽ tiếp  
tục một cách bình thường. Nếu A là sai X sẽ có cùng giá trị như B, và Y có thể được bật bởi C  
và tắt bởi D. Nếu A là đúng thì X và Y sẽ giữ các giá trị trước của chúng, không như câu lệnh  
MCR. Bất cứ câu lệnh nào theo sau câu lệnh LBL sẽ không bị ảnh hưởng bởi lệnh JMP vì thế Z  
sẽ luôn bằng với E. Nếu một lệnh nhảy là đúng chương trình này sẽ chạy nhanh hơn.  
Nếu A là đúng, chương trình sẽ nhảy tới LBL:01. Nếu A là sau chương trình đi tới dòng  
tiếp theo.  
Figure 16.10 A JMP Instruction – Một lệnh JMP  
Các chương trình con nhảy tới các chương trình khác, như được chỉ ra trong hình 16.11.  
Khi A là đúng hàm JSR sẽ nhảy tới chương trình con trong tệp 3. Câu lệnh JSR có hai đối được  
truyền vào, N7:0 và 123. Chương trình con (SBR) nhận hai đối này và đặt chúng trong N10:0  
và N10:1. Khi B là đúng chương trình con này sẽ kết thúc và trở về tệp chương trình 2 ở đó nó  
được gọi. Hàm RET cũng có thể trả về giá trị N10:1 cho chương trình gọi ở đó nó được đặt  
trong vị trí N7:1. Bằng cách truyền các đối (thay vì có các chương trình con dùng các vị trí bộ  
nhớ toàn cục) chương trình con này có thể được dùng cho nhiều hơn một phép toán. Ví dụ,  
một chương trình con có thể được cho một góc theo đơn vị độ và trả về giá trị là ra đi an.  
Một chương trình con có thể được gọi hơn một lần trong một chương trình, nhưng nếu  
không được gọi, nó sẽ bị bỏ qua.  
Một chương trình logic bậc thang riêng biệt được lưu trong tệp chương trình 3. Tính  
năng này cho phép các người dùng tạo các hàm của họ. Trong trường hợp này nếu A là đúng,  
thì chương trình bên dưới sẽ được thực thi và khi làm xong quét bậc thang sẽ tiếp tục sau câu  
lệnh chương trình con này. Số lượng của các giá trị dữ liệu được truyền và trả về như là biến  
số.  
Nếu B là đúng chương trình con này sẽ trả về và các giá trị được liệt kê sẽ được trả về  
mức thông thường. Đối với ví dụ này giá trị đó là trong N10:1 cuối cùng sẽ kết thúc tại N7:1.  
Figure 16.11 Subroutines – Các chương trình con  
Vòng lặp trong hình 16.12 sẽ nhắc lại một đoạn chương trình logic bậc thang 5 lần (từ 0  
tới 9 trong các bước của hai) khi A là đúng. Vòng lặp bắt đầu tại FOR và kết thúc tại hàm NXT.  
Trong ví dụ này có một hàm ADD mà hàm này sẽ thêm 1 vào giá trị tại N7:1. Vì thế khi câu  
lệnh for-next là hoàn thành giá trị của N7:1 sẽ lớn hơn 5. Nhớ rằng số nhãn là như nhau trong  
FOR và NXT, điều này cho phép chúng được phù hợp. Các vòng lặp for-next có thể được đặt  
bên trong các vòng lặp for-next khác, đây được gọi là lồng nhau (nesting). Nếu A là sai  
chương trình sẽ bỏ qua tới dòng lệnh NXT. Khi A là đúng, cả 5 vòng lặp sẽ được hoàn thành  
trong một quét chương trình đơn lẻ. Nếu B là đúng câu lệnh NXT sẽ không bao giờ trở lại  
quét chương trình tới câu lệnh FOR, thậm chí vòng lặp này là không hoàn thành. Sự chú ý  
phải được dùng cho câu lệnh này để logic bậc thang ấy không mắc vào một vòng lặp vô hạn,  
hay lặp dài – nếu điều này xảy ra PLC sẽ cảm thấy một lỗi và dừng lại.  
Ghi chú: Nếu A là đúng thì vòng lặp này sẽ nhắc lại 10 lần, và giá trị của N7:1 sẽ được  
tăng bởi 10. Nếu A là không đúng, thì hàm ADD sẽ chỉ thực thi một lần và N7:1 sẽ tăng trong  
giá trị lên 1.  
Figure 16.12 A For-Next Loop – Một vòng lặp For-Next  
Các chương trình logic bậc thang luôn có một dòng lệnh kết thúc, như được chỉ ra trong  
hình 16.13. Hầu hết các phần mềm hiện đại chèn nó một cách tự động. Các PLC sẽ cảm thấy  
các lỗi nếu điều này không tồn tại. Câu lệnh kết thúc tạm thời (TND) sẽ nhảy qua phần còn lại  
của một chương trình. Nếu C là đúng thì chương trình sẽ dừng lại, và dòng tiếp theo với D và  
Y sẽ được bỏ qua. Nếu C là sai thì TND sẽ không có hiệu ứng nào và Y sẽ bằng với D.  
Khi dấu hiệu kết thúc (hay kết thúc tệp) được thấy PLC sẽ dừng quét logic bậc thang này,  
và bắt đầu cập nhật các đầu ra. Điều này sẽ không đúng nếu nó là một chương trình con hay  
một bước trong một SFC.  
Figure 16.13 End Statements – Các câu lệnh kết thúc  
Một công tắc dùng một lần trong hình 16.14 có thể được dùng để bật một bậc thang  
chạy cho một quét đơn. Khi A có một khía cạnh tích cực công tắc này sẽ bật việc chạy cho  
một quét đơn. Bit B3:0 được dùng ở đây để theo dõi trạng thái của bậc.  
Figure 16.14 One Shot Instruction – Một câu lệnh nhanh  
16.3.2 Phát hiện lỗi và các ngắt  
PLC có thể được cài đặt để chạy các chương trình một cách tự động bằng cách dùng các  
ngắt. Công việc này được làm xong một cách bình thường bởi một vài lý do sau:  
Để làm việc với các lỗi mà nó xuất hiện (ví dụ chia cho số không)  
Để chạy một chương trình tại một khoảng thời gian hợp lệ (ví dụ như các tính  
toán SPC)  
Để trả lời khi một dòng lệnh dài nào đó là hoàn thành (ví dụ như đầu vào tương  
tự)  
Khi một đầu vào nào đó bị thay đổi (ví dụ như còi báo động)  
Các chương trình điều khiển ngắt này được đặt trong tệp chương trình của chúng. Số  
tệp chương trình sau đó được đặt trong một vị trí bộ nhớ trạng thái S2. Một vài giá trị khác  
cũng được đặt trong bộ nhớ trạng thái để chỉ thị các điều kiện ngắt.  
Một điều kiện lỗi nào đó có thể dừng một PLC. Nếu PLC này đang điều khiển một quá  
trình nguy hiểm điều này có thể dẫn tới thiệt hại đáng kể cho người và thiết bị. Có hai loại lỗi  
có thể xuất hiện: đầu cuối (lớn) và các cảnh báo (nhỏ). Một lỗi nhỏ sẽ đặt một bit lỗi một cách  
bình thường, nhưng không làm dừng PLC. Một lỗi lớn sẽ thường dừng PLC, nhưng một ngắt  
có thể được sử dụng để chạy một chương trình mà chương trình này có thể đặt lại bit lỗi này  
trong bộ nhớ và tiếp tục làm việc (hay tắt một cách an toàn). Không phải tất cả các lỗi lớn là  
có thể khôi phục được. Một danh sách đầy đủ của các lỗi này có trong các sách hướng dẫn  
sử dụng bộ xử lý PLC.  
Hình 16.15 chỉ ra hai chương trình. Chương trình mặc định (tệp 2) sẽ đặt tệp chương  
trình ngắt tới 3 bằng cách di chuyển nó tới S2:29 trong quét đầu tiên. Khi A là đúng một hàm  
tính toán nào đó sẽ diễn dịch biểu thức này, bằng cách dùng địa chỉ gián tiếp. Nếu B trở  
thành đúng thì giá trị trong N7:0 sẽ trở thành âm. Nếu A trở nên đúng sau điều này thì biểu  
thức sẽ trở thành N7:-10+10. Giá trị âm này cho địa chỉ ấy sẽ gây ra một lỗi, và tệp chương  
trình 3 sẽ được chạy. Trong bộ nhớ trạng thái chương trình lỗi S2:12 được kiểm tra mã lỗi 21,  
mã lỗi này chỉ ra một địa chỉ gián tiếp tồi. Nếu mã này được thấy giá trị chỉ số N7:0 được đặt  
lại thành không, và S2:11 bị xóa. Ngay sau khi S2:11 được xóa công việc lỗi sẽ dừng lại, và  
chương trình bình thường sẽ hoạt động lại. Nếu S2:11 không bị xóa, PLC này sẽ vào một trạng  
thái lỗi nào đó và dừng lại (đèn lỗi trên mặt trước của PLC này sẽ bật).  
Figure 16.15 A Fault Recovery Program – Một chương trình khôi phục lỗi  
Một ngắt thời gian sẽ chạy một chương trình tại các khoảng thời gian hợp lệ. Để đặt  
một ngắt thời gian chương trình trong các số tệp phải được đặt trong S2:31. Chương trình  
này sẽ chạy mỗi S2:30 lần 1 mi li giây. Trong hình 16.16 chương trình 2 sẽ đặt một ngắt mà  
ngắt này sẽ chạy chương trình 3 mỗi 5 giây. Chương trình 3 sẽ thêm giá trị của I:000 tới  
N7:10. Loại ngắt thời gian này là rất hữu ích khi điều khiển các quá trình ở đó một hằng số  
khoảng thời gian là quan trọng. Các ngắt thời gian này được cho phép bằng việc đặt bit  
S2:2/1 trong các PLC-5.  
Figure 16.16 A Timed Interrupt Program – Một chương trình ngắt thời gian  
Các ngắt cũng có thể được dùng cho theo dõi một thay đổi trong một đầu vào. Điều này  
có ích khi đợi một thay đổi mà thay đổi này cần một phản hồi nhanh. Các giá trị liên quan mà  
các giá trị này có thể được thay đổi như được liệt kê ở dưới:  
S:46 – tệp chương trình để chạy khi bit đầu vào thay đổi  
S:47 - số giá và số nhóm (ví dụ nếu trong giá chính nó là 000)  
S:48 – mặt nạ cho địa chỉ đầu vào (ví dụ 0000000000000100 chờ đợi 02)  
S:49 – cho khía cạnh kích hoạt tích cực =1 cho khía cạnh kích hoạt tiêu cực =0  
S:50 – số lượng của các số đếm trước khi ngắt này xuất hiện 1 = luôn lên tới 32767  
Hình 16.17 chỉ ra một ngắt điều khiển ngắt. Chương trình 2 đặt ngắt này để chạy tệp  
chương trình 3 khi đầu vào I:002/02 có 10 khía cạnh tích cực. (Ghi chú: giá trị của 0004 trong  
hệ nhị phân là 0000 0000 0000 0100 b, hay đầu vào 02). Khi đầu vào này đi tới số dương 10  
lần bit B3/100 sẽ được đặt.  
Figure 16.17 An Input Driven Interrupt – Một ngắt điều khiển đầu vào  
Khi đã kích hoạt, các công việc ngắt sẽ dừng PLC, và các logic bậc thang được diễn dịch  
một cách tức thì. Nếu PLC này đang trong giữa một quét chương trình điều này có thể gây ra  
các vấn đề. Để vượt qua điều này một chương trình có thể vô hiệu hóa các ngắt này một cách  
tạm thời bằng cách dùng các hàm UID và UIE. Hình 16.18 chỉ ra một ví dụ ở đó các ngắt bị vô  
hiệu hóa cho một hàm FAL. Chỉ logic bậc thang giữa UID và UIE sẽ bị vô hiệu hóa, dòng đầu  
tiên của logic bậc thang này có thể bị ngắt. Điều này sẽ là quan trọng nếu một chương trình  
ngắt có thể thay đổi một giá trị giữa N7:0 và N7:4. Ví dụ, một ngắt có thể xuất hiện trong khi  
dòng lệnh FAL là tại N7:7=N7:2+5. Ngắt này có thể thay đổi các giá trị của N7:1 và N7:4, và  
sau đó kết thúc. Câu lệnh FAL sau đó sẽ hoàn thành các tính toán. Nhưng, các kết quả này sẽ  
được dựa trên giá trị cũ cho N7:1 và giá trị mới cho N7:4.  
Figure 16.18 Disabling Interrupts – Vô hiệu hóa các ngắt  
16.4 CÁC HÀM VÀO RA  
16.4.1 Những lệnh vào ra tức thời  
Quét đầu vào ghi lại các đầu vào một cách bình thường trước khi quét chương trình, và  
quét đầu ra sẽ cập nhật một cách bình thường các đầu ra sau quét chương trình, như được  
chỉ ra trong hình 16.19. Các dòng lệnh đầu vào tức thời và đầu vào tức thời có thể được dùng  
để cập nhật các đầu vào hay các đầu ra trong suốt quét chương trình.  
Hoạt động bình thường của PLC là  
fast [input scan]  
nhanh [quét đầu vào]  
Các giá trị đầu vào được  
quét  
slow [ladder logic is  
checked]  
chậm [logic bậc thang  
được kiểm tra]  
Các đầu ra được cập  
nhật chỉ trong bộ nhớ,  
khi logic bậc thang được  
quét  
fast [outputs updated]  
nhanh [các đầu ra được  
cập nhật]  
Các giá trị đầu ra được  
cập nhật để phù hợp với  
các giá trị trong bộ nhớ  
Figure 16.19 Input, Program and Output Scan  
Quét đầu vào, quét chương trình và quét đầu ra  
Hình 16.20 chỉ ra một đoạn với một chương trình mà nó sẽ cập nhật từ đầu vào I:001,  
xác định một giá trị mới cho O:010/01, và cập nhật từ đầu ra O:010 một cách tức thời. Quá  
trình này có thể được nhắc lại nhiều lần trong khi quét chương trình cho phép nhanh hơn các  
lần trả lời bình thường.  
Ví dụ: Kiểm tra nhiệt độ cho một lò phản ứng hạt nhân  
I:001/03 overheat sensor – cảm biến quá nhiệt độ  
O:010/01 reactor shutdown – tắt lò phản ứng  
Các câu lệnh được thêm vào có thể cho phép logic bậc thang này kiểm tra một đầu vào  
tới hạn, và chỉnh một đầu ra tới hạn nhiều lần trong khi thực hiện logic bậc thang mà logic  
bậc thang này có thể làm quá lâu vì đảm bảo an toàn.  
Ghi chú: Khi các câu lệnh này được dùng giả thiết bình thường là mọi đầu vào và mọi  
đầu ra được cập nhật trước và sau quét chương trình là không bao giờ đúng.  
Figure 16.20 Immediate Inputs and Outputs – Các đầu vào và các đầu ra tức thời  
16.4.2 Các hàm chuyển đổi khối  
Các thẻ đầu vào và các thẻ đầu ra sử dụng một từ đơn lẻ. Việc viết một từ tới một thẻ  
đầu ra thiết đặt mọi đầu ra. Việc đọc một từ từ một thẻ đầu vào đọc mọi đầu vào. Kết quả là  
PLC này được thiết kế để gửi và nhận một từ tới các thẻ đầu vào và từ các thẻ đầu ra. Sau  
đây ta sẽ thảo luận các thẻ đầu vào và các thẻ đầu ra phức tạp hơn (như là vào ra analog -  
analog I/O) mà các thẻ này yêu cầu hơn một từ dữ liệu. Để giao tiếp nhiều từ, một từ phải  
được gửi tại một thời điểm qua nhiều quét. Để làm điều này ta sử dụng các hàm đặc biệt gọi  
là Ghi Chuyển đổi Khối - Block Transfer Write (BTW) và Đọc Chuyển đổi Khối - Block Transfer  
Read (BTR).  
Hình 16.21 chỉ ra một hàm BTW. Kiểu mô đun được định nghĩa từ một danh sách đã  
cho, trong trường hợp này là một thẻ đầu vào ví dụ (Example Output Card). Ba dòng tiếp  
theo chỉ ra vị trí thẻ là 00, 3 hay 003, số mô đun phải là không một cách bình thường (trừ ra  
khi dùng hai khe địa chỉ). Câu lệnh này là khía cạnh kích hoạt, và bộ nhớ điều khiển đặc biệt  
BT10:1 được dùng trong ví dụ này để theo dõi tiến trình hàm này (Ghi chú: bộ nhớ điều khiển  
hợp lệ đã cũng có thể được dùng, nhưng hàm này sẽ ứng xử một cách khác nhau). Câu lệnh  
này sẽ gửi 10 từ từ N9:0 tới N9:9 tới thẻ đầu ra khi A trở thành đúng. Bit cho phép BT10:1/EN  
được dùng để ngăn chặn một sự bắt đầu khác cho đến khi dòng lệnh này được kết thúc. Nếu  
dòng lệnh này được bắt đầu lại trước khi nó làm xong một lỗi sẽ xuất hiện. Độ dài và các nội  
dung của bộ nhớ này N9:0 tới N9:0 là xác định với loại của các thẻ đầu vào và các thẻ đầu ra  
được sử dụng, và sẽ được thảo luận sau cho các thẻ cụ thể. Câu lệnh này là không liên tục, có  
nghĩa rằng khi làm xong nó sẽ dừng lại. Nếu nó là liên tục thì khi việc viết trước đó đã xong thì  
việc viết tiếp theo sẽ bắt đầu.  
Figure 16.21 A BTW Function – Một hàm BTW  
Hàm BTR là tương tự với hàm BTW, trừ ra nó sẽ đọc nhiều giá trị trở lại từ một thẻ đầu  
vào. Nó lấy giá trị từ thẻ O:000, và đặt 9 giá trị trong bộ nhớ từ N9:4 tới N9:13. Hàm này là  
liên tục, vì thế khi nó hoàn thành, quá trình đọc từ thẻ ấy sẽ bắt đầu lại.  
Figure 16.22 A BTR Function – Một hàm BTR  
16.5 CÁC KỸ THUẬT THIẾT KẾ  
16.5.1 Các sơ đồ trạng thái  
Phương pháp logic khối đã được giới thiệu trong chương 8 để thực thi các sơ đồ trạng  
thái bằng cách sử dụng các khối MCR. Một sự thực thi tốt hơn của phương pháp này có thể  
được bằng cách sử dụng các chương trình con trong các tệp chương trình. Logic bậc thang  
cho mỗi trạng thái sẽ được đặt trong các chương trình con riêng biệt.  
Xem xét sơ đồ trạng thái trong hình 16.23. Sơ đồ trạng thái này chỉ ra ba trạng thái với  
bốn chuyển đổi. Có một xung đột tiềm tàng giữa các chuyển đổi A và C.  
Figure 16.23 A State Diagram – Một sơ đồ trạng thái  
Chương trình chính cho sơ đồ trạng thái này được chỉ ra trong hình 16.24. Chương trình  
này được lưu trong tệp chương trình 2 để nó được chạy một cách mặc định. Bậc đầu tiên  
trong chương trình này đặt lại các trạng thái để trạng thái quét đầu là bật, trong khi các trạng  
thái khác bị tắt. Mỗi trạng thái trong sơ đồ này được cho một giá trị trong bộ nhớ bit, vì thế  
STA=B3/0, STB=B3/1 và STC=B3/2. Logic sau sẽ gọi chương trình con cho mỗi trạng thái. Logic  
mà nó sử dụng trạng thái hiện thời được đặt trong chương trình chính. Cũng có thể được để  
đặt logic này trong các chương trình con trạng thái.  
Figure 16.24 The Main Program for the State Diagram (Program File 2)  
Chương trình chính cho sơ đồ trạng thái (tệp chương trình 2)  
Logic bậc thang cho mỗi chương trình con trạng thái được chỉ ra trong hình 16.25. Các  
khối này của logic kiểm tra các chuyển đổi và thay đổi trạng thái khi được yêu cầu. Nhớ rằng  
trạng thái STB bao gồm logic để cho trạng thái C độ ưu tiên cao hơn, bằng cách ngăn chặn A  
khi C là kích hoạt.  
Figure 16.25 Subroutines for the States – Các chương trình con cho các trạng thái  
Sự sắp đặt các chương trình con trong hình 16.24 và 16.25 có thể gặp các vấn đề với các  
điều kiện đua. Ví dụ, nếu STA là kích hoạt, và B và C đều là đúng tại cùng một thời điểm  
chương trình chính sẽ nhảy tới chương trình con 3 ở đó STB sẽ được bật, sau đó chương  
trình chính sẽ nhảy tới chương trình con 4 ở đó STC sẽ được bật. Đối với logic đầu ra STB sẽ  
không bao giờ là đã được bật. Nếu vấn đề này có thể xuất hiện, sơ đồ trạng thái này có thể  
được sửa để làm chậm lại các điều kiện đua này. Hình 16.26 chỉ ra một kỹ thuật mà nó ngăn  
chặn các điều kiện đua bằng cách ngăn chặn một chuyển đổi ra khỏi một trạng thái nào đó  
cho đến khi chuyển đổi này vào trong một trạng thái được kết thúc. Giải pháp này có thể  
không phải lúc nào cũng phù hợp.  
Figure 16.26 A Modified State Diagram to Prevent Racing  
Một sơ đồ trạng thái được sửa chữa để chống lại đua  
Một giải pháp khác là bắt buộc chuyển đổi này đợi cho một quét như được chỉ ra trong  
hình 16.27 cho trạng thái STA. Một bit chờ được dùng để chỉ ra khi một trễ của tối thiểu một  
quét đã xảy ra từ khi chuyển đổi này ra khỏi trạng thái B trở thành đúng. Bit chờ này được  
đặt bằng cách làm cho chuyển đổi thoát khỏi B là đúng. B3/0-STA sẽ tắt bit chờ B3/10 - đợi  
khi chuyển đổi tới trạng thái B3/1-STB đã xảy ra. Nếu bit chờ này không bị tắt, nó vẫn là bật  
cho đến lần tiếp theo ta trở lại trạng thái này.  
Chương trình 3 cho STA:  
Figure 16.27 Subroutines for State STA to Prevent Racing  
Các chương trình con cho trạng thái STA ngăn chặn đua  
16.6 NHỮNG VẤN ĐỀ CỦA THIẾT KẾ  
16.6.1 If-Then (Nếu-thì)  
Bài toán: Chuyển chương trình C/Java sau sang logic bậc thang:  
void main(){  
int A;  
for(A = 1; A < 10 ; A++){  
if (A >= 5) then A = add(A);  
}
}
int add(int x){  
x = x + 1;  
return x;  
}
Lời giải:  
Figure 16.28 C Program Implementation – Thực thi chương trình C  
16.6.2 Đèn giao thông  
Bài toán: Thiết kế và viết logic bậc thang cho một bộ điều khiển đèn giao thông đơn giản  
mà nó có một trình tự cố định đơn của 16 giây cho cả hai đèn xanh và 4 giây cho cả hai đèn  
vàng. Dùng một trong hai các ngăn xếp hoặc các bộ sắp xếp dãy.  
Lời giải: Bộ sắp xếp dãy là lời giải tốt nhất cho bài toán này.  
Figure 16.29 An Example Traffic Light Controller  
Một ví dụ về bộ điều khiển đèn giao thông  
Tải về để xem bản đầy đủ
pdf 31 trang baolam 18761 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ thống sản xuất tự động hóa với PLCs - Phần 16: Những hàm logic bậc thang nâng cao", để 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_16_nh.pdf