一、项目简述:医学光学检测系统。
二、功能介绍:
1. 核心服务端负责任务调度、缺陷判定、多设备适配及数据管理;
2. 复检系统侧重人工复核流程,协调相机、光源等硬件,处理多坐标系转换与结果校验;
3. 检测端实现实时图像采集、缺陷识别与状态上报;
三、整体功能:
缺陷检测算法集成、硬件设备控制、实时数据通信、结果可视化、分布式存储。
一、架构与技术思路
采用分层+模块化架构,典型分层为:
视图层(UI):基于Qt Widgets实现人机交互(如视图层组件);
控制层(Control):业务逻辑处理(如判定模块);
流程层(Flow):状态机驱动流程(如流程控制模块);
数据层(Doc):配置与结果管理(如数据管理器);
公共层(Common):网络通信(高性能IO模型)、工具类(日志)。
二、核心技术思路:
接口解耦:通过回调接口(如流程回调接口)定义模块契约,避免直接依赖;
设计模式:观察者模式(UI更新)、工厂+适配器(多设备适配)、策略模式、状态机(流程控制);
异步并发:多线程流水线(数据处理三线程模型)、高性能网络模型、生产者-消费者队列。
三、技术栈
语言/框架:C++17、Qt 6.x(信号槽、UI)、STL/Boost;
网络:操作系统级IO多路复用模型(高并发通信)、libcurl(FTP)、ProtoBuf;
线程:std::thread、std::mutex、condition_variable、系统级同步原语;
数据处理:JSON/INI配置、自定义二进制协议、内存池(缺陷数据缓存)、Mysql;
硬件交互:工业相机SDK。
四、难点与解决方案
难点(1)-接口膨胀
方案:拆分“上帝类”(如主类接口曾继承40+接口),改用事件总线解耦模块通信,通过组合替代多重继承。
难点(2)-多线程同步复杂
方案:用RAII锁+条件变量实现线程安全队列;数据处理采用“获取-处理-发送”流水线,系统级同步原语协调跨线程事件。
难点(3)-内存管理风险
方案:裸指针替换为智能指针;大对象(如某些大型结构体)用内存池复用,避免频繁动态分配。
难点(4)-多协议适配复杂
方案:定义统一接口,抽象不同协议的行为;通过策略模式切换协议,消除条件分支。