文/劉明
在工業(yè)自動(dòng)化領(lǐng)域,數(shù)據(jù)傳輸一般具有以下特點(diǎn):
(1)強(qiáng)實(shí)時(shí),有確定的響應(yīng)周期要求;
(2)系統(tǒng)節(jié)點(diǎn)數(shù)量眾多,節(jié)點(diǎn)數(shù)據(jù)表現(xiàn)為周期性的過(guò)程數(shù)據(jù);
(3)和IT、辦公應(yīng)用相比,成本顯得尤為重要。
為了滿足上述要求,德國(guó)倍福(Beckhoff)公司提出一種開(kāi)放式的基于以太網(wǎng)的實(shí)時(shí)現(xiàn)場(chǎng)總線系統(tǒng)EtherCAT。EtherCAT使用和以太網(wǎng)標(biāo)準(zhǔn)IEEE802.3相同的幀結(jié)構(gòu)和物理層,同時(shí)又拋棄了傳統(tǒng)的基于TCP/IP的協(xié)議架構(gòu)。在EtherCAT總線系統(tǒng)中,報(bào)文的發(fā)送和接收是主從式的,只有主站能夠主動(dòng)發(fā)送報(bào)文,從站從上游節(jié)點(diǎn)接收?qǐng)?bào)文,轉(zhuǎn)發(fā)到下游節(jié)點(diǎn)。通過(guò)這種方式,報(bào)文依次傳遞到每個(gè)從站。從站從接收到的報(bào)文中截取自己需要的數(shù)據(jù),并在向下一個(gè)節(jié)點(diǎn)轉(zhuǎn)發(fā)時(shí)將數(shù)據(jù)插入到報(bào)文中。這樣,報(bào)文的延遲就只有硬件傳播延遲,而不存在軟件協(xié)議棧延遲。EtherCAT從站使用專門的控制器ESC(EtherCAT Slave Controller)實(shí)現(xiàn)報(bào)文接收、數(shù)據(jù)插入和轉(zhuǎn)發(fā)功能。
圖1:從站硬件系統(tǒng)框圖
EtherCAT從站需要通過(guò)專用的從站控制器連接到EtherCAT系統(tǒng)中。從站控制器既可以是芯片,也可以是IP核。本系統(tǒng)使用倍福公司生產(chǎn)的芯片ET1200作為從站控制器,使用STM32F103作為從站控制微處理器。從站硬件系統(tǒng)框圖如圖1所示。
為了確保EtherCAT從站在加入網(wǎng)絡(luò)時(shí)處于安全狀態(tài),EtherCAT從站在啟動(dòng)后需要通過(guò)一系列的狀態(tài)切換之后才能執(zhí)行完整功能。EtherCAT從站狀態(tài)序列和對(duì)應(yīng)功能如下:
(1)初始化,此時(shí)所有輸出功能都要置于不影響系統(tǒng)安全的狀態(tài);
(2)預(yù)運(yùn)行,初始化完成,可以進(jìn)行Mailbox通訊;
(3)安全運(yùn)行,主站可以讀取過(guò)程輸入,但從站任何輸出功能仍然關(guān)閉;
(4)運(yùn)行,系統(tǒng)所有功能完全展開(kāi)。
良好的模塊化是一個(gè)健壯的軟件系統(tǒng)的基礎(chǔ)。根據(jù)模塊功能的不同,EtherCAT從站代碼框架包括三個(gè)部分:
(1)硬件抽象層,負(fù)責(zé)處理不同的底層硬件接口;
(2)協(xié)議棧層,負(fù)責(zé)處理協(xié)議細(xì)節(jié);
(3)應(yīng)用層,負(fù)責(zé)用戶邏輯。
倍福公司提供了圖形界面配置工具SSC(Slave Stack Code)來(lái)生成一個(gè)基本的從站代碼框架,在這個(gè)框架中提供了EtherCAT協(xié)議棧和基本的應(yīng)用層代碼流程。根據(jù)本系統(tǒng)的具體硬件連接情況,在SSC中的主要配置參數(shù)如下:
(1)打開(kāi)MCI_HW,表示使用通用外部總線接口;
(2)打開(kāi)CONTROLLER_32BIT,表示控制處理器是32位微處理器;
(3)打開(kāi)16BIT_ACCESS,表示微處理器與ET1200之間使用16位總線接口;
(4)根據(jù)系統(tǒng)中使用的EEPROM容量修改ESC_EEPROM_SIZE參數(shù)
硬件配置參數(shù)修改完成后,還需要根據(jù)具體應(yīng)用情況創(chuàng)建應(yīng)用程序配置。首先在SSC配置工具中通過(guò)Tool->Application->Create New生成一個(gè)空白的應(yīng)用程序配置,然后根據(jù)實(shí)際應(yīng)用填入相應(yīng)的描述信息。作為一個(gè)數(shù)據(jù)采集系統(tǒng),至少需要兩個(gè)字段表示有效數(shù)據(jù):第一個(gè)字段是AD輸出值;第二個(gè)字段是信號(hào)狀態(tài),如過(guò)載、欠載等。
應(yīng)用程序配置完成后,SSC就可以生成協(xié)議棧代碼。接下來(lái)我們需要根據(jù)所設(shè)計(jì)的系統(tǒng)功能編寫應(yīng)用層代碼。應(yīng)用層代碼首先調(diào)用HW_Init初始化ET1200內(nèi)部寄存器,然后調(diào)用MainInit初始化協(xié)議棧,最后調(diào)用MainLoop進(jìn)入?yún)f(xié)議主循環(huán)。此時(shí),從站代碼已具備了一個(gè)完整的協(xié)議流程框架,可以根據(jù)主站指令進(jìn)入或退出OP模式,但還沒(méi)有發(fā)送采集數(shù)據(jù)的功能。
協(xié)議棧通過(guò)回調(diào)函數(shù)的方式調(diào)用應(yīng)用相關(guān)的功能代碼。對(duì)于本數(shù)據(jù)采集系統(tǒng),應(yīng)用層代碼的主要功能是將采集數(shù)據(jù)傳送給主站。相應(yīng)的代碼在回調(diào)函數(shù)APPL_InputMapping(UINT16* pData)中:
倍福公司使用通用PC作為EtherCAT的主站硬件。為了實(shí)現(xiàn)EtherCAT協(xié)議所要求的實(shí)時(shí)性,倍福公司提供了實(shí)時(shí)網(wǎng)卡驅(qū)動(dòng)程序,用來(lái)替換通用網(wǎng)卡驅(qū)動(dòng)程序。替換后設(shè)備管理器里網(wǎng)卡型號(hào)顯示為TwinCAT-Intel,表示網(wǎng)卡實(shí)時(shí)驅(qū)動(dòng)安裝成功。
SOEM(Simple Open EtherCAT Master)是一個(gè)開(kāi)源的EtherCAT主站庫(kù),向上層應(yīng)用程序提供收發(fā)EtherCAT數(shù)據(jù)幀接口。該函數(shù)庫(kù)完全用c語(yǔ)言寫成,可移植性好,本系統(tǒng)使用SOEM作為主站軟件的底層EtherCAT函數(shù)庫(kù)。主站應(yīng)用程序與SOEM之間的接口如下:
實(shí)踐表明,基于EtherCAT的數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)靈活,可伸縮性好。每個(gè)采集點(diǎn)的數(shù)據(jù)在一個(gè)EtherCAT數(shù)據(jù)幀中只占3個(gè)字節(jié),按最長(zhǎng)EtherCAT數(shù)據(jù)幀1486字節(jié)計(jì)算,整個(gè)系統(tǒng)可接入近500個(gè)采集點(diǎn)。因此,本系統(tǒng)可適用于多種測(cè)點(diǎn)分散的數(shù)據(jù)采集場(chǎng)合。