姜順豹,楊東升
(1.中國科學(xué)院研究生院,北京 100049;2.中國科學(xué)院沈陽計算技術(shù)研究所,沈陽 110171)
針對開放式數(shù)控系統(tǒng)的控制要求,同時為了滿足其開放性需求,我國在2009年6月發(fā)布了開放式數(shù)控系統(tǒng)總線接口和通信協(xié)議的國標。標準中把數(shù)控總線模型劃分為物理層、數(shù)據(jù)鏈路層、應(yīng)用層與用戶層行規(guī)[3]。其中應(yīng)用層主要負責(zé)站點間的安全、可靠的數(shù)據(jù)傳輸通路,并為行規(guī)層提供傳輸服務(wù),而行規(guī)層則利用應(yīng)用層提供的服務(wù)在驅(qū)動器和控制器之間進行設(shè)備控制。其中開放式數(shù)控總線的結(jié)構(gòu)如圖1所示。
圖1 數(shù)控總線結(jié)構(gòu)
圍繞應(yīng)用層、數(shù)據(jù)鏈路層和物理層的研究很多,然而用戶和制造商比較關(guān)心的是如圖1中所示的伺服、I/O等設(shè)備的控制的問題,行規(guī)層的好壞直接影響NC系統(tǒng)的開放性。本文在國標的基礎(chǔ)上設(shè)計一個行規(guī)層的模型,抽象了不同制造商制造的同類設(shè)備,為用戶提供統(tǒng)一的接口服務(wù),同時實現(xiàn)了行規(guī)層中的伺服驅(qū)動器,最后給出了一個具體應(yīng)用實例。
以沈陽計算所牽頭制定的開放式數(shù)控系統(tǒng)國家標準中提出了開放式數(shù)控系統(tǒng)總線的概念,同時給出了一個數(shù)控總線的規(guī)范模型。它以ISO/OSI開放系統(tǒng)互連參考模型為基礎(chǔ),并對其加以改造,由物理層、數(shù)據(jù)鏈路層、應(yīng)用層與用戶層行規(guī)組成[2-3],如圖2所示。
圖2 開放式數(shù)控總線
在圖1的模型中,通過將鏈路層劃分為抽象數(shù)據(jù)鏈路子層與實數(shù)據(jù)鏈路子層,以便用戶選用現(xiàn)有標準協(xié)議或引入新的標準。用戶層行規(guī)以格式化數(shù)據(jù)結(jié)構(gòu)形式定義,包括管理,傳感器,驅(qū)動與I/O四種類別的數(shù)據(jù)定義,以確保裝置間的互操作性,支持面向應(yīng)用的實現(xiàn)。應(yīng)用層維護站點間的安全,可靠的數(shù)據(jù)傳輸通路,并為用戶層行規(guī)的命令與應(yīng)答提供傳輸服務(wù)。應(yīng)用層服務(wù)由連接管理、同步傳輸、異步傳輸、和傳輸管理等服務(wù)組成。
顯然這種方法能很大程度增強數(shù)控總線的開放性。但是標準給出的只是一種設(shè)計規(guī)范,而沒有對具體的實現(xiàn)方法做規(guī)定。
在國標中的規(guī)范指導(dǎo)下,我們可以設(shè)計一個向NC系統(tǒng)提供統(tǒng)一服務(wù)的行規(guī)層。在行規(guī)層的設(shè)計中不僅要處理具體設(shè)備的控制信息,而且還要負責(zé)兼容不同的協(xié)議,同時行規(guī)層還要屏蔽不同制造商的同類設(shè)備的差異,向NC系統(tǒng)提供統(tǒng)一接口服務(wù)。在圖1的基礎(chǔ)上建立了如圖3所示的行規(guī)層模型。
圖3 行規(guī)層模型圖
(1)驅(qū)動層:包括圖2中總線的物理層和鏈路層。主要用來初始化板卡以及周期性和板卡通信,同時還包含了一個總線仿真模塊,該模塊模擬了使用具體協(xié)議的主站板卡對發(fā)送到板卡上的數(shù)據(jù)的響應(yīng)。
(2)應(yīng)用層:數(shù)控系統(tǒng)中應(yīng)用的具體總線應(yīng)用層。比如具體的 MECHATROLINK-Ⅲ應(yīng)用層[7],canopen 應(yīng)用層,以及sercos應(yīng)用層協(xié)議等。
(3)通用行規(guī)層:裝置特征、功能特征和行為的規(guī)范[9]。在這層中抽象了特定裝置的行為規(guī)范,并向NC系統(tǒng)提供通用的特定裝置的服務(wù)接口。主要包括伺服[8]、主軸、I/O等的裝置特征以及對應(yīng)的行為規(guī)范,如軸控服務(wù),I/O控制服務(wù),接口控制服務(wù)等。軸控服務(wù)是利用伺服驅(qū)動器提供的通用服務(wù)接口來完成軸的業(yè)務(wù)邏輯控制的服務(wù)。I/O控制服務(wù)是利用I/O設(shè)備提供的通用服務(wù)接口來完成I/O設(shè)備控制的業(yè)務(wù)邏輯的服務(wù)。接口控制服務(wù)是與接口控制相關(guān)的一些服務(wù)。
其中的服務(wù)解釋和服務(wù)映射機制通過查詢相關(guān)的數(shù)據(jù)信息,統(tǒng)一定標格式,將來自NC服務(wù)的請求映射到具體的某個應(yīng)用層提供的服務(wù)中去,例如軸控服務(wù)調(diào)用伺服驅(qū)動器提供的通用接口,并查詢當(dāng)前伺服控制信息,將其映射到某個具體應(yīng)用層服務(wù)中。接口控制服務(wù)通過直接讀寫控制信息從而達到控制行規(guī)層的目的。
(1)總體結(jié)構(gòu)(softInterface)
在通用總線接口模型中各個模塊之間采用存放在共享內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)來進行數(shù)據(jù)傳輸以及接口控制,下面是行規(guī)層中伺服驅(qū)動器的數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)說明:SI_cmd數(shù)組是命令數(shù)組結(jié)構(gòu),主要用來存放發(fā)送到每個從站上的伺服行規(guī)層命令幀。SI_rsp數(shù)組是反饋值數(shù)組結(jié)構(gòu),主要用來存放從每個從站收到的伺服行規(guī)層反饋幀。SI_monitor是監(jiān)控結(jié)構(gòu),主要用來存放從每個從站后獲得的伺服驅(qū)動器監(jiān)控數(shù)據(jù)。SI_contorl是控制結(jié)構(gòu),主要完成行規(guī)層中伺服驅(qū)動器的控制功能。SI_unitSystem是通用定標系統(tǒng),主要用來統(tǒng)一不同總線的定標規(guī)格。SI_busInfo是總線信息結(jié)構(gòu),主要用來存儲總線網(wǎng)絡(luò)的設(shè)置。
(2)監(jiān)控結(jié)構(gòu)(SI_monitor)
對于每個現(xiàn)場總線網(wǎng)絡(luò)中的伺服驅(qū)動器而言,都有一個SI_monitor結(jié)構(gòu),其中的監(jiān)控數(shù)據(jù)如下所示:
其中I/O信號狀態(tài)的位定義如下:1-伺服準備好,2-伺服報警,3-位置到達,4-制動器釋放,5-零速檢測,6-速度到達,6-32保留定義。
(3)控制結(jié)構(gòu)(SI_control)
控制字段主要完成伺服軸輸入輸出控制,主軸輸入輸出控制等作用,以及監(jiān)控字段的選擇等。結(jié)構(gòu)所下示:
其中協(xié)議選擇字段用位定義來控制選擇的協(xié)議、版本等信息。輸入輸出控制字段用位定義來控制輸入伺服的控制信號。例如C_ioCtl字段定義如下:0-伺服使能,1-報警清除,2-CW行程限位,3-CCW行程限位,4-控制模式切換,5-偏差計數(shù)器清零,6-轉(zhuǎn)矩限制切換,7-增益切換,8-指令脈沖輸入禁止,9-32保留定義。
(4)定標系統(tǒng)(SI_unitSystem)
定標確定了在控制器和驅(qū)動器之間傳送的數(shù)據(jù)的數(shù)值含義,這里在軟件層次進行抽象以提供統(tǒng)一的定標系統(tǒng)。SI_unitSystem詳細結(jié)構(gòu)如下所示:
上述各種定標數(shù)據(jù)字段用位來進行定義,例如位置數(shù)據(jù)結(jié)構(gòu)字段如下定義:0-2-定標方法,3-推薦定標/參數(shù)定標,4-直線單位,5-保留,6-數(shù)據(jù)出處,7-處理格式。直線位置數(shù)據(jù)的計算方法:直線位置數(shù)據(jù)最低有效位的權(quán)值=直線單位×定標因子×10定標指數(shù),其他定標數(shù)據(jù)的計算方法與上面類似。
(5)總線信息結(jié)構(gòu)(SI_busInfo)
其中主要包含總線的配置信息,例如總線周期,從站數(shù)目,從站mac地址等。
(1)伺服驅(qū)動器行規(guī)提供的服務(wù):控制伺服設(shè)備的服務(wù)。主要利用數(shù)據(jù)結(jié)構(gòu)的SI_cmd和S_control中的C_ioctrl和C_SpindleCtl等來實現(xiàn)。具體提供的函數(shù)接口[1,6]如表 1 所示。
表1 伺服行規(guī)提供的服務(wù)列表
(2)面向nc的服務(wù):向nc提供伺服監(jiān)控值的服務(wù)。主要利用數(shù)據(jù)結(jié)構(gòu)的SI_monitor字段和m_contrl字段來實現(xiàn)。具體函數(shù)接口如表2所示。
表2 面向NC的服務(wù)列表
(3)接口控制服務(wù):對整個接口進行控制的服務(wù)。主要利用數(shù)據(jù)結(jié)構(gòu)的SI_uniforme和SI_control和SI_busInfo來實現(xiàn)。提供的一些主要函數(shù)接口如表3所示。
表3 接口控制服務(wù)列表
通過將伺服驅(qū)動器行規(guī)提供的接口應(yīng)用到JL100主站控制卡驅(qū)動及nc110(藍天數(shù)控系統(tǒng))系統(tǒng)中的運動控制器中,并利用提供的接口做出了一個總線的配置調(diào)試工具,驗證了上面設(shè)計的行規(guī)層切實可行。
(1)驅(qū)動程序設(shè)計
JL100控制卡驅(qū)動程序主要以周期通信的方式工作,同時調(diào)用行規(guī)層中提供的接口控制服務(wù)來完成采集數(shù)據(jù)以及總線信息初始化等工作。驅(qū)動程序包含兩個部分,一部分是總線通訊初始化過程(mst_int),主要是進行通訊卡的RAM檢測,參數(shù)配置,地址設(shè)置等.另一部分是初始化完成以后周期交換數(shù)據(jù)的過程(msg_exchange)。具體驅(qū)動程序結(jié)構(gòu)如圖4所示。
圖4 驅(qū)動程序設(shè)計
其中在初始化部分需要從接口的SI_busInfo中獲取初始化的參數(shù)信息,在周期線程中,將板卡上每個從站的數(shù)據(jù)和共享內(nèi)存中的為每個從站準備的命令值通道以及反饋值通道[4],進行周期性的交換。同時在周期線程中還需要分析獲取的每個從站的反饋值并計算以獲取監(jiān)控信息放到共享內(nèi)存中,以方便上層接口的使用。
(2)運動控制器行規(guī)層服務(wù)的調(diào)用流程
運動控制部分的主控程序也以周期方式執(zhí)行,結(jié)合行規(guī)層提供的軸控服務(wù)和面向nc的服務(wù)來完成軌跡生成、軸控制等任務(wù)[5]。如圖5所示。
這里運動控制器也包含了兩部分,第一部分是參數(shù)初始化,首先進行參數(shù)初始化,在參數(shù)初始化中,從共享內(nèi)存中SI_busInfo中獲取信息。第二部分是周期線程,在周期線程中首先確保伺服打開,然后利用讀取到的伺服監(jiān)控數(shù)據(jù),進行插補運算等,在每輪周期循環(huán)中都要檢查是否有伺服錯誤發(fā)生以及是否有參數(shù)需要配置,如果有發(fā)生則分別需要處理錯誤和配置參數(shù)。
圖5 運動控制器中關(guān)于行規(guī)層服務(wù)的調(diào)用
(3)總線配置調(diào)試工具實例設(shè)計
因為共享內(nèi)存對與用戶空間和內(nèi)核空間都可見,利用行規(guī)層中提供的服務(wù)可以很容易做出一個數(shù)控總線用戶配置工具,主要目的是方便數(shù)控總線接口的調(diào)試和開發(fā),具體開發(fā)環(huán)境rtlinux3.2+qt4.5。該配置調(diào)試工具流程圖如圖6所示。
在用戶空間運行一個主線程,一個周期線程。主線程響應(yīng)用戶進行操作的異步事件,用戶可以調(diào)用行規(guī)層提供的接口控制服務(wù)來配置該總線,或通過調(diào)用軸控服務(wù)來控制軸設(shè)備等。周期線程周期讀取命令序列,并寫入SI_cmd中,然后周期讀取從驅(qū)動模塊收到的數(shù)據(jù)并進行分析。用戶可以模擬運動控制器中周期線程中對接口的調(diào)用,同時也可以實時的調(diào)試配置總線。
圖6 配置工具流程圖
本文在參考開放式數(shù)控系統(tǒng)國標中的相關(guān)規(guī)范的基礎(chǔ)上,設(shè)計了行規(guī)層的體系結(jié)構(gòu),該行規(guī)層提供軸控服務(wù)、I/O控制服務(wù)、接口控制服務(wù)等,屏蔽了不同制造商制造的同類設(shè)備,為用戶提供統(tǒng)一的接口服務(wù),具有很強的開放性。同時實現(xiàn)了行規(guī)層中的伺服驅(qū)動器,最后通過一個應(yīng)用實例驗證了該行規(guī)層設(shè)計切實可行。今后的工作將針對利用開源操作系統(tǒng)(linux)中的一些機制進一步完善其軟件接口的開放性,同時實現(xiàn)行規(guī)層中的I/O設(shè)備等。
[1]GB/T 18473-2001,控制與驅(qū)動裝置間實時串行通信數(shù)據(jù)鏈路[S].
[2]GB/T 18759.2-2006,開放式數(shù)控系統(tǒng)——體系結(jié)構(gòu)[S].
[3]GB/T 18759.3-2009,開放式數(shù)控系統(tǒng)——總線接口與通信協(xié)議[S].
[4]胡毅,于東.基于現(xiàn)場總線的開放式數(shù)控系統(tǒng)的設(shè)計與實現(xiàn)[J].小型微型機,2005(4):9-13.
[5]黃艷.開放式數(shù)控系統(tǒng)運動控制器的設(shè)計與實現(xiàn)[D].沈陽:中科院沈陽計算所,2003.
[6]陳衛(wèi)福,楊建武.開放式數(shù)控系統(tǒng)及Sercos接口應(yīng)用技術(shù)[M].北京:機械工業(yè)出版社,2004.
[7]Protocol User’s Manual of MECHATROLINK-Ⅲ [Z].2008.
[8]Command Specifications for standard Servo profile of MECHATROLINK-Ⅲ[Z].2008.