首页/文章/ 详情

HyperWorks Automation Toolkit:自动化开发工具包

58分钟前浏览0

在HyperWorks的Tcl二次开发中,开发者经常需要重复编写大量API调用代码来执行常见操作。HyperWorks Automation Toolkit(HWAT)是一个函数和部件集 合,旨在让应用程序能够以最小工作量和最大可移植性快速组装HyperWorks自动化流程。HWAT为HyperWorks Tcl脚本API提供了一致的高层编程接口,将需要反复执行的API调用捆绑为单一操作,加速开发并简化调试。

一、HWAT的三大核心特性

使用HWAT编写的代码可以跨各种HyperWorks应用程序(HyperMesh与fepre client)和版本(v6.0与v6.1)移植。HWAT提供三个基本特性:

1.1 核心功能增强(Augmentation to HW Core)

HWAT作为未来核心功能的"预发布平台"。它提供了快速实现和部署所需功能的机会,并通过调试和文档化算法为迁移到核心做好准备。当函数从HWAT迁移到HW核心时,最终用户无需修改代码即可继续使用,唯一可察觉的变化是某些操作迁移到核心后会响应更快。

1.2 核心抽象层(Abstraction Layer from Core)

HWAT为使用它的应用程序提供对核心API变更的屏蔽,并为核心中的已知问题提供内置变通方案。当核心发生变化时,HWAT会更新以反映这些变化,但HWAT用户无需更改任何应用程序代码即可享受修改的好处。在应用程序中修改数百个createmark调用可能令人生畏,通过HWAT调用,替换只需在一处进行,终端用户无需采取任何特殊操作。

1.3 不适合核心的自定义算法(Custom Algorithms)

某些操作没有充分理由直接在核心中实现代码。这类算法可能经常变化(例如车辆碰撞测试程序),基于软件发布周期跟进可能困难或不切实际。这些内容被放入HWAT作为函数集 合,并保持与标准的同步。此外,HWAT还提供核心中通常没有的部件和应用工具——例如AppHost工具允许用户开发既可作为Process Manager工作流中的任务使用、也可作为独立宏部署的代码,以最小额外工作量实现最大用例覆盖。

二、函数分类体系

HWAT函数按功能分为六大类,共计 179 个函数,覆盖文件I/O、数学运算、求解器交互、实体管理、XML解析和核心算法:

函数分类    
命名空间    
数量    
功能描述    
I/O Functions    
::hwat::io::    
12    
输入/输出函数,处理文件读写、模型导入和数据交换    
Math Functions    
::hwat::math::    
16    
数学函数,提供向量运算、矩阵变换和角度转换    
Solver Functions    
::hwat::solver::    
14    
求解器函数,创建刚性墙、加速度计等求解器实体    
Utils    
::hwat::utils::    
113    
工具函数,实体管理、坐标变换、显示控制等通用功能    
XML Functions    
::hwat::xml::    
15    
XML函数,使用基于SAX的解析器处理XML数据    
Core Functions    
::hwat::core::    
9    
核心函数(私有),作为辅助函数被其他函数内部调用    

2.1 I/O Functions(输入/输出函数)

位于 ::hwat::io:: 命名空间下,共 12 个函数,负责文件读写、模型导入、MWF文件处理和URL文件访问等I/O操作。

#    
函数名    
功能描述    
1    
::CleanupTempFiles    
关闭并删除所有非受保护的临时文件    
2    
::CloseFile    
关闭文件    
3    
::CreateFile    
创建文件并打开    
4    
::CreateTempFile    
创建具有用户指定扩展名和位置的临时文件    
5    
::CreateTempFileName    
创建临时文件并打开    
6    
::ImportDummy    
将假人加载到当前会话中,并按给定数量偏移实体    
7    
::ImportModel    
将模型加载到当前会话中,可选创建HyperMesh实体集和装配体    
8    
::LoadFilesFromDir    
在HyperMesh中加载目录下的文件    
9    
::ReadFileFromURL    
从URL读取文件,如需要则存入当前目录的临时本地文件    
10    
::ReadMWF    
读取MWF并创建格式化列表以供处理    
11    
::URLBrowse    
启动对话框,以给定URL的文件填充树形结构    
12    
::WriteMWF    
写入MWF文件    

2.2 Math Functions(数学函数)

位于 ::hwat::math:: 命名空间下,共 16 个函数,提供向量运算(叉积、点积、归一化、平均值)、矩阵检查与变换、角度单位转换等数学工具。

#    
函数名    
功能描述    
1    
::AngleBetweenVectors    
求两个向量之间的角度(度)    
2    
::AverageVectorComponents    
对向量分量取平均值    
3    
::CheckReflection    
检查给定余弦矩阵的反射属性    
4    
::CheckTransformMatrix    
检查给定变换矩阵的有效性    
5    
::ConvertMatrixToRotations    
将余弦矩阵转换为三次连续旋转    
6    
::DegreesToRadians    
将角度从度转换为弧度    
7    
::GetVector    
根据起点和终点坐标求向量的i、j、k分量    
8    
::IfEqual    
检查两个浮点数是否相等    
9    
::IsIdentityMatrix    
检查矩阵是否为单位矩阵    
10    
::PointOnVector    
在向量上找到距尾部给定距离的点;距离用百分比时按向量长度百分比定位    
11    
::RadiansToDegrees    
将角度从弧度转换为度    
12    
::VectorAverage    
求两个向量的平均值    
13    
::VectorCrossProduct    
求两个向量的叉积    
14    
::VectorDotProduct    
求两个向量的点积    
15    
::VectorMagnitude    
返回给定值列表的平方和的平方根    
16    
::VectorNormalize    
返回给定值列表归一化后的列表    

2.3 Solver Functions(求解器函数)

位于 ::hwat::solver:: 命名空间下,共 14 个函数,用于创建刚性墙(有限/无限/刚性柱)、加速度计、施加速度等求解器相关实体。

#    
函数名    
功能描述    
1    
::ChangeFormulation    
将显示组件的公式更改为所需值    
2    
::ApplyVelocity    
对HWAT装配体施加速度    
3    
::CreateAccel    
创建加速度计及支撑实体    
4    
::CreateDummyPositionArray    
扫描模型并创建假人定位API所需的数组    
5    
::CreateFiniteRigidWall    
创建有限刚性墙    
6    
::CreateInfiniteRigidWall    
创建无限刚性墙    
7    
::CreateRigidPole    
创建刚性柱    
8    
::CreateRigidWall    
在HyperMesh中创建刚性墙    
9    
::GenAccelData    
创建用于导入的加速度计数据    
10    
::GetComponentStopAngles    
查找组件的停止角度    
11    
::InferAssemsScanDynaParts    
检查组件名称和标题卡是否与给定装配名匹配,匹配则添加到新装配    
12    
::IsRigidElement    
检查给定单元是否属于刚性件    
13    
::MakeRigidElementCopy    
将单元复 制到具有MAT20材料的件    
14    
::MakeRigidProp    
为加速度计创建新的壳属性    

2.4 Utils(工具函数)

位于 ::hwat::utils:: 命名空间下,共 113 个函数,是HWAT中数量最多的一类。涵盖实体创建/删除/查询、边界框计算、坐标系操作、变换操作、显示控制、假人定位、障碍物导入、消息调试、文件与求解器、穿透检查等全方位功能。以下按功能分组列举:

实体创建与管理

#    
函数名    
功能描述    
1    
::CreateCollector    
创建HyperMesh收集器    
2    
::CreateContact    
在主面和从面之间创建接触    
3    
::CreateElement    
在HyperMesh中创建单元    
4    
::CreateEntitySet    
在HyperMesh中创建实体集    
5    
::CreateHmVector    
在HyperMesh中创建向量    
6    
::CreateMark    
清除标记并在所需实体上创建标记    
7    
::CreateNodeList    
创建节点列表并返回列表标记ID    
8    
::CreateOutputblock    
创建输出块    
9    
::CreateSystem    
创建新坐标系并分配给父级    
10    
::CreateTag    
在HyperMesh中创建标签    
11    
::CreateTempNode    
在给定位置创建临时节点    
12    
::CreateTitle    
为HyperMesh中给定实体创建标题    
13    
::CopyEntitiesToCollector    
将实体复 制到给定收集器    
14    
::MoveEntitiesToCollector    
将实体移动到给定收集器    
15    
::ModifyAssembly    
向现有实体集添加组件    
16    
::UpdateHMAssembly    
创建指定名称的HyperMesh装配体;如已存在则先移除    
17    
::UpdateContact    
更新主面和从面之间的接触    
18    
::UpdateNodeSet    
更新HyperMesh中的无序节点集    
19    
::UpdateAttribute    
更新HyperMesh数据库中属性的值    
20    
::DeleteEntity    
从已加载模型中删除指定实体    
21    
::DeleteFESession    
清除HyperMesh会话中的所有数据    
22    
::DeleteTag    
删除标签(如存在)    
23    
::DeleteTempNode    
删除临时节点    
24    
::RenameEntity    
重命名给定ID和类型的实体收集器    
25    
::Renumber    
尝试对给定实体的ID列表重新编号,使其以参数指定的startid开始    

实体查询与信息获取

#    
函数名    
功能描述    
26    
::EntityExists    
检查实体在HyperMesh中是否存在    
27    
::CheckEntityOutOfRange    
检查装配体中实体ID是否在最小和最大范围内    
28    
::CheckTagExists    
查看标签是否存在    
29    
::GetAttributeValue    
从HyperMesh数据库获取属性值    
30    
::GetEntityCount    
获取HyperMesh中给定实体类型的总数    
31    
::GetEntityMaxId    
查找实体的最大ID    
32    
::GetEntityMinId    
查找实体的最小ID    
33    
::GetEntityNameFromId    
根据ID查找实体名称    
34    
::GetIdFromTag    
根据给定标签查找节点ID    
35    
::GetMarkedEntity    
清除标记、在所需实体上创建标记并返回标记上的实体    
36    
::GetTag    
获取标签ID    
37    
::GetTitleBuffer    
获取标题缓冲区    
38    
::GetUniqueName    
为实体查找唯一名称    
39    
::ClearMark    
清除HyperMesh中实体上的标记    
40    
::ScanAssemblies    
扫描模型查找传入Tcl列表中的装配体是否存在    
41    
::FindRootAssembly    
获取给定组件或装配体的根装配体    
42    
::GetCompsFromAssem    
获取给定装配体中的组件    
43    
::GetTree    
列出假人中的父系统或子系统,用于检索无分支路径    

几何与单元操作

#    
函数名    
功能描述    
44    
::DuplicateElements    
复 制给定单元    
45    
::FilterElements    
给定单元ID列表和单元类型列表,过滤并返回交集    
46    
::FindAttachedEntityToGivenEntity    
查找给定实体的附属实体并放入标记2    
47    
::FindNodeOnComponents    
查找节点是否属于任何给定组件    
48    
::GetElementCentroid    
查找单元的质心    
49    
::GetElementNodes    
查找单元的节点    
50    
::GetClosestElement    
查找装配体中最近的单元    
51    
::GetEntitiesInBox    
查找盒中的所有实体    

边界框计算

#    
函数名    
功能描述    
52    
::BoundingBox    
计算给定组件或单元列表的边界框并返回尺寸    
53    
::BoundingBoxFromCompList    
根据给定组件列表计算边界框    
54    
::GetActualBBoxFromBBox    
返回给定边界框内节点的实际边界框    
55    
::GetBBoxFromElements    
返回由给定单元形成的边界框    
56    
::GetBBoxFromNodes    
返回由给定节点形成的边界框    
57    
::GetMinMaxFromElements    
返回由参数定义平面上的单元形成的2D边界框    
58    
::PadBBox    
用给定值填充边界框    

坐标系操作

#    
函数名    
功能描述    
59    
::GetComponentSystem    
查找组件的坐标系    
60    
::GetParentSystem    
查找坐标系的父级    
61    
::GetSysVectors    
提取坐标系的X、Y或Z向量    
62    
::GetVectorsFromSystem    
提取坐标系的X、Y或Z向量    
63    
::RotateSystem    
旋转给定坐标系    
64    
::TranslateSystem    
平移给定坐标系    
65    
::PositionSystemByTransform    
使用变换矩阵将坐标系旋转和平移到正确位置/方向    

变换操作

#    
函数名    
功能描述    
66    
::ReflectEntity    
镜像给定实体    
67    
::RotateEntity    
旋转给定实体    
68    
::ScaleEntity    
缩放给定实体    
69    
::TranslateEntity    
在x、y或z方向平移实体(实体ID列表)    
70    
::TranslateNodes    
在x、y或z方向平移节点    

显示与视图控制

#    
函数名    
功能描述    
71    
::DisplayEntity    
打开/关闭HyperMesh实体的显示    
72    
::DisplayUserMessage    
在菜单消息区显示用户消息    
73    
::HideAssembly    
隐藏给定装配体    
74    
::ReviewAssembly    
关闭所有组件显示,仅显示所需组件实体集中的组件    
75    
::ReviewComp    
隐藏当前显示的所有组件,仅显示给定组件    
76    
::ReviewSet    
关闭所有组件显示,仅显示所需组件实体集中的组件    
77    
::ChangeToPerformanceGraphics    
设置图形模式为性能模式    
78    
::ChangeToStandardGraphics    
设置图形模式为标准模式    

假人定位

#    
函数名    
功能描述    
79    
::PositionDummyOnImport    
将假人H点定位到所需坐标,并按要求旋转假人背靠角度    
80    
::PositionLimbs    
将假人的手或脚定位到所需位置    
81    
::PositionOOPDummy    
定位"离位"驾驶员或乘员假人    
82    
::SetJointAngles    
设置假人的关节角度    

障碍物导入与定位

#    
函数名    
功能描述    
83    
::ImportAndPositionOffsetBarrier    
导入并定位正面碰撞的偏置障碍物    
84    
::ImportAndPositionPendulums    
导入并定位581保险杠测试的摆锤    
85    
::ImportAndPositionRearBarriers    
导入并定位各种后部障碍物    
86    
::ImportAndPositionRoofBarriers    
导入并定位车顶压碎的左右压板    
87    
::ImportAndPositionSideBarriers    
导入并定位各种侧面障碍物    
88    
::ImportAndPositionWallBarriers    
导入并定位581保险杠测试的墙障碍物    
89    
::CreateRigidWallBarrier    
创建刚性墙障碍物(平面或倾斜)    
90    
::CreateFrontPole    
创建正面碰撞刚性柱    
91    
::CreateSidePole    
创建侧面碰撞刚性柱    
92    
::CreateRoad    
在HWAT中创建道路    

截面切割

#    
函数名    
功能描述    
93    
::CreateSectionCut    
创建有限或无限截面切割    

消息与调试

#    
函数名    
功能描述    
94    
::BlockMessages    
设置消息屏蔽功能的开启或关闭    
95    
::PostToMessageBox    
将消息字符串发布到消息日志;无文本时发布全局错误变量的内容    
96    
::WriteDebugMessage    
在::hwat::globals::DEBUG变量为1时向消息框发布调试消息    
97    
::WriteErrorMessage    
向消息框发布错误消息    
98    
::SetDebugOnOff    
根据传入选项将全局调试变量设为1或0;无参数时切换    

文件与求解器

#    
函数名    
功能描述    
99    
::ExportModel    
写出求解器输入文件    
100    
::SetSolver    
设置全局SOLVER变量并加载求解器特定文件    
101    
::SetTemplateFile    
在HyperMesh中加载模板文件    
102    
::GetModelFromIntranet    
从内网读取模型文件    
103    
::ReadTargetLocationCSVFile    
返回201头部目标位置CSV文件中的数据    
104    
::TokenizeLine    
根据给定分隔符对行数据进行分词    
105    
::HmToVclAssembly    
为每个HyperMesh装配体创建组件实体集(VCL装配体)副本    

穿透检查

#    
函数名    
功能描述    
106    
::FindMaximumPenetration    
查找最大穿透量    
107    
::PenetrationCheck    
沿向量平移节点或单元直到产生穿透,再反向平移至穿透为零    

质量与几何信息

#    
函数名    
功能描述    
108    
::GetMassCG    
查找给定装配体的质量、重心和质心    
109    
::GetXYZFromNode    
查找节点的坐标    
110    
::GetXYZFromTag    
返回具有给定标签的节点坐标    
111    
::ConvertUnits    
将单位从一种格式转换为另一种    

标签与标题管理

#    
函数名    
功能描述    
112    
::SetTag    
使用给定标签ID、正文和标签更新标签    
113    
::SetTitleBuffer    
更新标题缓冲区    

2.5 XML Functions(XML函数)

位于 ::hwat::xml:: 命名空间下,共 15 个函数,使用基于SAX的解析器处理XML数据。提供属性查询、回调注册和解析器调用等功能,其中以 private:: 为前缀的为内部私有函数。

#    
函数名    
功能描述    
1    
::AttributeCount    
获取给定属性列表的属性数量    
2    
::private::CheckCallback    
为给定属性元素和事件数组检索回调函数索引    
3    
::GetAttributeName    
按索引从给定属性列表中检索属性名    
4    
::GetAttributeValueByIndex    
按索引从给定属性列表中检索属性值    
5    
::GetAttributeValueByName    
按属性名从给定属性列表中检索属性值    
6    
::GetCurrentElement    
获取当前活动元素    
7    
::GetCurrentName    
获取当前活动名称    
8    
::GetParentName    
获取所选子名称的父名称    
9    
::GetParentNameFromElement    
从所选子元素的元素名获取父元素的name属性    
10    
::RegisterCallback    
为任意元素事件注册回调函数    
11    
::private::XMLBody    
XMLBody回调函数的处理器    
12    
::private::XMLClose    
XMLClose回调函数的处理器    
13    
::XMLDefault    
所有元素事件回调函数的默认处理器    
14    
::XMLParse    
调用XML解析器    
15    
::private::XMLStart    
xmlstart回调函数的处理器    

2.6 Core Functions(核心函数)

位于 ::hwat::core:: 命名空间下,共 9 个函数。这些主要是私有函数,大多数情况下不直接调用,而是作为辅助函数被其他函数内部调用。主要涉及假人对齐、障碍物计算和截面切割等核心算法。

#    
函数名    
功能描述    
1    
::AdjustSplinePlateAngle    
绕Y轴旋转假人,直到样条板节点向量与X轴夹角为6度    
2    
::AlignAirbagCenterAndDummyChest    
沿Y轴平移假人,使假人胸部节点与气囊中心对齐    
3    
::AlignDriverDummyAlongZAxis    
沿Z轴平移驾驶员假人,将其下巴与模块或方向盘的最大Z值对齐    
4    
::AlignDummyAlongXAxis    
沿X轴平移假人,使其尽可能靠近车辆仪表板和挡风玻璃    
5    
::AlignPassengerDummyAlongZAxis    
沿Z轴平移乘员假人,将其头部或胸部与模块最大Z值对齐    
6    
::CalculateBarrierFrontEdges    
考虑屏障前10%长度,求该范围内的minx/miny/minz/maxx/maxy/maxz    
7    
::CreateComponentList    
创建从根组件到基础节点的组件列表    
8    
::CreateFiniteSectionCut    
创建有限截面切割    
9    
::CreateInfiniteSectionCut    
创建无限截面切割    

三、编码规范

HWAT遵循严格的编码规范,确保代码一致性和可维护性。核心规范包括:

3.1 代码风格

  • 1.

     所有行以分号 ";" 结尾(C语言风格)  
  • 2.

     命名空间全部小写,以 "::" 开头  
  • 3.

     函数名使用匈牙利命名法,大写开头  
  • 4.

     变量名使用匈牙利命名法,小写开头  
  • 5.

     函数成功返回1或有意义的值,失败返回 "null"(即 {})  

3.2 变量命名前缀

数据类型    
前缀    
示例    
整数    
n_    
n_count    
浮点/双精度    
d_    
d_stress    
字符串    
str_    
str_filename    
布尔    
b_    
b_isValid    
数组    
arr_    
arr_nodes    
列表    
追加 "List" 后缀    
n_myIDList    

部件变量同样有前缀规范:button→btn_、combobox→cmb_、entry→ent_、label→lbl_、frame→frm_ 等。

3.3 函数头规范

所有HWAT函数必须包含标准化的函数头,包含:过程名称、描述、参数(每行一个)、返回值、注释、作者(最后修改者排第一位)、最后更新日期。对于修改,直接覆盖头部信息而非追加。函数头还包含UAT(用户验收测试)部分,记录测试步骤和成功/失败判定标准。

四、命名空间与错误处理

HWAT使用 ::hwat:: 命名空间,函数通过 ::hwat::utils:: 和 ::hwat::globals:: 等子命名空间组织。命名空间内函数定义采用风格A(在命名空间外定义proc)而非风格B(在命名空间eval块内定义proc)。

错误处理通过三个标准函数实现:WriteErrorMessage 用于向消息框发布错误消息;WriteDebugMessage 在 hwat::globals::DEBUG 变量设为1时发布调试消息(通过 SetDebugOnOff 控制);PostToMessageBox 在应用程序中向消息框发布消息,或在HyperMesh中以Tk消息框发布。

       HWAT价值总结:HWAT是HyperWorks二次开发的"加速器"——它将常用的API调用模式封装为高层函数,屏蔽了核心API变更的影响,并提供了AppHost等核心中不具备的工具。对于从事HyperWorks自动化的工程师来说,掌握HWAT意味着用更少的代码做更多的事,同时获得跨版本、跨应用的可移植性。建议在开始任何HyperWorks Tcl自动化项目前,先浏览HWAT函数库,避免重复造轮子。      

—— HyperWorks 2026 工具系列 · 完 ——

本系列从第45篇到第49篇,系统介绍了HyperWorks的五款实用工具:HgTrans(结果文件转ABF)、HvTrans(结果文件转H3D)、HWTK(GUI开发工具包)、Cleanup Utility(设置清理)和HWAT(自动化工具包)。这些工具虽然不像HyperMesh、HyperView那样处于CAE工作流的核心位置,但在数据转换、界面开发、故障排查和自动化流程中发挥着不可替代的作用。掌握这些工具,将使你的HyperWorks使用体验更加顺畅高效。


来源:TodayCAEer
ACTSystemHyperMeshHyperView碰撞二次开发通用UG材料控制装配
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-09-29
最近编辑:58分钟前
TodayCAEer
本科 签名征集中
获赞 87粉丝 196文章 770课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈