17 Sơ đồ khối chức năng
17.3 Ứng dụng 2: Báo động bằng nhấp nháy “ Armed “ LED
Ví dụ này dựa trên ứng dụng trước đó, nhưng sử dụng bộ đếm thời gian chu kỳ để tạo ra nhấp nháy Đầu ra có trang bị khi cảnh báo đang hoạt động, nhưng không được kích hoạt. Sơ đồ mạch được hiển thị bên dưới.
Hình 44. Một cảnh báo cải tiến tạo ra một xung trên Y1 khi cảnh báo được trang bị
nhưng không được kích hoạt.
Hoạt động của cổng OR và chốt Cài đặt lại giống như cảnh báo cơ bản đã mô tả trước đây. Các bộ tạo xung (hoặc bộ định thời chu kỳ) được bật khi đầu vào Đặt lại không hoạt động (sử dụng cổng Không được kết nối với đầu vào X3) và được định cấu hình để tạo ra một xung ngắn có thời lượng 0,1 giây sau mỗi 2 giây. Đầu ra Q của bộ hẹn giờ chu kỳ được kết nối với đầu ra Được trang bị (Y1) qua cổng AND, cổng này sẽ vô hiệu hóa đầu ra Armed nếu cảnh báo chính đã được kích hoạt. Danh sách phần mềm tương đương là hiển thị bên dưới
#include <plcLib.h>
/* Programmable Logic Controller Library for the Arduino and Compatibles
Alarm with Armed Status LED - 3 input alarm controller with flashing Armed LED Connections:
Input - Sensor 0 - switch connected to input X0 (Arduino pin A0) Input - Sensor 1 - switch connected to input X1 (Arduino pin A1) Input - Sensor 3 - switch connected to input X2 (Arduino pin A2)
Input - Reset Alarm - switch connected to input X3 (Arduino pin A3) Output - Alarm Output - LED connected to output Y0 (Arduino pin 3)
Output - Armed Output - LED connected to output Y1 (Arduino pin 5) Software and Documentation:
http://www.electronics-micros.com/software-hardware/plclib-arduino/
*/
// Timer Variables
unsigned long AUX0 = 0; // Pulse low timer variable unsigned long AUX1 = 0; // Pulse high timer variable
void setup() {
setupPLC(); // Setup inputs and outputs }
void loop() {
in(X0); // Read Sensor 0
orBit(X1); // OR with Sensor 1 orBit(X2); // OR with Sensor 2
// Set input to latch taken from sensors latch(Y0, X3); // Latch command, Q = Output 0, Reset = Input 3
inNot (X3); // Enable input (0 = enable) timerCycle(AUX0, 1900, AUX1, 100); // Repeating pulse 1.9 s low, 0.1 s high. andNotBit(Y0); // Disable armed pulse if alarm is triggered
out(Y1); // Armed pulse on output Y0 }
Listing 34. Báo động với đèn LED trạng thái được trang bị (Source: File >
17.4. Tạo các khối chức năng do người dùng xác định
Bạn có thể mở rộng phần mềm plcLib bằng cách xác định một hoặc nhiều hàm dựa trên văn bản (hoặc các khối chức năng để sử dụng thuật ngữ dành riêng cho PLC) ‘cục bộ’ trong bản phác thảo, có thể hữu ích nếu một tính năng được yêu cầu không được hỗ trợ bởi phần mềm, theo tiêu chuẩn. Mọi hàm do người dufng tạo sau đó có thể được gọi từ chương trình, hoạt động giống như các lệnh cài sẵn
Lưu ý: Để tạo các lệnh tùy chỉnh của riêng bạn, bạn sẽ cần phải tự tin một cách hợp lý với C
/ C ++ lập trình và có kiến thức cơ bản về các hàm Arduino . Bạn cũng sẽ cần phải làm quen với phần Khái niệm Nâng cao và Sử dụng Biến trong Chương trình của Hướng dẫn Sử dụng. Ví dụ sau đây gọi một hàm do người 103ung xác định để tính giá trị trung bình của hai đầu vào tương tự, sử dụng kết quả để điều khiển độ sáng của đèn LED
#include <plcLib.h>
/* Programmable Logic Controller Library for the Arduino and Compatibles
Average – Create a custom function to calculate the mean of two analogue inputs Connections:
Input - Potentiometer connected to analogue input X0 (Arduino pin A0) Input - Potentiometer connected to analogue input X1 (Arduino pin A1) Output - LED connected to output Y0 (Arduino pin 3)
Software and Documentation:
http://www.electronics-micros.com/software-hardware/plclib-arduino/
*/
unsigned int reading1; unsigned int reading2;
extern int scanValue; // Link to scanValue defined in PLC library file
void setup() {
setupPLC(); // Setup inputs and outputs }
void loop() {
reading1 = inAnalog(X0); // Read analogue Input 0 reading2 = inAnalog(X1); // Read analogue Input 1
scanValue = average(reading1, reading2); // Set scanValue to average reading outPWM(Y0); // Send to Output 0 }
// User defined function to calculate // the average of two values
unsigned int average(unsigned int value1, unsigned int value2) { int result;
result = (value1 + value2) / 2; return result; }
Listing 35. Tạo khối chức năng do người dùng xác định (Source: File > Examples >
plcLib > Function Block > Average)
Bản phác thảo trên đọc lặp lại hai đầu vào tương tự, lưu trữ các giá trị này trong hai người dùng xác định biến, đọc1 và đọc2. Chúng được 'chuyển' cho hàm Average (), hàm này tìm giá trị trung bình của read1 và read2, trả kết quả về chương trình chính. Kết quả trả về này được lưu trữ trong biến scanValue, tự động cung cấp giá trị làm đầu vào cho lệnh tiếp theo trong chu kỳ quét. Định nghĩa chức năng thực tế được tìm thấy ở cuối danh sách
Note: The scanCycle variable must be initially defined as an external variable, as it is