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