趙啟杰,尹震宇,高巖
(1.中國科學院大學,北京 100049; 2.中國科學院 沈陽計算技術研究所,沈陽 110168)
數控系統現場總線協議分析系統設計與實現*
趙啟杰1,2,尹震宇2,高巖1,2
(1.中國科學院大學,北京 100049; 2.中國科學院 沈陽計算技術研究所,沈陽 110168)
目前數控系統現場總線標準繁多,在設計和開發中,缺少適用的分析和檢測工具。針對上述問題文章給出了一種數控現場總線協議分析系統設計與實現方案,可兼容多種總線標準。系統模型基于簡化的4層通信模型,面向基于以太網的數控現場總線,對數據鏈路層的數據進行解析。系統由軟硬件兩部分組成,文中主要介紹了軟件部分的設計與實現。系統借助XML文件配置幀結構,可兼容多種總線協議。系統采用中斷方式工作,應用RTAI實時接口,采用Netlink進行用戶空間與內核空間的通信。在基于NCSF的數控系統上進行測試,系統可穩定運行。
數控系統現場總線;協議分析;XML;RTAI
數控系統現場總線作為高檔數控機床的重要組成部分,具有高可靠性、抗干擾性等優點。目前國內外數控系統現場總線標準種類繁多,例如國外的EtherCAT,POWERLINK,PROFINET,SERCOSⅢ等,國內的NCUC,NCSF等。這些總線技術大多基于以太網技術,在數控和伺服產品中得到廣泛的應用。
目前國外各總線標準都有自己專用的協議分析設備。例如:針對EtherCAT總線標準的Twincat系統,主要是面向伺服控制、I/O控制等具體行規層及用戶指令控制的分析的;安川針對MⅢ總線的專門測試工具,只能測試安川的產品。Fluke的Optiview雖然是有針對以太網物理層和IP層的協議分析工具,只能對數據包進行簡單的解析,無法進行面向數控系統總線的分析。
針對上述問題,本文描述了多協議現場總線協議分析系統的設計與實現過程。系統通過配置幀結構文件,可兼容NCUC,EtherCAT,NCSF等多種總線協議。系統采用中斷式工作方式,應用RTAI實時接口,以提高響應速度,采用Netlink進行用戶空間與內核空間的通信,界面友好,使用方便,幫助技術人員輕松完成數控系統的測試與診斷工作。
目前常見的數控系統現場總線基于實時以太網技術。實時以太網(RTE,Real Time Ethernet),是常規以太網技術的延伸,以便滿足工業控制領域的實時性數據通信要求。將計算機網絡中的以太網技術應用于工業自動化領域構成了工業控制以太網,是當前工業控制現場總線技術的一個重要發展方向[1]。
Twincat是Beckhoff公司開發的系統軟件,可通過多 PLC 系統、NC 軸控制系統、編程環境和操作站,將任何兼容 PC“改造”成為一臺實時控制器。包含總線測試功能。Fluke公司的便攜式 OptiView 網絡分析儀可在網絡中的任何地方提供有線或無線分析,允許用戶在線監控和捕獲最終用戶的體驗。它是一種便于攜帶的網絡管理工具,能夠幫助網絡專業人士在處理日常工作時節省時間。
RTAI是實時應用接口Real Time Application Interface的縮寫。它在Linux上定義了實時硬件抽象層RTHAL(Real Time Hardware Abstraction Layer),RTHAL將所有需要的Linux內部數據和函數的指針集合到一個Rthal的結構中。Rthal結構用于截取Linux硬件操作,在雙內核結構工作時,它們可以被RTAI重定向,以取代Linux中原有的函數;同時RTAI只是用此程序接口與Linux進行溝通[2]。
XML(Extensible Markup Language)是可擴展標記語言,作為一種“元數據標準”用于結構化信息,XML文檔有相同的基本結構,其特有的樹形結構特別適合描述通信協議中數據幀的格式。XML在互聯網,電力,電子商務,工業控制等諸多領域都有廣泛的應用[3]。
2.1 總體結構
系統總體結構如圖1所示。系統由軟件部分和硬件部分組成。
硬件部分有兩個職責,一是負責整個系統與現場總線的物理連接,擔負物理層上數據的接收和發送功能;二是與軟件部分進行交互,將接收到的數據向上交付給軟件部分,并從軟件部分接收數據,通過總線發送出去。可見硬件部分實際上只做以太網數據幀的接收和發送,不做其他任何處理,其余所有的工作都交由軟件部分進行處理。

圖1 總體結構圖
軟件部分負責數據幀的解析,與用戶進行交互等。軟件運行平臺基于定制的Linux操作系統,為保證數據處理的實時性,采用了RTAI硬實時擴展。板卡驅動作為Linux內核模塊,負責從硬件中獲取數據,以及將用戶請求轉化成硬件指令發送給硬件設備。軟件部分整體上采用MVC設計的模式,核心處理模塊負責數據幀的解析以及模擬報文的合成;用戶界面只負責和與用戶進行交互,將核心處理模塊處理得到的結果顯示給用戶,并將用戶的請求返回給核心處理模塊,轉化成相應的請求,以便發送給板卡驅動。
2.2 硬件結構
硬件部分采用FPGA(Field-Programmable Gate Array)實現,設計如圖2所示。硬件部分集成了處理器,內存,閃存,構成了完整的軟件運行環境。帶有兩個RJ45端口,每個端口額外增加一個備份緩沖區,當有數據幀通過端口時,將數據復制一份放入備份緩沖區。備份緩沖區只能保存最后一次寫入的值,當數據到來時,必須及時將數據讀出來,否則數據會被覆蓋。以太網適配器負責以太網通信,包括幀定界,類型識別,時間戳,CRC校驗等。FLASH用于保存FPGA的上電初始化配置信息。

圖2 硬件結構圖
2.3 軟件結構
軟件部分基本結構如圖3所示。軟件部分按層級結構進行設計,可分成如下幾個部分:板卡驅動,內核接口層,用戶接口層,核心處理模塊,圖形用戶界面。
系統將硬件部分整體視為一個PCI設備,板卡驅動作為內核模塊,負責設備的啟動、初始化、內存地址映射和數據幀的接收和發送。
內核接口層負責與用戶空間進行通信,將數據幀傳送到用戶空間,并接收用戶空間傳遞過來的命令和仿真報文。

圖3 軟件架構圖
用戶接口層負責用戶空間中與內核空間交互的任務,功能與內核接口層類似。
核心處理模塊是軟件的核心部分,主要功能包括數據幀的解析,仿真報文的封裝,以及將用戶操作轉換成對硬件的指令,是整個系統的核心,協調系統各部分正常運行。
用戶界面將核心處理模塊得到的硬件狀態,報文等信息等,顯示給用戶,并與用戶進行交互。
用戶空間與內核空間的通信通過用戶接口層和內核接口層進行。構建共享內存隊列,實現內核空間與用戶空間的高效傳輸。
3.1 實現環境
系統實現環境見表1。

表1 實現環境信息表
3.2 系統流程

圖4 系統流程圖
系統工作流程如圖4所示。首先進行內核空間的初始化工作,加載內核模塊,進行初始化,配置板卡,進行內存映射,初始化RTAI實時運行環境,分配共享內存,初始化Netlink套接字,注冊RTAI中斷處理函數,內核部分初始化完畢。然后進行用戶空間的初始化工作,啟動圖形用戶界面,讀取協議結構配置文件,初始化Netlink套接字,從內核空間獲取共享內存起始地址和長度,初始化共享內存,等待用戶操作。
用戶空間進程將用戶操作封裝成Netlink消息,通過Netlink套接字發送到內核空間。內核空間接收到命令后,由板卡驅動執行響應操作。
板卡收到數據時,觸發中斷函數,中斷函數清除中斷位,查看監聽功能是否開啟,從緩沖區獲取數據,通過Netlink發送到用戶空間,然后重新開啟中斷。
3.3 驅動模塊的實現
驅動模塊主要負責數據的采集與發送工作。為保證數據處理的實時性,驅動程序用到了RTAI實時接口。使用RTAI函數之前需要對RTAI初始化。
驅動模塊負責以下工作:
(1)加載實時運行環境;
(2)注冊PCI設備驅動;
(3)進行寄存器地址映射;
(4)通過RTAI注冊設備中斷響應函數;
(5)初始化內核接口層。
中斷響應函數負責數據幀的獲取和同步數據的發送。數據幀的獲取和發送流程見圖5。
向控制寄存器寫入啟動接收命令需要將控制寄存器置0一段時間后再置1,為防止中斷響應函數執行時間過長,將寫控制寄存器等操作放入工作隊列中,提高中斷響應速度。
由于網絡字節序為大端格式而主機字節序為小端格式,因此要進行字節序的轉換。

圖5 數據幀的獲取和發送流程
3.4 用戶空間與內核空間通信的實現
用戶空間與內核空間的通信采用Netlink與共享內存相結合的機制。共享內存通過內存塊循環隊列的方式進行管理,用戶接口層和內核接口層封裝了用戶空間和內核空間對Netlink與共享內存隊列的復雜操作。
內核接口層負責申請共享內存,RTAI的內存管理模塊提供了一組API用于進程之間共享內存,rt_named_malloc和rt_shm_free分別進行共享內存的分配和釋放。
共享內存通過循環隊列結構進行管理,隊列數據結構存放在共享內存起始位置,由用戶空間進程與內核空間進程共同維護。系統維護報文的接收和發送兩個共享內存隊列。發送方從隊列申請內存塊,接收方負責釋放內存塊,一個訪問隊列頭部指針,一個訪問隊列尾部指針,因此內核線程與用戶線程在共享內存上不存在訪問沖突,不會破壞隊列結構的一致性。
//共享內存塊
typedef struct shm_addr {
char * mem_addr; //起始地址
uint32_t mem_size; //地址長度
uint32_t page_cnt; //內存頁數
uint16_t order; //2^order == size
}SHM_ADDR;
//共享內存隊列
typedef struct shm_queue{
SHM_BLOCK * mem_addr; //起始地址
uint32_t block_sum; //地址塊數
uint32_t enter; //隊列入口
uint32_t exit; //隊列出口
}SHM_QUEUE;
Netlink用于內核空間與用戶空間的消息傳遞。內核接口層發送的消息類型包括:收到數據,共享內存,寄存器值;用戶接口層發送的消息類型包括:請求獲取共享內存信息,發送數據幀,啟動總線監聽,停止總線監聽,獲取寄存器值,設置控制寄存器值,開始周期發送,停止周期發送。消息關聯的數據被封裝到NETLINK_MSG結構體中,隨消息一同發送。
//Netlink消息結構體
typedef struct nl_msg{
uint32_t shm_index; //消息的存儲位置
uint32_t msg_length; //消息的長度
uint32_t reg; //寄存器
struct time_valtime; //數據到達時間
}NETLINK_MSG;
/*內核消息定義*/
#define NL_RECVED_PACK 1
#define NL_SHM_ADDR 2
#define NL_REGS 3
/*用戶空間消息定義*/
#define NL_GET_SHM_ADDR 12
#define NL_SEND_PACK 13
#define NL_PERIODIC_SEND 14
#define NL_PERIODIC_SEND_STOP 15
#define NL_BEGIN_MONITOR 16
#define NL_STOP_MONITOR 17
#define NL_GET_REGS 18
#define NL_SET_CTRL_REGS 19
3.5 協議結構文件
為使系統能解析多種現場總線協議,對已有報文描述方式進行改進,設計了基于XML的協議報文描述方式[4]。
根據XML文件的特點與工業以太網報文結構的特點,將報文的層次結構映射成XML文件中標簽的樹形結構,如圖6所示[4]。

圖6 報文與XML文件映射關系
針對工業以太網幀結構的復雜性,為XML標簽提供如下8種屬性,分別為name,length,type,description,value,repeat,condition,offset。
name屬性表示字段名,length屬性表示字段的長度,單位是byte,description屬性存放對本字段的描述,用于報文解析后顯示。
type屬性有4種取值,分別是:block,表示本字段是一個塊,不直接存儲數據,包含子節點;byte,表示本字段直接存儲數據;bit表示本字段是父節點的某幾位的集合,此時offset表示最低位在父節點中的位置,length的單位是bit;option,表示父節點的取值只能在本節點和本節點的兄弟節點中選擇,本節點的value屬性不能為空。
condition屬性代表本字段的存在條件,如果本字段不為空,其格式必須是“name=value”,如果從幀數據中取出名為“name”的數據,與“value”相等,則認為此幀數據是包含本字段的,否則認為此幀不包含本字段。
repeat屬性的值為某一字段名,如果屬性值不為空,則repeat屬性的值應當是本字段之前的某個非option類型的字段名,其字段值表示本字段重復出現的次數。通常工業以太網數據幀中伺服從站的數據格式都是一樣的,從站數據段重復出現的次數由頭部某一字段決定。

圖7 XML報文描述示例圖
報文描述示例見圖7。用戶空間進程啟動時,協議解析模塊讀取并解析XML文件,對每一個協議生成一個協議結構類(ProtocolStruct),以樹形結構存儲。
//協議字段類
class ProtocolNode {
int offset;
int length;
int is_selection;
int is_repeat;
int condition_value;
int option_value;
ProtocolNode *parent;//指向父節點
QString type;
QString name;
QString description;
QString condition_name;
QList
//存儲子節點指針
};
//協議結構類
class ProtocolStruct{
QString protocol_name;
QList
};
為方便用戶管理協議結構文件,系統自帶了協議結構文件編輯器,方便用戶對協議結構文件進行修改。
系統在基于NCSF的數控系統現場總線上進行測試。實驗中,系統能夠穩定工作,正確執行預期功能。在測試平臺上對10萬個數據包進行測試,受平臺發包速率限制,耗時40s,捕獲數據包96842個。其他性能測試指標見表2。
運行效果如圖8所示。

表2 性能測試指標

圖8 系統運行效果圖
表3為圖中幀的解析結果。

表3 報文解析示例
實驗中系統采集到的數據完全是按照協議配置文件中的協議格式解析的,與代碼無關,實現了協議與程序的分離,體現了系統良好的擴展性。
單個數據包的處理時間可以維持在60μs以內,遠小于2ms,能夠完成對大部分總線協議的實時處理。通過大量數據(10萬數據包)長時間通信測試,看出系統工作狀態比較穩定。
針對數控系統現場總線的高實時要求,設計并實現了一款基于Linux平臺的監測系統。經過測試,該系統工作穩定,能夠實時檢測總線通信,希望能夠數控系統開發和維護過程中發揮重要作用。在中斷響應與內核數據傳輸的處理上耗費的時間較長,還有待進一步優化,系統的工作效率還存在改進空間。
[1] 郇極, 劉艷強. 工業以太網現場總線 EtherCAT 驅動程序設計及應用[M].北京:北京航空航天大學出版社,2010.
[2] 劉鑫,陸文娟,范海濤.基于RTAI嵌入式Linux硬實時性能研究與實現[J].嵌入式操作系統應用,2006,22(11-2):46-48.
[3] 佘名高,王麗,楊亦,等.基于XML實現工業過程中實時數據的動態發布[J].自動化技術與應用,2005(10):10-12.
[4] 劉喆,郇極,劉艷強.基于XML的EtherCAT工業以太網協議解析技術[J].北京航空航天大學學報,2011,37(9):1086-1090.
[5] 鄭子輝,楊東升,尹震宇.數控系統現場總線NCSF監測分析系統的設計與實現[J].組合機床與自動化加工技術,2011(5):46-50.
[6] 邵新龍,尹震宇,楊東升,等.基于SoC的NCSF總線系統的研究與設計[J].組合機床與自動化加工技術,2013(1):49-53.
[7] Network Analyzer ( Sample Version ) User 's Manual of MECHATROLINK-III[Z].2008.
[8] 王國興,何方.基于以太網的現場總線設計與實現[J].組合機床與自動化加工技術,2010(4):60-64.
(編輯 李秀敏)
Design and Implementation of Protocol Analysis System for NC Field-bus
ZHAO Qi-jie1,2,YIN Zhen-yu2,GAO Yan1,2
(1. University of Chinese Academy of Sciences, Beijing 100049, China; 2. Shenyang Institute of Computing Technology, Chinese Academy of Science, Shenyang 110168,China)
There are varieties of CNC fieldbus standards lacking of appropriate analyzing and testing tools that can be used in the design and development process. This paper presents a fieldbus analyzing and testing system. This paper introduces the design and implement of software and hardware. The software analyzes data-link layer data captured by the hardware. The system model based on the simplified 4-level communication model. The system can analyze protocol data according to XML files and compatible with various fieldbus protocols. The system is work in the interrupt-mode. Use real-time application interface to reduce the response time. Use Netlink to exchange data between user space and kernel space. Tested on the CNC system based on NCSF, the system is stable and effective.
NC field-bus; protocol analysis; XML; RTAI
1001-2265(2014)05-0078-05
10.13462/j.cnki.mmtamt.2014.05.020
2013-09-05;
2013-09-22
"高檔數控機床、數控系統及功能部件關鍵技術標準與測試平臺研究"(2012ZX04010-021)
趙啟杰(1989—),男,山東青島人,中國科學院研究生院碩士研究生,研究領域為數控系統現場總線,(E-mail)q838324835@163.com。
TH166;TG65
A