Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 PushSDK.NET Example

.NET Framework Language Architecture Hardware

Ứ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.


ZKTeco C3-400 Plus Access Control Board
Hình 1:Bo mạch điều khiển kiểm soát ra vào ZKTeco C3-400 Plus


📌 Mục lục


✨ Tổng quan chức năng & Kiến trúc

🔑 Tính năng nghiệp vụ

  • 🟢 Điều khiển Relay (độc lập hoặc hàng loạt): Mở hoặc đóng từng relay từ 1 đến 4 theo 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.

📐 Kiến trúc kỹ thuật (Event-Driven Architecture)

Dự án được thiết kế theo mô hình điều khiển hướng sự kiện:

  1. UI Layer (WinForms): Đóng vai trò lớp điều phối (Orchestration Layer).
  2. 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ị.
  3. 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.

💻 Yêu cầu môi trường

Để 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)

🔨 Hướng dẫn Build source code bằng Visual Studio 2022

  1. Mở file ExamplePushSDK.sln bằng Visual Studio 2022.
  2. Chọn Configuration: Debug hoặc Release (Platform: Any CPU hoặc x86).
  3. 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:

  1. 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.
  2. 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.

📡 Giải thích source code

1. Chương trình tạo http server tại port mặc định 8088

Đâ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);

2. Chương trình chạy singleton

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.

3. Lệnh điều khiển Relay (Cổng ra vào)

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 đến 4: Đ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..4txt_allRelay.

4. Lắng nghe tín hiệu nút bấm

Trong hàm OnBoardEvent sẽ lắng nghe 2 sự kiện là ButtonPressedCardAppear kèm theo các tham số.

5. Khởi động lại thiết bị (Restart Board)

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]);

7. Đồng bộ & Hiển thị UI qua Timer (timer1)

Để 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.

⚠️ Lưu ý

Vui lòng lưu ý khi phát triển sản phẩm thực tế (Production):

  1. 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).

About

Thư viện điều khiển board Access control ZKTeco đời mới (C3-x00 Plus)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages