Files
H100PowerManger/docs/PowerManager_UI_Design.md
T
2025-05-05 19:03:57 +08:00

277 lines
6.8 KiB
Markdown

# 上位机控制程序设计文档
## 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. 数据库设计
(之前已完成的数据库表结构...)