陳在平,孫 遜+,賈 超
(1.天津理工大學 天津市復雜系統控制理論及應用重點實驗室,天津300384;
2.天津理工大學 自動化學院,天津300384)
傳統的工業以太網通信協議僅僅是在傳統以太網的基礎之上進行簡單地優化,實現了傳輸速度的提升,并沒有從根本上解決傳統以太網通信技術中所存在通信不確性的問題,這使得傳統工業以太網在現場設備層不能夠得到充分的應用。Ethernet POWERLINK (簡稱POWERLINK)作為一種實時工業以太網通信協議,完全擺脫了傳統以太網基于TCP/IP的通信理念,引入了時間槽這一核心概念,實現了數據通信的確定性[1,2]。POWERLINK 實時以太網技術的推廣和應用,對以太網通信技術向著確定性方向發展發揮了巨大作用。
POWERLINK 通信協議能夠在多種平臺上實現通信功能。但由于其出現的比較晚,目前只獲得了少數第三方公司的支持[3]。本文在ARM+Linux這一成熟的嵌入式技術之上,從應用角度出發,提出了一種實現POWERLINK 協議物理層通信方法,并通過實際測試,驗證了這一方法的可行性,從而為POWERLINK 實時以太網向工業現場推進提供了一種可行方案。
POWERLINK 通信協議是在2001 年由奧地利貝加萊(B&R)公司提出,是一項在標準以太網介質上,用于解決工業控制領域以及數據采集領域所涉及到的數據傳輸準確性問題的技術規范,是一種開源實時以太網總線技術[4]。它作為一個免授權和開放性的通信協議,受到POWERLINK 標準化組織 (Ethernet POWERLINK standardization group,EPSG)的大力推廣[5]。2012年3月POWERLINK現場總線正式被批準為中國國家推薦性標準,作為國內第一個實時以太網推薦標準,從此POWERLINK 協議技術在國內得到飛速地推廣和發展[6]。
傳統工業以太網多是基于TCP/IP 協議的通信協議,基本上是對TCP/IP 協議的修改或補充,沒有從根本上解決工業底層通信實時性的需求。這是由于TCP/IP 是一種端到端面向連接的通信協議,它能夠提供一種可靠的數據流服務,即采用 “帶重傳的肯定確認”技術來保證傳輸的可靠性[7]。同時,我們知道IEEE802.3 標準以太網規定,在數據鏈路層采用載波監聽/監測即CSMA/CD (carrier sense multiple access with collision detection)方法來解決數據包傳輸產生的沖突,這種解決方法的原理簡單總結為:先聽后發,邊發邊聽,沖突停發,隨機延遲后重發[8,9]。所以,在傳統以太網組建的通信網絡上,當有多個工作站同時發送數據導致沖突的產生,工作站就會延遲重發數據,雖然這種方法能夠保證了通信數據的完整性,但是無法保證數據在確定的時間內到達,不具有良好的實時性。
POWERLINK 的目標是確定性、實時性工業以太網,它是一個三層的通信網絡,規定了物理層、數據鏈路層和應用層,如圖1所示為POWERLINK 的OSI模型。應用層上遵循CANopen協議規范,物理層上遵循標準以太網協議規范。數據鏈路層是POWERLINK 協議的核心層,其中引入了時間槽通信管理機制SCNM (slot communication network management),即主站在開始通信之前,會去配置從站的參數,告訴每個從站應該在循環周期的哪一時刻上報[10]。這樣,在所有時間內僅一個節點訪問網絡,從而避免數據碰撞,徹底解決了傳統以太網由CSMA/CD 機制引起的通信實時性差的問題。
本設計硬件電路主要由ARM9 芯片S3C2440 與DM9000網卡芯片構成,總體硬件框架如圖2所示。
DM9000的訪問基址是0x18000000對應S3C2440芯片內8個地址存儲空間中的BANK3,因此通過nGCS3 來連接DM9000的片選信號端AEN。只用到一條地址線:AD-DR2,這是因為DM9000的地址信息和數據信息都在數據總線上傳輸,通過ADDR2控制CMD 引腳的電平狀態來決定數據總線傳遞何種信息。控制總線主要完成對DM9000內部寄存器讀寫的控制。使用芯片H1102 作為網絡變壓器,可以增強信號的傳輸距離,并利用隔離措施加強抗干擾能力同時增加保護作用。

圖1 POWERLINK 的OSI模型

圖2 系統硬件框架
Linux操作系統提供了一種Platform 設備驅動的實現方法,就是將硬件設備與驅動程序相分離,通過platform虛擬總線進行連接。論文就是利用這種方法實現DM9000芯片硬件與協議程序的關聯。軟件設計主要分為以下兩步。
(1)增加平臺設備,即在Linux內核文件中添加platform_device系統結構體。目的是將DM9000 這一設備硬件的描述文件添加到Linux內核中,使內核在啟動時能夠識別DM9000以太網芯片。
首先,建立dm9000_resource資源結構體,此結構體有兩項數據,分別對DM9000以太網芯片的兩個主要資源——內存空間資源和中斷資源,做了詳細的定義。其中,第一項數據,定義了分配內存資源的起始地址、所占內存空間的大小以及所分配內存空間的標識類型;第二項數據定義了中斷號和中斷觸發方式。
然后,將dm9000_resource結構體變量添加到新創建的platform _device 總線型結構體變量device_dm9000中。此結構體中包含了硬件DM9000的完整信息,包括設備名稱、設備ID、資源結構體和訪問的數據寬度。其中,DM9000以太網芯片支持8位、16位和32位3種不同的數據訪問方式,這里我們根據實際要求選擇了16位的訪問方式。
最后,把描述平臺設備結構體device_dm9000導入到系統變量smdk_devs數組中。該數組存放的是各種平臺設備結構體,相當于一個平臺設備列表。并且,在啟動Linux操作系統后,系統會自動把這個數組中的設備注冊進內核中。
這樣,經過第一步的一系列操作后,DM9000 這一硬件外設成功注冊到Linux內核中。
(2)在POWERLINK 協議源碼中添加DM9000的操作函數,包括寄存器訪問函數、數據發送函數和中斷回調函數等。
首先要增加platform _driver 結構體類型變量EdrvDriver:

然后,在協議棧初始化函數EdrvInit中通過platform_driver_register(&EdrvDriver)完成對EdrvDriver的注冊。其中,EdrvInit函數在協議啟動階段被調用。注冊過程就是platform 總線以EdrvDriver.driver.name為標準,去遍歷之前啟動Linux內核時注冊到內核的platform_device設備,找到與之名字相同的進行關聯。
如果注冊成功就會繼續執行結構體成員函數EdrvDriver.probe=EdrvInitOne,這個函數將會繼續完成軟硬之間的關聯,主要包括以下幾步設置:struct resource* pResource=platform _get _resource (pPlatformDev _p,IORESOURCE_MEM,0);
來獲得之前在Linux內核中添加的dm9000以太網芯片的數據線物理地址,也就是dm9000的寄存器物理地址。
m_pIoAddr=ioremap (pResource->start,0x08);
將dm9000寄存器物理地址映射成虛擬地址,因為在Linux操作系統下,讀寫數據使用的是虛擬地址而不是物理地址。
完成以上兩步操作后,便實現結構體platform _device和結構體platform _driver 的關聯,從而將DM9000這一設備注冊給協議棧。
POWERLINK 協議利用DM9000芯片作為數據收發接口,完成協議的物理層功能。數據通信過程主要包括數據發送和數據接收兩大過程。
用戶要傳輸的數據,經過POWERLINK 網絡協議的應用層和數據鏈路層后,封裝成數據包,這個數據包保存在一個分配好存儲空間的tEdrvTxBuffer 類型結構體變量pbBuff 中,最終通過EdrvSendTxMsg()函數傳送給網絡接口。網絡接口的任務就是將數據包傳送給硬件,完成物理傳輸。數據發送流程如圖3所示。

圖3 數據發送流程
網絡數據接受過程,是在Linux內核提供的硬件中斷請求機制下完成。在協議棧初始化階段我們已經向內核注冊了DM9000設備中斷,當DM9000接收到數據后會產生中斷信號,內核操作系統會根據我們注冊的DM9000中斷號來找到協議棧程序中的中斷處理函數TgtEthIsr(),在中斷函數中處理接收到的數據。圖4為數據接收流程。
使用2.6.30 版本的Linux 內核對協議棧程序進行編譯,生成可加載協議驅動模塊epl.ko,并通過SecureCRT終端軟件來觀察協議模塊的加載和運行情況,如圖5所示。
圖5表示POWERLINK 主站已經正常運行。
利用裝有Wireshark軟件的PC機作為測試機,對設計的POWERLINK 工作站發送的數據包進行抓取測試,來檢驗數據的傳輸的正確性和實時性。其中,測試器PC機與工作站設備,通過網線連接在一起,并設置二者的IP地址在同一網段內。當主站正常運行時,PC 機上能夠成功抓取到工作站傳過來的數據包。圖6為成功抓取到數據包的Wireshark界面。

圖4 數據接收流程

圖5 協議棧程序運行

圖6 Wireshark截圖
為了進一步驗證本設計方法在實際應用上的可行性,進一步做主從協議棧之間的通信測試。其中,利用PC機運行虛擬的協議棧程序作為通信主站,我們設計的工作站做從站。主站向從站發送變化的數據,從站接受并顯示主站傳送過來的數據。圖7為二者傳輸數據的一致性比較,確定主從站之間數據通信的正確性。

圖7 主從站之間數據傳輸
本文介紹了如何在POWERLINK 協議棧源代碼的基礎上,不改變協議核心層數據鏈路層的功能,利用platform設備驅動程序設計方法,對協議棧內部物理層程序代碼重新設計和編寫。并設計制作相應的硬件電路,達到了使用一片普通以太網控制芯片DM9000就可以實現實時以太網POWERLINK 物理層通信的功能要求。通過具體的實驗測試,證實了這一設計方法的可行性。
本設計的主導思想,是利用成熟的嵌入式技術,在低投入的條件下,實現了實時以太網POWERLINK 的通信功能,符合工業生產現場安全和高效的要求。
[1]Chowdhury Ali.Application of california ISO transmission economic assessment methodology(TEAM)for the sunrise POWERLINK project [C]//IEEE Power and Energy Society General Meeting,2009:1-5.
[2]LIN Dan,WANG Wenhai.The PC-based communication EPL[J].Journal of Jilin University(Engineering Science),2011(Suppl.):314-318 (in Chinese).[林丹,王文海.基于EPL的上位機通信 [J].吉林大學學報 (工學版),2011 (增刊):314-318.]
[3]Erwinski Krystian,Paprocki.Application of Ethernet power-link for communication in a Linux RTAI Open CNC system[J].IEEE Transactions on Industrial Electronics,2013,60(2):628-636.
[4]ZHANG Huiquan,CHEN Jing,YANG Ruixian.Research on application of Fieldbus control technology [J].China Instrumentation,2010 (9):45-48 (in Chinese). [張會泉,陳靖,楊瑞先.現場總線控制技術應用研究 [J].中國儀器儀表,2010 (9):45-48.]
[5]Lu Shengli,Li Min,Liu Meiling.Design of power windows based on POWERLINK industrial Ethernet[J].Applied Mechanics and Materials,2014,494-495:28-31.
[6]LIU Yang.Strategies for industrial Ethernet POWERLINK time slot control[D].Wuhan:Wuhan University of Technology,2013 (in Chinese).[劉陽.POWERLINK 工業以太網時間槽控制策略研究 [D].武漢:武漢理工大學,2013.]
[7]Gong Maofa,Xu Xinyuan,Liu Jianping.Multi-loop network power grid monitor based on the embedded operating system [J].Advanced Materials Research,2012,468-471:2119-2123.
[8]KONG Dong,ZHENG Jianhong.LWIP transplantation and application on the ARM platform embedded TCP/IP protocol stack [J].Communications Technology,2008 (6):38-40 (in Chinese). [孔棟,鄭建宏.嵌入式TCP/IP 協議棧LWIP 在ARM 平臺上的移植與應用[J].通信技術,2008 (6):38-40.]
[9]YUAN Anfu,XIA Shengfeng.Based on ARM and Linux DM9000driven by design and implementation of network interfaces[J].Computer Engineering and Science,2011,33 (2):27-31 (in Chinese). [袁安富,夏生鳳.基于ARM 和Linux的DM9000網絡接口設計及驅動實現 [J].計算機工程與科學,2011,33 (2):27-31.]
[10]Juan Antonio Maestro,Pedro Reviriego.Energy efficiency in industrial Ethernet:The case of powerlink [J].IEEE Tran-sactions on Industrial Electronics,2010,57 (8):2896-2903.