Làm thế nào để biến Arduino thành PLC ?
Nếu các bạn có học hoặc làm về lĩnh vực có liên quan tới tự động hóa hẳn sẽ không xa lạ gì với từ PLC, một thiết bị được ứng dụng rộng rãi trong công nghiệp nhưng giá thành cao. Việc tiếp cận với những bộ PLC này đối với sinh viên thường chỉ được sử dụng ở trên phòng thí nghiệm là chính, nếu muốn tìm hiểu sâu hơn như làm ra một bộ PLC made in VN hoặc biến đổi một board nào có sẵn thành PLC thì cần làm như thế nào ? Bài viết này sẽ cung cấp cho các bạn một số kiến thức cơ bản ban đầu để thực hiện điều đó, mình sẽ chủ yếu tập trung đi vào phần mềm để tạo ra cách lập trình giống như ngôn ngữ ladder thường dùng trong PLC.
Để hô biến Arduino thành PLC ta sẽ có 2 cách:
- Đầu tiên là viết chương trình dùng LDmicro (sử dụng ngôn ngữ ladder) sau đó dùng Web chuyển đổi code cho thư viện ladder.h
- Cách 2 là sử dụng plcLIB.
LDmicro
Trước tiên ta phải tải LDmicro về trước, sau đó giải nén mở nó lên như bao chương trình khác ta sẽ có giao diện như sau
Chương trình rất dễ sử dụng, bạn chỉ cần vào mục Instruction sẽ thấy các lệnh giống như PLC để có thể thêm vào. Chúng ta thử đi vào một ví dụ đơn giản cụ thể là ấn nút điều khiển LED để mọi người có thể hình dung được rõ hơn
Trên màn hình của LDmicro ta chọn Instruction-> Insert contact hoặc ấn phím tắt là “C”, click đôi chuột vào biểu tượng xnew để đổi tên thành Button là ta đã có một nút nhấn, tiếp theo với LED thì chọn Instruction-> Insert coil hoặc ấn phím tắt là “L”, đổi tên cho Ynew thành LED, ta sẽ có kết quả như hình
Tiếp theo ta chọn Settings-> Microcontroller -> ANSI C Code để sinh code, sau đó chọn Complie -> Complie as như hình
Chọn lưu lại tại desktop với
- Save as: All Files
- Filename: ladder.cpp
Tiếp tục chọn File -> Save as và lưu lại LDmicro project với tên là ladder.ld để lưu trữ và sửa chữa về sau
Sau đó mở file ladder.cpp bằng notepad hoặc bất kỳ chương trình nào có thể xem được file này, copy toàn bộ và paste vào web, sau đó chọn generate để tạo ra file ladder.h sau đó copy toàn bộ code ở ô màu vàng vào notepad và lưu lại dưới dạng
- Save as: All Files
- Filename: ladder.h
Hiện tại mới chỉ có bộ khung, còn chân cẳng như thế nào thì chưa được cấu hình, do đó chúng ta cần chỉnh sửa file ladder.h một chút
Ở đây chúng ta sử dụng chân 12 kết nối với nút nhấn, chân 13 sẽ kết nối với LED có sẵn trên board.pinMode(12, INPUT);
pinMode(13, OUTPUT);
Code ladder.h
sau khi chỉnh sửa sẽ có dạng như sau
/* This is autogenerated code. */
/* (generated Sat, 22 Oct 2016 14:18:58 +0200 by ladder-gen v 1.0) */
#ifndef LADDER_H
#define LADDER_H
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#define BOOL boolean
#define SWORD int
#define EXTERN_EVERYTHING
#define NO_PROTOTYPES
void PlcCycle(void);
/* Configure digital I/O according to LD (call this in setup()). */
inline void PlcSetup()
{
pinMode(12, INPUT);
pinMode(13, OUTPUT);
}
/* Individual pins (this code is used in ladder.cpp) */
inline extern BOOL Read_U_b_XButton(void)
{
// TODO
return digitalRead(12);
}
inline BOOL Read_U_b_YLED(void)
{
// TODO
return digitalRead(13);
}
inline void Write_U_b_YLED(BOOL v)
{
// TODO
digitalWrite(13,v);
}
#endif
Việc tiếp theo sẽ là tạo ra một file pinmap.ini
, trong file này sẽ là mô tả tên biến tương ứng với chân của arduino
; This file contains mapping between variable name in the LD and actual
; pin number of the Arduino.
; Button on pin 12
Button = 12
; LED on pin 13
LED = 13
Tất cả những file cần thiết đã xong, giờ thì chúng ta đưa 4 file ladder.ld
, ladder.cpp
, ladder.h
, pinmap.ini
vào trong một thư mục với tên ladder
, sau đó di chuyển thư mục này tới C:\Program Files (x86)\Arduino\libraries
(ở đây mình dùng win10-64bit các bạn nên thay bằng thư mục tương ứng của máy mình).
Sau đó mở Arduino lên, chọn Sketch->Include library->ladder, điều chỉnh code như hình
Complie và nạp thử xuống arduino xem sao. Nếu hiện thông báo Done compiling hoặc Done uploading là thành công rồi. Giờ thì Arduino của bạn đã giống với 1 bộ PLC rồi đấy.
Lưu ý: Việc tạo project mới và các file có liên quan luôn phải có tên là ladder, nếu muốn sử dụng thì phải xóa bỏ hoặc backup lại thư mục ladder cũ rồi chép thư mục ladder mới vào đúng đường dẫn của Arduino.
Nhìn thì có vẻ hơi phức tạp, nhưng thực ra lại đỡ được rất nhiều công đoạn bên dưới, chúng ta chỉ cần quan tâm tới lập trình ladder, sau đó cấu hình lại một chút chân cẳng, còn lại thì đã có Arduino lo, tuy nhiên không vì thế mà phủ nhận việc phải có một chút kiến thức cơ bản để biết cách cấu hình chân IO cho Arduino
Nếu muốn tốt hơn thì ta có thể chỉnh sửa lại code để quá trình sinh code, copy, chuyển code, lưu file thành một quá trình tự động thì sẽ tốt hơn rất nhiều, người lập trình chỉ việc lập trình ladder, ấn nút sinh code sẽ có chương trình để nạp vào arduino, một ý tưởng không tồi phải ko các bạn?
plcLIB
Khi nói đến plcLIB chắc mình phải thốt lên rằng “Ơn giời cậu đây rồi”, ở phương án sử dụng LDMicro thì qua nhiều bước nhiêu khê bao nhiêu thì với plcLIB có thể thuận lợi hơn được bất nhiêu. Chỉ việc copy đưa vào thư mục library của Arduino sau đó sử dụng.
Với việc cấu hình chân cẳng, hiện tại plcLIB đã thực hiện hết cho chúng ta, việc còn lại chỉ là đọc và xem người ta cấu hình chân nào làm chức năng nào, tiếp theo là có rất nhiều các ví dụ để sử dụng và tham khảo như IO, bàn phím, điều khiển động cơ, delay, các phép toán AND, OR…. Dưới đây là một ví dụ minh họa
#include <plcLib.h>
/* Programmable Logic Controller Library for the Arduino and Compatibles
PWM (Pulse Width Modulation) - Analogue control of a PWM output
Connections:
Input - potentiometer connected to input X0 (Arduino pin A0 / Tinkerkit pin I0)
Output - LED connected to output Y0 (Arduino pin 3 / Tinkerkit O5)
Software and Documentation:
http://www.electronics-micros.com/software-hardware/plclib-arduino/
*/
void setup() {
setupPLC(); // Setup inputs and outputs
}
void loop() {
inAnalog(X0); // Read Analogue Input 0
outPWM(Y0); // Send to Output 0 as PWM waveform
}
Mình sẽ thử lại các ví dụ và update thêm cho các bạn ở các bài sau.
Ta có thể nhận thấy khi dùng thư viện plcLIB này thì hoàn toàn là lập trình C/C++ thuần túy, không liên quan gì tới ngôn ngữ ladder cả, đúng là hơi tiếc, nếu có sự kết hợp của cả MicroLD và plcLIB như mình đã nói ở trên thì thật tuyệt.
Thêm một tin không vui nữa là thư viên này hiện nay đã hết được hỗ trợ và không còn cập nhật nữa. Không sao cả, chắc chắn một điều là thư viện này còn rất nhiều chỗ chưa ổn và cần phải sửa đổi, chúng ta có thể nghiên cứu và biết đâu lại một phiên bản của VN thì sao ? Mình đã thấy có indruino.com đã có phần cứng về cái này, nếu có ý tưởng mới cần hợp tác hoặc mua phần cứng bạn có thể liên hệ để cùng phối hợp, còn 1 số team khác chắc cũng có làm nhưng mình không thấy nên cũng không thể giới thiệu thêm được.
Còn ở nước ngoài thì cũng có khá nhiều sản phẩm thương mại như của industrialshields hoặc controllino để các bạn có thể tham khảo và học hỏi thêm. Cá nhân mình vẫn ủng hộ và mong có một sản phẩm Việt chất lượng hơn.
Bạn có thể tải project của LDMicro và thư viện plcLIB tại plcLib+LDMicro
Kết
Trong khuôn khổ bài viết mình chỉ tập trung đi vào giới thiệu một số bước cơ bản phần mềm, đó chỉ là 1 vấn đề nhỏ trong việc biến Arduino thành PLC, để sử dụng được nó trong công nghiệp cũng như đảm bảo được tính ổn định thì còn rất nhiều vấn đề khác mà bạn cần phải nghiên cứu. Hi vọng nó giúp ích được cho các bạn đang muốn tìm hiểu về cái này.