注意:本文所有代碼都基於 Altair SimLab™ 2020.1 經典介面。
1. 分析工況介紹
差速器強度分析時要考慮螺栓預緊力,另外針對不同檔位有 37 個工況,每個工況中有 4 個載荷載入點,載入點上受力和轉矩。
圖1 差速器殼體模型
載荷資料來自實驗或者前期的多體動力學分析,保存為 csv 格式,可使用 Python 中的 pandas.read_csv 工具讀取數據。 csv 檔中每一行表示一個工況,每個工況都有 4 個載荷載入點,每個載入點都受 3 個方向的集中力和 3 個方向的轉矩。 (檔案下載見文末連結~)
圖2 載荷表(點擊圖片可查看高清大圖)
2. 代碼最終效果
根據不同的需求,在文末下載連結中提供兩個版本的代碼:初級版和高級版。
初級版可以認為是代碼初稿,邏輯結構簡單,但剛好能實現所需功能。 代碼將所有載荷步放到一個 Solution 中,且載荷和分析步都是自動編號,工況識別不方便。
圖3 初級版效果
高級版在初級版上經過一定的優化,考慮了更多可能存在的問題,結構邏輯相對更複雜,代碼可將分析步名稱自動設置為 csv 檔中對應的分析步名稱,以便識別工況,並且自動根據工況分組創建 6 個 Solution。
圖4 高級版效果
3. 程式碼使用方法
兩個版本的代碼都有 4 個修改點,使用代碼前需先修改,然後將代碼複製到 SimLab 中的 Python 視窗,按回車即可運行。
注意,修改代碼時請使用英文輸入法,否則可能會報錯。 (文末附帶兩個版本代碼使用方法小視頻,供您參考。 )
修改點1
指定載荷資料 csv 檔絕對路徑。 Windows 系統預設是左斜杠,因此複製路徑後需使用轉義字元 r 進行轉義。
初級版:
loadcase_file=pd.read_csv(r'D:\technical document\SimLab\Automation\wechat_article\CH4_fastloadcase\force_moment_data.csv',encoding='gb18030')
進階版:
filepath = r'D:\technical document\SimLab\Automation\wechat_article\CH4_fastloadcase\force_moment_data.csv'
修改點2
指定載荷載入點節點編號,可指定任意多個載入點,若增加載入點,csv 檔中需指定相應的載荷資料列,每個載入點對應 6 列數據。
初級版:
nodeid = ['535410', '535409', '535406', '535405']
進階版:
nodeid = [535410,535409,535406,535405]
修改點3
指定載荷步數量,當前共 37 個工況,若增加工況數量,需增加 csv 檔行數,每個工況一行數據。
初級版:
loadcase_count = 37
進階版:
LoadcaseCount = 37
修改點4
設置預緊力大小,當前預緊力為1000N
初級版:
pretension('1000',32)
進階版:
pretension_force = 1000
初級版和高級版兩個版本的代碼都不到 300 行,4 個修改點在代碼末尾有明確的註釋。
注意:Python 中以 # 開頭的行為註釋行,# 後面的內容都是註釋。
圖5 初級版修改點
圖6高級版修改點
4. 代碼撰寫思路
SimLab 中做二次開發的基本思路為:
1)將需要實現的功能在 SimLab 介面中手動操作一遍,錄製為宏代碼;
2)修改宏代碼,增強代碼通用性。 相當於 SimLab 提供了磚頭,只需用 Python 語言將磚頭按一定的結構疊在一起即可。
差速器強度分析需要用到創建 Solution、創建 loadcase、創建集中力和轉矩、施加預緊力、關聯預緊力工況等操作,撰寫代碼前需透過 Scripting - Record 工具錄製好相應的宏代碼。
錄製好宏代碼後,建議將每個功能對應的宏代碼轉換為函數,並對可能改變的物件進行替換,以備調用。
寫代碼時,建議開始位置導入需要使用的庫,中間位置定義各種工具函數,末尾定義主函數調用前面定義的工具函數,即函數式程式設計,這種結構容易保證代碼的邏輯清晰,可讀性強。
下面是初級版代碼中定義力/轉矩的函數,調用函數時需指定節點編號陣列 nodeid,節點載荷陣列 force,以及載荷步編號 forceid 三個變數。
圖7載荷創建函數
SimLab 宏代碼中所有物件都是字串,其修改方法為 '''+variable+''',如載荷創建函數圖中指定 Model 名稱對應的代碼,將模型名稱由:
A_transmissional_housing_v31_SM.gda
修改為
'''+simlab.getModelName("FEM")+'''
simlab.getModelName("FEM/CAD") 為 SimLab 中取得模型名稱的介面,若括弧中為 "FEM" 則表示獲取網格模型名稱,若括弧中為 "CAD" 則表示獲取幾何模型名稱:
<Model>'''+simlab.getModelName("FEM")+'''</Model>
定義集中力對應的代碼中,將X方向的載荷大小由具體數值修改為 '''+str(force[6*num+0])+''',讀取 force 數位中的物件,並通過 str() 函數將其轉換為字串串:
<Force-Fx Value="'''+str(force[6*num+0])+'''"/>
5. SimLab二次開發介面
SimLab 2020.1中提供了五十多個介面,涉及到 Group、Entity、Parameters 以及後處理等方面,打開 SimLab 後按 F1 鍵可打開幫助文檔,其中有詳細介紹,每個介面都有示例代碼(Sample Script)與使用說明。
圖8 SimLab介面
本文對應的代碼中主要使用了三個介面:
% 1、取得模型名稱
SimLab 中很多操作都和模型名稱相關,可用該介面自動獲取模型名稱,從而提高模型通用性。
simlab.getModelName("FEM")
▇2、根據前後置辨識Body
該介面可用於識別螺栓體,SimLab 自動建立的螺栓名稱都以 「Body」 開頭,通過下面的代碼可將所有螺栓 Body 名稱保存到變數 BodyNameList 中。
modelname = simlab.getModelName("FEM")
substringlist = ['Bolt*']
BodyNameList = simlab.getBodiesWithSubString(modelname, substringlist)
位數編號之後的下一個節點編號
比如整個模型最大節點編號為 999,則下面代碼得到的編號為 1000。 該介面是SimLab 2020.1新功能,之前的版本中不支援該介面,在需要創建節點時使用該介面,可確保賦予的節點編號沒有被佔用。
simlab.getNextNodeID(modelname)
6.SimLab Python庫支援
Python 有大量的標準庫,另外還有豐富的第三方庫。 SimLab 已經支援了 Python 中大部分常用庫,如本文代碼中涉及到的 os、sys、numpy 以及 pandas 庫。 撰寫代碼之前如何確認想用的 Python 庫是否已經被 SimLab 支援了呢?
有兩種辦法可以進行確認:
%, 方法一:使用 import 方法直接導入庫,若導入後不報錯,即表示已經支援。
%, 方法二:使用 help("modules") 查詢,可輸出 SimLab 支援的所有庫,目前支援約 200 個庫。
本文所有操作可參考以下這個視頻,
建議大家跟著視頻一起實際操作一遍,
學習效果更好哦 ↓↓↓
7. 模型及代碼下載
本文模型及代碼下載連結:
建議使用電腦端打開連結
留言列表