Ứng dụng WinForms mẫu bằng C# minh họa tích hợp và điều khiển các thiết bị Access Control (như bo mạch ZKTeco C3-400 Plus) thông qua Push SDK.
Repo này tập trung vào lớp tích hợp (Integration Layer) và giao diện vận hành UI; SDK lõi không nằm trong source mà được tham chiếu dưới dạng thư viện assembly dựng sẵn.
Hình 1:Bo mạch điều khiển kiểm soát ra vào ZKTeco C3-400 Plus
- ✨ Tổng quan chức năng & Kiến trúc
- 📁 Cấu trúc dự án
- 💻 Yêu cầu môi trường
- 🔨 Hướng dẫn Build source code
- ⚡ Hướng dẫn chạy ứng dụng
- 🧠 Cách hoạt động của source code
⚠️ Các phụ thuộc và giới hạn cần lưu ý
- 🟢 Điều khiển Relay (độc lập hoặc hàng loạt): Mở hoặc đóng từng relay từ
1đến4theo khoảng thời gian tùy chỉnh. - 📡 Giám sát kết nối: Hiển thị trạng thái kết nối realtime và thời điểm request cuối cùng board gửi về.
- 🔘 Nhận diện nút bấm vật lý: Hiển thị trạng thái nhấn nút Exit/vật lý trên từng reader (
1-4). - 💳 Quét thẻ Realtime: Đọc và hiển thị số thẻ mới nhất quẹt trên 4 đầu đọc card.
- 🔄 Lệnh hệ thống: Gửi lệnh restart bo mạch từ xa.
Dự án được thiết kế theo mô hình điều khiển hướng sự kiện:
- UI Layer (WinForms): Đóng vai trò lớp điều phối (Orchestration Layer).
- Push SDK Layer: Xử lý toàn bộ giao tiếp mạng TCP/IP và protocol cấp thấp với thiết bị.
- Data Flow: Form chính đăng ký nhận event từ SDK ➔ Cập nhật State nội bộ theo thread safety (via
Invoke) ➔ Timer Render định kỳ trạng thái lên giao diện.
Để build và vận hành ứng dụng ổn định, hệ thống phát triển cần đáp ứng các điều kiện sau:
- Hệ điều hành: Windows 10 / Windows 11 (64-bit / 32-bit).
- IDE / Toolchain: Visual Studio 2022 hoặc MSBuild Build Tools tương đương.
- Target SDK:
.NET Framework 4.7.2 - Thư viện (Đã có sẵn trong
bin/):PushSDK.dll(SDK giao tiếp Push Protocol)TGMTcontrols.dll(Custom UI Controls)
- Mở file
ExamplePushSDK.slnbằng Visual Studio 2022. - Chọn Configuration:
DebughoặcRelease(Platform:Any CPUhoặcx86). - Output thi hành sẽ được tự động xuất ra thư mục root
/bin.
Sau khi hoàn tất quá trình build, file thực thi sẽ nằm tại:
bin/Example.exe
Chạy trực tiếp file Example.exe. Vì đây là ứng dụng WinForms tiêu chuẩn, bạn không cần truyền các tham số dòng lệnh.
Để ứng dụng hiển thị dữ liệu thực tế và điều khiển được phần cứng:
- Thiết bị Access Control (ví dụ: bo mạch ZKTeco C3-400 Plus) phải được cấp nguồn và kết nối cùng mạng LAN với máy tính.
- IP / Push Protocol trên board phải cấu hình hướng đúng về địa chỉ/port listener của ứng dụng.
Đây là port mặc định của board access control, bạn có thể thay port khác bằng cách
PushWrapper.GetInstance().Start(8088);
Chương trình tạo 1 server duy nhất để lắng nghe nhiều board gửi request cùng lúc, các board có thể cùng gửi tới 1 port duy nhất (chẳng hạn 8088) nên chương trình sẽ tạo singleton.
Bạn có thể tạo nhiều PushWrapper ở các port khác tùy nhu cầu sử dụng.
Các nút mở/đóng cổng gọi trực tiếp các phương thức SDK:
OpenDoor(serialNumber, relayIndex, seconds)CloseDoor(serialNumber, relayIndex)
Quy ước Relay Index:
- Relay
1đến4: Điều khiển từng cổng tương ứng. - Relay
0: Áp dụng đồng thời cho tất cả 4 cổng. - Thời gian giữ mở relay được đọc từ các Textbox
txt_relay1..4vàtxt_allRelay.
Trong hàm OnBoardEvent sẽ lắng nghe 2 sự kiện là ButtonPressed và CardAppear kèm theo các tham số.
Nút Restart board phát lệnh khởi động lại bo mạch từ xa thông qua service SDK:
ZkControlService.Restart(sn: SNs[0]);Để tránh giật lag UI và rủi ro race-condition do callback từ SDK chạy trên background thread, ứng dụng dùng timer1 (chu kỳ 1 giây) để render UI:
- Gọi
GetLastRequestTime()lấy thời điểm trao đổi dữ liệu cuối. - Nếu 10 giây không nhận được request ➔ Đổi trạng thái hiển thị sang Mất kết nối (Màu đỏ).
- Giữ sáng hiệu ứng trạng thái Nút bấm (
Button 1..4) trong khoảng 2 giây sau khi nhận sự kiện nhấn. - Cập nhật số thẻ đọc được vào 4 Textbox tương ứng.
Vui lòng lưu ý khi phát triển sản phẩm thực tế (Production):
- Mẫu Demo Single-Board: Mã nguồn hiện giả định kết nối 1 bo mạch duy nhất (
_selectedIndex = 0). Nếu muốn mở rộng quản lý danh sách nhiều board, cần tái cấu trúc cơ chế quản lý Serial Number (SNs).