版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> (20 屆)</b></p><p> 基于MSC.PCL語言的錨機自動加載程序二次開發(fā)</p><p> 所在學院 </p><p> 專業(yè)班級
2、 船舶與海洋工程 </p><p> 學生姓名 學號 </p><p> 指導教師 職稱 </p><p> 完成日期 年 月 </p><p><b> 目錄</b&
3、gt;</p><p><b> 中文摘要II</b></p><p><b> 英文摘要III</b></p><p><b> 1 緒 論1</b></p><p> 1.1 前 言1</p><p> 1.2 概 述1&l
4、t;/p><p> 1.3 PCL的主要功能2</p><p> 1.4 PCL的語言結構及編譯使用2</p><p> 1.5 課題研究背景、內(nèi)容3</p><p> 1.5.1 研究背景3</p><p> 1.5.2 研究內(nèi)容4</p><p> 2 PCL函數(shù)及
5、語法規(guī)則6</p><p> 2.1 概 述6</p><p> 2.2 主要函數(shù)6</p><p> 2.3 與C語言的交互性11</p><p> 2.4 PCL語言的變量和常量12</p><p> 3 自動加載程序的開發(fā)13</p><p> 3.1 設
6、置參數(shù)界面13</p><p> 3.2 加載函數(shù)文件48</p><p> 3.3 實例計算48</p><p><b> 4 總結50</b></p><p><b> 參考文獻51</b></p><p><b> 致 謝52
7、</b></p><p> 外文翻譯(原文)53</p><p> 外文翻譯(譯文)59</p><p><b> 摘要</b></p><p> 本文基于MSC.Patran內(nèi)置的PCL語言,開發(fā)了錨機基座有限元分析系統(tǒng),實現(xiàn)了螺栓分布力的自動加載,開發(fā)有限元后處理系統(tǒng)界面,大大提高了螺栓分布力
8、的加載效率。程序一開始獲取錨機參數(shù)值,設置參數(shù)界面,獲取錨機自重,破斷載荷。建立錨機加載界面,錨機螺栓特點界面。</p><p> 編寫了批處理命令,對開發(fā)的程序進行統(tǒng)一編譯,縮短了程序開發(fā)的時間,提高了效率。最后對4000DWT油船/化學品船首部錨機(Ф42-AM2液壓組合)進行螺栓分點力加載計算。</p><p> [關鍵詞] PCL;錨機;二次開發(fā);有限元分析</p>
9、<p> THE SECOND DEVELOPMENT OF PROGRAM FOR ANCHOR WINCH WITH AUTOLOADING BASED OF A PCL</p><p> [Abstract] This thesis is based of a PCL which is included in MSC.Patran,which develop an analysis sys
10、tem about finite element for Ancho Winch.This system achieve distributing force autoloading for the base of anchor. it is also develop the post process proram, it is proved that the whole program is practical.At the begi
11、ning of program ,we first acquire the parameter and set parameter interface to receive the weight of ancho and craking force.The pape develop a interface of ancho loading as well</p><p> We also develop bat
12、ch program to compile the developed program,which shorten our time to develop program and improve efficiency。At last,we have calculated a ship’s anchor about distributing force with our program.</p><p> [Ke
13、y words] PCL;anchor;the second develop; finite element analysis</p><p><b> 1 緒 論</b></p><p><b> 1.1 前 言</b></p><p> MSC.Patran是世界公認最佳的集集合訪問,有限元建模,分析求解及數(shù)
14、據(jù)可視化于一體的新一代框架式軟件系統(tǒng),通過其全新的“并行工程概念”和無與倫比的工程應用模塊,將世界所有著名的CAD/ CAE/ CAM/ CAT(測試) 軟件系統(tǒng)及用戶自編程序自然地融為一體。MSC. Patran獨有的SGM(單一幾何模型) 技術可直接在幾何模型一級訪問各類CAD 軟件數(shù)據(jù)庫系統(tǒng),包括UG、Pro/ ENGI2NEER、CATIA、CADDSS、Euclid、SoildEdge 、Solid2works 、AutoDe
15、sk MDT 及I2DEAS 等各類CAD/ CAM軟件數(shù)據(jù)庫。除了框架系統(tǒng)外,MSC. Patran還擁有功能強大的各種專用分析應用模塊,主要包括:</p><p> MSC. Patran FEA(提供了靜力、動力、熱傳導、非線型及優(yōu)化靈敏度分析等功能);</p><p> MSC. Patran THERMAL (專用工程自動熱分析軟件系統(tǒng),可處理各種復雜的傳遞問題,并提供了豐富
16、的與溫度相關的材料庫、對流關系庫及與時間和溫度相關的專業(yè)函數(shù)庫);</p><p> MSC. Patran LAMINATEMODELER(集復合材料設計、分析、制造于一體的軟件系統(tǒng))。</p><p> PCL (MSC. Patran Command Language)語言是MSC. Patran的一個高級的模塊化結構的編程語言和用戶自定義工具,隨同MSC.Patran一起發(fā)布。
17、使用PCL語言可以創(chuàng)建新的或者改進MSC.Patran功能,能為特定應用程序創(chuàng)建用戶界面和數(shù)據(jù)庫,能夠調(diào)用MSC.Patran內(nèi)的所有函數(shù)和MSC.Patran的二次開發(fā)技術。本文利用PCL語言對MSC.Patran進行二次開發(fā),編制了錨機載荷的自動加載程序,實現(xiàn)錨機螺栓分力自動加載,并通過將自編批處理程序與具有外部工具調(diào)用功能編輯器集成,開發(fā)出了MSC.Patran的集成環(huán)境,并對軟件后處理系統(tǒng)集成化,有效地提高了工作效率。</
18、p><p><b> 1.2 概 述</b></p><p> PCL語言類似于C語言和FORTRAN語言,它包含與之相同的數(shù)據(jù)類型,也具有大量的函數(shù)庫。除了基本的數(shù)學函數(shù)庫和系統(tǒng)訪問的函數(shù)庫以外,它還提供了大量與有限元建模有關的函數(shù),如幾何建模函數(shù),網(wǎng)格自動劃分函數(shù),載荷施加,屬性添加及結果后處理有關的函數(shù)。利用這些函數(shù),用戶可以編寫自己的函數(shù),并用系統(tǒng)命令?。
19、ibrary將其加載到Patran中,建立與NASTRAN的連接,可以在以后的建模中隨時調(diào)用。由于MSC.Patran 沒有自帶的程序編輯器,需要利用那些具有外部工具調(diào)用功能的編輯器,比如MicrosoftVisual C++、Editplus等。這些編輯器都支持用戶自己開發(fā)的工具,首先要進行相關的參數(shù)設置,添加PCL 工具菜單,將PCL開發(fā)環(huán)境與批處理程序集成。設置完成后就可以在編寫函數(shù)文件的同時,直接通過編輯器進行PCL 函數(shù)文件的
20、編譯、轉(zhuǎn)換等工作,極大地方便了程序開發(fā)。</p><p> 在使用PCL語言進行錨機螺栓分力自動加載程序的編譯中,需要不斷對函數(shù)文件進行編譯,調(diào)試。這就必須調(diào)用MSC.Patran自帶的編譯程序p3pclcomp.exe,通過Patran命令行或DOS窗口中輸入!!input*.pcl的方式來完成(*代表文件名)。在進行圖形用戶界面開發(fā)時,那些表示控件大小和間距的標準參數(shù)是在appforms.p文件中定義的,在
21、界面函數(shù)文件的開始部分使用#include“appforms.p”語句就可以鏈接這些定義。不過,此類界面函數(shù)文件還必須通過C預處理程序cpp.exe進行轉(zhuǎn)換,也就是將*.pcl文件轉(zhuǎn)換為*.cpp文件后才能使用。在程序編寫初期,需要反復使用這些程序和指令進行錯誤調(diào)試,格式轉(zhuǎn)換等工作,較為麻煩。所以本文編寫了一系列批處理程序,使這些程序編譯,調(diào)試工作可以快速,準確的完成,大大提高了工作效率。這些程序以bat文件格式保存,在DOS狀態(tài)下運行
22、,DOS主要是一種面向磁盤的系統(tǒng)軟件,說的簡單些,DOS就是人與機器的一座橋梁,是罩在機器硬件外面的一層“外殼”,有了DOS,我們就不必去深入了解極其復雜的硬件結構,也不必去死記硬背那些枯燥的機器命令。我們</p><p> 1.3 PCL的主要功能</p><p> 1.命令行表達式輸入。2.可編譯的命令庫函數(shù)。3.豐富的表格及菜單庫供開發(fā)用戶圖形界面。4.遞歸的子程序和函數(shù)
23、調(diào)用。5.同類函數(shù)歸于一個類。6.條件分子語句:if、then、else、swith、case、default、break、continue。7.條件循環(huán)語句:repeat、until、while、end while、for、to、by、end for、list、end list。8.用戶可定義的表格生成功能使用戶的PCL函數(shù)可通過菜單選項來執(zhí)行。9.數(shù)據(jù)庫的訪問存取工具。10.整型、實型、邏輯型、字符串變量及常數(shù)。11.
24、局部、全局、靜態(tài)變量及類變量。12.任意變量類型的數(shù)組。13.虛擬內(nèi)存數(shù)組及數(shù)組內(nèi)存管理功能。14.跟蹤調(diào)試工具。15.數(shù)組排序和搜索。16.字符串函數(shù)包括大小寫轉(zhuǎn)換和所寫檢查。17.二進制和文本文件讀寫功能。18.多種數(shù)學函數(shù)程序。19.豐富的圖形函數(shù):繪點、線、虛圓或?qū)崍A、虛方塊或?qū)嵎綁K、虛多邊形或?qū)嵍噙呅?、在任意位置顯示文本、改變圖形寄存器。20.模型管理程序:比例縮放,轉(zhuǎn)動、旋轉(zhuǎn)、平移。21.系統(tǒng)實用工具。&
25、lt;/p><p> 1.4 PCL的語言結構及編譯使用</p><p> PCL的語言結構:一個PCL程序類似于C或者FORTRAN的函數(shù),在第一行必須以FUNCTION開頭一行以END FUNCTION結尾,中間為函數(shù)段,PCL函數(shù)的定義格式如下:</p><p> FUNCTION function(arg)</p><p><
26、;b> 程序段</b></p><p> END FUNCTION</p><p> 使用時,直接function(arg)執(zhí)行就行了。</p><p> PCL的編譯和使用:Patran提供了一個PCL的編譯程序p3pclcomp,在DOS窗口下可以執(zhí)行p3pclcomp,會出現(xiàn)“->”提示符,可以在提示符后輸入PCL編譯連接的指令
27、,也可以直接在PATRAN圖形窗口的命令條中直接輸入PCL編譯連接的指令,常用的PCL編譯命令包括:1.input:讀入PCL文件并編譯解釋,用此方法可以直接使用PCL文件。其具體使用說明格式為:!!input file.pcl2.compile:將PCL程序編譯成PATRAN的庫文件,用此方法可以把文本文件編譯成二進制文件,方便程序調(diào)用,而且可以進行程序的封裝。其具體使用格式為:!!compile file.pcl libra
28、ry.plb3.library:加載和組織PATRAN庫文件??梢约虞d任意個庫文件,也可以組織管理,包括合并,刪除程序類庫。 常用的使用說明格式為: !!library [add] library.plb(library.plb...) !!library [remove] library.plb(library
29、.plb...) !!libra</p><p> 1.5 課題研究背景、內(nèi)容</p><p> 1.5.1 研究背景</p><p> 起錨機作為現(xiàn)代船舶整體結構中不可或缺的一部分,其受力情況往往比較復雜,不能簡單的作為船體的某一局部考慮,而需要結合船舶的整體進行考慮. 起錨機結構除了承受自身的重力荷載外,還要承受繩索
30、的破斷力作用以及迎風面和側(cè)面風荷載作用. 如若遇到較大波浪作用,還需經(jīng)受波浪力的考驗。由于起錨機是船體結構的一部分,起錨機在受到上述荷載時也是對船體結構的一種考驗,尤其是與起錨機直接相連的船體甲板部分。利用有限元計算軟件對已設計好的船體結構進行分析驗算,已成為當前結構設計中十分重要的環(huán)節(jié)。錨機有限元分析過程中,螺栓分點力的加載過程非常復雜。MSC的Patran Command Language語言提供了豐富表格和菜單庫,供用戶開發(fā)自編分
31、析程序和圖形界面,PCL語言被廣泛應用于船體結構參數(shù)化建模與外載荷自動加載計算。本文采用自動加載方法大幅度的提高了工作效率,有效地避免了數(shù)據(jù)錄入錯誤的發(fā)生,使得有關科研人員可以輕松地運用自動加載的方法完成有限元分析時大量離散壓力的施加。</p><p> 1.5.2 研究內(nèi)容</p><p> MSC的Patran Command Language語言提供了豐富表格和菜單庫,供用戶開發(fā)
32、自編分析程序和圖形界面。而對錨機螺栓分布力進行加載計算時,其過程是相當復雜的,但考慮到其計算步驟是確定的和機械的,所以結合Patran的優(yōu)點,開發(fā)出一套自動加載程序并對后處理集成化。</p><p> 錨機是主要的船用錨系泊設備,其主要作用是保持船位不變,船舶緊急制動,使船安全靠離碼頭。錨機一般位于船首首樓甲板,在工作環(huán)境下一般受到錨鏈的作用,在船舶運營中錨機承受波浪的作用,這就要求錨機在甲板上的固定及支撐結構
33、要達到合理的結構強度,根據(jù)規(guī)范要求,需要校核甲板上浪工況和錨鏈破斷工況,其中甲板上浪分為右舷上浪(工況1)和左舷上浪(工況2),錨鏈破斷(工況3),按照CCS規(guī)范將各種工況計算所得的力分解至各個螺栓分別加載。作用在第i個螺栓組的軸向力按公式計算:</p><p><b> 式中:</b></p><p> —垂直于軸線的作用力,單位kn;</p>&
34、lt;p> —平行于軸線的作用力,單位kn;</p><p> —絞車軸線離安裝平面的高度,單位cm;</p><p> —第i個螺栓組到所有N個螺栓組的中心的x和y方向的坐標,單位cm;</p><p> —螺栓組所有螺栓橫剖面面積之和,單位;</p><p><b> —;</b></p>
35、;<p><b> —;</b></p><p> —由絞車和錨機重量之和作用在第i個螺栓的靜反力,單位kn。</p><p><b> 絞車和錨機重量:</b></p><p> 作用在第i個螺栓組上的剪切力以及合成力按下式計算:</p><p><b> 式中:
36、</b></p><p> ——摩擦系數(shù),取0.5;</p><p> ——錨機和絞車總重量8.658t;</p><p> ——重力加速度,取9.81;</p><p><b> ——螺栓組數(shù)量;</b></p><p> g———重力加速度,取9.81 m/s。</
37、p><p> 加載方式:采用主從節(jié)點連接錨機形心與各個螺栓,直接將載荷施加于錨機形心處。</p><p> 2 PCL函數(shù)及語法規(guī)則</p><p><b> 2.1 概 述</b></p><p> 所有的MSC.Patran 命令首先是由PCL編譯器所編譯過的,PCL表達式是由C語言程序所編譯的。PCL函數(shù)能
38、被編譯到庫函數(shù)中,與MSC.Patran文件相聯(lián)系。MSC.Patran的內(nèi)置函數(shù)是由C或FORTRAN所編寫的。其邏輯圖如圖1:</p><p><b> 2.2 主要函數(shù)</b></p><p> 1.ui_form_create ( callback, x, y, position, width, height, label, [unused] )。該函數(shù)
39、用于創(chuàng)建任務窗口,如圖2。</p><p><b> 參數(shù)解釋:</b></p><p> callback:活動窗口中的事件響應函數(shù),由于該窗口并沒有聲明事件,所以該值設置為“”。</p><p> X:相對于屏幕的橫坐標。</p><p> Y:相對于屏幕的縱坐標。</p><p>
40、 Position:設置該活動窗口在屏幕中的位置,“UL”,“UR”,“LL”和“LR”分別表示該活動窗口位于屏幕的左上角,右上角,左下角,右下角。</p><p> Width:表格的寬度。</p><p> Height:表格的高度。</p><p> Label:用于顯示在當前的活動名。</p><p> ui_label_cr
41、eate ( parent, callback, x, y, label )。該函數(shù)用于創(chuàng)建當前活動窗口的名字,但是并不能被修改和選擇,用于提供一些附加的說明信息。如圖3。</p><p> Parent:新創(chuàng)建的父類窗口,只能是已經(jīng)建立的的活動窗口。</p><p> Callback:不用設置。</p><p><b> X:窗口的橫坐標。<
42、;/b></p><p><b> Y:窗口的縱坐標。</b></p><p> Label:用于顯示的文本內(nèi)容。</p><p> 2.ui_separator_create (parent, name, x, y, length, horizontal )。該函數(shù)用于建立分割窗口標簽。</p><p>
43、 Parent:新創(chuàng)建的父類窗口,只能是已經(jīng)建立的活動窗口。</p><p> Name:分割標簽的名字。</p><p> X:分割標簽的橫坐標。</p><p> Y:分割標簽的縱坐標。</p><p> Length:分割標簽的長度。</p><p> Horizontal:若分割標簽是水平的,則該值設
44、置為true,若該分割標簽是垂直的,則該值設置為false。</p><p> 3.ui_databox_create(parent, callback, x, y, label_length, box_length, label, value,</p><p> label_above, datatype, num_vals)。盡管數(shù)據(jù)庫只能接受一行信息,但是這個信息卻可以很長,該函
45、數(shù)用于建立參數(shù)輸入框。</p><p> Parent:父類地址。</p><p> Callback:PCL函數(shù)名字,這個函數(shù)要事先在類聲明中定義。</p><p><b> X:位置坐標。</b></p><p><b> Y:位置坐標。</b></p><p>
46、 Label_length:按鈕寬度。</p><p> Box_length:按鈕高度。</p><p> Label:用于顯示按鈕文本,描述了數(shù)據(jù)框的內(nèi)容,如果不分配按鈕名字,用“”來代替該label值,并且設置label_above值為FALSE</p><p> Value:用于顯示數(shù)據(jù)框內(nèi)部的數(shù)值,如果數(shù)據(jù)框的初始值未被設定,則設定“”作為初始值。
47、</p><p> Label_above:標題被設置在數(shù)據(jù)框的頂部,則該值被設定為TRUE,標題被設置在數(shù)據(jù)框的底部,則該值被設定FALSE。</p><p> 4.ui_wid_get (widget, parm, value)。該函數(shù)用于接收窗口參數(shù)的初始值。</p><p> widget:其數(shù)值是被詢問是否接收。</p><p&g
48、t;<b> Parm:參數(shù)名。</b></p><p> Value:參數(shù)值。</p><p> 5.sys_allocate_string ( string, size )。該函數(shù)用于對PCL虛擬串變量分配儲存空間。</p><p> 6.ui_wid_get_vstring (widget, parm, vstr )。用于獲取串參
49、數(shù)的值,其返回值是虛擬的串變量。</p><p> sys_allocate_array (array,lb1,hb1 [,lb2, hb2 [,lb3,hb3 [,lb4, hb4 ]]])。</p><p> Lb1:一維數(shù)組的低值約束。</p><p> hb1:一維數(shù)組的高值約束。</p><p> lb2:二維數(shù)組的低值約束
50、。</p><p> Hb2:二維數(shù)組的高值約束。</p><p> Lb3:三位數(shù)組的低值約束。</p><p> Hb3:三維數(shù)組的高值約束。</p><p> Lb4:四位數(shù)組的低值約束。</p><p> Hb4:四維數(shù)組的高值約束。</p><p> 7.ui_spread
51、_create:該函數(shù)用于創(chuàng)建參數(shù)輸入表格。在用該函數(shù)創(chuàng)建表格時,需要創(chuàng)建后臺數(shù)據(jù)處理函數(shù)。也就是說,該函數(shù)只是給數(shù)據(jù)造了一個房子,但是我們需要這些數(shù)據(jù)在房子里被加工,這時就需要創(chuàng)建一個spread_cb函數(shù):</p><p> FUNCTION spread_cb(status,from_c,from_r, to_c, to_r,layer)</p><p> STRING stat
52、us[]</p><p> GLOBAL INTEGER from_c, to_c, from_r, to_r, layer</p><p> STRING cell_data[30]</p><p> /***********這個命令即為當點中spread中的任何一個時,顯示在selectdatabox中的</p><p> 數(shù)據(jù)*
53、**********/</p><p> IF((from_c ==to_c)&&(from_r ==to_r)) THEN</p><p> ui_spread_get_cell(nodes_spread, from_c, from_r, 1, cell_data)</p><p> ui_wid_set(nodes_select, &quo
54、t;VALUE",cell_data)</p><p><b> ELSE</b></p><p> ui_wid_set(nodes_select, "VALUE","")</p><p><b> END IF</b></p><p>
55、END FUNCTION</p><p> /**********結束SPREAD_cb函數(shù)****************/</p><p> 8.ui_spread_get_cell ( widget_id, col, row, layer, value ),該函數(shù)用于獲取表格輸入?yún)?shù)的地址。</p><p> Widget:必須是表格函數(shù)名。</p
56、><p> Col:接受參數(shù)的列。</p><p> Row:接受參數(shù)的行。</p><p> Layer:接受參數(shù)的層。</p><p> 9.ui_optionmenu_create ( parent, callback, x, y, label_length, label, label_above )。該函數(shù)用于創(chuàng)建下拉菜單選項,其
57、選項是一組垂直顯示的任務,但是這些任務只有用戶選中后才能執(zhí)行。如圖4:</p><p> parent:父系地址,必須是一個框架名,一個窗口名。</p><p> Callback:該窗口的命令響應函數(shù),這個函數(shù)必須在類中定義創(chuàng)建。</p><p><b> X:坐標。</b></p><p><b>
58、 Y:坐標。</b></p><p> Label_length:標簽長度。</p><p> Label:用于顯示選擇框的名字。</p><p> Label_above:標簽顯示在菜單選項的上面,則該值被設定為TRUE,標簽顯示在菜單選項的左邊,則該值被設定為FALSE。</p><p> 這里要注意的是選項菜單必須被
59、選中后,才能執(zhí)行該響應函數(shù),除非是當前的工作狀態(tài)就是執(zhí)行目前的任務。</p><p> 10.ui_item_create ( parent, name, label, toggleable, options ),用于創(chuàng)建一個一個任務控制鍵,其下拉任務中包含多重選擇任務。如圖5,</p><p> parent:父系窗口。</p><p> name:窗口活動
60、件的名字,這個名字通常作為事件訪問函數(shù)的名字,如果沒有引用訪問函數(shù),就設置為“”。</p><p> Label:被用來顯示窗口的活動與否,如果該值被設為“”或者其父系窗口是選擇菜單,則該條目將被設定為隱藏。</p><p> Toggleable:該值的設置僅用于菜單選項,如果希望該條目顯示出相鄰的條目,則該值設置為TRUE,如果該值設置,則該條目僅有一個值,為FALSE,則該條目僅
61、有一個值。</p><p> 需要注意的是用該函數(shù)創(chuàng)建的下拉菜單中的任務相對其它任務的位置是按照父系函數(shù)的數(shù)據(jù)類型所定義的。</p><p> 11.ui_labelicon_create ( parent, callback, x, y, iconname )。該函數(shù)用于創(chuàng)建多重命令窗口,如圖6。</p><p> Parent:新創(chuàng)建的父類活動窗口。<
62、;/p><p> Callback:無效果,該值設置為“”。</p><p> X:該活動窗口的橫坐標。</p><p> Y:該活動窗口的縱坐標。</p><p> Iconname:包含該復合窗口內(nèi)部信息的文件名。</p><p> 2.3 與C語言的交互性</p><p> PC
63、L的語法規(guī)則與C語言的規(guī)則較為相近,實際上在開發(fā)MSC.Patran的過程中,C,RORTRAN和PCL源代碼是同時運用的,換句話說,Patran的源文件是通過C語言開發(fā)出來的。運用C語言有許多優(yōu)點,包括交互性,兼容性等,這樣就增加了源代碼開發(fā)的可讀性,特別是借助C語言的宏定義,這樣會大大提高程序的運行效率。例如下面的選擇語句的編寫:</p><p> #define NODE 1</p><
64、;p> #define ELEMENT 2</p><p> IF ( entity == NODE ) THEN</p><p><b> xxx</b></p><p> ELSE IF ( entity == ELEMENT ) THEN</p><p><b> xxx</b>
65、;</p><p><b> END IF</b></p><p> 當然我們可以這樣替代:</p><p> IF ( entity == 1 ) THEN</p><p><b> xxx</b></p><p> ELSE IF ( entity == 2 )
66、 THEN</p><p><b> xxx</b></p><p><b> END IF</b></p><p> 另外,這些宏定義名可以放在include包含文件中,通過#define定義聲明。通過集中定義可以使程序簡潔,代碼簡單。需要注意的是,一般C語言會自動進行預編譯,如果被嵌入FORTRAN或PCL中,這
67、些源文件一定要進行預編譯,其編譯語句如下:</p><p> customization <input_file_name> <output_file_name></p><p> 2.4 PCL語言的變量和常量 </p><p> PCL變量要預先定義類型,范圍,維數(shù),所有的變量的名字所占用的字節(jié)為1到31位。合法的變量類型包括整形
68、,實型,邏輯值,數(shù)據(jù)串類型,窗口值。要定義變量的作用范圍和作用時間。</p><p> Integer:整形變量聲明只要在變量名字前聲明就可以了。例如:INTEGER a, b, c</p><p> Logical:邏輯變量聲明的格式為logical變量名,邏輯返回值為true或false。</p><p> Real:實型變量的聲明格式為Real變量名,冪
69、的數(shù)值大小為1.e-30到1.e30。</p><p> Strings:數(shù)據(jù)串類型的聲明只要在對應的變量名前就可以了,但是要注意聲明數(shù)據(jù)最大長度,例如:STRING name[20], option[130]。PCL串變量的長度數(shù)會自動達到預先聲明的最大值。例如:STRING line[40]</p><p> line = “ABC”</p><p> l
70、ine = line // “ ”</p><p> line = line // “DEF”</p><p> 則該line變量被定義為“ABCDEF”沒有尾格,這一點是和FORTRAN不同的。</p><p> Widgets:其定義格式如下:WIDGET myform, mybutton。窗口變量僅僅用于用戶與程序的交換,窗口變量可以嵌套在用戶定義的函數(shù)
71、中或其他的窗口中。窗口的常量的值是WIDGET_NULL.如果程序執(zhí)行失敗,則窗口變量的返回值為WIDGET_NULL。要對窗口變量進行初始化時,其初始值被設定為WIDGET_NULL。</p><p> 3 自動加載程序的開發(fā)</p><p> 3.1 設置參數(shù)界面</p><p> 錨機有限元分析系統(tǒng)的程序框架分為四步,錨機特征參數(shù)輸入,螺栓分布力輸入,
72、加載分析計算,后處理系統(tǒng),程序一開始獲取錨機參數(shù)值,設置參數(shù)界面,獲取錨機自重、破斷載荷等。要實現(xiàn)人機互動,提高錨機螺栓分布力自動加載,要設置合理的界面,易于操作,并且符合MSC.Patran的操作規(guī)則。</p><p> 程序的開始,進行文件聲明,如下:</p><p> #include "appforms.p"</p><p> #i
73、nclude "uiforms.p"</p><p> #include "lpenums.i"</p><p> #include "pdamsg.h"</p><p> #include "lpkeywords.i"</p><p> /*******
74、**文件包含聲明*********/</p><p> /*********appform.p和uiforms.p文件是用PCL函數(shù)編寫文件,創(chuàng)建了MSC.Patran的命令欄*********/</p><p> CLASS maoji</p><p> CLASSWIDE WIDGET form_id1, loads_type, dbox_weight,
75、dbox_loads, dbox_degree,</p><p> dbox_breadth, dbox_waveheight, dbox_length, dbox_height</p><p> /*********類函數(shù)聲明*********/</p><p> FUNCTION init()</p><p> REAL x_lo
76、c,y_loc,label_x_loc</p><p> REAL db_length</p><p> /*********定義數(shù)據(jù)類型*********/</p><p> x_loc = UNFRAMED_L_MARGIN</p><p> y_loc = FORM_T_MARGIN</p><p>
77、db_length = DBOX_WID_SPECIAL - DBOX_LABEL_LEN_SPECIAL - DBOX_LABEL_X_OFFSET</p><p> form_id1 = ui_form_create("", @</p><p> /*相對于screen而言的x坐標*/ FORM_X_LOC_SML, @</p><p>
78、 /*相對于screen而言的y坐標*/ FORM_Y_LOC, @</p><p> /*相對于哪個角落,本文選用左上角*/ "UL", @</p><p> /*寬度*/ FORM_WID_SML, @</p><p> /*高度*/ FORM_HGT_TALL, @</p><p> /*標簽*/ &quo
79、t;錨機加載", @ “”)</p><p> /*********************/</p><p> 該函數(shù)所創(chuàng)建的控制鍵如圖7。</p><p> /*********創(chuàng)建作者信息的標簽************/</p><p> label_x_loc = BUTTON_THIRD_X_LOC2</p&
80、gt;<p> ui_label_create(form_id1,"",label_x_loc,y_loc,"船建")該函數(shù)所創(chuàng)建的控制鍵如圖8。</p><p> /*********創(chuàng)建加載到MPC或者分點力加載************/</p><p> y_loc = y_loc + BUTTON_HGT + INTER_
81、WIDGET_SPACE</p><p> loads_type = ui_optionmenu_create(form_id1, @</p><p> /*調(diào)用函數(shù)的名稱*/ "function_type", @</p><p> /*x坐標*/ x_loc, @</p><p> /*y坐標*/ y_loc,
82、@</p><p> /*標簽的長度*/ 1.2, @</p><p> "功能的選取:", @</p><p> /*TRUE表示標簽在上面,FALSE表示在左邊*/</p><p><b> FALSE )</b></p><p> ui_item_create(
83、loads_type, @</p><p> /*調(diào)用函數(shù)的實參*/ "", @</p><p> /*標簽*/ "請選擇", @</p><p> /*這個選項只有一個值*/ FALSE)該函數(shù)所創(chuàng)建的控制鍵為圖9。</p><p> ui_item_create(loads_type,&qu
84、ot;concertratedforces","集中力MPC加載",FALSE)</p><p> /****************這里的concertratedforces為實參,即當執(zhí)行該命令時,將以concertratedforces為引導地址****************/</p><p> ui_item_create(loads_type,
85、"forces","分力加載",FALSE)</p><p> /*********************************創(chuàng)建錨機特點的控件************************</p><p> ************************/</p><p> /****************
86、***以上concertratedforces和forces作為新參數(shù)界面的實參,當執(zhí)行不同的任務時,工作窗口將進行切換</p><p> *******************/</p><p> y_loc = y_loc + BUTTON_HGT + INTER_WIDGET_SPACE</p><p> dbox_weight=ui_databox_c
87、reate(form_id1,"", x_loc, y_loc, 1, db_length,</p><p> "錨(絞)機重W(t):", "", FALSE, "REAL", 1)</p><p> y_loc = y_loc + DBOX_HGT_LABOVE + INTER_WIDGET_SPACE
88、</p><p> dbox_loads=ui_databox_create(form_id1,"", x_loc, y_loc, 1, db_length,</p><p> "破斷載荷F(KN):", "", FALSE, "REAL", 1)</p><p> y_loc =
89、 y_loc + DBOX_HGT_LABOVE + INTER_WIDGET_SPACE</p><p> dbox_degree=ui_databox_create(form_id1,"", x_loc, y_loc, 1, db_length,</p><p> "錨鏈與水平面夾角θ(度):","", FALSE, &q
90、uot;REAL", 1)</p><p> /*********************************創(chuàng)建計算錨機特點的控件********************</p><p> ****************************/</p><p> y_loc = y_loc + DBOX_HGT_LABOVE + INTER
91、_WIDGET_SPACE</p><p> 所創(chuàng)建參數(shù)接受界面如圖10。</p><p> /*********************************創(chuàng)建一個書簽隔頁**************************</p><p> **********************/</p><p> ui_separat
92、or_create(form_id1,"",x_loc,y_loc,2.4,TRUE)</p><p> y_loc = y_loc + DBOX_HGT_LABOVE + INTER_WIDGET_SPACE</p><p> dbox_breadth = ui_databox_create(form_id1,"", x_loc, y_loc,
93、 1, db_length,</p><p> "錨(絞)計算寬度B(m):", "", FALSE, "REAL", 1)</p><p> y_loc = y_loc + DBOX_HGT_LABOVE + INTER_WIDGET_SPACE</p><p> dbox_height = ui_
94、databox_create(form_id1,"", x_loc, y_loc, 1, db_length,</p><p> "錨(絞)最大高度D(m):", "", FALSE, "REAL", 1)</p><p> y_loc = y_loc + DBOX_HGT_LABOVE + INTER_W
95、IDGET_SPACE</p><p> dbox_length = ui_databox_create(form_id1,"", x_loc, y_loc, 1, db_length,</p><p> "錨(絞)長度L(m):", "", FALSE, "REAL", 1)</p><
96、;p> y_loc = y_loc + DBOX_HGT_LABOVE + INTER_WIDGET_SPACE</p><p> dbox_waveheight = ui_databox_create(form_id1,"", x_loc, y_loc, 1, db_length,</p><p> "錨(絞)上浪高度h(m):", &
97、quot;", FALSE, "REAL", 1)</p><p> y_loc = y_loc + DBOX_HGT_LABOVE + INTER_WIDGET_SPACE</p><p> ui_button_create(form_id1, @</p><p> /*調(diào)用函數(shù)名*/ "sure", @&l
98、t;/p><p> /* x坐標*/ x_loc, @</p><p> /* y坐標*/ y_loc, @</p><p> /*按鈕的寬度 */ BUTTON_WID_THIRD, @</p><p> /* 按鈕的高度 */ BUTTON_HGT, @</p><p> /*文字內(nèi)容 */ "關閉
99、", @</p><p> /* */ TRUE, @</p><p> /*高亮度顯示為默認的按鈕 */ TRUE)</p><p> ui_button_create(form_id1, @</p><p> /*調(diào)用函數(shù)名*/ "next", @</p><p> /* x
100、坐標*/ x_loc+BUTTON_WID_THIRD+2*INTER_WIDGET_SPACE, @</p><p> /* y坐標*/ y_loc, @</p><p> /*按鈕的寬度 */ BUTTON_WID_THIRD, @</p><p> /* 按鈕的高度 */ BUTTON_HGT, @</p><p> /*文字內(nèi)
101、容 */ "下一步...", @</p><p> /* */ TRUE, @</p><p> /*高亮度顯示為默認的按鈕 */ TRUE)</p><p> END FUNCTION</p><p> 上述程序用于創(chuàng)建了參數(shù)輸入界面,如圖11。</p><p> ui_form_dis
102、play("maoji")</p><p> END FUNCTION</p><p> /*****************建立關閉函數(shù)***************/</p><p> FUNCTION sure()</p><p> ui_form_hide("maoji")</p&
103、gt;<p> END FUNCTION</p><p> /*****************結束關閉頁面函數(shù)***************/</p><p> /*****************建立選擇新頁面函數(shù)***************/</p><p> FUNCTION function_type(type)</p>
104、<p> STRING type[]</p><p> GLOBAL REAL F</p><p> IF(type == "concertratedforces")THEN</p><p><b> F=1</b></p><p> ELSE IF (type == &quo
105、t;forces")THEN</p><p><b> F=2</b></p><p><b> END IF</b></p><p> END FUNCTION</p><p> /*****************建立選擇新頁面函數(shù)***************/</p&
106、gt;<p> FUNCTION next()</p><p> GLOBAL REAL weight, breakloads, degree, breadth, height, length, waveheight</p><p> ui_wid_get(dbox_weight,"VALUE",weight)</p><p>
107、; ui_wid_get(dbox_loads,"VALUE",breakloads)</p><p> ui_wid_get(dbox_degree,"VALUE",degree)</p><p> ui_wid_get(dbox_breadth,"VALUE",breadth)</p><p>
108、 ui_wid_get(dbox_height,"VALUE",height)</p><p> ui_wid_get(dbox_length,"VALUE",length)</p><p> ui_wid_get(dbox_waveheight,"VALUE",waveheight)</p><p>
109、 /*********以上函數(shù)命令用于獲取輸入的參數(shù)***********/</p><p> ui_exec_function("luoshuan","display")</p><p> ui_form_hide("maoji")</p><p> ui_wid_save("maoji
110、")</p><p> END FUNCTION</p><p><b> END CLASS</b></p><p> /*****************結束選擇新頁面函數(shù)***************/</p><p> CLASS luoshuan</p><p> C
111、LASSWIDE WIDGET form_luoshuan,luoshuan_count,labelicon_1,luoshuan_nodes,</p><p> dbox_alltogether,coordinates_select</p><p> CLASSWIDE WIDGET luoshuan_type, x_coordinate,</p><p>
112、 y_coordinate,cnodes_selectframe, cnodes_select,nodes_mpc,text</p><p> FUNCTION init()</p><p> REAL x_loc,y_loc,frame_height,db_length, node_frame_height,csframe_height</p><p> G
113、LOBAL REAL F</p><p> x_loc = FORM_L_MARGIN</p><p> y_loc = FORM_T_MARGIN</p><p> db_length = DBOX_WID_SPECIAL - DBOX_LABEL_LEN_SPECIAL - DBOX_LABEL_X_OFFSET</p><p>
114、 frame_height = FRAME_T_MARGIN + INTER_WIDGET_SPACE + 2*DBOX_HGT_LABOVE +</p><p> 2*INTER_WIDGET_SPACE + FRAME_B_MARGIN</p><p> csframe_height = SFRAME_T_MARGIN + INTER_WIDGET_SPACE +SDBOX_HGT
115、_LABOVE +</p><p> INTER_WIDGET_SPACE + SFRAME_B_MARGIN</p><p> form_luoshuan = ui_form_create("", @</p><p> /*相對于screen而言的x坐標*/ FORM_X_LOC_SML, @</p><p>
116、/*相對于screen而言的y坐標*/ FORM_Y_LOC, @</p><p> /*相對于哪個角落,本文選用左上角*/ "UL", @</p><p> /*寬度*/ FORM_WID_SML, @</p><p> /*高度*/ FORM_HGT_TALL, @</p><p> /*標簽*/ "
117、錨機螺栓特點", @ “”)。該函數(shù)所創(chuàng)建的活動控制鍵如圖12。</p><p> luoshuan_count = ui_frame_create(form_luoshuan, @</p><p> /*調(diào)用函數(shù)*/ "", @</p><p> /*x坐標 */ x_loc,@</p><p> /*
118、y坐標 */ y_loc, @</p><p> /*frame的寬度 */ FRAME_WID_SINGLE, @</p><p> /*frame的高度</p><p> /******注意包含了一個按鈕,所以要足夠高******/</p><p> frame_height, @</p><p> /*
119、frame的標簽*/ "螺栓的分布特點")</p><p> x_loc = FRAME_L_MARGIN</p><p> y_loc = FRAME_T_MARGIN</p><p> labelicon_1 = ui_labelicon_create(luoshuan_count, @</p><p><
120、b> "", @</b></p><p><b> x_loc, @</b></p><p><b> y_loc, @</b></p><p><b> "1")</b></p><p> y_loc = y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于msc.pcl語言的錨機自動加載程序二次開發(fā)【文獻綜述】
- 基于msc.pcl語言的錨機自動加載程序二次開發(fā)【開題報告】
- 船舶與海洋工程畢業(yè)設計散貨船錨機底座的振動分析
- 船舶與海洋工程畢業(yè)設計基于vb的艙口蓋結構計算程序開發(fā)
- solidworks二次開發(fā)畢業(yè)設計
- proe二次開發(fā)畢業(yè)設計論文
- 船舶與海洋工程畢業(yè)設計集裝箱船錨機底座自由振動分析
- solid works二次開發(fā)畢業(yè)設計
- 畢業(yè)設計-erp軟件的二次開發(fā)
- 船舶與海洋工程畢業(yè)設計外文翻譯
- 基于msc.marc的“加料”奇異裂紋單元二次開發(fā)
- 船舶與海洋工程畢業(yè)設計大型江海聯(lián)運船舶強度設計
- 船舶與海洋工程畢業(yè)設計礦砂船性能設計
- 船舶與海洋工程畢業(yè)設計運沙船性能設計
- 基于msc.patran二次開發(fā)的機翼肋的拓撲優(yōu)化
- 船舶與海洋工程畢業(yè)設計9.0蟹籠漁船畢業(yè)設計
- 基于proe的齒輪模型庫二次開發(fā)畢業(yè)設計
- 船舶與海洋工程畢業(yè)設計漁船穩(wěn)性校核
- 船舶與海洋工程畢業(yè)設計基于apns的船體板材套料優(yōu)化設計
- 機械電子工程畢業(yè)設計-基于proe二次開發(fā)的標準件庫
評論
0/150
提交評論