diff --git a/QUICK_START.md b/QUICK_START.md deleted file mode 100644 index 6a9bffd..0000000 --- a/QUICK_START.md +++ /dev/null @@ -1,121 +0,0 @@ -# 🚀 5分钟快速上手指南 - -本指南帮助您快速配置并运行自动控制原理AI+数智平台。 - -## ⚡ 快速开始(3 步完成) - -### 步骤 1:安装依赖 - -```bash -pip install gradio numpy control matplotlib aiohttp -``` - -### 步骤 2:配置 API - -编辑 `app.py` 第 24 行,填入您的 DeepSeek API 密钥: - -```python -API_KEY = "sk-your-api-key-here" # 替换为您的密钥 -``` - -**获取密钥**:访问 https://platform.deepseek.com/api_keys - -### 步骤 3:运行应用 - -```bash -python app.py -``` - -浏览器会自动打开 http://localhost:7860 - ---- - -## 🎯 第一次使用 - -### 试试时域分析 - -1. 在"时域分析"标签页 -2. 输入传递函数: - - 分子:`1` - - 分母:`1,2,1` -3. 点击"开始分析" -4. 观察阶跃响应曲线和性能指标 - -### 试试 AI 问答 - -1. 切换到"智能问答"标签页 -2. 输入问题:`什么是 PID 控制器?` -3. 点击"发送" -4. AI 会实时回复并渲染数学公式 - ---- - -## 💡 常用传递函数示例 - -### 一阶系统 -``` -分子: 1 -分母: 1,1 -G(s) = 1/(s+1) -``` - -### 二阶欠阻尼系统 -``` -分子: 4 -分母: 1,2,4 -G(s) = 4/(s²+2s+4) -阻尼比 ζ = 0.5,超调量约 16% -``` - -### 三阶系统 -``` -分子: 1 -分母: 1,6,11,6 -G(s) = 1/[(s+1)(s+2)(s+3)] -``` - ---- - -## 🔧 故障排查 - -### 问题 1:模块导入错误 - -``` -ModuleNotFoundError: No module named 'gradio' -``` - -**解决**:重新安装依赖 -```bash -pip install -r requirements.txt -``` - -### 问题 2:API 密钥错误 - -``` -❌ 错误:API_KEY 未配置 -``` - -**解决**:确认 `app.py` 第 24 行已填入有效密钥 - -### 问题 3:中文乱码 - -**解决**:确保终端支持 UTF-8 编码 -```powershell -# Windows PowerShell -chcp 65001 -``` - ---- - -## 📚 下一步 - -- 阅读完整 [README.md](README.md) -- 查看 [API 配置详细说明](API_CONFIG.md) -- 探索四大功能模块 -- 调整系统增益观察变化 - ---- - -**需要帮助?** 查看 [常见问题](API_CONFIG.md#常见问题) 或提交 Issue。 - -祝学习愉快!🎓 diff --git a/README_MODULE.md b/README_MODULE.md new file mode 100644 index 0000000..a3998ff --- /dev/null +++ b/README_MODULE.md @@ -0,0 +1,284 @@ +# 自动控制原理AI+数智平台 - 模块化架构说明 + +## 📁 项目结构 + +``` +AutoControl/ +├── app.py # 原始完整程序(已废弃,保留作参考) +├── app_main.py # 新的主程序入口 ⭐ 使用这个启动 +├── config.py # 配置文件:API密钥、系统参数 +├── utils.py # 工具函数:解析、验证、格式化 +├── analysis.py # 分析功能:时域、频域、根轨迹 +├── ai_chat.py # AI聊天:DeepSeek/Gemini接口 +├── ui_styles.py # CSS样式:480+行现代化样式 +├── ui_components.py # UI组件:横幅、知识卡片HTML +└── README_MODULE.md # 本文件 +``` + +## 🚀 快速开始 + +### 方法1:使用新的模块化主程序(推荐) + +```bash +python app_main.py +``` + +### 方法2:使用原始完整程序 + +```bash +python app.py +``` + +## 📦 模块说明 + +### 1. `config.py` - 配置管理 +**功能:** 集中管理所有配置常量 + +**内容:** +- `API_KEY`: DeepSeek API密钥 +- `API_BASE_URL`: API基础URL +- `API_MODEL`: 使用的模型名称 +- `DEFAULT_NUM_COEFFS`: 默认分子系数 +- `DEFAULT_DEN_COEFFS`: 默认分母系数 +- `TIME_SPAN`: 时间范围设置 +- `SERVER_PORT`: 服务器端口 +- `PROJECT_INFO`: 项目信息字典 + +**修改配置:** +```python +# 在 config.py 中修改 +API_KEY = "你的API密钥" +SERVER_PORT = 8080 # 更改端口 +``` + +### 2. `utils.py` - 工具函数库 +**功能:** 提供数据处理和格式化工具 + +**主要函数:** +- `coeffs_to_latex(coeffs, var='s')`: 系数转LaTeX多项式 +- `parse_coefficients(coeffs_str)`: 解析系数字符串 +- `validate_transfer_function(num, den)`: 验证传递函数 +- `format_complex_number(c)`: 格式化复数显示 + +**使用示例:** +```python +from utils import parse_coefficients, validate_transfer_function + +num = parse_coefficients("1,2,3") +den = parse_coefficients("1,4,5,2") +is_valid, msg = validate_transfer_function(num, den) +``` + +### 3. `analysis.py` - 核心分析功能 +**功能:** 控制系统的时域、频域、根轨迹分析 + +**主要函数:** +- `display_transfer_function(num_str, den_str)`: 显示传递函数 +- `time_domain_analysis(num_str, den_str)`: 时域分析(阶跃/脉冲响应) +- `frequency_domain_analysis(num_str, den_str, K)`: 频域分析(Bode/Nyquist图) +- `root_locus_analysis(num_str, den_str, log_k)`: 根轨迹分析 + +**返回值:** +- 图表:matplotlib Figure对象 +- 文本:性能指标、极点位置等 + +### 4. `ai_chat.py` - AI聊天功能 +**功能:** 与DeepSeek/Gemini大模型交互 + +**主要函数:** +- `chat_with_ai(message, history)`: 异步聊天函数(支持流式输出) + +**特点:** +- 支持对话历史记录 +- 流式响应(实时显示) +- 自动错误处理 +- Emoji状态指示 + +**系统提示词:** +``` +你是一位精通自动控制原理的专家教授,擅长用通俗易懂的方式解释复杂概念。 +回答要准确、专业,适当使用LaTeX公式,并举例说明。 +``` + +### 5. `ui_styles.py` - CSS样式定义 +**功能:** 提供480+行现代化CSS样式 + +**函数:** +- `get_custom_css()`: 返回完整CSS字符串 + +**样式特点:** +- 渐变背景和阴影效果 +- 动画过渡效果 +- 响应式设计(移动端适配) +- 暗色主题支持 +- Emoji彩色显示修复 + +### 6. `ui_components.py` - UI组件库 +**功能:** 提供HTML组件和知识卡片 + +**主要函数:** +- `get_main_title()`: 主标题 +- `get_subtitle()`: 副标题 +- `get_project_info_banner()`: 项目信息横幅 +- `get_tab_tip(tab_name)`: 标签页提示 +- `get_time_domain_knowledge_card()`: 时域知识卡片 +- `get_frequency_domain_knowledge_card()`: 频域知识卡片 +- `get_root_locus_knowledge_card()`: 根轨迹知识卡片 +- `get_ai_example_questions()`: AI示例问题 + +### 7. `app_main.py` - 主程序入口 +**功能:** 简化的主程序,组装所有模块 + +**代码行数:** ~350行(相比原来的2134行减少84%) + +**结构:** +```python +# 导入所有模块 +from config import * +from utils import * +from analysis import * +from ai_chat import * +from ui_styles import * +from ui_components import * + +# 使用Gradio构建UI +with gr.Blocks(css=get_custom_css()) as demo: + # UI布局 + # 事件绑定 + pass + +# 启动服务器 +demo.launch() +``` + +## 🎯 模块化的优势 + +### 1. 易于维护 +- 每个模块职责单一,代码清晰 +- 修改某个功能只需编辑对应模块 +- 减少代码重复,提高复用性 + +### 2. 易于扩展 +- 添加新功能:创建新模块或在现有模块添加函数 +- 添加新UI:在`ui_components.py`添加新函数 +- 添加新样式:在`ui_styles.py`修改CSS + +### 3. 易于调试 +- 模块独立,可单独测试 +- 错误定位更快速 +- 日志和异常处理更精确 + +### 4. 团队协作友好 +- 不同开发者可并行工作在不同模块 +- 代码冲突减少 +- 代码审查更高效 + +## 📝 常见修改场景 + +### 场景1:更改API密钥 +**文件:** `config.py` +```python +API_KEY = "sk-新的密钥" +``` + +### 场景2:添加新的分析功能 +**文件:** `analysis.py` +```python +def new_analysis_function(num_str, den_str): + """新的分析功能""" + # 实现代码 + return figure, metrics +``` + +**文件:** `app_main.py`(添加UI和事件绑定) +```python +from analysis import new_analysis_function + +# 添加UI组件 +new_button = gr.Button("新分析") +new_output = gr.Plot() + +# 绑定事件 +new_button.click(fn=new_analysis_function, inputs=[...], outputs=[...]) +``` + +### 场景3:修改知识卡片内容 +**文件:** `ui_components.py` +```python +def get_time_domain_knowledge_card(): + return """ +
交互式控制系统分析与设计工具 | 时域·频域·根轨迹·AI问答
") +with gr.Blocks(title="自动控制原理学习网站 - AI+数智平台", css=custom_css) as demo: + # 主标题 - 带动画效果 + gr.HTML("✨ 交互式控制系统分析与设计工具 | 时域·频域·根轨迹·AI问答 ✨
") - # 项目信息和版权声明 + # 项目信息横幅 - 优化对比度和可读性 gr.HTML(""" -- 📚 课程:《自动控制理论》 | - 👨🏫 负责人:魏鹏飞 | - 📧 联系:pengfeiwei@nwpu.edu.cn -
-- 🎓 西北工业大学2025年校级本科生建设项目资助 | Northwestern Polytechnical University -
+ """) with gr.Tabs() as tabs: - with gr.TabItem("时域分析 (Time Domain)", id=0): + with gr.TabItem("⏱️ 时域分析 (Time Domain)", id=0): + gr.HTML(""" +对于一个典型的二阶系统,其标准传递函数形式为:
G(s) = ωn² / (s² + 2ζωns + ωn²)
@@ -577,8 +1152,14 @@ with gr.Blocks(title="自动控制原理学习网站", css=custom_css) as demo: +其中 Kp, Kv, Ka 分别为位置、速度、加速度误差常数
标准传递函数:
+G(s) = K / (τs + 1)
+ +参数说明:
+阶跃响应:
+y(t) = K(1 - e-t/τ)
+ +💡 关键时间点:
+特点:一阶系统无超调,响应单调上升
+系统类型分类:
+根据开环传递函数原点处的极点数(积分环节数)v 分类:
+ +| 类型 | +Kp | +Kv | +Ka | +
|---|---|---|---|
| 0 型 | +有限值 | +0 | +0 | +
| I 型 | +∞ | +有限值 | +0 | +
| II 型 | +∞ | +∞ | +有限值 | +
稳态误差计算:
+⚡ 工程结论:
+系统型别越高,跟踪能力越强,但稳定性可能降低。实际系统常用 I 型或 II 型。
+主导极点概念:
+距虚轴最近的极点对系统动态响应起主导作用,其他极点影响较小。
+ +判断条件:
+零点的影响:
+🔺 左半平面零点(最小相位系统):
+🔻 右半平面零点(非最小相位系统):
+组成:幅频特性图 + 相频特性图
+💡 优点:
+定义:开环频率特性 G(jω)H(jω) 在复平面上的轨迹图
+🎯 奈奎斯特稳定判据:
+闭环系统稳定的充要条件:当 ω 从 -∞ 变化到 +∞ 时,Nyquist曲线逆时针包围(-1, j0)点的圈数 N 等于开环系统右半平面极点数 P。
+Z = P - N
+其中 Z 为闭环系统右半平面极点数
+闭环频率响应的幅值下降到-3dB时的频率。BW 越大,系统响应越快。
@@ -731,20 +1486,117 @@ with gr.Blocks(title="自动控制原理学习网站", css=custom_css) as demo:闭环频率响应的最大幅值。Mr 越小,系统阻尼越好。通常要求 Mr < 1.3 ~ 1.5。
• 幅频:20logK (dB) - 水平直线
+ • 相频:0° - 水平直线
• 幅频:-20dB/dec 斜率的直线
+ • 相频:-90° - 水平直线
• 幅频:+20dB/dec 斜率的直线
+ • 相频:+90° - 水平直线
• 转折频率:ω = 1/T
+ • 幅频:低频0dB,高频-20dB/dec
+ • 相频:从0°下降到-90°
• 转折频率:ω = 1/T
+ • 幅频:低频0dB,高频+20dB/dec
+ • 相频:从0°上升到+90°
• 转折频率:ω = ωn
+ • 幅频:低频0dB,高频-40dB/dec
+ • 相频:从0°下降到-180°
+ • 谐振峰值与阻尼比 ζ 相关
定义:传递函数的所有零点和极点都在左半s平面的系统。
+ +✅ 特点:
+定义:传递函数在右半s平面有零点或极点的系统。
+ +⚠️ 特点:
+特点:幅频特性为常数(|G(jω)| = 1),只改变相频特性。
+应用:相位校正、延时补偿
+| 规则 | +内容 | +
|---|---|
| 起点 | +K=0,位于开环极点 | +
| 终点 | +K→∞,位于开环零点或无穷远 | +
| 分支数 | +等于 max(n, m) | +
| 实轴段 | +右侧零极点总数为奇数的区段 | +
| 渐近线数 | +n - m 条 | +
| 渐近线角度 | +φa = (2k+1)·180°/(n-m) | +
| 渐近线交点 | +σa = (Σp - Σz)/(n-m) | +
| 分离/会合点 | +dK/ds = 0 的实根 | +
| 与虚轴交点 | +用劳斯判据或令 s=jω 求解 | +
| 出射角/入射角 | +复数极点/零点处的根轨迹切线角度 | +
📝 绘制步骤:
+定义:当参数 K 从 0 变化到 -∞ 时,闭环极点的轨迹。
+ +相角条件:
++ ∠G(s0)H(s0) = 2k·180° (k = 0, ±1, ±2, ...) +
+ +⚠️ 与常规根轨迹的区别:
+应用场景:
+稳定性分析:
+✅ 稳定条件:所有闭环极点都在左半 s 平面
+动态性能分析:
+| 极点位置 | +系统响应特性 | +
|---|---|
| 实轴负半轴 | +单调响应,无振荡 | +
| 左半平面共轭复数 | +衰减振荡,有超调 | +
| 虚轴上 | +等幅振荡,临界稳定 | +
| 右半平面 | +发散,不稳定 | +
增益 K 的选择:
+💡 设计原则:
+性能折中:
++ 增大 K 可以提高系统精度和快速性,但可能降低稳定性和增大超调。 + 需要在根轨迹上选择合适的工作点,平衡各项性能指标。 +
+1️⃣ 系统分析:
+2️⃣ 控制器设计:
+3️⃣ 极点配置:
+通过添加合适的零极点,使闭环极点位于期望位置:
+4️⃣ 鲁棒性分析:
++ 根轨迹可以直观显示参数不确定性对系统稳定性的影响, + 帮助评估系统的鲁棒性能。 +
+