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