Khi làm việc với LabVIEW, việc gọi các hàm từ thư viện động (DLL) do C++ hoặc MATLAB biên dịch là kỹ thuật phổ biến. Dưới đây là các bước chi tiết và lưu ý quan trọng khi thực hiện.
1. Sử dụng DLL biên dịch từ MATLAB (có trình biên dịch C)
Để tạo DLL từ MATLAB, bạn cần cài đặt trình biên dịch C (ví dụ MinGW hoặc Visual Studio). Các điểm cần chú ý:
- LabVIEW không hỗ trợ kiểu
structtrực tiếp. Nếu code MATLAB có cấu trúc, hãy tách các trường riêng lẻ thành các đầu vào/đầu ra độc lập. - Ánh xạ tham số phải chính xác: kiểu dữ liệu trong MATLAB (ví dụ
double,int32) cần được đặt tương ứng trong Call Library Function Node. - Khi LabVIEW không nhận diện được DLL, dùng công cụ Dependency Walker (hoặc
dependencies) để kiểm tra các thư viện thiếu. Sao chép các file.dllcòn thiếu từ thư mục MATLAB (thường nằm trongbin/win64) vào cùng thư mục chứa DLL của bạn.
2. Tạo DLL từ C++ cho LabVIEW
Bạn chỉ cần một project C++ dạng DLL (không cần file header vì header chỉ dùng cho C++ gọi DLL). Các bước cơ bản:
- Tạo mới project → chọn Dynamic-Link Library (DLL).
- Sửa file nguồn (ví dụ
pch.cpp) và file header tương ứng (pch.h). - Khai báo hàm với
extern "C" __declspec(dllexport)để tên hàm không bị biến dạng (name mangling).
Ví dụ code C++ (đã thay đổi so với nguyên bản):
// pch.cpp
#include "pch.h"
int Multiply(int x, int y) {
int result = x * y;
// Thêm xử lý tùy chọn
return result;
}
// pch.h
#ifndef PCH_H
#define PCH_H
#include "framework.h"
extern "C" __declspec(dllexport) int Multiply(int x, int y);
#endif // PCH_H
3. Gọi DLL trong LabVIEW
Sau khi biên dịch (thường chọn Release để tối ưu tốc độ), thực hiện trong LabVIEW:
- Mở Block Diagram, kéo Call Library Function Node từ Functions Palette.
- Trong hộp thoại Configure:
- Chỉ đường dẫn tới file
.dll. - Nhập tên hàm:
Multiply(chính xác từ code). - Thiết lập các tham số đầu vào (kiểu
int32) và kiểu trả về. - Chọn Calling Convention là
stdcallhoặcCtùy vào cách biên dịch (mặc định Visual Studio dùng__stdcallnếu không khai báo).
- Chỉ đường dẫn tới file
- Nối dây dữ liệu: cần cấp mảng/kích thước phù hợp nếu hàm yêu cầu bộ đệm đầu vào. Ví dụ, nếu hàm cần một mảng double để khởi tạo, hãy tạo một mảng có kích thước chính xác và truyền vào.
- Chọn chế độ thực thi: Run in UI Thread (ổn định) hoặc Run in Any Thread (nhanh hơn nhưng dễ gây treo). Khuyên dùng UI thread cho các cuộc gọi đơn giản.
4. Tối ưu hiệu năng
Biên dịch ở chế độ Release thay vì Debug có thể cải thiện đáng kể tốc độ (ví dụ từ 1.7 giây xuống 0.35 giây). Debug mode không có tối ưu hóa và thường chậm hơn nhiều.
Lưu ý: Nếu LabVIEW báo lỗi không tìm thấy DLL, hãy kiểm tra kiến trúc bit (32/64-bit) phải khớp giữa DLL và LabVIEW. Ngoài ra, đặt DLL vào một thư mục không có ký tự đặc biệt hoặc đường dẫn quá dài.