# 🎛️ 自动控制原理AI+数智平台 > 交互式控制系统分析与设计工具 | 时域·频域·根轨迹·算例演示·AI问答 一个基于 Gradio 构建的现代化自动控制原理学习平台,集成了系统分析工具、完整混动模型算例演示与 AI 智能问答功能。 ## ✨ 核心功能 ### 📊 1. 时域分析 (Time Domain Analysis) - **阶跃响应分析**:观察系统对单位阶跃输入的响应 - **脉冲响应分析**:观察系统对单位脉冲输入的响应 - **性能指标计算**: - 上升时间 (Rise Time) - 峰值时间 (Peak Time) - 超调量 (Overshoot) - 调节时间 (Settling Time) - 稳态值 (Steady State Value) **知识要点**: - 二阶系统标准形式 - 阻尼比与自然频率参数说明 - 时域性能指标公式 - 稳态误差分析 ### 🌊 2. 频域分析 (Frequency Domain Analysis) - **Bode 图绘制**:幅频特性和相频特性 - **Nyquist 图绘制**:极坐标频率响应 - **稳定裕度计算**: - 增益裕度 (Gain Margin, GM) - 相位裕度 (Phase Margin, PM) - 增益交越频率 - 相角交越频率 - **稳定性评估**:自动判断系统稳定性 **知识要点**: - 增益裕度与相位裕度定义 - 稳定性判断准则 - 频域指标与时域性能的关系 - Bode 图读数技巧 ### 🎯 3. 根轨迹分析 (Root Locus Analysis) - **根轨迹绘制**:自动绘制完整根轨迹图 - **增益调节**:对数滑块精确调节增益 K - **极点跟踪**:实时显示当前增益下的闭环极点位置 - **动态视角**:自动调整坐标范围,聚焦关键区域 **知识要点**: - 根轨迹法基本原理 - 幅值条件与相角条件 - 根轨迹的基本性质(起点、终点、渐近线、分离点) - s 平面稳定性区域 - 阻尼比等值线 ### 🧪 4. 算例演示 (Case Demo) - **完整混动模型**:调用 `Model/src/series_hybrid_sim.py` 进行系统级仿真 - **参数化工况**:支持工况模板、仿真时长、步长、SOC、初始发动机功率与缩放系数 - **图文结果**:输出三联图(转速响应/功率分配/电气状态)与关键数据表 - **教学解读**:自动生成指标摘要(最大转速误差、SOC变化、平均功率与燃油流量) ### 🤖 5. AI 智能问答 (Q&A) - **专业教学助手**:精通自动控制原理的 AI 教授 - **流式响应**:实时显示 AI 回复过程 - **LaTeX 公式渲染**:完美支持数学公式显示 - **上下文记忆**:支持多轮对话 **支持的 API**: - DeepSeek API ## 🚀 快速开始 ### 环境要求 - Python 3.10+ - pip 包管理器 ### 安装步骤 1. **克隆项目** ```bash git clone cd AutoControl ``` 2. **安装依赖** ```bash pip install -r requirements.txt ``` 或使用 conda: ```bash conda create -n autocontrol python=3.10 conda activate autocontrol pip install -r requirements.txt ``` 3. **配置 API 密钥** 编辑 `config.py` 文件中的配置区域: ```python # ==================== API 配置 ==================== API_KEY = "your-api-key-here" # 填入您的 DeepSeek API 密钥 API_BASE_URL = "https://api.deepseek.com/v1" API_MODEL = "deepseek-chat" API_TYPE = "deepseek" # 或 "gemini" # ================================================== ``` **获取 DeepSeek API 密钥**: - 访问 https://platform.deepseek.com/api_keys - 注册并创建 API 密钥 - 复制密钥到配置文件 4. **运行应用** ```bash python app.py ``` 或使用 conda 环境: ```bash conda run -n autocontrol python app.py ``` 5. **访问应用** 浏览器自动打开,或手动访问: ``` http://localhost:7860 ``` ## 📖 使用指南 ### 输入系统传递函数 在任意标签页的输入框中输入传递函数的分子和分母系数: **示例 1:一阶系统** ``` 分子: 1 分母: 1,1 传递函数: G(s) = 1/(s+1) ``` **示例 2:二阶系统** ``` 分子: 4 分母: 1,2,4 传递函数: G(s) = 4/(s²+2s+4) ``` **示例 3:三阶系统** ``` 分子: 1 分母: 1,6,11,6 传递函数: G(s) = 1/(s³+6s²+11s+6) ``` **输入格式**: - 系数从最高次项到常数项 - 用逗号分隔(支持中文或英文逗号) - 支持小数和负数 - 例如:`1, 2.5, -3, 4` 表示 s³ + 2.5s² - 3s + 4 ### 调节系统增益 频域分析和根轨迹分析都支持增益调节: - **对数滑块**:log₁₀(K) 范围 -1 到 3 - -1 对应 K = 0.1 - 0 对应 K = 1 - 1 对应 K = 10 - 2 对应 K = 100 - 3 对应 K = 1000 - **实时显示**:下方数字框显示实际增益值 - **松开更新**:滑块松开后才更新图表,避免卡顿 ### AI 问答技巧 **高效提问方式**: ✅ **好的问题**: - "请解释 PID 控制器的三个参数如何影响系统性能?" - "如何根据 Bode 图判断系统的稳定裕度?" - "为什么阻尼比为 0.707 时系统响应最佳?" - "推导二阶系统的超调量公式" ❌ **避免的问题**: - "帮我做作业"(太模糊) - "这个对吗?"(缺少上下文) - "答案是什么?"(没有提供问题描述) **公式显示**: AI 回复中的数学公式会自动渲染,支持以下格式: - 行内公式:`$公式$` 或 `\(公式\)` - 块级公式:`$$公式$$` 或 `\[公式\]` ## 🎨 界面特色 ### 现代化设计 - **渐变色标题**:紫色渐变视觉效果 - **卡片式布局**:分组清晰,层次分明 - **可滚动知识卡片**:长文档不占据过多空间 - **可折叠章节**:按需展开知识点 ### 响应式交互 - **实时更新**:参数改变即时反映在图表上 - **流式对话**:AI 回复逐字显示 - **标签页联动**:切换标签自动加载数据 - **平滑动画**:按钮悬停、卡片滚动效果 ### 知识可视化 - **嵌入式公式**:页面内直接显示 LaTeX 公式 - **表格对比**:性能指标、稳定准则表格化 - **颜色编码**:稳定/不稳定用绿/红色标识 - **图标辅助**:emoji 增强视觉识别 ## 🛠️ 技术栈 ### 前端框架 - **Gradio 4.x**:快速构建机器学习 Web 界面 - **Custom CSS**:现代化样式定制 ### 计算库 - **NumPy**:数值计算 - **python-control**:控制系统分析 - **Matplotlib**:图表绘制 ### AI 集成 - **aiohttp**:异步 HTTP 请求 - **DeepSeek API**:智能问答后端 - **流式响应**:提升用户体验 ## 📁 项目结构 ```text AutoControlCourse/ ├── app.py # Gradio 入口与事件绑定 ├── ui_components.py # 各标签页 UI 组件 ├── analysis_functions.py # 时域/频域/根轨迹计算 ├── case_demo_functions.py # 算例演示模块(调用 Model) ├── chatbot.py # AI 问答 ├── user_stats.py # 在线人数统计 ├── config.py # API 与运行配置 ├── Model/ │ ├── src/ # 混动模型核心代码 │ └── data/ # 运行所需模型权重与数据 └── requirements.txt # 依赖列表 ``` ## 🔧 高级配置 ### 算例演示说明 - 仿真时长是模型时间,不等于程序实际等待时间 - 电池功率符号定义:正值放电,负值充电 - 若参数超限,程序会在安全范围内自动裁剪 ### 自定义系统提示词 修改 `chat_with_ai` 函数中的 `system_prompt`: ```python system_prompt = """ 你是一位[角色定义]。 请用[语言风格]来回答有关[领域]的问题。 [其他要求...] """ ``` ### 调整图表样式 在 `matplotlib` 绘图代码中修改: ```python # 修改图表大小 fig, ax = plt.subplots(figsize=(12, 6)) # 修改颜色主题 ax.plot(x, y, color='#667eea', linewidth=2) # 修改网格样式 ax.grid(True, alpha=0.3, linestyle='--') ``` ## 📚 参考资料 ### 经典教材 - 《自动控制原理》- 胡寿松 - 《现代控制工程》- Katsuhiko Ogata - 《反馈控制理论》- John Doyle ### 在线资源 - [python-control 官方文档](https://python-control.readthedocs.io/) - [DeepSeek API 文档](https://platform.deepseek.com/docs) - [Gradio 官方文档](https://www.gradio.app/docs) ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! ### 贡献方向 - 🐛 修复 Bug - ✨ 添加新功能(如状态空间分析) - 📝 改进文档 - 🎨 优化界面设计 - 🧪 添加测试用例 ## 📄 许可证 本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。 ## 🙏 致谢 - **Gradio**:提供优秀的 Web 界面框架 - **python-control**:强大的控制系统分析库 - **DeepSeek**:高质量的 AI 服务 - 所有贡献者和使用者 ## 📞 联系方式 - 项目地址:[GitHub Repository URL] - 问题反馈:[Issues URL] - 邮箱:[your-email@example.com] --- **⭐ 如果这个项目对您有帮助,请给它一个 Star!** 最后更新:2026年4月7日