国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于NX自動計算沖壓方向旋轉角度的二次開發(fā)

2022-04-20 09:17劉麗莉李麗芳周燕芳
模具制造 2022年3期
關鍵詞:沖壓二次開發(fā)坐標系

劉麗莉,李麗芳,周燕芳

(上汽通用汽車有限公司,上海 201206)

1 引言

確定沖壓零件的沖壓方向是沖壓工藝排布過程中的第一步,沖壓方向的選擇是否合理直接影響了工藝質量的好壞,因此是非常重要的一個步驟。目前,沖壓件的沖壓方向一般是在Autoform里確定好后,再將沖壓坐標系導出至NX中。沖壓坐標系相對于絕對坐標系的繞軸旋轉順序以及旋轉角度僅在Autoform軟件中記錄顯示,導出后在NX中并無信息記錄,信息的傳遞一般為人工記錄。另外,一旦在NX中發(fā)現(xiàn)需要重新調整沖壓方向時,仍需回到Autoform中對零件進行旋轉調整并再次導出至NX中,反復操作導致效率相對較低。

因此,非常有必要在NX中開發(fā)一款能自動計算出指定沖壓坐標系相對絕對坐標系在某一特定旋轉順序下的旋轉角度值,并且可以支持直接在NX中繼續(xù)優(yōu)化調整沖壓方向的插件。本文基于C++對NX進行二次開發(fā),利用Visual Studio編程工具,開發(fā)了一款能自動計算指定坐標系相對于絕對坐標系在特定旋轉順序下的旋轉角度值,同時還在NX中建立交互界面,可以實現(xiàn)對沖壓坐標系繞指定坐標軸進一步旋轉調整,建立新的沖壓坐標系,并實時顯示調整之后的坐標系的旋轉角度值,避免了用戶在兩款軟件之間來回切換操作,提高了用戶在NX內處理沖壓方向的效率。

2 基本原理

2.1 繞單一軸旋轉

假定絕對坐標系按照X軸旋轉α°,根據(jù)三角函數(shù)計算可得繞X軸旋轉的旋轉矩陣TX,同理得到繞Y軸旋轉β°,繞Z軸旋轉γ°的旋轉矩陣TY和TZ。

2.2 繞多個軸旋轉

沖壓坐標系的旋轉過程屬于圍繞當下自身坐標系某軸轉動,即每次旋轉都固定被圍繞的某一軸,另兩軸動。同時,由于旋轉順序不固定,可以隨意組合,例如可以先繞X軸,再繞Y軸,最后繞Z軸旋轉,也可根據(jù)需要調整為先繞Y軸,再繞Z軸,最后繞X軸旋轉。根據(jù)歐拉旋轉公式,只需根據(jù)旋轉順序,將先旋轉的矩陣放前面,即可推算出在不同旋轉順序繞多個軸旋轉的旋轉矩陣。以旋轉順序為X、Y、Z為例:

2.3 角度計算

根據(jù)以上公式推斷,不難看出,若已知旋轉順序及旋轉角度,可以根據(jù)旋轉矩陣推算出旋轉后坐標系的矩陣方程,通過NX二次開發(fā)過程中的坐標系創(chuàng)建即可以得到我們所希望的坐標系。這就為在NX二次開發(fā)中實現(xiàn)通過旋轉順序和旋轉角度的輸入更新沖壓坐標系提供了依據(jù)。

同時,若已知最終坐標系的矩陣,根據(jù)不同的旋轉順序,亦可推算出每次旋轉的旋轉角度。還是以旋轉順序為X、Y、Z為例,具體計算過程如下。

如 果β=90°,則α=0°,γ=atan2(r21,r22),如 果β=-90°,則α=0°,γ=-atan2(r21,r22)。

在NX二次開發(fā)過程中,通過NXopen數(shù)據(jù)庫的調用,求出當前制件的工作坐標系即沖壓坐標系的矩陣,再根據(jù)上述公式,即可計算出當前沖壓坐標系相對于絕對坐標系的旋轉角度值。

3 界面設計

界面設計主要考慮界面簡潔,操作簡單,靈活方便等原則,UI界面如圖1所示。打開dll調用應用程序后,會自動計算出當前工作坐標系相對于絕對坐標系按先X軸,再Y軸,再Z軸的旋轉順序的各自旋轉的角度,并在下側信息欄同步顯示。同時用戶也可以通過Tip Order指令選擇旋轉先后順序,系統(tǒng)會自動計算出當前順序下的各自旋轉角度,并在信息窗口欄處更新輸出。

圖1 程序UI界面設計

如果用戶對當前的沖壓坐標方向不滿意,仍可繼續(xù)調整當前坐標系??梢酝ㄟ^Tip Vector控件對其進行修正,首先在Rotate By中選擇此次調整的角度值,然后在相應的旋轉軸(X軸/Y軸/Z軸)處選擇所需調整的“+”或“-”按鈕作相應的調整(“+”表示順時針旋轉,“-”表示逆時針旋轉),并在信息欄中實時顯示當前工作坐標系相對于絕對坐標系的旋轉角度。

4 開發(fā)流程

本次二次開發(fā)為了盡可能減少用戶的選擇,打開該程序后,會自動識別出當前工作坐標系,默認旋轉順序為X-Y-Z,通過2.3節(jié)中的角度計算關系通過當前沖壓坐標系矩陣計算出旋轉角度,并實時顯示在信息欄中,實現(xiàn)信息的自動識別和顯示。

當用戶選擇調整當前坐標系時,程序讀取當前工作坐標系的旋轉順序以及旋轉角度,根據(jù)用戶選擇的調整角度,結合已有的旋轉角度值,計算出新的坐標系的旋轉角度。根據(jù)2.2旋轉矩陣計算公式推算出坐標系的新的矩陣值,并在NX中更新沖壓坐標系,實現(xiàn)對零件沖壓方向的優(yōu)化調整。

程序核心算法流程圖如圖2所示。

圖2 程序核心算法流程

5 代碼開發(fā)

本案例是針對UI界面的NX二次開發(fā),首先在NX中設計出圖1所示的UI界面,在代碼生成模塊語言選擇C++,保存后生成dlx、hpp和cpp文件。

在Visual Studio中創(chuàng)建工程項目文件,選擇NXOpen C++Wizard模板,選擇相應的設置后完成工程項目創(chuàng)建,并將之前生成的hpp和cpp復制到工程項目中,即可完成項目框架的搭建工作?;旧纤写a均使用C++程序語言編寫在hpp和cpp中,通過編譯和調試后生成后綴名為dll的文件,在NX中通過Ctrl+U命令調用dll文件即可實現(xiàn)二次開發(fā)的功能。NX二次開發(fā)需特別注意NX版本和Visual Studio版本的匹配。

C++相對于C的增強,表現(xiàn)在兩個方面:①在原來基于過程的機制基礎上,對C語言做了不少的擴充;②增加了面向對象的機制。面向對象程序設計,是針對開發(fā)較大規(guī)模的程序而提出來的,目的是為了提高軟件開發(fā)的效率[1]。其最大特性是增加了面向對象程序設計的“類(class)”,通過設計類的成員及成員函數(shù),實現(xiàn)功能的封裝與調用,可以盡可能地提升程序的執(zhí)行效率。

本文整個程序的主要類及函數(shù)功能包括工作坐標系角度計算、旋轉角度計算、根據(jù)角度設置坐標系等等,部分代碼如下:

void Tip::Calculate_WCS_Angles()

{

tag_t wcs_id;

tag_t matrix_id_new;

double matrix_values[9];

UF_CSYS_ask_wcs(&wcs_id);

UF_CSYS_ask_matrix_of_object(wcs_id,&matrix_id_new);

UF_CSYS_ask_matrix_values(matrix_id_new,matrix_values);

double degree_x;

double degree_y;

double degree_z;

double degree_x_float;

double degree_y_float;

double degree_z_float;

degree_y = atan2(-matrix_values[2],sqrt(matrix_values[0]*matrix_values[0]+matrix_values[1]*matrix_values[1]));

if(degree_y!=PI/2||degree_y!=-PI/2)

{

degree_z = atan2(matrix_values[1]/cos(degree_y),matrix_values[0]/cos(degree_y));

degree_x = atan2(matrix_values[5]/cos(degree_y),matrix_values[8]/cos(degree_y));

}

else if(degree_y==PI/2)

{

degree_z=0;

degree_x=atan2(matrix_values[3],matrix_values[4]);

}

else if(degree_y==-PI/2)

{

degree_z=0;

degree_x=-atan2(matrix_values[3],matrix_values[4]);

}

degree_x_float=degree_x/PI*180;

degree_y_float=degree_y/PI*180;

degree_z_float=degree_z/PI*180;

double03->SetValue(degree_x_float);

double04->SetValue(degree_y_float);

double05->SetValue(degree_z_float);

}

void View_CSYS_set(int n,tag_t csys_tag)

{

tag_t object_id;

tag_t matrix_id_new;

double matrix_values[9];

UF_CSYS_ask_matrix_of_object(csys_tag,&matrix_id_new);

UF_CSYS_ask_matrix_values(matrix_id_new,matrix_values);

double axes[6];

if(n==1)

{

axes[0]=matrix_values[3];

axes[1]=matrix_values[4];

axes[2]=matrix_values[5];

axes[3]=matrix_values[6];

axes[4]=matrix_values[7];

axes[5]=matrix_values[8];

}

if(n==2)

{

axes[0]=matrix_values[0];

axes[1]=matrix_values[1];

axes[2]=matrix_values[2];

axes[3]=matrix_values[6];

axes[4]=matrix_values[7];

axes[5]=matrix_values[8];

}

if(n==3)

{

axes[0]=matrix_values[0];

axes[1]=matrix_values[1];

axes[2]=matrix_values[2];

axes[3]=matrix_values[3];

axes[4]=matrix_values[4];

axes[5]=matrix_values[5];

}

UF_VIEW_set_rotation(NULL_TAG,axes);

NXOpen::Session*theSession=NXOpen::Session::GetSession();

NXOpen::Part*workPart(theSession->Parts()->Work());

NXOpen::Part*displayPart(theSession->Parts()->Display());

workPart->ModelingViews()->WorkView()->Fit();

}

6 實現(xiàn)案例

在NX中打開某車型翼子板的零件數(shù)模,調用此應用程序,系統(tǒng)自動計算出在默認的先繞X軸、再Y軸、再Z軸的旋轉順序下的旋轉角度并顯示在信息區(qū)域,如圖3所示。當用戶在Tip Order控件中選擇旋轉順序先Y軸、再Z軸、再X軸后,系統(tǒng)再次計算出新的旋轉順序下的旋轉角度并顯示在信息區(qū)域,如圖4所示。當用戶使用Tip Vector控件對工作坐標系進行調整時,調整后的繞各坐標軸的旋轉角度會在信息區(qū)域實時更新,同時程序也會自動執(zhí)行將NX中的工作坐標系調整至相應位置的操作。最后,程序將NX界面的視圖調整至當前工作坐標系下主視圖。對比前后兩個工作坐標系下的零件,可見零件的沖壓方向已發(fā)生變化,如圖5所示。

圖3 首次調用程序

圖4 調整旋轉順序后

圖5 調整旋轉角度前后對比

7 結語

本文通過Visual Studio2019搭建了NX二次開發(fā)環(huán)境,基于C++開發(fā)了自動識別當前工作坐標系相對于絕對坐標系的旋轉角度,并通過UI界面的設計,實現(xiàn)了在UI界面內對當前坐標系進行旋轉調整并能計算最新的旋轉角度,同時更新沖壓坐標系,并且可以讓用戶自定義選擇旋轉順序,增加了該程序的使用柔性。通過此程序,在制件沖壓方向設定過程中可以減少從NX到Autoform的轉換,同時若前后工序的沖壓方向存在偏差或希望繼續(xù)優(yōu)化沖壓方向,也可以在NX中進行靈活的調整,大大提高了工作效率,拓展了NX應用范圍。

猜你喜歡
沖壓二次開發(fā)坐標系
AutoCAD 與PDMS 二次開發(fā)在三維復雜形體設計建模上的應用
面向沖壓工藝過程的軟件設計
飛機鈑金件沖壓成型工藝研究
獨立坐標系橢球變換與坐標換算
極坐標系中的奇妙曲線
例談對高中數(shù)學教材中習題的二次開發(fā)
淺談CAD軟件二次開發(fā)的方法及工具
三角函數(shù)的坐標系模型
求坐標系內三角形的面積
例談課本習題的“二次開發(fā)”