hub

工程 Agent Hub

arrow_back返回手册
结构置顶

用 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 pd
import win32com.client # PKPM COM 接口
from pathlib import Path
class 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 Modeling
description: 从 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花园/结构参数表.xlsx
2. 创建 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"
}
```
## 工具定义
```yaml
tools:
- name: pkpm_auto_model
description: 从 Excel 参数表自动生成 PKPM 模型
parameters:
excel_path:
type: string
description: Excel 参数表路径
output_dir:
type: string
description: 输出目录
implementation:
type: python_script
script: pkpm_auto.py
function: 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,手算取 150mm
2. 墙体水平筋:自动化双排,手算单排
3. 构造钢筋:自动化包含拉结筋,手算未计入
💡 建议:
- 如果按施工图审查要求,自动化结果更准确
- 如果按概算阶段,可调整 config.json 中的构造系数

四、批量处理多个项目

结合 Heartbeat,可以实现夜间批量建模:

~/.openclaw/HEARTBEAT.md
## 批量 PKPM 建模
**频率**: 每天 23:00
**条件**: ~/projects/ 目录下有新的参数表文件
### 步骤
1. 扫描 ~/projects/ 下所有子目录
2. 查找文件名包含"结构参数表"的 Excel 文件
3. 对于修改时间在 24 小时内的文件,调用 PKPM Auto Skill
4. 建模完成后,将结果推送到飞书项目群
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% 以内为正常,超出需人工核查。

分享: