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:
parent
bb916823a1
commit
664181ec6b
@ -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
117
check_pdms_processes.py
Normal 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())
|
||||
@ -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
|
||||
@ -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
|
||||
```
|
||||
|
||||
**配置字段说明:**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user