Ansys ACT案例----挖掘機斗桿、動臂、鏟斗工作分析案例

Part11. Ansys Mixed Wizard簡介

  1. 在ANSYS Workbench項目標簽頁和一個或多個支持腳本功能的目標應用程序中執行;
  2. 混合向導在Project標簽頁和目標應用程序中都提供了仿真向導,支持在目標應用中進行界面交互。
  3. 結合了項目向導和目標應用向導的功能,提供全流程的仿真流程的封裝與定制。向導可用于啟動和控制不同的目標應用程序 向導可能以混合向導(在此過程中使用不同的應用程序)或簡單向導(一個唯一的目標應用程序)的形式出現 如果可能,向導可用于WorkBnech平臺和獨立應用程序 僅Workbench應用環境下:
  • DesignModeler
  • Mechanical Workbench和獨立應用程序:
  • SpaceClaim
  • Fluent、Fluent Meshing
  • Electronics Desktop

Part2挖掘機斗桿、動臂、鏟斗工作分析案例

1創建項目

在Project界面創建仿真分析流程,設置流程名稱、分析材料。
首先通過XML文件定義界面,定義界面所使用的語法并不復雜,都是常用的幾種,在以前寫的文章Ansys向導簡介中都有詳細介紹,此處不再多贅述。Ansys ACT案例----挖掘機斗桿、動臂、鏟斗工作分析案例的圖1XML文件定義界面如下所示:

  <wizard name="ExcavatorWizard" caption="Excavator Simulation" version="1" context="Project" icon="ExcavatorAutomation.png">
    <step name="projectStep" version="0" caption="創建項目" HelpFile="help/projectStep.html" Layout="ProjectLayout@ExcavatorAutomation">
      <property control="text" name="projectName" caption="項目名稱" persistent="False" parameterizable="False" />
      <propertygroup name="grpBararmMat" caption="斗桿動臂材料定義" persistent="False" parameterizable="False">
        <property control="text" name="matBararmName" caption="材料名稱" persistent="False" parameterizable="False" default="15MnV鋼" />
        <property control="float" name="matBararmDensity" caption="密度(kg/m^3):" persistent="False" parameterizable="False" default="7850" />
        <property control="float" name="matBararmYoung" caption="楊氏模量(Mpa):" persistent="False" parameterizable="False" default="206000" />
        <property control="float" name="matBararmPoi" caption="泊松比" persistent="False" parameterizable="False" default="0.3" />
        <property control="float" name="matBararmTensileY" caption="屈服強度(Mpa):" persistent="False" parameterizable="False" default="540" />
      </propertygroup>
      <propertygroup name="grpBucketMat" caption="鏟斗材料定義" persistent="False" parameterizable="False">
        <property control="text" name="matBucketName" caption="材料名稱" persistent="False" parameterizable="False" default="HQ100" />
        <property control="float" name="matBucketDensity" caption="密度(kg/m^3):" persistent="False" parameterizable="False" default="7850" />
        <property control="float" name="matBucketYoung" caption="楊氏模量(Mpa):" persistent="False" parameterizable="False" default="206000" />
        <property control="float" name="matBucketPoi" caption="泊松比" persistent="False" parameterizable="False" default="0.3" />
        <property control="float" name="matBucketTensileY" caption="屈服強度(Mpa):" persistent="False" parameterizable="False" default="900" />
      </propertygroup>
      <callbacks>
        <onupdate>onupdateStep</onupdate>
      </callbacks>
      <description>定義項目名稱及材料屬性</description>
    </step>

定義完XML界面后,編寫對應的回調函數 onupdateStep,實現創建分析流程和創建材料的功能,主要用到Workbench Project界面腳本腳本,這些腳本完全可以通過錄制的方式實現,只需要將錄制完成的腳本中數據參數化,使用XML界面對應的數據即可完成。

def onupdateStep(step):
    global mechSys
    mechSys = GetTemplate(TemplateName="Static Structural", Solver="ANSYS").CreateSystem()
    engData = mechSys.GetContainer(ComponentName="Engineering Data")
    projectName = step.Properties["projectName"].Value
    mechSys.DisplayText = projectName
    def CreateMaterial(name, density, young, poiRation,tensileY):
        mat = engData.CreateMaterial(Name=name)
        mat.CreateProperty(Name="Density").SetData(Variables=["Density"],Values=[["%s [kg m^-3]" % density]])
        mat.CreateProperty(Name="Elasticity", Behavior="Isotropic").SetData(Variables=["Young's Modulus"], Values=[["%s [MPa]"%young]])
        mat.GetProperty(Name="Elasticity").SetData(Variables=["Poisson's Ratio"], Values=[["%s"%poiRation]])
        mat.CreateProperty(Name="Tensile Yield Strength").SetData(Variables=["Tensile Yield Strength"], Values=[["%s [MPa]"%tensileY]])
    matBararmName = step.Properties["grpBararmMat/matBararmName"].Value
    matBararmDensity = step.Properties["grpBararmMat/matBararmDensity"].Value
    matBararmYoung = step.Properties["grpBararmMat/matBararmYoung"].Value
    matBararmPoi = step.Properties["grpBararmMat/matBararmPoi"].Value
    matBararmTensileY = step.Properties["grpBararmMat/matBararmTensileY"].Value 
    matBucketName = step.Properties["grpBucketMat/matBucketName"].Value
    matBucketDensity = step.Properties["grpBucketMat/matBucketDensity"].Value
    matBucketYoung = step.Properties["grpBucketMat/matBucketYoung"].Value
    matBucketPoi = step.Properties["grpBucketMat/matBucketPoi"].Value
    matBucketTensileY = step.Properties["grpBucketMat/matBucketTensileY"].Value 
    CreateMaterial(matBararmName, matBararmDensity, matBararmYoung, matBararmPoi, matBararmTensileY)
    CreateMaterial(matBucketName, matBucketDensity, matBucketYoung, matBucketPoi, matBucketTensileY)
    ExtAPI.ExtensionManager.CurrentExtension.Attributes["matInfo"] = [matBararmName, matBucketName]  

2創建模型

  • 幾何建模:在Project界面設置模型尺寸,根據界面參數自動在SpaceClaim中創建模型,并創建加載邊界、約束邊界的命名集合。 Ansys ACT案例----挖掘機斗桿、動臂、鏟斗工作分析案例的圖2XML文件定義界面如下所示:
 <step name="geoStep" version="1" caption="幾何建模" HelpFile="help/geoStep.html" Layout="ProjectLayout@ExcavatorAutomation" >
      <propertygroup name="grpPoleParams" caption="斗桿參數定義" persistent="False" parameterizable="False">
        <property control="float" name="polelength" caption="斗桿長(mm):" persistent="False" parameterizable="False" default="12000" />
        <property control="float" name="polewidth" caption="斗桿寬(mm):" persistent="False" parameterizable="False" default="900" />
        <property control="float" name="polethick" caption="斗桿厚(mm):" persistent="False" parameterizable="False" default="600" />
        <property control="float" name="polecorner" caption="斗桿圓角(mm):" persistent="False" parameterizable="False" default="192" />
        <property control="float" name="polediscenter" caption="斗桿中心距(mm):" persistent="False" parameterizable="False" default="2030" />
        <property control="float" name="poleshell" caption="斗桿厚度(mm):" persistent="False" parameterizable="False" default="-20" />
      </propertygroup>
      <propertygroup name="grpHandleParams" caption="斗柄參數定義" persistent="False" parameterizable="False">
        <property control="float" name="handlejupcorner" caption="斗柄上圓角(mm):" persistent="False" parameterizable="False" default="305" />
        <property control="float" name="handledowncorner" caption="斗柄下圓角(mm):" persistent="False" parameterizable="False" default="216" />
      </propertygroup>
      <propertygroup name="grpConrodParams" caption="連桿參數定義" persistent="False" parameterizable="False">
        <property control="float" name="conrodangle1" caption="連桿草圖角度1:" persistent="False" parameterizable="False" default="45" />
        <property control="float" name="conrodangle2" caption="連桿草圖角度2:" persistent="False" parameterizable="False" default="30" />
        <property control="float" name="conrodlength" caption="連桿長(mm):" persistent="False" parameterizable="False" default="550" />
      </propertygroup>
      <propertygroup name="grpBucketParams" caption="鏟斗參數化定義" persistent="False" parameterizable="False">
        <property control="float" name="bucketlength" caption="鏟斗長(mm):" persistent="False" parameterizable="False" default="2000" />
        <property control="float" name="bucketwidth" caption="鏟斗寬(mm):" persistent="False" parameterizable="False" default="2000" />
        <property control="float" name="bucketheight" caption="鏟斗高(mm):" persistent="False" parameterizable="False" default="3000" />
        <property control="float" name="bucketthick" caption="鏟斗厚(mm):" persistent="False" parameterizable="False" default="100" />
        <property control="float" name="bucketAcircle" caption="鏟斗鉸接圓(mm):" persistent="False" parameterizable="False" default="190" />
        <property control="float" name="liftlugcircle" caption="吊耳圓(mm):" persistent="False" parameterizable="False" default="300" />
        <property control="float" name="toothlength" caption="斗齒長(mm):" persistent="False" parameterizable="False" default="300" />
        <property control="float" name="toothwidth" caption="斗齒寬(mm):" persistent="False" parameterizable="False" default="16" />
        <property control="float" name="toothheight" caption="斗齒高(mm):" persistent="False" parameterizable="False" default="350" />
        <property control="float" name="toothobliquelength" caption="斗齒斜邊長(mm):" persistent="False" parameterizable="False" default="325" />
      </propertygroup>
      <propertygroup name="grpMovarmParams" caption="動臂參數化定義" persistent="False" parameterizable="False">
        <property control="float" name="Movarmlength" caption="動臂長(mm):" persistent="False" parameterizable="False" default="15000" />
        <property control="float" name="Movarmwidth" caption="動臂寬(mm):" persistent="False" parameterizable="False" default="1600" />
        <property control="float" name="Movarmdowncircle" caption="動臂下圓(mm):" persistent="False" parameterizable="False" default="547" />
        <property control="float" name="Movarmupcircle" caption="動臂上圓(mm):" persistent="False" parameterizable="False" default="200" />
        <property control="float" name="Movarmdownhole" caption="動臂支踵孔(mm):" persistent="False" parameterizable="False" default="150" />
        <property control="float" name="Movarmshell" caption="動臂厚度(mm):" persistent="False" parameterizable="False" default="-20" />
        <property control="float" name="Movarmlug" caption="動臂吊耳(mm):" persistent="False" parameterizable="False" default="150" />
      </propertygroup>
      <propertygroup name="grpBushhandleParams" caption="軸套扶柄參數化定義" persistent="False" parameterizable="False">
        <property control="float" name="Tuiyacir" caption="軸套扶柄外圓(mm):" persistent="False" parameterizable="False" default="250" />
        <property control="float" name="tuiyacir" caption="軸套扶柄內圓(mm):" persistent="False" parameterizable="False" default="150" />
      </propertygroup>
      <propertygroup name="grpAssembleParams" caption="裝配體設置參數化定義" persistent="False" parameterizable="False">
        <property control="float" name="MovingDistance" caption="移動距離(mm):" persistent="False" parameterizable="False" default="3497.97" />
        <property control="float" name="Angleofrotation" caption="旋轉角度:" persistent="False" parameterizable="False" default="-45" unit="" />
      </propertygroup>
      <property control="boolean" name="Movarm" caption="抑制動臂" persistent="False" parameterizable="False" default="false" />
      <property control="boolean" name="polebucket" caption="抑制斗桿鏟斗" persistent="False" parameterizable="False" default="false" />
      <callbacks>
        <onupdate>onupdateGeoStep</onupdate>
      </callbacks>
      <description>創建參數化工作裝置模型</description>
    </step>
  • 創建模型回調函數 onupdateStep,主要用到SpaceClaim腳本創建參數化模型,SpaceCliam同樣支持腳本錄制,只需要將錄制完成的腳本中數據參數化,使用XML界面對應的數據即可完成。創建模型腳本比較多,此處只做部分展示。
# Set Sketch Plane
ViewHelper.SetSketchPlane(Plane.PlaneXY)
# 斗桿
SketchLine.Create(Point2D.Origin,Point2D.Create(MM(polelength),-MM(0)))
SketchLine.Create(Point2D.Create(MM(polelength),-MM(0)),
Point2D.Create(MM(polelength),-MM(polewidth)))
SketchLine.Create(Point2D.Create(MM(polelength),-MM(polewidth)),
Point2D.Create(-MM(0),-MM(polewidth)))
SketchLine.Create(Point2D.Create(-MM(0),-MM(polewidth)),Point2D.Origin)
cirRes=ViewHelper.SetViewMode(InteractionMode.Solid)
cirSel=Selection.Create(cirRes.CreatedBodies[0].Faces)
ExtrudeFaces.Execute(cirSel,Direction.DirZ,MM(polethick),ExtrudeFaceOptions())

ViewHelper.SetSketchPlane(Plane.PlaneZX)
endthick=0.41*polewidth
endlength=0.7*polelength
endlength1=0.074*polelength
ske1=polethick-endthick
ske2=math.tan(endangle1)
ske3=math.tan(endangle2)

SketchLine.Create(Point2D.Create(MM(endthick),MM(0)),Point2D.Create(MM(endthick),MM(endlength)))
SketchLine.Create(Point2D.Create(MM(endthick),MM(endlength)),Point2D.Create(MM(polethick),MM(endlength+(ske1)/ske2)))

SketchLine.Create(Point2D.Create(MM(polethick),MM(endlength+ske1/ske2+endlength1)),
Point2D.Create(MM(endthick),MM(ske1/ske3+endlength+ske1/ske2+endlength1)))
SketchLine.Create(Point2D.Create(MM(endthick),MM(ske1/ske3+endlength+ske1/ske2+endlength1)),
Point2D.Create(MM(endthick),MM(polelength)))

SketchLine.Create(Point2D.Create(MM(polethick),MM(0)),Point2D.Create(MM(polethick),MM(endlength+ske1/ske2)))
SketchLine.Create(Point2D.Create(MM(polethick),MM(endlength+ske1/ske2+endlength1)),Point2D.Create(MM(polethick),MM(polelength)))
SketchLine.Create(Point2D.Create(MM(endthick),MM(0)),Point2D.Create(MM(polethick),MM(0)))
SketchLine.Create(Point2D.Create(MM(endthick),MM(polelength)),Point2D.Create(MM(polethick),MM(polelength)))

if GetRootPart().Bodies.Count==1:
    Fill.Execute(Selection.Create(GetRootPart().Curves))
    Delete.Execute(Selection.Create(GetRootPart().Curves))
polyFaceSel=Selection.Create(GetRootPart().Bodies[1].Faces)

ExtrudeFaces.Execute(polyFaceSel,-Direction.DirY,MM(polewidth),ExtrudeFaceOptions(ExtrudeType=ExtrudeType.Cut))
ViewHelper.SetViewMode(InteractionMode.Solid,None)
roundSel1=[edge for edge in GetRootPart().GetDescendants[IDesignEdge]()
if edge.Shape.Length==MM(polewidth)and edge.EvalMid().Point.X==MM(0) ]
roundSel=Selection.Create(roundSel1)
ConstantRound.Execute(roundSel,MM(polecorner),ConstantRoundOptions(),None)
roundSel2=[edge for edge in GetRootPart().GetDescendants[IDesignEdge]()
if edge.Shape.Length==MM(endthick)and edge.EvalMid().Point.X==MM(polelength) ]
roundSel=Selection.Create(roundSel2)
ConstantRound.Execute(roundSel,MM(handlejupcorner),ConstantRoundOptions(),None)

3選擇工況

在分析流程中共有五種工況,包含兩種動臂工況,一種斗桿工況,兩種鏟斗工況,在這個案例中,一次只能分析一種工況,需要用戶在界面選擇。Ansys ACT案例----挖掘機斗桿、動臂、鏟斗工作分析案例的圖3

    <step name="ChooseStep" version="1" caption="選擇工況" HelpFile="help/geoStep.html" Layout="ProjectLayout@ExcavatorAutomation" >
      <property control="select" name="Operating mode selection" caption="工作工況選擇" persistent="False" parameterizable="False" default="請選擇工況...">
        <attributes options="請選擇工況...,MovarmsoluStep1,MovarmsoluStep2,polesoluStep,bucketsoluStep1,bucketsoluStep2" />
        <callbacks>
          <onvalidate>OnSelectContext</onvalidate>
        </callbacks>
      </property>
   <callbacks>
        <onupdate>onupdateChooseStep1</onupdate>
      </callbacks>
    </step>
  • 通過下拉框選擇工況,對應的回調函數是 OnSelectContext,此處需要根據界面選擇,跳躍到對應的 Step中,實現方法如下:
def OnSelectContext(step, prop):
    MovarmsoluStep1=step.NextStep
    MovarmsoluStep2=MovarmsoluStep1.NextStep
    polesoluStep=MovarmsoluStep2.NextStep
    bucketsoluStep1=polesoluStep.NextStep
    bucketsoluStep2=bucketsoluStep1.NextStep
    firstStep = step.NextStep
    if prop.Value == "MovarmsoluStep1":
        MovarmsoluStep1.IsEnabled = True
        MovarmsoluStep2.IsEnabled = False
        polesoluStep.IsEnabled = False
        bucketsoluStep1.IsEnabled = False
        bucketsoluStep2.IsEnabled = False
    if prop.Value == "MovarmsoluStep2":
        MovarmsoluStep1.IsEnabled = False
        MovarmsoluStep2.IsEnabled = True
        polesoluStep.IsEnabled = False
        bucketsoluStep1.IsEnabled = False
        bucketsoluStep2.IsEnabled = False
    if prop.Value == "polesoluStep":
        MovarmsoluStep1.IsEnabled = False
        MovarmsoluStep2.IsEnabled = False
        polesoluStep.IsEnabled = True
        bucketsoluStep1.IsEnabled = False
        bucketsoluStep2.IsEnabled = False
    if prop.Value == "bucketsoluStep1":
        MovarmsoluStep1.IsEnabled = False
        MovarmsoluStep2.IsEnabled = False
        polesoluStep.IsEnabled = False
        bucketsoluStep1.IsEnabled = True
        bucketsoluStep2.IsEnabled = False
    if prop.Value == "bucketsoluStep2":
        MovarmsoluStep1.IsEnabled = False
        MovarmsoluStep2.IsEnabled = False
        polesoluStep.IsEnabled = False
        bucketsoluStep1.IsEnabled = False
        bucketsoluStep2.IsEnabled = True
    elif prop.Value == "請選擇工況...":
        MovarmsoluStep1.IsEnabled = False
        MovarmsoluStep2.IsEnabled = False
        polesoluStep.IsEnabled = False
        bucketsoluStep1.IsEnabled = False
        bucketsoluStep2.IsEnabled = False
    panel = step.UserInterface.Panel.GetComponent("Steps")
    panel.UpdateData()
    panel.Refresh()

4分析工況

分析中共包含5種工況,XML與回調函數都是類似的,此處以動臂工況一作為示例,XML界面如下:

<step name="MovarmsoluStep1" version="1" caption="動臂工況一分析設置" HelpFile="help/動臂工況一分析設置.html" Layout="ProjectLayout@ExcavatorAutomation">
      <propertygroup name="grpMeshParams" caption="網格參數" persistent="False" parameterizable="False">
        <property control="select" name="meshType" caption="網格劃分方法" persistent="False" parameterizable="False" default="Tetrahedrons">
          <attributes options="Automatic,Tetrahedrons,Hex Dominant" />
        </property>
        <property control="integer" name="meshSize" caption="網格單元尺寸(mm):" persistent="False" parameterizable="False" default="50" />
      </propertygroup>
      <propertygroup name="grpLoadParams" caption="約束及載荷定義" persistent="False" parameterizable="False">
        <property control="float" name="ARM Lift" caption="動臂提升力(N):" persistent="False" parameterizable="False" default="-1110000" />
        <property control="float" name="ARM Reel-Tension" caption="動臂提升卷筒拉力(N):" persistent="False" parameterizable="False" default="-1310000" />
        <property control="float" name="ARM Push-pressure" caption="動臂推壓力(N):" persistent="False" parameterizable="False" default="-541000" />
        <property control="float" name="ARM wirerope-Tension" caption="動臂變幅鋼繩拉力(N):" persistent="False" parameterizable="False" default="-1016000" />
      </propertygroup>
      <property control="boolean" name="earthLoadState" caption="是否考慮自重" persistent="False" parameterizable="False" default="true" />
      <callbacks>
        <onupdate>onupdateSolutionStep</onupdate>
      </callbacks>
      <description>網格、約束及載荷參數設置</description>
    </step>
  • 工況一的回調函數為 onupdateSolutionStep,主要用到Mechanical腳本,Mechanical不支持腳本錄制,需要用戶手動編寫,腳本編寫非常容易上手,此處展示部分內容。 Ansys ACT案例----挖掘機斗桿、動臂、鏟斗工作分析案例的圖4
def CreateLoadMovarmsoluStep1(matInfo,meshType,meshSize,ARM_Lift,ARM_Reel_Tension,ARM_Push_pressure,ARM_wirerope_Tension,earthLoadState):
    with Transaction():
        MaterialAssignByNsName("Mn",matInfo)
        #網格控制
        mesh =Model.Mesh
        mesh.ElementSize = Quantity("%s [mm]"% meshSize)
        if meshType=="Automatic":
            pass
        if meshType=="Tetrahedrons":
            mat=Model.Mesh.AddAutomaticMethod()
            mat.Location =GetNsObjByName("AllBodies")
            mat.Method =MethodType.AllTriAllTet
        if meshType=="Hex Dominant":
            mat=Model.Mesh.AddAutomaticMethod()
            mat.Location =GetNsObjByName("AllBodies")
            mat.Method =MethodType.HexDominant
        mat=Model.Mesh.AddSizing()
        mat.Location =GetNsObjByName("AllBodies")
        mat.ElementSize =Quantity("%s [mm]"% meshSize)
        mesh.GenerateMesh()
        #施加約束載荷
        analysis = Model.Analyses[0]
        #添加動臂固定約束
        fixSup =analysis.AddFixedSupport()
        fixSup.Location =GetNsObjByName("DBFixedSurface")
        #添加自重載荷
        if earthLoadState==True:
            stdEarthGravity = analysis.AddEarthGravity()
            stdEarthGravity.Direction=GravityOrientationType.NegativeYAxis
未完......

5操作演示如下:

Ansys ACT案例----挖掘機斗桿、動臂、鏟斗工作分析案例的圖5

以上就是本期內容,關注微信公眾號,有技術問題或項目合作可以直接在微信公眾號后臺留言。Ansys ACT案例----挖掘機斗桿、動臂、鏟斗工作分析案例的圖6

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

3
2
3