# 上位机控制程序设计文档 ## 1. 程序架构设计 采用MVC模式设计,主要分为以下模块: ### 1.0 系统架构图 ```mermaid graph TD A[用户界面] -->|控制指令| B[控制器] B -->|发送命令| C[通信模块] C -->|UDP协议| D[下位机] D -->|状态反馈| C C -->|解析数据| B B -->|更新状态| A B -->|记录数据| E[数据库] ``` ### 1.1 消息处理流程 1. 接收原始UDP数据 2. 根据消息ID选择解析器 3. 验证校验码 4. 解析为结构化数据 5. 触发状态更新事件 6. 存储到数据库 ### 1.1 通信模块 (Model) - 详细设计 #### 消息类型映射表 | 消息ID | 消息名称 | 处理函数 | 更新频率 | |--------|----------|----------|----------| | 0x0005 | 高压母线状态 | parse_high_vol_bus | 1Hz | | 0x0006 | 高压A母线状态 | parse_high_a_vol_bus | 1Hz | | 0x0007 | 低压主母线状态 | parse_low_main_bus | 1Hz | | 0x0008 | 低压汇流排状态 | parse_low_bus | 1Hz | #### 异常处理机制 1. 校验失败:丢弃数据并记录错误日志 2. 超时处理:3次重试后标记设备离线 3. 数据异常:触发告警并显示在界面 ```python class UDPMessageHandler: """UDP消息处理基类""" def __init__(self, ip, port): self.ip = ip self.port = port self.socket = None def connect(self): """建立UDP连接""" pass def send_message(self, msg): """发送消息""" pass def receive_message(self): """接收消息""" pass def close(self): """关闭连接""" pass class PowerMessageHandler(UDPMessageHandler): """电源管理专用消息处理器""" def __init__(self, ip, port): super().__init__(ip, port) self.message_parsers = { 0x0005: self.parse_high_vol_bus, 0x0006: self.parse_high_a_vol_bus, # 其他消息类型... } def parse_high_vol_bus(self, data): """解析高压母线消息""" pass # 其他消息解析方法... ``` ### 1.2 界面模块 (View) - 详细设计 #### 主界面布局 ```mermaid graph LR A[标题栏] --> B[状态区] B --> C[电压电流仪表盘] B --> D[断路器状态指示灯] A --> E[控制区] E --> F[电源控制按钮组] E --> G[参数设置面板] A --> H[日志区] H --> I[实时消息列表] H --> J[历史记录查询] ``` #### 组件说明 1. 电压电流仪表盘:实时显示各母线电压电流值 2. 断路器状态指示灯:绿色-闭合,红色-断开 3. 电源控制按钮组:带防误触保护(需长按3秒) 4. 参数设置面板:输入验证和范围检查 ```python class MainWindow(tk.Tk): """主窗口""" def __init__(self): super().__init__() self.title("电源管理系统") self.geometry("1200x800") self.create_widgets() def create_widgets(self): """创建界面组件""" self.status_frame = StatusFrame(self) self.control_frame = ControlFrame(self) self.log_frame = LogFrame(self) # 布局管理 self.status_frame.pack(side=tk.TOP, fill=tk.X) self.control_frame.pack(side=tk.LEFT, fill=tk.Y) self.log_frame.pack(side=tk.RIGHT, expand=True, fill=tk.BOTH) class StatusFrame(tk.Frame): """状态显示面板""" def update_status(self, data): """更新状态显示""" pass class ControlFrame(tk.Frame): """控制面板""" def create_buttons(self): """创建控制按钮""" pass ``` ### 1.3 控制器模块 (Controller) - 详细设计 #### 状态管理机制 1. 使用有限状态机(FSM)管理电源系统状态 2. 状态转换规则: - 仅当所有预检通过才允许上电 - 故障时自动进入安全状态 - 人工确认后才能复位 #### 命令处理流程 ```mermaid sequenceDiagram 用户->>界面: 点击控制按钮 界面->>控制器: 发送控制命令 控制器->>业务逻辑: 验证命令有效性 业务逻辑->>通信模块: 发送UDP指令 通信模块->>下位机: 传输控制报文 下位机-->>通信模块: 返回应答 通信模块->>控制器: 更新命令状态 控制器->>界面: 显示操作结果 控制器->>数据库: 记录操作日志 ``` ```python class PowerManagerController: """主控制器""" def __init__(self): self.message_handler = PowerMessageHandler("192.168.1.100", 5000) self.view = MainWindow() # 绑定事件 self.bind_events() def bind_events(self): """绑定UI事件""" self.view.control_frame.on_button_click = self.handle_control_command def handle_control_command(self, cmd): """处理控制命令""" pass def start(self): """启动应用程序""" self.message_handler.connect() self.view.mainloop() ``` ## 2. 接口规范 ### 2.1 模块交互架构 ```mermaid classDiagram class Communication { +send_command(cmd: dict) bool +get_status() dict +subscribe(callback: function) +on_message_received(data: bytes) } class Controller { +handle_ui_event(event: dict) +update_system_status(status: dict) +log_operation(log: dict) } class UI { +update_status(data: dict) +show_alert(level: int, msg: str) +log_message(source: str, msg: str) } Communication --> Controller : 状态更新通知 Controller --> UI : 界面更新指令 UI --> Controller : 用户操作事件 ``` ### 2.2 详细接口定义 #### 通信模块 → 控制器 ```python # 状态更新通知 { "msg_type": "status_update", "timestamp": "2025-05-04T10:20:00", "data": { "voltage": 220.5, "current": 15.2, "breaker_state": True } } # 错误通知 { "msg_type": "error", "code": 1001, "message": "校验失败" } ``` #### 控制器 → 界面 ```python # 状态显示更新 { "component": "voltage_meter", "value": 220.5, "unit": "V", "normal_range": [210, 230] } # 告警信息 { "level": 2, # 1-警告 2-错误 3-严重 "message": "A相电压过高", "suggestion": "检查A相负载" } ``` #### 界面 → 控制器 ```python # 按钮操作事件 { "event_type": "button_click", "button_id": "power_on", "timestamp": "2025-05-04T10:20:01" } # 参数设置事件 { "event_type": "param_set", "param": "voltage_limit", "value": 230, "unit": "V" } ``` ### 2.3 错误处理规范 1. 通信错误:自动重试3次后通知控制器 2. 业务逻辑错误:记录详细日志并通知界面 3. 界面错误:显示友好提示并保持最后正常状态 ## 3. 数据库设计 (之前已完成的数据库表结构...)