Điều khiển mạch Relay USB bằng C# và C++

Khi bạn detect được vật thể hoặc phát hiện được vật thể có lỗi thì cần xuất tín hiệu ra đèn, còi,… Bài viết này chia sẻ phương pháp điều khiển mạch Relay USB kết nối trực tiếp vào máy tính bằng 2 ngôn ngữ là C# và C++

Đây là loại mạch bán phổ biến trên mạng với giá dao động từ 120k -> 150k. Có nhiều loại 1,2,3,4 relay, bài viết này sử dụng loại 2 relay để làm ví dụ, loại 1,2 relay không cần nguồn phụ. Phù hợp với các bài toán nhỏ, đồ án sinh viên.

Chuẩn bị

Mặc định ở Windows 10 thì Relay USB tự động cài đặt driver.

Test với chương trình build sẵn (precompile)

Vào folder USBRelay\TestApp bạn sẽ thấy các chương trình build sẵn như sau:

1. GuiApp_English.exe

Đây là chương trình build sẵn viết bằng ngôn ngữ C++ do chính hãng cung cấp. Đầu tiên là Find device để tìm relay đã kết nối với máy tính, mỗi board sẽ có 1 serial khác nhau.

Sau đó open device và open relay id tương ứng là được. Relay id bắt đầu là 0,1,…. tùy theo số lượng relay trên board

2. CommandApp_USBRelay.exe

Đây cũng là chương trình chính hãng viết bằng giao diện console. Mục đích là để các ngôn ngữ khác gọi bằng command, command có cú pháp như sau:

CommandApp_USBRelay.exe <serial> <open/close> <relay_id>

3. RelayUI.exe

Đây là chương trình được viết lại bằng ngôn ngữ C#, gọi đến code C++ thông qua project trung gian viết bằng CLR (Common Language Runtime). Bên dưới hướng dẫn cách build và giải thích source code C#

Hướng dẫn build source code RelayUI.sln

Source code có 3 solution (*.sln), mặc định các solution này chạy với mode x86. Output folder là TestApp

GuiApp_cpp.slnCommandApp_USBRelay_cpp.sln là của hãng sản xuất viết bằng ngôn ngữ C++.

RelayUI.sln được viết lại bằng ngôn ngữ C# vì dễ thiết kế giao diện và tích hợp vào các phần mềm khác. Trong solution có 3 project

1. CommandApp_USBRelay
Đây là project chính hãng, được thêm configuration là Debug_staticRelease_static để build ra file *.lib

Hiện tại project được setup để build bằng platform toolset 143, nếu các bạn sử dụng phiên bản Visual Studio cũ hơn thì cần sửa lại cho phù hợp. Sửa bằng cách ấn chuột phải vào project, chọn Properties và chọn platform toolset phù hợp.

2. RelayUI
Đây là project viết bằng C# với giao diện đơn giản, gọn nhẹ, sử dụng toolbox default của C# với mục tiêu giải thích cách sử dụng.

3. USBRelayMgr
Đây là project trung gian để C# có thể gọi qua C++, project này có output là file dll để project C# reference

Các hàm trong code được viết static vì không chứa giá trị trong class, các hàm cung cấp sẵn như sau:

  • Device^ Gets: lấy danh sách các board đã kết nối đến máy tính, trả về string serial của board
  • initial: bắt đầu gọi thư viện điều khiển board
  • Connect: kết nối tới board
  • Disconnect: ngắt kết nối
  • OpenAll: open tất cả relay trên board
  • CloseAll: close tất cả relay
  • OpenOne: open 1 relay
  • CloseOne: close 1 relay

Code C# chỉ việc gọi hàm để điều khiển, bản chất là gọi trực tiếp đến code C++ không cần thông qua command line.

Chúc các bạn thành công