本文檔的目的在于通過具體實例幫助用戶更好得理解達索系統(tǒng)3DEXPERIENCE平臺中EKL語言的用法。
EKL全稱Enterprise Knowledge Language(企業(yè)知識語言),是在V5/V6/3DEXPERIENCE環(huán)境下基于知識工程的一種腳本編程語言,屬于進程內的訪問,與CATIA/3DEXPERIENCE軟件同時執(zhí)行,它的目的是讓設計工程師在設計過程中,在確定變化規(guī)則的前提下,更快速高效得讓程序自動執(zhí)行重復性操作。
EKL具有可移植、面向對象、不需要編譯、自動化、能直接操作模型數據對象等特點,可以用作在數據庫中搜索對象、瀏覽不同結構、遍歷統(tǒng)計匯總、創(chuàng)建產品和PLM對象、導出數據至Excel或Xml中、讀取或寫入產品屬性等用途。
基礎語法
變量聲明:
使用 let 關鍵字(類型)聲明變量,如:
let x(real)
let y(Integer)
類型:
所有類型都為基本類型ObjectType 的派生類型。從ObjectType往下派生出Feature特征類型與Literal字面類型。
Feature特征類型提供了每個對象上可用的屬性列表(名稱、用戶信息、子項),以及可應用到每個對象的方法列表(訪問動態(tài)屬性、查詢、修改等)。
Literal字面類型表示普通字面類型(如長度、實數、整數等),無法具有屬性。且提供有限的現有字面類型列表。

圖1. ObjectType類型關系圖
功能Functions:
功能表示完成特定任務并返回值的代碼塊。功能使用輸入并對其進行處理,然后返回結果。
對Plane類型來說,Function可以使用Plane作為輸入條件,返回平面夾角。也可指定返回類型為Plane,查詢可用于此的Function。
angle (Plane, Plane): Angle
plane (Curve): Plane
屬性Attributes:
每個Feature類型均有可操作屬性,有些屬性可獲取,如:List->GetItem (Index: Integer),有些屬性可寫入,如:PLMEntity.V_Name,有些屬性只支持讀取,如:PLMEntity. PrimaryType。

圖2. 可查詢類型功能、屬性的EKL語言瀏覽器
控制流語句
條件語句:
EKL使用if 、else if、 else結構判斷條件是否為真:
if conditio-A
{ statementsA }
[else if condition-B
[ { statementsB } ] ] ...
[else
[ { statementsC } ] ]
循環(huán)語句:
循環(huán)語句重復執(zhí)行直到滿足特定條件。其也可執(zhí)行循環(huán)直到某個表達式賦值為 false。在這種情況下,執(zhí)行終止。
有兩種可用的循環(huán)語句:
第一種執(zhí)行次數取決于列表中的數量,且不可自定義起始與終止條件。
For
第二種執(zhí)行次數取條件后設置的次數,可以自定義起始與終止條件。
For
循環(huán)中可使用Break、Continue、Exit跳出或繼續(xù)或結束程序。
Break:結束當前循環(huán),執(zhí)行循環(huán)外語句。
Continue:結束當前條件,繼續(xù)執(zhí)行循環(huán)。
Exit:結束程序,不再執(zhí)行剩余語句。
創(chuàng)建對象
創(chuàng)建對象時可使用下列四個功能:
1.new
2.CreateOrModifyDatum
3.CreateOrModifyTemplate
4.InstantiateTemplate
new:支持創(chuàng)建的類型最多,Product,3Dpart,幾何體,幾何圖形集,各類AEC類型對象,點、線、面等對象,都可用new功能創(chuàng)建。
CreateOrModifyDatum:用于創(chuàng)建無參的點、線、面、軸系等Feature對象。
CreateOrModifyTemplate:用于零件內部使用Knowledge Pattern循環(huán)創(chuàng)建特征模板時使用。
InstantiateTemplate:常用于產品級循環(huán)創(chuàng)建產品模板時使用。
查詢與瀏覽對象
在進程中常用的查詢相關函數有:
1.Query
2.Access
3.Find
Query返回的結果是List,其他兩個是UndefinedType。
Query與Find函數支持條件查找,比如搜索總節(jié)點中帶有某些關鍵字的零件。
EKL另外也支持使用CreatePLMQuery函數查詢數據庫中文件。
當需要瀏覽模型,并獲取上下文對象時可以使用如下屬性:
1.Children
2.Reference
3.Owner
4.InstantiatedBy

Reference屬性:通過獲取Instance對象,使用.Reference屬性,返回此實例的參考模型。
InstantiatedBy屬性:當獲取對象是Reference時,可以通過此屬性獲取此參考模型的所有實例List。
Owner屬性:常用于查詢當前Feature的上一級Feature(模型特征,實例,參考等都屬于Feature)。

圖4. Owner與InstantiatedBy屬性關系圖
靈活使用Query加Children、Reference、Owner、InstantiatedBy屬性,可完整瀏覽整棵模型結構樹,完成數量統(tǒng)計,屬性提取,干涉檢查等多種工程應用。
文件交互
EKL支持與TXT、EXCEL、Xml進行文件讀取與寫入交互操作。
TXT常用函數有:
1.OpenTextFile
2.file->Read()
3.file->Write()
4.file->Close()
通過OpenTextFile函數訪問本地磁盤文件,file->Read()讀取文件內信息。file->Write()將信息寫入本地磁盤文件。最后通過file->Close()關閉文件,釋放內存。
EXCEL常用函數有:
1.CreateSheet
2.CellAsBoolean()
3.CellAsString()
4.CellAsReal()
5.SetCell()
通過CreateSheet函數訪問本地磁盤上EXCEL文件,再通過CellAsReal、Boolean、String分別讀取EXCEL中數值、布爾、字符串類型數據,完成數據獲取。
當需將數據寫入EXCEL內時,使用SetCell()函數,按照SetCell(rowIndex, columnIndex)先行后列順序完成寫入。
總結

圖5. EKL與Automation、CAA代碼量對比圖
達索系統(tǒng)3DEXPERIENCE平臺中常用的開發(fā)工具有EKL、Automation、CAA。
EKL因為是腳本語言,代碼量最少,函數接口較多,設計工程師最容易學習,通常幾行代碼,就能完成一個簡易功能。而Automation雖然可支持VBA、C#、VB.NET多種開發(fā)語言,但是往往平臺的新功能、重要功能的接口并未開放給Automation。CAA因其專業(yè)性與復雜性,適合于公司程序開發(fā)團隊,而不適合于設計工程師使用。
如上所述,這三種開發(fā)工具中,EKL為最適合設計工程師掌握和使用的開發(fā)工具。