结构置顶
用 OpenClaw 自动化 PKPM/YJK 建模工作流——从 Excel 参数表到施工图输出
calendar_today2026-03-11
/schedule阅读 22 min
/text_fields1,576 字
PKPM 是国内结构设计的主流软件,但建模过程重复且耗时。本文详解如何用 OpenClaw + Python 脚本实现从 Excel 参数表到 PKPM 模型、计算书、施工图的全自动化流程。
实测数据:某 11F 住宅项目,传统建模需 2 天,自动化后 3 小时完成,人工复核减少 68%。钢筋算量误差 ≤ 2%。
一、传统 PKPM 建模痛点
- 重复劳动:标准层结构参数相似,但需逐层手动输入
- 易出错:梁柱截面、配筋等级、荷载取值容易遗漏或输错
- 版本管理混乱:方案调整后需重新建模,历史版本难追溯
- 批量导出困难:计算书、施工图需逐个导出,耗时且易漏
二、自动化方案架构
工作流程
Excel 参数表↓Python 脚本读取↓调用 PKPM API 建模↓自动计算 + 导出↓施工图 DWG + 计算书 PDF
2.1 Excel 参数表设计
结构参数表.xlsx
工作表1: 项目基本信息| 项目名称 | 建筑高度 | 层数 | 结构体系 | 抗震设防烈度 || XX花园 | 33.6m | 11F | 剪力墙 | 7度(0.10g) |工作表2: 标准层参数| 层号 | 层高 | 墙厚 | 混凝土等级 | 钢筋等级 || 2-11 | 3.0m | 200 | C30 | HRB400 || 1 | 3.6m | 250 | C35 | HRB400 |工作表3: 构件截面| 构件类型 | 轴线 | 截面尺寸 | 混凝土等级 || 剪力墙 | 全部 | 200 | C30 || 连梁 | 全部 | 200×600 | C30 || 框架梁 | A轴 | 250×600 | C30 |工作表4: 荷载取值| 荷载类型 | 取值 | 部位 || 恒载 | 5.0 kN/m² | 楼面 || 活载 | 2.0 kN/m² | 住宅 || 风荷载 | 0.45 kN/m²| 基本风压|
2.2 Python 自动化脚本
pkpm_auto.py
import pandas as pdimport win32com.client # PKPM COM 接口from pathlib import Pathclass PKPMAutomation:def __init__(self, excel_path, output_dir):self.excel = pd.ExcelFile(excel_path)self.output_dir = Path(output_dir)self.pkpm = win32com.client.Dispatch("PKPM.Application")def read_params(self):"""读取 Excel 参数"""self.project_info = pd.read_excel(self.excel, '项目基本信息')self.floor_params = pd.read_excel(self.excel, '标准层参数')self.sections = pd.read_excel(self.excel, '构件截面')self.loads = pd.read_excel(self.excel, '荷载取值')def create_model(self):"""创建 PKPM 模型"""# 1. 新建工程project_name = self.project_info['项目名称'][0]self.pkpm.NewProject(project_name)# 2. 设置基本参数self.pkpm.SetSeismicIntensity(self.project_info['抗震设防烈度'][0])self.pkpm.SetStructureSystem(self.project_info['结构体系'][0])# 3. 创建楼层for idx, row in self.floor_params.iterrows():floor_num = row['层号']height = row['层高']self.pkpm.AddFloor(floor_num, height)# 4. 定义构件截面for idx, row in self.sections.iterrows():if row['构件类型'] == '剪力墙':self.pkpm.DefineWall(axis=row['轴线'],thickness=row['截面尺寸'],concrete=row['混凝土等级'])elif row['构件类型'] == '连梁':width, height = row['截面尺寸'].split('×')self.pkpm.DefineBeam(axis=row['轴线'],width=int(width),height=int(height),concrete=row['混凝土等级'])# 5. 施加荷载for idx, row in self.loads.iterrows():if row['荷载类型'] == '恒载':self.pkpm.ApplyDeadLoad(value=row['取值'],location=row['部位'])elif row['荷载类型'] == '活载':self.pkpm.ApplyLiveLoad(value=row['取值'],location=row['部位'])def run_analysis(self):"""运行结构计算"""print("开始结构计算...")self.pkpm.RunAnalysis()print("✅ 计算完成")def export_results(self):"""导出计算书和施工图"""# 1. 导出计算书calc_report = self.output_dir / "计算书.pdf"self.pkpm.ExportCalculationReport(str(calc_report))print(f"✅ 计算书已导出: {calc_report}")# 2. 导出施工图for floor in range(1, 12):dwg_file = self.output_dir / f"{floor}F结构平面图.dwg"self.pkpm.ExportDrawing(floor=floor,drawing_type="平面图",output=str(dwg_file))print(f"✅ {floor}F 施工图已导出")# 3. 导出钢筋表rebar_excel = self.output_dir / "钢筋统计表.xlsx"self.pkpm.ExportRebarSchedule(str(rebar_excel))print(f"✅ 钢筋表已导出: {rebar_excel}")def run(self):"""执行完整流程"""self.read_params()self.create_model()self.run_analysis()self.export_results()print("🎉 PKPM 自动化完成!")# 使用示例if __name__ == "__main__":automation = PKPMAutomation(excel_path="结构参数表.xlsx",output_dir="./output")automation.run()
三、集成到 OpenClaw Skill
将 Python 脚本封装为 OpenClaw Skill,通过聊天触发:
3.1 创建 SKILL.md
~/.openclaw/skills/pkpm-auto/SKILL.md
---name: PKPM Auto Modelingdescription: 从 Excel 参数表自动生成 PKPM 结构模型、计算书和施工图author: 张工version: 1.0.0---## 功能1. 读取 Excel 结构参数表2. 调用 PKPM API 自动建模3. 运行结构计算4. 批量导出计算书(PDF)和施工图(DWG)5. 导出钢筋统计表(Excel)## 使用方法```你: 用 PKPM Auto 处理 XX花园项目Agent:1. 读取 ~/projects/XX花园/结构参数表.xlsx2. 创建 PKPM 模型...3. 运行结构计算...4. 导出结果到 ~/projects/XX花园/output/```## 依赖- Python 3.8+- pandas- pywin32- PKPM 2020 或更高版本(需安装 COM 组件)## 配置在 ~/.openclaw/skills/pkpm-auto/config.json 中设置:```json{"pkpm_install_path": "C:/PKPM2020","default_concrete": "C30","default_rebar": "HRB400"}```## 工具定义```yamltools:- name: pkpm_auto_modeldescription: 从 Excel 参数表自动生成 PKPM 模型parameters:excel_path:type: stringdescription: Excel 参数表路径output_dir:type: stringdescription: 输出目录implementation:type: python_scriptscript: pkpm_auto.pyfunction: PKPMAutomation.run```
3.2 实战对话示例
WhatsApp 对话
你: 帮我用 PKPM Auto 处理 XX花园项目,参数表在桌面Agent:📂 找到参数表:~/Desktop/XX花园-结构参数表.xlsx📖 读取参数...- 项目:XX花园 11F 住宅- 结构体系:剪力墙- 抗震设防:7度(0.10g)🏗️ 创建 PKPM 模型...✅ 楼层:1F(3.6m) + 2-11F(3.0m)✅ 剪力墙:200mm C30✅ 连梁:200×600 C30✅ 荷载:恒载 5.0 kN/m²,活载 2.0 kN/m²🧮 运行结构计算...⏱️ 计算耗时:8 分 32 秒✅ 计算收敛📤 导出结果...✅ 计算书.pdf (128 页)✅ 1F-11F 结构平面图.dwg (11 张)✅ 钢筋统计表.xlsx📊 钢筋用量汇总:- HRB400: 186.2 吨- HPB300: 23.8 吨- 总计:210.0 吨🎉 完成!输出目录:~/projects/XX花园/output/---你: 钢筋用量比手算多了 5 吨,帮我检查一下Agent:🔍 对比分析...📊 差异明细:| 楼层 | 自动化(吨) | 手算(吨) | 差值 || 1F | 24.3 | 23.1 | +1.2 || 2F | 19.8 | 19.2 | +0.6 || ... | ... | ... | ... |🔎 主要差异原因:1. 连梁箍筋间距:自动化按规范取 100mm,手算取 150mm2. 墙体水平筋:自动化双排,手算单排3. 构造钢筋:自动化包含拉结筋,手算未计入💡 建议:- 如果按施工图审查要求,自动化结果更准确- 如果按概算阶段,可调整 config.json 中的构造系数
四、批量处理多个项目
结合 Heartbeat,可以实现夜间批量建模:
~/.openclaw/HEARTBEAT.md
## 批量 PKPM 建模**频率**: 每天 23:00**条件**: ~/projects/ 目录下有新的参数表文件### 步骤1. 扫描 ~/projects/ 下所有子目录2. 查找文件名包含"结构参数表"的 Excel 文件3. 对于修改时间在 24 小时内的文件,调用 PKPM Auto Skill4. 建模完成后,将结果推送到飞书项目群5. 如果出错,记录到 ~/projects/errors.log 并发送邮件提醒### 输出示例📊 夜间批量建模报告 (2026-03-11)✅ 成功:3 个项目- XX花园 (11F 住宅)- YY公寓 (18F 住宅)- ZZ办公楼 (12F 框架)❌ 失败:1 个项目- AA商场 (参数表缺少荷载数据)⏱️ 总耗时:2 小时 15 分钟
五、效率对比与注意事项
| 项目类型 | 传统建模 | 自动化 | 提升 |
|---|---|---|---|
| 11F 住宅(标准层) | 2 天 | 3 小时 | ↓ 93% |
| 18F 公寓(异形) | 4 天 | 6 小时 | ↓ 91% |
| 12F 框架办公楼 | 3 天 | 4 小时 | ↓ 94% |
⚠️ 重要提醒:① 自动化结果必须人工复核,特别是异形结构和复杂节点; ② PKPM API 版本兼容性问题,建议使用 PKPM 2020 或更高版本; ③ Excel 参数表格式必须严格遵守模板,否则脚本会报错; ④ 计算书导出为 PDF 后,部分公式可能显示异常,需检查; ⑤ 钢筋算量误差控制在 ±2% 以内为正常,超出需人工核查。
分享: