• 沒有找到結果。

I -SECS控制器架構設計

5.2.1 架構(Framework)介紹

架構[19][20]是一種基於特定目的而設計成可再利用的模組群。為了能以最少的工 時和人力開發出能滿足所有要求的應用軟體,一般應用軟體的開發工程師會使用架構作 局部自訂修改(Customize)並與其他零件搭配應用或擴充架構。利用物件導向語言所設 計出來的架構稱為物件導向架構(Object-Oriented Framework)。架構具有類似抽象類別 的性質,在設計物件導向架構時多半會利用抽象類別的性質,先在抽象類別定義幾個實 作的方法,至於欲更有彈性修改實作的方法,則在子類別中定義。

Framework 的設計目標:

‧ 能更有彈性的自行修改或擴充

‧ 減少使用架構時須寫的程式

‧ 簡化介面讓使用者容易瞭解

‧ 製作文件讓使用者容易瞭解

5.2.2 i-SECS 控制器的架構設計

在設計控制器前,我們先以 UML 來規劃,包含了使用案例圖與各模組的類別圖、

循序圖等,為了要達到架構設計的功能,我們採用兩種架構設計的方法:

1. 如 5.1.2 節所述,將控制器的功能區分為四個不同的功能模組。將模組分開主要 的目的是希望能將模組獨立運作,減少將來程式擴充或修改時所花費的時間。

2.

利用 Design Patterns(節 4.3 所示)來協助程式達到 Framework 的功能,如:使 用 Composite Pattern 與 Visitor Pattern 可以將訊息的處理(編碼解碼)與資料結構 (SECS-II)分開,當我們要擴充訊息時只要增加訊息物件即可,並不會影響到編碼 解碼的處理、使用 Bridge Pattern 可以將控制模組程式的功能層與實作層分開,

達到 Framework 的目的。

5.2.3 i-SECS 控制器程式實作

i-SECS 控制器是由通訊模組核心程式(節 4.4)所開發出來的獨立使用者介面控制 器。通訊核心程式在歷經紀森炫學長與李妍慧學姊[4]的研究開發後,程式通訊功能已趨 於完備。為了配合 i-SECS 控制器的應用,因此在通訊模組核心程式內做了部份的修改 與功能的擴充:

„ 修改功能部份-在 HSMS 類別中增加 Hashtable 來存放 HSMS Header 的 SystemBytes 值,目的是要讓控制器可以同時送出多個 Primary Message,並 等待接收對應訊息的 Secondary Message。

„ 新增功能部份-增加通訊模組的 SML 功能(如節 4.5),讓通訊模組可以將訊息 以 SML 的格式顯示在 GUI 上,增加訊息的可讀性。另外,為配合曹洪泰同學 的 GEM Scenario 功能[18],因此在通訊模組內增加了 74 個訊息物件,擴充後 通訊模組內可用的訊息物件為 146 個,詳細訊息內容格式請參照附錄一。

在 i-SECS 控制器程式的實作上,主要是在應用層軟體控制器程式的撰寫,目的是 希望延伸通訊模組的功能,讓通訊模組可以獨立操作,達到設備控制與製程監控的目 的。本節以圖 5.3 i-SECS 接收 HOST 端傳遞訊息循序圖及圖 5.4 應用 Bridge Pattern 的時間調整類別圖來說明 i-SECS 的程式架構。

z

循序圖說明

[1] 建立一執行緒,反覆不斷的檢查 HOST 端的 MessageQueue 中是否有訊息 物件存在,如果有,則將訊息物件取出。

[2] 將訊息物件交由 MessageDispatcher 物件作訊息的分派。

[3] 檢查訊息格式,解析此訊息內容是否正確,得到訊息中所包含的資訊,並判

斷訊息應該做的處理,最後再交由相關的功能物件執行。

[4] 將訊息轉傳到 CTC 端。

[5] 刪除 MessageQueue 中的訊息物件。

: MessageDispatcher : MessageRouter : MessageQueue

: EstablishCommunication

: SECS : DataCollection GetRQ_M(int)

dispatch(secsii.Message)

HOSTbypassToCTC(secsii.Message)

getInstance( )

SendMessage(String, secsii.Message)

DeleteRQ_M(int)

圖 5.3 i-SECS 接收 HOST 端傳遞訊息循序圖

圖 5.4 所示的是 i-SECS 應用 Bridge Pattern 的時間調整類別圖。TimeAdjust 是一 個符合 GEM Scenario 時間調整的功能類別,其主要的目的是當接收到時間調整訊息 時,可以透過 Bridge Pattern 呼叫實作層 Clock_Impl 的 setclock()方法,來調整 i-SECS 控制器的時間,讓 i-SECS 的時間能跟上層主機及設備控制器的時間一致。我們以表 5.1 來說明時間調整類別中每個參與物件的工作。

Clock_Impl

MessageQueue 屬於 SECS 通訊模組的一個類別,負責暫時存放所接收到的 訊息物件。

MessageRouter

由控制器所建立的獨立執行緒,負責檢查通訊模組內的訊息 佇列 (MessageQueue)是否接收到訊息,並將訊息傳遞給 MessageDispatcher 物件作訊息的分派。

MessageDispatcher 負責分派所接收到的訊息物件,判斷訊息應該做的處理,交 由相關的功能物件執行。

TimeAdjust

為時間調整的功能類別,有兩種可能的時間調整方式:

1. 當上層主機主動要求設定時間,

2. 上層主機要求設備回報時間,

當收到此兩種時間調整的訊息時,呼叫 Clock_Impl 類別,執 行 setclock()的方法,更改控制器的時間。

Clock_Interface 為一介面,介面中定義了時間調整的方法,並交由其子類別 Clock_Impl 來實作。

Clock_Impl 實作時間調整的工作,提供設定時間與取得控制器時間的方 法