Commonshaft
介绍
SubStr类用于生成子结构(在ANSYS中称为子结构或者超单元,在simpack中称为柔体),它可以导出ANSYS的.sup文件和simpack的.fbi文件。子结构就是将一组单元用矩阵凝聚为一个单元的过程。这个单一的矩阵单元称为超单元。在ANSYS分析中,超单元可以象其他单元类型一样使用。
类结构
输入 input:
- Master: 主节点
- SubStr : 子结构的网格模型
参数 params:
Name : 名称
NMode : 模态数量,默认数量50
Freq: 频率范围,默认0~2000Hz
CMSMehod: CMS方法
参照ANSYS帮助文件,主要有以下三种方法,默认为‘FIX’。
CMSMethod Description FIX Fixed-interface method. FREE Free-interface method. RFFB Residual-flexible free-interface method
输出 output :
- Path : 子结构存储路径
- Geom : 几何信息
- Nodes : 连接节点
案例
Shaft1 compare (Rigid connection) (Flag=1)
% Shaft 1
inputshaft1.Length = 500;
inputshaft1.ID = [0,0];
inputshaft1.OD = [50,50];
paramsshaft1 = struct();
obj1 = shaft.Commonshaft(paramsshaft1, inputshaft1);
obj1 = obj1.solve();
SubAss=obj1.output.Assembly;
%% Define Element Types
ET1.name='21';ET1.opt=[3,0];ET1.R=[0,0,0,0,0,0];
SubAss=AddET(SubAss,ET1);
Acc_ET=GetNET(SubAss);
%% Define Connections
SubAss=AddCnode(SubAss,-0.001,0,0);
SubAss=AddMaster(SubAss,0,1);
SubAss=AddSlaver(SubAss,1,'face',301);
SubAss=SetCnode(SubAss,1,Acc_ET);
SubAss=SetRbe2(SubAss,1,1);
SubAss=AddCnode(SubAss,500.001,0,0);
SubAss=AddMaster(SubAss,0,2);
SubAss=AddSlaver(SubAss,1,'face',302);
SubAss=SetCnode(SubAss,2,Acc_ET);
SubAss=SetRbe2(SubAss,2,2);
NodeNum=[1;2];
Type={'All';'All'};
PartNum=[0;0];
Master=table(PartNum,NodeNum,Type);
inputSubStr.SubStr=SubAss;
inputSubStr.Master=Master;
paramsSubStr.Name="Shaft1";
Sub = solve.SubStr(paramsSubStr,inputSubStr);
Sub = Sub.solve();
Plot3D(Sub)
FbiGenerate(Sub)
Multi=MultiBody('Shaft1 Test');
Multi=AddBody(Multi,Sub);
Simpack_Output(Multi);
当采用刚性连接时,使用SetRbe2建立刚性区域,设置完成后,使用Baffalo SubStr模块导出超单元,并生成fbi文件。对比ANSYS和Simpac导入模态的结果,可以发现二者基本一致。
ANSYS模态计算 | Simpack模态 | |
---|---|---|
1阶弯曲 | ![]() |
![]() |
2阶弯曲 | ![]() |
![]() |
1阶扭转 | ![]() |
![]() |
以下分别为ANSYS和Simpack的计算结果,两者的误差非常小。

Shaft1 compare (Flexible connection) (Flag=2)
% Shaft 1
inputshaft1.Length = 500;
inputshaft1.ID = [0,0];
inputshaft1.OD = [50,50];
paramsshaft1 = struct();
obj1 = shaft.Commonshaft(paramsshaft1, inputshaft1);
obj1 = obj1.solve();
SubAss=obj1.output.Assembly;
mat1.table=["MU",0.15];
SubAss=AddMaterial(SubAss,mat1);
Acc_Mat=GetNMaterial(SubAss);
%% Define Element Types
ET1.name='173';ET1.opt=[2,2;4,1;12,5];ET1.R=[];
SubAss=AddET(SubAss,ET1);
ET2.name='170';ET2.opt=[2,1;4,111111];ET2.R=[];
SubAss=AddET(SubAss,ET2);
ET3.name='21';ET3.opt=[3,0];ET3.R=[0,0,0,0,0,0];
SubAss=AddET(SubAss,ET3);
Acc_ET=GetNET(SubAss);
%% Define Contacts
SubAss=AddCnode(SubAss,0,0,0);
SubAss=AddCnode(SubAss,500,0,0);
SubAss=SetCnode(SubAss,1,Acc_ET);
SubAss=SetCnode(SubAss,2,Acc_ET);
SubAss=AddCon(SubAss,1,301);
SubAss=AddTar(SubAss,1,0,1);
SubAss=SetConMaterial(SubAss,1,Acc_Mat);
SubAss=SetConET(SubAss,1,Acc_ET-2);
SubAss=SetTarET(SubAss,1,Acc_ET-1);
SubAss=AddCon(SubAss,1,302);
SubAss=AddTar(SubAss,2,0,2);
SubAss=SetConMaterial(SubAss,2,Acc_Mat);
SubAss=SetConET(SubAss,2,Acc_ET-2);
SubAss=SetTarET(SubAss,2,Acc_ET-1);
NodeNum=[1;2];
Type={'All';'All'};
PartNum=[0;0];
Master=table(PartNum,NodeNum,Type);
inputSubStr.SubStr=SubAss;
inputSubStr.Master=Master;
paramsSubStr.Name="Shaft1";
Sub = solve.SubStr(paramsSubStr,inputSubStr);
Sub = Sub.solve();
Plot3D(Sub)
FbiGenerate(Sub)
Multi=MultiBody('Shaft1 Test');
Multi=AddBody(Multi,Sub);
Simpack_Output(Multi);
采用柔性连接时,不能直接采用SetRbe3建立连接,Simpack不识别ANSYS中此连接。需采用建立接触对的方式建立柔性连接,设置Contact属性为ET1.opt=[2,2;4,1;12,5],接着设置Target属性ET2.opt=[2,1;4,111111],此时的Marker点为ANSYS中的从节点。
在实际工程中需要依据经验和测试的结果来决定连接采用柔性还是刚性,比如螺栓连接,相对较刚,可采用刚性连接,再比如轴承,如果直径较大,建议采用柔性连接。
参考文献
本网站基于Hexo 3-Hexz主题生成。如需转载请标注来源,如有错误请批评指正,欢迎邮件至 392176462@qq.com