摘要:隨著實時工業(yè)以太網(wǎng)技術(shù)的發(fā)展,在最新版本的IEC61158 Ed.4標(biāo)準(zhǔn)中已經(jīng)包含了Profinet,EtherCAT,Ethernet/IP,SERCOS III等11種實時以太網(wǎng)行規(guī)集。以netX網(wǎng)絡(luò)控制器為處理器的嵌入式模塊comX,是支持所有主流實時以太網(wǎng)協(xié)議的嵌入式模塊。本文在介紹了實時以太網(wǎng)和netX網(wǎng)絡(luò)控制器的基本結(jié)構(gòu)和功能的基礎(chǔ)上,詳細(xì)探討了基于該嵌入式模塊comX的實時以太網(wǎng)從站設(shè)備的網(wǎng)絡(luò)接口硬件組成和軟件實現(xiàn),以及在智能分揀系統(tǒng)中的應(yīng)用。
關(guān)鍵字:實時以太網(wǎng);netX網(wǎng)絡(luò)控制器;雙端口內(nèi)存DPM;嵌入式模塊comX
0 引言
隨著計算機、通信、網(wǎng)絡(luò)等信息技術(shù)的發(fā)展,信息交換的領(lǐng)域已經(jīng)覆蓋了工廠、企業(yè)乃至世界各地的市場,因此,需要建立包含從工業(yè)現(xiàn)場設(shè)備層到控制層、管理層等各個層次的綜合自動化網(wǎng)絡(luò)平臺,建立以工業(yè)控制網(wǎng)絡(luò)技術(shù)為基礎(chǔ)的企業(yè)信息化系統(tǒng)。
20世紀(jì)80年代產(chǎn)生和發(fā)展起來的現(xiàn)場總線技術(shù),以全數(shù)字的通信代替4~20mA電流的模擬傳輸方式,使得控制系統(tǒng)與現(xiàn)場儀表之間不僅能傳輸生產(chǎn)過程測量與控制信息,而且能夠傳輸現(xiàn)場儀表的大量非控制信息,使得工業(yè)企業(yè)的管理控制一體化成為可能。然而,現(xiàn)場總線技術(shù)在其發(fā)展過程中存在不足:標(biāo)準(zhǔn)過多,不同總線之間不能兼容;專用實時通信網(wǎng)絡(luò),成本高;速度較低,支持的應(yīng)用有限,不便于和Internet信息集成。
由于現(xiàn)場總線的互連、互通與互操作性問題很難解決,于是現(xiàn)場總線開始轉(zhuǎn)向以太網(wǎng)。經(jīng)過近幾年的努力,以太網(wǎng)技術(shù)已經(jīng)被工業(yè)自動化系統(tǒng)廣泛接受。為了滿足高實時性能應(yīng)用的需求,各大公司和標(biāo)準(zhǔn)組織紛紛提出各種提升工業(yè)以太網(wǎng)實時性的技術(shù)解決方案,從而產(chǎn)生了實時以太網(wǎng)(Real Time Ethernet,簡稱RTE)。目前,在最新版的IEC 61158 Ed.4標(biāo)準(zhǔn)中包含了11種實時以太網(wǎng)行規(guī)集:Profinet,EtherCAT,Ethernet/IP,SERCOS III,PowerLink, EPA, Modbus/TCP,TC-net,Vnet/IP,P-NET和HSE。
本文介紹了一種基于嵌入式模塊comX的EtherCAT實時以太網(wǎng)從站設(shè)備設(shè)計方案,該模塊支持目前所有主流的實時以太網(wǎng)協(xié)議,并詳細(xì)討論了其硬件組成和軟件實現(xiàn),以及在智能分揀系統(tǒng)中的應(yīng)用。
1 netX網(wǎng)絡(luò)控制器
1.1 netX基本結(jié)構(gòu)
netX網(wǎng)絡(luò)控制器是赫優(yōu)訊(Hilscher)公司推出的新一代工業(yè)網(wǎng)絡(luò)控制芯片,目前具有netX500、netX100、netX50三種型號,是一種高度集成的網(wǎng)絡(luò)控制器,它具有全新的系統(tǒng)優(yōu)化結(jié)構(gòu),適合工業(yè)通訊和大規(guī)模的數(shù)據(jù)吞吐。支持目前所有主流的實時以太網(wǎng)和現(xiàn)場總線系統(tǒng): PROFINET、Ethernet/IP、EtherCAT、Powerlink、SERCOS III、Open Modbus on TCP/IP、AS-Interface、Interbus、CC-Link、CANopen、DeviceNet、Profibus等協(xié)議。
netX 500的結(jié)構(gòu)如圖1所示。netX 500/100以32位ARM 926EJ-S為CPU核,主頻200MHz,片上集成144KB SRAM、裝有引導(dǎo)程序和實時內(nèi)核的32KB ROM,通過Memory控制器可以外擴(kuò)SDRAM、SRAM或FLASH,通過雙端口內(nèi)存DPM接口還可以連接到主機系統(tǒng)。netX包含豐富的外設(shè)功能:如UART,USB,SPI,I2C以及集成的顯示控制器,可以滿足廣泛的應(yīng)用需求。此外,netX采用中央數(shù)據(jù)交換(Data Switch),它連接著各個功能單元,允許同時在不同的主從端口之間通信,同時可以防止它們在傳輸數(shù)據(jù)時相互阻塞。netX最大的亮點在于具有可以自由定義4個智能通訊口,可以配置為現(xiàn)場總線或?qū)崟r以太網(wǎng)通道。因此,netX是名副其實的“高端”網(wǎng)絡(luò)控制器。
[align=center]
圖1 netX 500結(jié)構(gòu)框圖[/align]
1.2 netX基本功能
netX 500網(wǎng)絡(luò)控制器內(nèi)部集成ARM 926的CPU核,因此可以做為一個單片系統(tǒng),所有的應(yīng)用都可以在netX上實現(xiàn)。其次,netX具有雙端口內(nèi)存DPM接口,也可以再外接一個CPU,實現(xiàn)雙核系統(tǒng): CPU負(fù)責(zé)處理應(yīng)用程序,netX專門實現(xiàn)網(wǎng)絡(luò)通訊。
netX500最大的特點就是具有可配置的4個通信通道,它們建立在兩層結(jié)構(gòu)上,而且相互等同。它們具有專門的ALU,并且有特殊的邏輯單元,通過Microcode來實現(xiàn)各協(xié)議的基本功能。xMAC(Medium-Access-Controller)分別按照各自的總線存取進(jìn)程,發(fā)送和接收數(shù)據(jù),加密或者將它們轉(zhuǎn)化為字節(jié)方式。xPEC(Protocol Execution Controller)負(fù)責(zé)編譯,并將數(shù)據(jù)打包,管理報文通訊。當(dāng)數(shù)據(jù)量大時,可通過DMA通道進(jìn)行數(shù)據(jù)交換。而且,每個通道有一個雙端口內(nèi)存DPM,可用于保存狀態(tài)信息或本地數(shù)據(jù)。
其中,前兩個通道集成PHY,可直接用于以太網(wǎng)的連接。并且內(nèi)部已經(jīng)集成了各種實時以太網(wǎng)協(xié)議所需的ASIC硬件資源,如Hub、Switch、IEEE1588等,如圖2所示。
[align=center]
圖2 實時以太網(wǎng)通道結(jié)構(gòu)圖[/align]
因此,通過這種智能的通訊ALU,在netX芯片上可以實現(xiàn)各種不同的通訊協(xié)議,可以是現(xiàn)場總線協(xié)議,也可以是各種實時以太網(wǎng)協(xié)議,并且可以自由組合。而且,同步過程不受CPU響應(yīng)時間的限制。
2 實時以太網(wǎng)設(shè)備的設(shè)計
在該從站設(shè)備中,使用的是德國赫優(yōu)訊(Hilscher)自動化系統(tǒng)有限公司的嵌入式模塊comX-CA-RE,模塊內(nèi)部已經(jīng)集成專用的ASIC芯片和固化程序Firmware,由該模塊實現(xiàn)實時以太網(wǎng)協(xié)議,主機CPU通過嵌入式模塊提供的雙端口內(nèi)存(Dual-Port Memory,DPM)接口與模塊進(jìn)行數(shù)據(jù)通信,用戶不需要關(guān)心協(xié)議的具體實現(xiàn),只需往DPM接口讀/寫數(shù)據(jù)就可以,因此,該模塊就像一個內(nèi)存,使用起來特別方便。該模塊的另一個特點是,同一個硬件模塊上就能支持各種不同實時以太網(wǎng)協(xié)議:Profinet、EtherCAT、Ethernet/IP、SERCOS III、Powerlink和Modbus TCP,并且還支持主站或從站,只需下載不同的協(xié)議堆棧Firmware。因此,減少了硬件開發(fā)成本,只需在軟件上更改相關(guān)協(xié)議的API,這大大的保護(hù)了投資,減少了開發(fā)的再投入成本。
2.1 硬件設(shè)計
嵌入式模塊comX-CA-RE提供給用戶的硬件接口只有X1一個排針連接頭(50根管腳),即雙端口內(nèi)存接口,該連接頭包含了與主機通信必備的控制線、16位數(shù)據(jù)總線和14位地址總線。
由于該模塊已經(jīng)集成實現(xiàn)實時以太網(wǎng)接口的所有必備電路,因此在外圍電路設(shè)計的時候非常簡單方便,其電路連接與MCU和內(nèi)存的連接相似。實時以太網(wǎng)協(xié)議都由模塊內(nèi)部實現(xiàn),用戶應(yīng)用程序只需通過提供的API接口和訪問方式,對雙端口內(nèi)存進(jìn)行讀/寫操作。嵌入式模塊comX與主機接口電路如圖3所示。在該設(shè)備中,同時還設(shè)計了IO、AD采集電路,DA輸出電路,以及其它的外設(shè)接口電路。
[align=center]
圖3 嵌入式模塊與主機接口電路[/align]
2.2 軟件設(shè)計
嵌入式模塊comX提供的主機接口是雙端口內(nèi)存DPM,用戶應(yīng)用程序通過DPM接口來訪問該模塊。同時,為了提高整個系統(tǒng)的實時性和可靠性,主機系統(tǒng)使用的是實時多任務(wù)操作系統(tǒng)Linux。因此,在進(jìn)行軟件設(shè)計時,主要完成驅(qū)動程序以及應(yīng)用程序的編寫。
2.2.1 雙端口內(nèi)存DPM結(jié)構(gòu)
用戶應(yīng)用程序通過雙端口內(nèi)存DPM來訪問實時以太網(wǎng)嵌入式模塊comX,嵌入式模塊comX提供的雙端口內(nèi)存DPM接口是16 KByte的地址空間,其具體結(jié)構(gòu)如圖4所示。
[align=center]
圖4 雙端口內(nèi)存地址空間[/align]
netX提供的雙端口內(nèi)存最大地址空間是64KByte,分為系統(tǒng)通道、握手通道、通訊通道0~3、應(yīng)用通道0~1。對于嵌入式模塊comX,實時以太網(wǎng)的協(xié)議堆棧(如EtherCAT從站的Firmware)已經(jīng)保存在模塊的Flash中,因此只使用了默認(rèn)的系統(tǒng)通道、握手通道和通訊通道0,16KByte的地址空間。
系統(tǒng)通道512個字節(jié),位于雙端口內(nèi)存DPM的起始位置,是最重要的通道,總是存在。它包含了系統(tǒng)本身(netX硬件和實時操作系統(tǒng)rcX)的關(guān)鍵信息,并且提供一種郵箱的傳輸機制,用于發(fā)送/接收跟系統(tǒng)相關(guān)的報文。各功能塊如表1所述。
[align=center]表1 系統(tǒng)通道結(jié)構(gòu)
[/align]
握手通道256字節(jié),從偏移地址0x0200開始,提供主機系統(tǒng)與netX固件(運行在netX芯片中的協(xié)議堆棧)之間的數(shù)據(jù)傳輸同步機制。所有通道的握手寄存器都在此區(qū)域,每個握手寄存器包含兩類握手信息:系統(tǒng)握手信息和通訊握手信息。系統(tǒng)握手信息與“系統(tǒng)設(shè)備”相關(guān),由主機應(yīng)用執(zhí)行netX系統(tǒng)相關(guān)的命令,如復(fù)位等。通訊握手信息用于同步循環(huán)或非循環(huán)數(shù)據(jù),同時向主機系統(tǒng)提供狀態(tài)變化信息。
通訊通道m(xù)*256字節(jié),從偏移地址0x0300開始,現(xiàn)場總線協(xié)議堆棧使用該通道,與主機系統(tǒng)進(jìn)行循環(huán)數(shù)據(jù)和非循環(huán)數(shù)據(jù)的數(shù)據(jù)交換。共有四個通訊通道,每個通訊通道分別對應(yīng)netX芯片的xMAC/xPEC端口,其結(jié)構(gòu)都相同。通訊通道0的默認(rèn)大小是16KByte,其各功能塊如表2所述。
[align=center]表2 通訊通道結(jié)構(gòu)
[/align]
應(yīng)用通道m(xù)*256字節(jié),根據(jù)實際的需求,并不一定需要該通道,該通道實現(xiàn)用戶特殊的信息交互,由客戶定義使用。
2.2.2 驅(qū)動程序的設(shè)計
赫優(yōu)訊提供嵌入式模塊comX的驅(qū)動源碼Toolkit,用戶可以根據(jù)實際的需求,在不同的目標(biāo)系統(tǒng)中集成該Toolkit提供的驅(qū)動接口,這樣用戶應(yīng)用程序就能很方便的訪問嵌入式模塊comX的雙端口內(nèi)存。Toolkit提供的驅(qū)動接口與實時以太網(wǎng)協(xié)議無關(guān),只與comX雙端口內(nèi)存DPM相關(guān),因此,如果基于comX模塊開發(fā)多種實時以太網(wǎng)協(xié)議(Profinet、EtherCAT、Ethernet/IP主從站等)的設(shè)備,其驅(qū)動程序是通用的。
在本系統(tǒng)中,使用Linux實時操作系統(tǒng),設(shè)備驅(qū)動主要完成對嵌入式模塊comX雙端口內(nèi)存DPM的訪問,用戶程序通過調(diào)用Toolkit提供的接口函數(shù)來訪問實時以太網(wǎng)嵌入式模塊comX。Linux設(shè)備驅(qū)動的框架如圖5所示。
[align=center]
圖5 Linux設(shè)備驅(qū)動框架[/align]
Linux設(shè)備驅(qū)動主要實現(xiàn)的函數(shù)如表3。
[align=center]表3 Linux設(shè)備驅(qū)動函數(shù)表
[/align]
2.2.3 應(yīng)用程序的設(shè)計
由于赫優(yōu)訊提供的嵌入式模塊comX,在同一個硬件模塊上就能支持各種主流的實時以太網(wǎng)協(xié)議:Profinet、EtherCAT、Ethernet/IP、SERCOS III、Powerlink和Modbus TCP,并且還支持主站或從站,只需下載不同的協(xié)議堆棧Firmware。也就是說,如果開發(fā)不同實時以太網(wǎng)通訊接口的同類產(chǎn)品,除了不同的實時以太網(wǎng)協(xié)議接口不一樣,其它的程序接口都是一樣的。
在本系統(tǒng)中,使用嵌入式模塊COMX-CA-RE/ECS,即EtherCAT從站模塊。因此,應(yīng)用程序主要實現(xiàn)的功能:模塊的初始化,從站熱啟動參數(shù)的下載,外圍采集模塊的數(shù)據(jù)采集,以及與EtherCAT主站設(shè)備的數(shù)據(jù)交換等等。
嵌入式模塊comX的Flash中已經(jīng)保存了EtherCAT從站的協(xié)議堆棧,在系統(tǒng)上電后,會自動加載該協(xié)議堆棧。然后再加載從站的熱啟動參數(shù),需應(yīng)用程序加載。不同的實時以太網(wǎng)從站,其熱啟動參數(shù)是不一樣的,以報文的方式,通過雙端口內(nèi)存DPM的系統(tǒng)郵箱發(fā)送給comX。EtherCAT從站關(guān)鍵的熱啟動參數(shù)如下,
ptWarmstartReq->tData.ulSystemFlags = 0; /* System Flags */
ptWarmstartReq->tData.ulWatchdogTime=1000; /* Watchdog time */
ptWarmstartReq->tData.ulVendorId = 0x44; /* Vendor Id */
ptWarmstartReq->tData.ulProductCode = 0x7874656E; /* Product code*/
ptWarmstartReq->tData.ulRevisionNumber = 0x0000FFFE; /* Revision number */
ptWarmstartReq->tData.ulSerialNumber = 0; /* Serial number */
ptWarmstartReq->tData.ulProcessDataOutputSize = 4; /* Process Data Output Size */
ptWarmstartReq->tData.ulProcessDataInputSize = 4; /* Process Data Input Size */
熱啟動參數(shù)的下載處理代碼如下:
/***** 從站熱啟動參數(shù)下載 *****/
if( true != GetWarmstartPacket( ulFirmwareSelection, ulDeviceSelection, &tSendPacket))
{
printf("Error reading WARMSTART packet for the given protocol\r\n");
} else
{
// 發(fā)送包
lRet = ptCifXFnc->pfnChannelPutPacket( hChannel, &tSendPacket, 2000);
if( CIFX_NO_ERROR == lRet)
{
printf("Sending WARMSTART packet: DONE\r\n");
} else
{
printf("Error sending WARMSTART to the device: Error=0x%08X\r\n", lRet);
}
// 接收包
lRet = ptCifXFnc->pfnChannelGetPacket( hChannel, sizeof(tReceivePacket), &tReceivePacket, 2000);
if(CIFX_NO_ERROR != lRet)
{
printf("Error while wait for WARMSTART response: Error=0x%08X\r\n", lRet);
} else if(0 != (lRet = tReceivePacket.tHeader.ulState))
{
printf("Error in WARMSTART response: Error=0x%08X\r\n", tReceivePacket.tHeader.ulState);
} else
{
// 等待,直到BUS位被設(shè)置
CHANNEL_INFORMATION tChannelInfo = {0};
do
{
lRet = ptCifXFnc->pfnChannelInfo( hChannel, sizeof(tChannelInfo), &tChannelInfo);
printf(".");
} while ( (CIFX_NO_ERROR == lRet) &&
(!(tChannelInfo.ulDeviceCOSFlags & (RCX_COMM_COS_RUN | RCX_COMM_COS_READY))) );
}
}
當(dāng)把熱啟動參數(shù)下載完成后,通過xChannelIOWrite()和xChannelIORead()兩個函數(shù),主機應(yīng)用程序就可以與comX模塊進(jìn)行數(shù)據(jù)交換了。comX模塊中運行的EtherCAT協(xié)議堆棧會自動將主機應(yīng)用發(fā)來的循環(huán)數(shù)據(jù)或非循環(huán)數(shù)據(jù)發(fā)送到EtherCAT網(wǎng)絡(luò)上。反之,自動截取EtherCAT主站發(fā)送給該從站的數(shù)據(jù),并傳送給主機應(yīng)用程序。
3 EtherCAT從站模塊在智能設(shè)備的應(yīng)用
[align=center]
圖6 智能分揀系統(tǒng)示意圖[/align]
此智能分揀系統(tǒng)要求以流水方式順序檢測產(chǎn)品的若干個質(zhì)量特征,并對相應(yīng)的質(zhì)量特征作出判別,并由主控制器對各個傳感器的檢測結(jié)果加以匯總從而得到某一產(chǎn)品的分揀結(jié)果,并控制分揀電機將相應(yīng)的產(chǎn)品分揀到指定的分揀倉中,同時將該產(chǎn)品的質(zhì)量信息存入數(shù)據(jù)庫中。
在本系統(tǒng)中,傳感器檢測頻率設(shè)計為40Hz,由于傳感器位置和處理時間的原因留給數(shù)據(jù)傳輸?shù)臅r間要求小于1ms。同時由于要求質(zhì)量判定結(jié)果要存入數(shù)據(jù)庫,所以單一傳感器的傳輸數(shù)據(jù)量為10~1kByte,因此,要求采用的現(xiàn)場總線的數(shù)據(jù)帶寬不能小于10M。所以,在本系統(tǒng)中選用了EtherCAT實時以太網(wǎng)作為數(shù)據(jù)傳輸總線,采用德國赫優(yōu)訊的comX嵌入式模塊作為從站接入模塊,嵌入式系統(tǒng)通過DPM與comX通訊,采用輪詢的方式向主控制器發(fā)送檢測結(jié)果。
4 結(jié)束語
目前,國內(nèi)廠家多限于對現(xiàn)場總線產(chǎn)品的開發(fā),對實時以太網(wǎng)產(chǎn)品的的研究開發(fā)甚少,本文介紹了一種支持所有主流實時以太網(wǎng)協(xié)議的嵌入式模塊comX,并詳細(xì)討論了其關(guān)鍵的開發(fā)步驟,對實時以太網(wǎng)產(chǎn)品的開發(fā)具有借鑒作用。從實時工業(yè)以太網(wǎng)技術(shù)發(fā)展形勢看,實時以太網(wǎng)在工業(yè)控制系統(tǒng)中的應(yīng)用必將越來越廣。
參考文獻(xiàn):
[1] 繆學(xué)勤。20種類型現(xiàn)場總線進(jìn)入IEC61158第四版國際標(biāo)準(zhǔn)[J]。自動化儀表,2007
[2] Hilscher Gesellschaft für Systemautomation mbH. netX Generation of Communication Controller Product Brief [EB/OL].
http://www.hilscher.com/support_manuals.html
[3] Hilscher Gesellschaft für Systemautomation mbH. netX Dual-Port Memory Interface Manual [EB/OL].
http://www.hilscher.com/support_manuals.html
[4] Hilscher Gesellschaft für Systemautomation mbH. cifX Device Driver [EB/OL].
http://www.hilscher.com/support_manuals.html
[5] Hilscher Gesellschaft für Systemautomation mbH. EtherCAT Slave Protocol API [EB/OL].
http://www.hilscher.com/support_manuals.html