feat: 集成AVEVA PDMS 12.1 SP4支持

- 添加PDMS软件配置,支持批处理文件启动方式
- 配置executable_path为pdms.bat,startup_args为["Design", "noconsole"]
- 通过进程检测工具确定正确的进程名称:des.exe和PDMSConsole.exe
- 新增check_pdms_processes.py进程检测工具,可自动识别PDMS进程
- 更新Readme.md和frontend-api-docs.md文档
- 支持与Creo、Revit一致的启动、停止、重启功能

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root 2025-08-01 21:14:32 +08:00
parent bb916823a1
commit 664181ec6b
4 changed files with 142 additions and 1 deletions

View File

@ -104,6 +104,14 @@ software:
startup_timeout: 45
check_process_name: "acad.exe"
pdms:
name: "AVEVA PDMS 12.1 SP4"
executable_path: "C:\\AVEVA\\Plant\\PDMS12.1.SP4\\pdms.bat"
startup_args: ["Design", "noconsole"]
startup_timeout: 120
check_process_name: ["des.exe", "PDMSConsole.exe"]
stop_timeout: 20
# ... 其他软件配置
```

117
check_pdms_processes.py Normal file
View File

@ -0,0 +1,117 @@
import sys
import asyncio
import psutil
sys.path.append('app')
from core.process_monitor import process_monitor
async def detect_pdms_processes():
"""检测PDMS相关的所有进程"""
print("=== PDMS进程检测工具 ===")
print("请确保PDMS已经启动然后按任意键继续...")
input()
print("\n正在扫描系统中的所有进程...")
# 获取所有进程
all_processes = []
pdms_related_processes = []
try:
for proc in psutil.process_iter(['pid', 'name', 'create_time', 'cmdline']):
try:
proc_info = proc.info
all_processes.append(proc_info)
# 查找可能与PDMS相关的进程
process_name = proc_info['name'].lower() if proc_info['name'] else ''
cmdline_list = proc_info.get('cmdline') or []
if not isinstance(cmdline_list, list):
cmdline_list = []
cmdline = ' '.join(str(arg) for arg in cmdline_list).lower()
# 检查进程名或命令行中是否包含PDMS关键词
pdms_keywords = ['pdms', 'aveva', 'design', 'plant']
if any(keyword in process_name for keyword in pdms_keywords) or \
any(keyword in cmdline for keyword in pdms_keywords):
pdms_related_processes.append({
'pid': proc_info['pid'],
'name': proc_info['name'],
'cmdline': cmdline_list,
'create_time': proc_info['create_time']
})
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
continue
except Exception as e:
print(f"❌ 进程扫描失败: {e}")
return
print(f"\n📊 扫描结果:")
print(f" 总进程数: {len(all_processes)}")
print(f" PDMS相关进程数: {len(pdms_related_processes)}")
if not pdms_related_processes:
print("\n⚠️ 未找到PDMS相关进程!")
print(" 请确认:")
print(" 1. PDMS是否已正确启动")
print(" 2. 是否以正确的参数启动 (Design noconsole)")
return
print(f"\n🔍 发现的PDMS相关进程:")
print("-" * 80)
for proc in pdms_related_processes:
cmdline_preview = ' '.join(str(arg) for arg in proc['cmdline'][:3]) if proc['cmdline'] else ''
print(f"PID: {proc['pid']:8} | 进程名: {proc['name']:20} | 命令行: {cmdline_preview}")
# 分析最有可能的主进程
print(f"\n🎯 进程分析建议:")
print("-" * 40)
main_candidates = []
for proc in pdms_related_processes:
name = proc['name'].lower() if proc['name'] else ''
cmdline_str = ' '.join(str(arg) for arg in proc['cmdline']).lower() if proc['cmdline'] else ''
# 评分系统:更可能是主进程的得分更高
score = 0
if 'pdms' in name:
score += 10
if 'design' in name:
score += 8
if 'design' in cmdline_str:
score += 5
if 'noconsole' in cmdline_str:
score += 3
if len(proc['cmdline']) > 1: # 有参数的进程更可能是主进程
score += 2
main_candidates.append((proc, score))
# 按分数排序
main_candidates.sort(key=lambda x: x[1], reverse=True)
if main_candidates:
top_candidate = main_candidates[0][0]
print(f"推荐的主进程: {top_candidate['name']} (PID: {top_candidate['pid']})")
# 生成配置建议
unique_names = list(set(proc['name'] for proc in pdms_related_processes))
print(f"\n📝 配置文件建议:")
print(f"建议将PDMS的 check_process_name 设置为:")
if len(unique_names) == 1:
print(f' check_process_name: "{unique_names[0]}"')
else:
print(f' check_process_name: {unique_names}')
print(f"\n详细进程名称列表:")
for i, name in enumerate(unique_names, 1):
print(f" {i}. {name}")
print(f"\n=== 检测完成 ===")
if __name__ == "__main__":
asyncio.run(detect_pdms_processes())

View File

@ -12,4 +12,12 @@ software:
executable_path: "C:\\Program Files\\Autodesk\\Revit 2017\\Revit.exe"
startup_args: ["/language", "CHS"]
startup_timeout: 90
check_process_name: "Revit.exe"
check_process_name: "Revit.exe"
pdms:
name: "AVEVA PDMS 12.1 SP4"
executable_path: "C:\\AVEVA\\Plant\\PDMS12.1.SP4\\pdms.bat"
startup_args: ["Design", "noconsole"]
startup_timeout: 120
check_process_name: ["des.exe", "PDMSConsole.exe"]
stop_timeout: 20

View File

@ -368,6 +368,14 @@ software:
startup_args: ["/language", "CHS"]
startup_timeout: 90
check_process_name: "Revit.exe" # 单进程检测
pdms:
name: "AVEVA PDMS 12.1 SP4"
executable_path: "C:\\AVEVA\\Plant\\PDMS12.1.SP4\\pdms.bat" # 支持批处理文件
startup_args: ["Design", "noconsole"]
startup_timeout: 120
check_process_name: ["des.exe", "PDMSConsole.exe"] # PDMS多进程检测
stop_timeout: 20
```
**配置字段说明:**