Biểu đồ chức năng tuần tự (SFC), cho phép PLC di chuyển qua một loạt các bước dưới sự điều khiển của chương trình.
Quá trình chuyển đổi từ bước này sang bước khác xảy ra nếu (các) điều kiện chuyển đổi được đáp ứng và mỗi bước có thể tùy chọn sản xuất một hoặc nhiều đầu ra. Như tên cho thấy, SFC thường được đại diện trong dạng sơ đồ, như được hiển thị trong ví dụ sau.
Hình 45. Một chương trình ba bước đơn giản được biểu diễn dưới dạng biểu đồ
chức năng tuần tự.
18.1 Tạo chuỗi
SFC cho phép hệ thống dựa trên trình tự được biểu diễn dưới dạng ngắn gọn. Mỗi bước trong trình tự là được hiển thị trong một hình hộp chữ nhật ở bên trái, với bước đầu tiên có đường viền kép. Điều kiện chuyển tiếp được hiển thị bên cạnh các đường ngang giữa các bước liền kề trong trình tự. Một bước hoạt động có thể tùy chọn sản xuất một hoặc nhiều đầu ra và những đầu ra này được hiển thị trong một hộp ở bên phải của bươc.
Trong trường hợp trên, hệ thống sẽ tự động bắt đầu ở bước Khởi động. Tiến trình đến Bước 1 xảy ra khi đầu vào X0 được nhấn, làm cho đầu ra Y0 được hiển thị. Với Y0 được hiển thị, việc nhấn đầu vào X1 gây ra hệ thống chuyển sang Bước 2, kích hoạt đầu ra Y1 Một bản phác thảo tương đương được đưa ra dưới đây..
#include <plcLib.h>
/* Programmable Logic Controller Library for the Arduino and Compatibles
Simple Sequence - A Three step sequence with push button control
Connections:
Input - switch connected to input X0 (Arduino pin A0)
Input - switch connected to input X1 (Arduino pin A1) Output - LED connected to output Y0 (Arduino pin 3)
Output - LED connected to output Y1 (Arduino pin 5) Software and Documentation:
http://www.electronics-micros.com/software-hardware/plclib-arduino/
Sequential Function Chart
|=========| | START | |=========| | -|-- X0 | | | | | | | STEP1 |----| Y0 | | | | | | -|-- X1 | | | | | | | STEP2 |----| Y1 | | | | |
The Start step is active when the system is switched-on or reset Press X0 to activate Step 1, displaying Y0
Next, press X1 to activate Step 2, displaying Y1
*/
// Define state names
unsigned int START = 1; // Start-up state (START = 1 to automatically start here) unsigned int STEP1 = 0; // Step 1 unsigned int STEP2 = 0; // Step 2
void setup() {
setupPLC(); // Setup inputs and outputs }
void loop() {
// Do state transitions
in(START); // Read Start-up state
andBit(X0); // AND with Step 1 transition input set(STEP1); // Activate Step 1 reset(START); // Cancel Start-up state
in(STEP1); // Read Step 1
andBit(X1); // AND with Step 2 transition input set(STEP2); // Activate Step 2 reset(STEP1); // Cancel Step 1
// Display current state in(STEP1);
out(Y0); // Send to Output 0
in(STEP2);
out(Y1); // Send to Output 1
}
Listing 36. Một chuỗi đơn giản (Source: File > Examples > plcLib
> SequentialFunctionChart > SimpleSwitchSequence)
Danh sách trên bao gồm ba phần chính:
1: Các biến được định nghĩa để đại diện cho từng bước trong chuỗi.
// Define state names
unsigned int START = 1; // Start-up state (START = 1 to automatically start here) unsigned int STEP1 = 0; // Step 1 unsigned int STEP2 = 0; // Step 2
Một bước hoạt động nếu biến được kết hợp của nó bằng 1 và không hoạt động khi bằng 0. Do đó, các điều kiện ban đầu ở power-up hoặc reset được xác định dựa trên các giá trị biến được phân bổ ở trên.
2: Các bước được kích hoạt theo một trình tự được xác định trước, khi mỗi điều kiện
chuyển tiếp xảy ra.
// Do state transitions in(START); // Read Start-up state
andBit(X0); // AND with Step 1 transition input set(STEP1); // Activate Step 1 reset(START); // Cancel Start-up state
in(STEP1); // Read Step 1
andBit(X1); // AND with Step 2 transition input set(STEP2); // Activate Step 2 reset(STEP1); // Cancel Step 1
Lưu ý rằng các điều kiện chuyển đổi được ANDed với trạng thái hiện tại, điều này đảm bảo đầu vào chuyển đổi là chỉ được chấp nhận khi bước được liên kết của nó đang hoạt động. Chương trình cũng nên hủy bước trước đó khi bước tiếp theo được kích hoạt và đạt được điều này bằng cách sử dụng lệnh chốt set () và reset (), ở trên trích xuất.
3: (Các) đầu ra được tạo ra dựa trên (các) bước hoạt động
// Display current state in(STEP1);
// Send to Output 0 in(STEP2);
Lưu ý: Chương trình đơn giản này có một đầu ra duy nhất cho mỗi bước. Một hệ thống
phức tạp hơn, chẳng hạn như bộ điều khiển đèn giao thông (xem sau), có thể yêu cầu 'ánh xạ' tùy chỉnh giữa các bước và đầu ra thường được thực hiện với các hàm Boolean OR. Ví dụ trên có thể dễ dàng được mở rộng để tạo một chuỗi lặp lại, như hình dưới đây.
Figure 46 . Một chuỗi lặp lại đơn giản (Source: File > Examples > plcLib >
SequentialFunctionChart > RepeatingSwitchSequence)
Hệ thống khởi động trong bước khởi động với đầu ra Y0 đang hoạt động. Nhấn X0 sẽ kích hoạt Bước 1, sau đó đầu vào X1, X2 và X3 gây ra tiến trình lặp lại qua các Bước 1 - 3, với đầu ra Y1 - Y3 được kích hoạt, tương ứng.
Lưu ý: Danh sách chương trình đã được bỏ qua trong phần còn lại của phần này vì lợi ích ngắn gọn, nhưng có sẵn từ phần Ví dụ trong Arduino IDE, với plcLib được cài đặt..
18.2 Phân nhánh và hội tụ
Một nhánh song song cho phép một số bước được kích hoạt đồng thời, như thể hiện trong hình sau hình minh họa.
Hình 47. Kích hoạt một số bước đồng thời với một nhánh song song (Source: File
>Examples > plcLib> SequentialFunctionChart > ParallelSwitchBranch)
Bước Bắt đầu được kích hoạt ban đầu với đầu ra Y0 được bật. Nhấn đầu vào X0 đồng thời kích hoạt
Bước 1 - 3, hiển thị đầu ra Y1 - Y3.
Figure 48. Sự hội tụ đồng thời theo một nhánh song song (Source: File > Examples >
plcLib > SequentialFunctionChart > ParallelSwitchBranchConverge)
Lưu ý: Mọi bước trước đó phải được hủy bỏ sau khi hội tụ đồng thời.
Một nhánh chọn lọc cho phép đưa ra quyết định trắc nghiệm trong đó một bước duy nhất được kích hoạt từ nhiều tùy chọn khả thi, như được hiển thị bên dưới.
Hình 49. Một nhánh chọn lọc kích hoạt một bước duy nhất từ một loạt các tùy chọn
(Source: File > Examples > plcLib > SequentialFunctionChart > SelectiveSwitchBranch)
Một nhánh chọn lọc có thể được theo sau bởi một hội tụ, như hình dưới đây.
Figure 50. Một nhánh chọn lọc theo sau là hội tụ (Source: File > Examples > plcLib
> SequentialFunctionChart > SelectiveSwitchBranchConverge)
Phần tiếp theo thảo luận về việc sử dụng độ trễ để tạo ra các trình tự dựa trên thời gian và sự phát triển của các ứng dụng dựa trên SFC đơn giản..