• 沒有找到結果。

Clienet Server

ORB Code

IDL Client

Stub

ServerIDL Skeleton

以Visual Basic程式語言的觀點來看,要使用CORBA來進行系統應用,需有如 下的步驟:

(1)用描述CORBA的IDL,將所要提供服務的物件描述出來,如:物件名,

輸入變數,輸出變數,exception等。

(2)之後即可利用IDL2VB進行處理,以產生用於將VB基本資料型態轉換 為CORBA基本資料型態的元件:Skeleton與Stub。及一些製作IDL2VB 作者所提供的便利元件(此部份依各家公司或者者的不同而不同,

CORBA的藍圖中,並無此部份之描述)。

(3)進行物件實際功能的製作,其中要繼承一些IDL2VB所產生的元件,以 便使用CORBA功能,如:繼承Skeleton,(此部份因各個CORBA製作公 司的不同而不同)。

(4).進行Server端,將物件於以註冊的程式之撰寫。

(5).將IDL2VB所產生的元件之Stub移到Client端,並進行應用物件之Client 程式的撰寫。

(6).啟動NameService(或OSAgent)以便能提供物件的Reference。

(7).啟動Server程式,去向NameService註冊物件的Reference,並提供物件 的服務。

(8).啟動Client,以便能進行遠端物件的應用。

Server、Client和NameService之間互動的情形,則如圖2-8所示:

NameService

rebind Object (listen)

CALL

YES NO

reSlove Object (listen)

receive Server IOR

Listen

Find NO

deal with request

CALL

NO

YES

Send request

Return Server IOR

YES

YES

receive return data Send return data

END 圖2-8 Server、Client和NameService 間運作流程圖

2-7 VB與CORBA實作範例

範例是利用Visual Basic來撰寫一個Server/Client架構的程式,之間透過 CORBA的架構來溝通,時序圖如圖2-9所示:

圖2-9 VB透過CORBA呼叫之運作時序圖

VB透過CORBA呼叫物件方法的程式製作步驟如下:

1. 編寫ILD檔案如下:

Hello sayHello()

module HelloApp {

interface Hello {

string sayHello();

};

};

2. 利用IDL Complier程式,將IDL轉出VB使用的元件。

IDL2VB –S Hello.idl

得到如下檔案:

3. 進行物件實際功能的製作,並且將需要繼承的元件加入,以便使用CORBA 功能。

4. 進行Server程式Coding的部分:

‘開頭需要先定義的資料 Option Explicit

Dim oOrb As cOrbImpl

Dim ooHelloImplTie As c_HelloAppHelloImplTie Implements c_HelloAppHello

‘Server 中實際物件功能

Public Sub c_HelloAppHello_sayHello() Dim sLogMessage As String

sLogMessage = "Client has called sayHello()"

c_HelloAppHello_sayHello = "HELLO"

End Sub

‘要啟動 ORB 所需要載入的部分(通常放在 FORM_LOAD 或者 LINK 的

按鈕中)

Private Sub Form_Load( ) On Error GoTo ErrHandler

'********建立連線的紀錄檔**********

Dim sLogFile As String

sLogFile = App.Path & "\Server.log"

Call VBOrb.logMsg(sLogFile, "Starting Server")

'******Get an ORB(建立連接到 Nameservice 中資料)******

Set oOrb = VBOrb.init(ORBId:="", ORBInitRef:="NameService="

& tbNameServiceURL.Text, _

OAPort:= tbOAPort.Text, OAVersion:=&H101, LogFile:=sLogFile, loglevel:=&H28)

'******Create an object and connect the object to the ORB.******

Set oHelloImplTie = New c_HelloAppHelloImplTie Call oHelloImplTie.setDelegate(Me)

Call oOrb.Connect(oHelloImplTie)

'******Bind server object to NameService(建立連線到 Nameservice)

******

Dim oObject As cOrbObject

Set oObject = oOrb.resolveInitialReferences("NameService")

Dim oNmRootContext As c_NmContext

Set oNmRootContext = m_NmContext.narrow(oObject) Dim oNmPath As c_NmNameComponentSeq

'******Set oNmPath = oNmRootContextExt.toName("PaintSHOW")******

Set oNmPath = New c_NmNameComponentSeq oNmPath.Length = 1

Set oNmPath.Item(0) = New c_NmNameComponent oNmPath.Item(0).id = "Hello"

oNmPath.Item(0).kind = ""

Call oNmRootContext.rebind(oNmPath, oHellomplTie.This) '************ORB 執行等待的迴圈程序************

Call OrbRunLoopOutsideOfDLL Exit Sub

'************程式出錯時候的中斷點************

ErrHandler:

Call VBOrb.ErrMsgBox(Err, "中斷點的名稱") End Sub

‘程式在連線時所使用的『ORB 執行等待的迴圈程序』

Public Sub OrbRunLoopOutsideOfDLL() On Error GoTo ErrHandler

Do

Call oOrb.performWork(10)

DoEvents 'Prevent blocking other window processes Loop

ORBisDown:

Set oOrb = Nothing Exit Sub

ErrHandler:

If VBOrb.ErrIsSystemEx() _

And Err.Number = (VBOrb.ITF_E_BAD_INV_ORDER_NO Or vbObjectError) Then

Resume ORBisDown End If

Call VBOrb.ErrReraise(Err, "OrbRunLoopOutsideOfDLL")

End Sub

‘程式結束時在關閉 ORB 的動作(通常會放在 Form_Unload)

Private Sub Form_Unload(Cancel As Integer)

If Not oOrb Is Nothing Then Call oOrb.shutdown(False) End Sub

5. 進行Client程式Coding的部分:

‘開頭需要先定義的資料 Option Explicit

‘要啟動 ORB 所需要載入的部分(通常放在 FORM_LOAD 或者 LINK 的按

鈕中)

Call VBOrb.ErrMsgBox(Err, "中斷點的名稱") End Sub

‘透過 CORBA 的架構使用遠端功能 Private Sub USE( )

'******************************呼叫遠端功能********************

On Error GoTo ErrHandler Set oHelloServer = m_

HelloAppHello.narrow(oOrb.stringToObject(tbIOR.Text)) Call oHelloServer.sayHello()

'************程式出錯時候的中斷點************

ErrHandler:

Call VBOrb.ErrMsgBox(Err, "中斷點的名稱") End Sub

6. 啟動NameService,等待Server端來註冊物件的Reference資料或者是 Client呼叫時,提供物件的Reference資料給它,執行等待畫面如下:

7. 啟動Server程式,去向NameService註冊物件的Reference,並且進入Listen 的動作,提供物件的服務,等待Client呼叫。

8. 啟動Client端程式,去向NameService請求取得Server端所提供的物件 Reference資料後,可以向一般使用物件的方法來使用遠端的物件Method 了。

(三) 線架構之NC模擬與驗證

模擬系統須能檢測出,並指出錯誤的位置,本模擬系統模擬結果如圖 3-3 所 示。

錯誤偵測包括格式錯誤、同一 block 群組重複錯誤、未定義之 G 碼、幾 何誤差偵錯、補正錯誤偵測、加工前未啟動主軸旋轉、插值運動時未給進給 率等容易犯的錯誤。

圖3-1、系統畫面規劃 NC 程式顯示區

機器狀態顯示區

刀具路徑 模擬區

下拉式功能表 圖示指令區

圖 3-2、圖示指令說明

G02 X14. Y-14.J-14.

G01 Y-15.

圖 3-3、模擬系統偵錯結果

3-3 單節操作(single block)

單節操作主要的目的在於程式剛開始加工時,每按一次啟動(CYCLE START)則執行一個單節,以便檢查程式是否有錯,因為即使是 CAD/CAM 軟 體轉換之 NC 程式亦可能在起始階段有設定上之疏忽,因此須以單節模擬以 逐步檢測,起始階段是否有錯誤,待執行幾個單節確定無問題時再取消單 節執行。另一用途則是手寫程式時如遇到問題,亦會使用單節操作來逐步 檢查問題之所在,以利找出原因,因此本計畫之模擬系統亦提供此功能,

而且執行時會於程式顯示區逐步指出目前執行之位置,若不使用單節執 行,當遇到錯誤而程式停止時亦會指出目前執行之位置,以利更正,圖 3-4 為單節操作實際執行的狀況,圖三亦顯示出程式執行到錯誤時停留的位置

NC 程式錯誤位置

及錯誤的單節內容。

由於本程式系統為使用 VisualBasic 6.0 語言發展之系統,因此對字串 處理之時均會重新配置記憶體,因此一面執行刀具路經模擬一面尋找單節 字串位置時會使執行效率降低,因此內定 NC 程式如果超過 64K 時尋找單節 字串位置功能會自動關閉,但如啟用單節操作時則不論檔案多大尋找單節 字串位置功能會自動打開,另外育有錯誤時該單節位置亦會自動打開尋 找,這樣做法不僅可提高執行效率,且未喪失應有功能,未來再將其改寫 至 Visual Studio .NET 之 VB7,並使用 string builder class 來處理字 串,或使用C語言,將會改善字串處理之速度。

3-4 多層 NC 副程式呼叫之模擬(M98 呼叫)

多層NC 副程式呼叫常使用於重複加工或手寫程式時常會用到,為N C程式訓練時很重要的一個課題,在範例二程式中,主程式呼叫副程式7002 四次,而副程式 7002 中又呼叫副程式 7001 五次,是屬於多層副程式呼叫,

在一般之控制器中最多可呼叫 7 層,本系統設計為可呼叫 64 層,當然可設 計成不限次數,這些用途早期用於 2.5D 之手寫程式運用,近來由於使用 CAD/CAM 系統來自動運算因此較未顯得重要,僅有像齒輪加工時為使齒 形正確加工出來因此常會使用較細之現斷來近四齒形因此如使用副程式呼 叫則程式較短,對加工及傳輸的效率上會較好,圖 3-5 為範例程式二死模 擬出的加工路徑。

圖 3-4、為單節操作的執行狀況 S300M03

M98 P7002 L4 G00G49Z55.

X68.

M99

O7001

G91G00Z-5.

G17G41G00X10.Y4.D02 G01Y25.F100

G03X20.Y20.J20.

G01X25.

Y-29.

G02X-11.Y-11.I-11.

G01X-40.

G40G00X-4.Y-9.

M99

圖 3-5、副程式呼叫範例二之執行結果

3-5 刀具補正模擬

刀具補正包括刀徑及刀長補正,而使用刀長補正的原因是因為一個程 式中使用多把不同長度之刀具,而NC程式之座標只有一個,因此必須把 不同刀長的刀具補成同一刀長,而刀徑補正是由為了書寫NC程式時不用 去計算刀具中心路徑,只要依照工件之幾何外型座標書寫,至於刀具中心 則由控制器依設定之刀具直徑自行計算刀具之中心路徑,另外由於程式書 寫者有時不知道機器操作者擁有的適當刀具尺寸,或者刀具的真實尺寸以 及刀具的磨耗情形,因此產生NC程式時只要照工件之幾何外型座標書 寫,而於加工操作時才依照真正之刀具直徑由控制器進行刀具中心路徑之

補正運算,這樣的操作也許較方便加工操作,因此進行加工時先做控制器 之補正模擬,以及早發現程式是否有所不妥或錯誤,本系統亦模擬在控制 器操作時之補正參數設定方式,使用者必須將刀具補正號碼所相對之補正 值輸入,否則經無法得到所要效果,表一為刀具補正號碼所相對之補正值,

其設定方式是由系統之下拉式功能表選擇補正設定(Compansation Set)

設定之,圖 3-6 為範例程式三之補正模擬結果。

表一刀具補正設定表

設定指令

刀具補正 設定表

範例程式三--刀具補正例子

G02 X14. Y-14.J-14.

G01 Y-15.

3-6 固定循環模擬

G92X0Y0Z250.

T01 T11 M06 T15

G90G43G00Z0H5S30M03

G99G81X400.Y-350.Z-153.R-97.F120 Y-550.

G98Y-750.

G99X1200.

Y-550.

G98Y-350.

G80G00X0Y0M05 G49G00Z250.

M06 T31

G90G43G00Z0H6S20M03

G99G82X550.Y-450.Z-130.R-97.P250F 60

G98Y-650.

G99X1050.

G98Y-450.

G80G0X0Y0M05 G49Z250.

M06 T32

G90G43G0Z0H7S10M03

G99G85X800.Y-350.Z-153.R-47.F40 G91Y-200.L2

G90G80G0X0Y0M05 G49Z250.

M06 T01 M02

圖 3-7 固定循環範例四之模擬結果

(四) 討論

本計畫在 CNC 程式互動式教學資源系統架構上採兩組伺服系統,分別 用於 NC 程式撰寫之指導,而另一伺服系統擬則用於 NC 程式之模擬驗證,

另外並進行發展以 CORBAR 架構之 CNC 教學資源分享程式,目前已經完成 以 VB 程式發展環境架構平台,並經測試可以和 JAVA 相互呼叫,因此許多 不同語言撰寫之函數、副程式應可相互運用,且可以是跨平台與跨系統,

將來可直接組合起來使用,另外對發展之單機型線架構式 NC 程式模擬系 統亦將評估如何架構才能提高使用效能、如何資源分享、如何管理、如何 進行發展至實體切削模擬及與控制器的人機結合,另外如何擴展至多軸加 工的模擬等,其他如在動態網頁上如何有效率地處理繪圖問題,這些都是 急待解決的問題,茲歸納如下:

(1) CNC 程式互動式教學資源系統發展語言的整合 (2) 以 CORBAR 架構之 CNC 教學資源分享程式的發展 (3) 單機型線架構式 NC 程式模擬系統的資源分享與管理 (4) 加入一些學習效果的自動評量

(5) 實體切削模擬系統的發展 (6) 多軸加工的模擬的研發

(7) 在動態網頁的繪圖問題(除了 JAVA APPLET 之外的方法)

(8) 處理 VB 上字串處理的速度問題 (9) 切削模擬系統控制器的結合

(10) 遠距教育訓練與 NC 控制系統的整合

以上所列舉的相關問題都是極待處理的問題,也是值得探討與解決的 問題,此將待下個年度來解決。

參考文獻:

1.Chen, Yu-Min and Liang, Ming-Wu, 1999, “Design and Implementation of a Collaborative Engineering Information System for Allied Concurrent

Engineering”, Int. J. of Computer Integrated Manufacturing Systems, Vol. 17, No.

“Remote Virtual Cutting Verification through Internet”, Proceedings of the 11th National Automation Technology, Chia-yi, pp. 833-840

6. R.S. Lee, Jo Peng Tsai, Jeng Nan Lee, Y.C. Kao, Grier C I Lin, and Tien Fu Lu,

“Collaborative Virtual Cutting Verification and Remote Machining through Internet”, Journal of Engineering Manufacture, Proceedings Instn. Mech. Engrs (B), Vol. 214 No B7, pp.635-644., 2000

9.鍾興臺,「網際網路智慧型助理之研究」,NSC 87-2213-E-032-014, 1998

9.鍾興臺,「網際網路智慧型助理之研究」,NSC 87-2213-E-032-014, 1998

相關文件