這篇部落格文章最初發表於 cimetrix.com
您是否需要為設備中的元件開發複雜的驅動程式?讓我們來看看 Cimetrix®CIMControlFrameworkT通訊框架如何協助您達成此目標。
什麼是 CCF 通訊框架?
「通訊框架」(Communicator Framework)透過封裝 CCF 與裝置之間的連線,簡化了與硬體之間低階訊息的處理流程。
舉例來說,讓我們來探討控制軟體與硬體裝置之間是如何建立連線的。ASCII 序列連線需要透過 TCP 建立套接字連線、一種多執行緒機制來處理與裝置之間的多重訊息傳輸、用於同步指令及其對應回應的邏輯,以及其他幾項功能。若要從頭開始開發,這將是一項相當繁重的工作。
作為另一種選擇,CCF 提供了一個內建的 ASCII 序列連線類別,可快速實現上述所有功能。您只需使用此類別,即可與該元件建立 ASCII 序列連線。
Communicator Framework 的具體作用是什麼?
設備中的每個元件或裝置皆提供一組指令與回應,以執行其指定功能。Communicator Framework 包含一個用於處理這些指令的 Transaction 類別;發送至特定裝置的每條指令皆以交易的形式實現。
以裝卸港口的「夾緊」操作為例——相關指令可能是「LOCK」。現在,讓我們來看看身為 CCF 開發人員,我們需要執行哪些任務,才能在裝卸港口驅動程式中實作這項指令。
第一步是為載入埠建立一個 Transaction 類別,該類別必須繼承自 CCF Transaction 基類。請參閱以下範例,該範例建立了名為「Clamp」的交易。

在此範例中,ClampTransaction 類別將命令 Clamp 作為屬性接受。作為屬性傳遞給其基類的該命令,將會透過 ASCII 序列連接傳送至裝置。
下一步是實作一個 Communicator 類別,用以傳送指令並接收來自裝置的回應。請參閱以下範例程式碼。

CCF 產品包含一個 LoadPort 類別。在此,我們透過 ASCII 序列連線初始化 Communicator 類別,以執行該交易。

當需要執行夾緊操作時,CCF 會呼叫 LoadPort 的 Clamp 函式來執行夾緊。我們使用剛初始化的 Communicator 物件,將指令傳送至硬體。請注意,我們並未撰寫任何用於傳送指令或接收回應的程式碼,因為這是 Communicator 的職責。您可以透過呼叫 Communicator 基類的 PerformTransaction 函式,將指令傳送至硬體,如下所示。

信不信由你……就這樣!我們僅用驅動程式中寥寥數行程式碼,便向裝置發送了指令。那麼,該如何處理裝置傳回的回應呢?讓我們來看看。
每台裝置會根據其製造商的不同,對指令集實作不同的回應。這可能包括確認訊息、資料項目、各類事件等。 因此,每當 Communicator 接收到來自裝置的回應時,它會呼叫子類別上的抽象方法來解析該回應。身為 CCF 開發人員,您必須判斷該回應的類型、交易是否成功完成,以及據此該如何向 Communicator 做出回應。
以下範例示範了如何解析來自裝置的回應。

最後,我們該如何從硬體端處理這些事件呢?從上述程式碼中,您可以看到如何標示回應類型為「事件」;在此情況下,系統會呼叫其子類別中的另一個抽象方法來處理該事件。CCF 開發人員隨後可如下所示,在其程式碼中進行處理。

就是這樣。上述程式碼片段提供了一個包含 Clamp 交易的基本 loadport 驅動程式範例。若要為您的裝置實作額外的指令,只需新增更多交易,並從設備控制器中呼叫它們即可。Communicator Framework 將負責處理與您的裝置之間其餘的通訊工作。