diff --git a/README.md b/README.md new file mode 100644 index 0000000..01c0af7 --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# 腾智微丝产线包装系统 + +## 项目架构分析 + +这是一个基于PySide6(Qt for Python)开发的腾智微丝产线包装系统,采用了典型的MVC(模型-视图-控制器)架构: + +1. **模型层(Model)**: + - 使用DAO(数据访问对象)模式访问数据库 + - 支持多种数据库(SQLite、PostgreSQL、MySQL) + - 主要数据表包括用户表、检验配置表、检验数据表、电力消耗表等 + +2. **视图层(View)**: + - 使用PySide6构建UI界面 + - 主要界面包括登录界面、主窗口、设置界面等 + - 采用分离的UI类设计,如LoginUI、MainWindowUI等 + +3. **控制器层(Controller)**: + - 主要控制逻辑在widgets目录下的类中实现 + - 使用信号槽机制进行组件间通信 + - 采用单例模式管理全局资源 + +4. **工具层(Utils)**: + - 提供各种工具类,如配置加载器、Modbus通信、串口管理等 + - 采用单例模式确保资源共享 + +## 技术栈 + +1. **前端技术**: + - PySide6(Qt for Python)用于GUI开发 + - 使用Qt的信号槽机制实现组件间通信 + +2. **后端技术**: + - Python作为主要开发语言 + - SQLite作为默认数据库,支持PostgreSQL和MySQL + - Modbus协议用于与设备通信 + - 多线程处理耗时操作 + +3. **通信技术**: + - Modbus TCP用于与PLC设备通信 + - 串口通信用于与称重设备、条码扫描器等外设通信 + +4. **设计模式**: + - 单例模式(配置加载器、监控器等) + - DAO模式(数据访问) + - 观察者模式(信号槽) + - 工厂模式(数据库连接) + +## 代码结构 + +1. **主要目录**: + - `widgets/`:包含所有窗口控制器类 + - `ui/`:包含所有UI定义类 + - `utils/`:包含工具类 + - `dao/`:包含数据访问对象 + - `db/`:包含数据库文件 + - `config/`:包含配置文件 + - `logs/`:包含日志文件 + +2. **核心文件**: + - `main.py`:程序入口点 + - `widgets/login_widget.py`:登录窗口控制器 + - `widgets/main_window.py`:主窗口控制器 + - `utils/config_loader.py`:配置加载器 + - `utils/modbus_utils.py`:Modbus通信工具 + - `utils/sql_utils.py`:数据库工具 + +3. **应用流程**: + - 程序启动后初始化日志系统 + - 加载配置文件 + - 显示登录窗口 + - 验证登录后显示主窗口 + - 主窗口中进行产线包装系统的操作 + +## 功能特点 + +1. **用户认证**:支持用户登录和权限控制 +2. **产线监控**:实时监控产线状态、电力消耗等 +3. **数据采集**:采集称重数据、检验数据等 +4. **报表生成**:生成各类统计报表 +5. **设备通信**:与PLC、称重设备等通信 +6. **多模式支持**:支持单机模式和接口模式 + +## 运行环境 + +- 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. 运行程序: + ``` + python main.py + ``` + +## 开发与扩展 + +系统采用模块化设计,可以方便地进行功能扩展: + +1. 添加新的数据源:扩展`utils/sql_utils.py` +2. 添加新的设备通信协议:参考`utils/modbus_utils.py` +3. 添加新的UI界面:在`ui/`目录下创建新的UI类,在`widgets/`目录下创建对应的控制器类 \ No newline at end of file diff --git a/widgets/main_window.py b/widgets/main_window.py index bb7c1a2..848452b 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -24,9 +24,8 @@ from utils.register_handlers import ( from utils.electricity_monitor import ElectricityHandler # 导入PySide6 from PySide6.QtWidgets import ( - QWidget, QMessageBox, QTableWidgetItem, QStackedWidget, QLabel, QMainWindow, - QTableWidget, QMenu, QComboBox, QFormLayout, QDialog, QVBoxLayout, QHBoxLayout, QPushButton, - QStatusBar, QSplitter, QFrame, QHeaderView + QWidget, QMessageBox, QTableWidgetItem, QStackedWidget, QLabel, + QTableWidget, QMenu, QComboBox, QFormLayout, QDialog, QVBoxLayout, ) from PySide6.QtCore import Qt, QTimer, Slot, Signal from PySide6.QtGui import QBrush, QColor @@ -447,13 +446,9 @@ class MainWindow(MainWindowUI): modbus = ModbusUtils() client = modbus.get_client() try: - # 上料 D2 寄存器写入 1, D0 寄存器写入拆垛层数 + # 上料 D0 给到层数,等待点击开始后,进行上料 success0 = modbus.write_register_until_success(client, 0, self._current_stow_num) - success2 = modbus.write_register_until_success(client, 2, 1) - success3 = modbus.write_register_until_success(client, 3, 1) - - # 上料 D2 寄存器写入 1, D0 寄存器写入拆垛层数 - if success0 and success2 and success3: + if success0: # 创建状态标签并显示在右上角 self.show_operation_status("拆垛层数", "input", str(self._current_stow_num)) else: @@ -1958,6 +1953,8 @@ class MainWindow(MainWindowUI): if status == 1: modbus = ModbusUtils() client = modbus.get_client() + # 睡 0.5 秒,用于延缓modbus 监听 + time.sleep(0.5) modbus.write_register_until_success(client, 2, 0) modbus.close_client(client)