186 lines
6.8 KiB
Markdown
186 lines
6.8 KiB
Markdown
# 腾智微丝产线包装系统
|
||
|
||
## 项目架构分析
|
||
|
||
这是一个基于PySide6(Qt for Python)开发的腾智微丝产线包装系统,采用了典型的MVC(模型-视图-控制器)架构:
|
||
|
||
1. **模型层(Model)**:
|
||
- 使用DAO(数据访问对象)模式访问数据库
|
||
- 支持多种数据库(SQLite、PostgreSQL、MySQL)
|
||
- 主要数据表包括用户表、检验配置表、检验数据表、电力消耗表等
|
||
|
||
2. **视图层(View)**:
|
||
- 使用PySide6构建UI界面
|
||
- 主要界面包括登录界面、主窗口、设置界面等
|
||
- 采用分离的UI类设计,如LoginUI、MainWindowUI等
|
||
|
||
3. **控制器层(Controller)**:
|
||
- 主要控制逻辑在widgets目录下的类中实现
|
||
- 使用信号槽机制进行组件间通信
|
||
- 采用单例模式管理全局资源
|
||
|
||
4. **工具层(Utils)**:
|
||
- 提供各种工具类,如配置加载器、Modbus通信、串口管理等
|
||
- 采用单例模式确保资源共享
|
||
|
||
5. **硬件集成层**:
|
||
- **相机子系统**:基于海康威视SDK进行集成
|
||
- 相机管理器(CameraManager):单例模式,管理相机生命周期
|
||
- 相机显示组件(CameraDisplayWidget):用于实时显示相机画面
|
||
- 相机设置控制器(CameraSettingsWidget):管理相机参数设置
|
||
- **串口通信**:与称重设备、扫描器等外设通信
|
||
- **Modbus通信**:与PLC设备通信
|
||
|
||
## 技术栈
|
||
|
||
1. **前端技术**:
|
||
- PySide6(Qt for Python)用于GUI开发
|
||
- 使用Qt的信号槽机制实现组件间通信
|
||
|
||
2. **后端技术**:
|
||
- Python作为主要开发语言
|
||
- SQLite作为默认数据库,支持PostgreSQL和MySQL
|
||
- Modbus协议用于与设备通信
|
||
- 多线程处理耗时操作
|
||
|
||
3. **通信技术**:
|
||
- Modbus TCP用于与PLC设备通信
|
||
- 串口通信用于与称重设备、条码扫描器等外设通信
|
||
- 海康威视SDK用于相机图像采集和处理
|
||
|
||
4. **设计模式**:
|
||
- 单例模式(配置加载器、监控器、相机管理器等)
|
||
- DAO模式(数据访问)
|
||
- 观察者模式(信号槽)
|
||
- 工厂模式(数据库连接)
|
||
|
||
## 代码结构
|
||
|
||
1. **主要目录**:
|
||
- `widgets/`:包含所有窗口控制器类
|
||
- `ui/`:包含所有UI定义类
|
||
- `utils/`:包含工具类
|
||
- `dao/`:包含数据访问对象
|
||
- `db/`:包含数据库文件
|
||
- `config/`:包含配置文件
|
||
- `logs/`:包含日志文件
|
||
- `camera/`:包含相机模块和SDK接口类
|
||
|
||
2. **核心文件**:
|
||
- `main.py`:程序入口点
|
||
- `widgets/login_widget.py`:登录窗口控制器
|
||
- `widgets/main_window.py`:主窗口控制器
|
||
- `widgets/camera_manager.py`:相机管理器
|
||
- `widgets/camera_display_widget.py`:相机显示组件
|
||
- `widgets/camera_settings_widget.py`:相机设置控制器
|
||
- `utils/config_loader.py`:配置加载器
|
||
- `utils/modbus_utils.py`:Modbus通信工具
|
||
- `utils/sql_utils.py`:数据库工具
|
||
- `camera/CamOperation_class.py`:相机操作类
|
||
- `camera/MvCameraControl_class.py`:海康威视相机控制SDK
|
||
- `utils/local_image_player.py`:本地图像序列播放器
|
||
|
||
3. **应用流程**:
|
||
- 程序启动后初始化日志系统和配置
|
||
- 创建和初始化各子系统(数据库、电力监控器等)
|
||
- 显示登录窗口
|
||
- 验证登录后显示主窗口
|
||
- 主窗口中进行产线包装系统的操作,包括:
|
||
- 产品检测和包装
|
||
- 实时相机监控
|
||
- 数据采集和报表生成
|
||
- 设备状态监控和控制
|
||
|
||
## 相机子系统详解
|
||
|
||
1. **架构设计**:
|
||
- 采用分层设计,将相机SDK封装在底层,提供简洁API供上层使用
|
||
- 相机管理采用单例模式,确保全局只有一个相机实例
|
||
- 使用信号槽机制实现相机状态与UI的松耦合通信
|
||
|
||
2. **核心组件**:
|
||
- `CameraManager`:单例类,负责相机设备枚举、开关、参数设置等
|
||
- `CameraDisplayWidget`:显示组件,负责在UI中显示相机画面
|
||
- `CameraSettingsWidget`:设置控制器,负责参数调整界面交互
|
||
- `CamOperation_class`:相机操作封装类,直接与海康SDK交互
|
||
- `LocalImagePlayer`:本地图像序列播放器,提供基于本地图片序列的视频模拟功能
|
||
|
||
3. **工作流程**:
|
||
- 系统启动时初始化相机SDK
|
||
- 用户界面显示时枚举并连接可用的相机设备
|
||
- 启动相机图像采集并在UI中显示
|
||
- 用户可通过设置界面调整相机参数(曝光、增益、帧率等)
|
||
- 系统关闭时正确释放相机资源
|
||
|
||
4. **配置管理**:
|
||
- 相机参数保存在`config/app_config.json`的`camera`部分
|
||
- 包括默认曝光时间、增益、帧率等参数
|
||
- 用户调整的参数可保存至配置文件持久化
|
||
|
||
5. **本地图像模式**:
|
||
- 支持本地图像序列播放,可用于模拟相机实时画面
|
||
- 用户可选择包含图像序列的文件夹,系统自动按时间顺序播放
|
||
- 可调整播放帧率、设置循环播放等参数
|
||
- 适用于开发测试和演示场景,无需连接实际相机设备
|
||
- 配置参数保存在`config/app_config.json`的`camera.local_mode`部分
|
||
|
||
## 功能特点
|
||
|
||
1. **用户认证**:支持用户登录和权限控制
|
||
2. **产线监控**:实时监控产线状态、电力消耗等
|
||
3. **数据采集**:采集称重数据、检验数据等
|
||
4. **相机集成**:支持实时图像采集、显示和参数调整
|
||
5. **报表生成**:生成各类统计报表
|
||
6. **设备通信**:与PLC、称重设备等通信
|
||
7. **多模式支持**:支持单机模式和接口模式
|
||
|
||
## 运行环境
|
||
|
||
- Python 3.7+
|
||
- PySide6
|
||
- 支持的数据库:SQLite、PostgreSQL、MySQL
|
||
- 操作系统:Windows、macOS、Linux
|
||
|
||
## 安装与配置
|
||
|
||
1. 安装依赖:
|
||
```
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
2. 配置数据库:
|
||
- 默认使用SQLite数据库,位于`db/jtDB.db`
|
||
- 可在`config/app_config.json`中配置其他数据库
|
||
|
||
3. 配置相机:
|
||
- 在`config/app_config.json`中的`camera`部分调整相机参数
|
||
- 默认参数:
|
||
```json
|
||
"camera": {
|
||
"enabled": false,
|
||
"default_exposure": 20000,
|
||
"default_gain": 10,
|
||
"default_framerate": 30,
|
||
"local_mode": {
|
||
"enabled": false,
|
||
"folder_path": "",
|
||
"framerate": 15,
|
||
"loop": true,
|
||
"file_patterns": [".jpg", ".jpeg", ".png", ".bmp"]
|
||
}
|
||
}
|
||
```
|
||
|
||
4. 运行程序:
|
||
```
|
||
python main.py
|
||
```
|
||
|
||
## 开发与扩展
|
||
|
||
系统采用模块化设计,可以方便地进行功能扩展:
|
||
|
||
1. 添加新的数据源:扩展`utils/sql_utils.py`
|
||
2. 添加新的设备通信协议:参考`utils/modbus_utils.py`
|
||
3. 添加新的UI界面:在`ui/`目录下创建新的UI类,在`widgets/`目录下创建对应的控制器类
|
||
4. 扩展相机功能:修改`widgets/camera_manager.py`和`camera/CamOperation_class.py` |