孟另偉,鄭永軍
(中國(guó)計(jì)量大學(xué)計(jì)量測(cè)試工程學(xué)院,浙江杭州 310018)
工業(yè)現(xiàn)場(chǎng)通常存在測(cè)控點(diǎn)分散、測(cè)控范圍大、作業(yè)環(huán)境復(fù)雜的問(wèn)題,且工業(yè)現(xiàn)場(chǎng)對(duì)測(cè)控系統(tǒng)的數(shù)據(jù)傳輸實(shí)時(shí)性具有嚴(yán)格要求[1]。傳統(tǒng)現(xiàn)場(chǎng)總線應(yīng)用在測(cè)控系統(tǒng)中逐漸暴露出實(shí)時(shí)性差、系統(tǒng)擴(kuò)展復(fù)雜和穩(wěn)定性不足等問(wèn)題。傳統(tǒng)現(xiàn)場(chǎng)總線已無(wú)法滿足現(xiàn)代工業(yè)測(cè)控系統(tǒng)的需求,網(wǎng)絡(luò)化、分布式、實(shí)時(shí)性已成為現(xiàn)代測(cè)控系統(tǒng)的核心。EtherCAT作為一種新型工業(yè)以太網(wǎng)總線,具有數(shù)據(jù)傳輸實(shí)時(shí)性高、可靠性好、系統(tǒng)結(jié)構(gòu)拓?fù)潇`活等優(yōu)點(diǎn)[2]。將EtherCAT總線技術(shù)應(yīng)用于測(cè)控系統(tǒng),設(shè)計(jì)一種串聯(lián)型分布式測(cè)控系統(tǒng),該系統(tǒng)可對(duì)多種信號(hào)同時(shí)進(jìn)行多通道的測(cè)量和控制。
系統(tǒng)的總體結(jié)構(gòu)如圖1所示,本系統(tǒng)為一主多從結(jié)構(gòu),從站與從站之間串聯(lián)相接,首個(gè)從站與主站串聯(lián)相接。系統(tǒng)主站由TwinCAT軟件和基于Qt框架開發(fā)的上位機(jī)軟件2部分組成。TwinCAT軟件完成管理從站和實(shí)現(xiàn)EtherCAT通信的功能,Qt上位機(jī)軟件通過(guò)調(diào)用TwinCAT提供的ADS(automation device specification)通信接口將輸出數(shù)據(jù)發(fā)送給從站并獲取從站采集的輸入數(shù)據(jù)[3]。系統(tǒng)從站使用EtherCAT協(xié)議專用芯片LAN9252實(shí)現(xiàn)EtherCAT數(shù)據(jù)幀的收發(fā)處理,使用STM32F407控制器實(shí)現(xiàn)多種信號(hào)多通道的測(cè)量及控制并驅(qū)動(dòng)LAN9252實(shí)現(xiàn)主從站之間的雙向通信。從站測(cè)量功能包括8路開關(guān)量輸入和8路模擬量輸入,從站控制功能包括8路開關(guān)量輸出和8路模擬量輸出。通過(guò)基于Qt開發(fā)的上位機(jī)人機(jī)界面可以實(shí)時(shí)監(jiān)測(cè)每個(gè)從站的測(cè)量數(shù)據(jù)并設(shè)置每個(gè)從站的輸出數(shù)據(jù)。
圖1 基于EtherCAT的分布式測(cè)控系統(tǒng)總體框圖
從站與主站之間的通信可分為非周期性郵箱通信和周期性過(guò)程數(shù)據(jù)通信2種方式。郵箱通信主要完成從站初始化時(shí)的參數(shù)配置和運(yùn)行過(guò)程中的非周期性數(shù)據(jù)交互,過(guò)程數(shù)據(jù)通信主要完成正常運(yùn)行時(shí)主站與從站間周期性的數(shù)據(jù)交互[4]。
如圖1所示,主站與從站間完成過(guò)程數(shù)據(jù)通信。主站首先發(fā)送下行數(shù)據(jù)幀,該數(shù)據(jù)幀為輸出控制數(shù)據(jù)幀。當(dāng)數(shù)據(jù)幀經(jīng)過(guò)從站1時(shí),從站1的ESC(EtherCAT slave controller)根據(jù)邏輯地址識(shí)別是否存在與自己對(duì)應(yīng)的數(shù)據(jù)單元,如果存在則把主站設(shè)置的輸出數(shù)據(jù)讀取到ESC內(nèi)部寄存器,從站主控制器從ESC寄存器獲得主站設(shè)置的輸出數(shù)據(jù)進(jìn)而控制輸出模塊執(zhí)行輸出。接著從站1會(huì)把下行數(shù)據(jù)幀傳遞到串聯(lián)相接的從站2,從站2再執(zhí)行上述操作,直到下行數(shù)據(jù)幀到達(dá)最后一個(gè)從站N,N理論值最大為65 535[2]。當(dāng)從站N的從站控制器檢測(cè)到其中一個(gè)端口閉合時(shí),就會(huì)將下行數(shù)據(jù)幀自動(dòng)轉(zhuǎn)發(fā)到下一個(gè)邏輯端口,此時(shí)數(shù)據(jù)回環(huán),數(shù)據(jù)幀由從站N逆向返回到主站。當(dāng)數(shù)據(jù)幀由從站N返回時(shí),數(shù)據(jù)幀變?yōu)檩斎霚y(cè)量數(shù)據(jù)幀。從站N的ESC根據(jù)邏輯地址識(shí)別是否存在與自己對(duì)應(yīng)的數(shù)據(jù)單元,如果存在則從站N主控制器把測(cè)量模塊獲得的數(shù)據(jù)放入ESC內(nèi)部寄存器指定的區(qū)域,ESC將會(huì)把內(nèi)部寄存器指定區(qū)域的輸入數(shù)據(jù)插入到上行數(shù)據(jù)幀的對(duì)應(yīng)位置。接著從站N把上行數(shù)據(jù)幀傳遞到串聯(lián)相接的從站N-1,從站N-1再執(zhí)行上述操作,直到上行數(shù)據(jù)幀到達(dá)主站。主站將接收到的輸入測(cè)量數(shù)據(jù)處理后顯示在上位機(jī)人機(jī)界面中。
EtherCAT從站通信接口電路實(shí)現(xiàn)系統(tǒng)從站與主站間EtherCAT通信的功能,其設(shè)計(jì)框圖如圖2所示。ESC選用LAN9252芯片,其使用外部25 MHz晶振工作,通過(guò)并行總線和微處理進(jìn)行數(shù)據(jù)交互。EEPROM用來(lái)存儲(chǔ)從站配置信息,當(dāng)LAN9252在上電或復(fù)位后,會(huì)自動(dòng)讀取EEPROM內(nèi)的配置數(shù)據(jù)并裝入相應(yīng)寄存器,LAN9252和EEPROM通過(guò)I2C串行總線完成數(shù)據(jù)交互[5]。LAN9252提供了多層可編程中斷結(jié)構(gòu),當(dāng)LAN9252發(fā)生中斷時(shí),微處理器進(jìn)入中斷程序讀取LAN9252中斷寄存器判斷中斷事件源,從而進(jìn)行相應(yīng)的處理[6]。LAN9252內(nèi)置PHYA和PHYB,其與內(nèi)置網(wǎng)絡(luò)變壓器的標(biāo)準(zhǔn)RJ45接口相連。
圖2 EtherCAT從站通信接口電路
2.2.1 8路模擬輸入電路設(shè)計(jì)
8路模擬輸入電路如圖3所示。ADG5207為8路模擬開關(guān),用來(lái)選擇其中一路模擬輸入信號(hào)作為A/D采樣的信號(hào)源。LTC6362為緩沖運(yùn)放,其提供了較高的輸入阻抗和較低的輸出阻抗,保證了信號(hào)采集時(shí)模擬信號(hào)能夠快速達(dá)到穩(wěn)定狀態(tài)。LTC2380-24為24位的高精度串行模數(shù)轉(zhuǎn)換模塊,為了保證精度,使用LTC6655-4.096穩(wěn)壓芯片為其提供精準(zhǔn)的參考電壓。在運(yùn)放和A/D采樣芯片之間要進(jìn)行濾波處理,以提高采集精度。
圖3 8路模擬輸入電路
2.2.2 8路模擬輸出電路設(shè)計(jì)
8路模擬輸出電路如圖4所示。AD7568為8通道輸出的電流型數(shù)模轉(zhuǎn)換器,通過(guò)字末尾3個(gè)比特位選中其中一路的輸出通道進(jìn)行設(shè)置。使用OP07運(yùn)放構(gòu)成I-V轉(zhuǎn)換電路,將D/A輸出的電流信號(hào)轉(zhuǎn)換為電壓信號(hào)。為了提高轉(zhuǎn)換精度,模擬輸出電路和模擬輸入電路中ADG5207共用一個(gè)參考電壓。
圖4 8路模擬輸出電路
2.2.3 8路數(shù)字輸入電路設(shè)計(jì)
8路數(shù)字輸入其中一路的電路如圖5所示。使用6N137高速光耦隔離芯片將單片機(jī)采集系統(tǒng)和外部輸入電路隔離開來(lái),從而對(duì)采集電路進(jìn)行一定的保護(hù)。S1為撥碼開關(guān),當(dāng)撥碼開關(guān)打開時(shí),光耦內(nèi)部LED熄滅,VO輸出端為高電平。當(dāng)撥碼開關(guān)閉合時(shí),光耦內(nèi)部LED發(fā)光,VO輸出為低電平。
圖5 8路數(shù)字輸入其中一路電路
2.2.4 8路數(shù)字輸出電路設(shè)計(jì)
8路數(shù)字輸出其中一路的電路如圖6所示。使用6N137高速光耦隔離芯片將單片機(jī)控制系統(tǒng)和外部輸出電路隔離開來(lái),從而對(duì)控制電路進(jìn)行一定的保護(hù)。當(dāng)主控制器輸出引腳輸出高電平時(shí)光耦內(nèi)部LED發(fā)光,VO輸出端為低電平,此時(shí)D1點(diǎn)亮。當(dāng)主控制器輸出引腳輸出低電平時(shí)光耦內(nèi)部LED熄滅,VO輸出端為高電平,此時(shí)D1熄滅。
圖6 8路數(shù)字輸出其中一路電路
3.1.1 EtherCAT從站通信接口軟件設(shè)計(jì)
EtherCAT從站通信接口軟件實(shí)現(xiàn)EtherCAT從站與主站通信的整個(gè)協(xié)議棧,包括實(shí)現(xiàn)過(guò)程數(shù)據(jù)通信、郵箱通信和CoE(CANopen over EtherCAT)協(xié)議,并維護(hù)EtherCAT狀態(tài)機(jī)[4]。
從站過(guò)程數(shù)據(jù)通信分為自由運(yùn)行模式和同步模式,同步模式又分為同步于輸入或輸出事件模式和同步于分布式時(shí)鐘同步事件模式。從站通信接口軟件分為主程序和中斷服務(wù)程序2部分。當(dāng)從站處于自由運(yùn)行模式時(shí),過(guò)程數(shù)據(jù)處理和輸入輸出操作在主程序中完成,當(dāng)從站處于同步模式時(shí),過(guò)程數(shù)據(jù)處理和輸入輸出操作在各自的中斷函數(shù)中完成。
從站通信接口主程序流程圖如圖7所示。首先進(jìn)行單片機(jī)和LAN9252硬件初始化,單片機(jī)包括中斷接口和FSMC總線接口初始化,LAN9252從EEPROM中讀取配置參數(shù)并對(duì)其寄存器初始化。最后初始化EtherCAT協(xié)議相關(guān)變量,包括過(guò)程數(shù)據(jù)通信、郵箱通信、CoE協(xié)議和狀態(tài)機(jī)相關(guān)變量的初始化。完成初始化后,周期性讀取事件請(qǐng)求寄存器并判斷從站是否運(yùn)行在自由運(yùn)行模式,是則處理過(guò)程數(shù)據(jù)并根據(jù)狀態(tài)機(jī)進(jìn)行相應(yīng)的輸入輸出操作。無(wú)論從站是否處于自由運(yùn)行模式,都需要處理應(yīng)用層事件,即狀態(tài)機(jī)和郵箱通信處理。
圖7 從站通信接口主程序流程圖
當(dāng)從站工作在同步模式時(shí),雖然過(guò)程數(shù)據(jù)處理和輸入輸出操作在各自中斷函數(shù)中完成,但兩者處理方式相似。從站通信接口中斷程序流程圖如圖8所示。首先讀取事件寄存器,判斷是否發(fā)生過(guò)程數(shù)據(jù)輸出事件,是則讀取輸出數(shù)據(jù),然后再判斷當(dāng)前狀態(tài)機(jī)是否處于運(yùn)行狀態(tài),只有從站處于運(yùn)行狀態(tài)才能執(zhí)行應(yīng)用輸出操作,是則執(zhí)行數(shù)字輸出和模擬輸出操作。如果不能執(zhí)行輸出操作,再判斷是否可以執(zhí)行輸入操作,只有處于安全運(yùn)行或者運(yùn)行狀態(tài)的從站才可以進(jìn)行輸入操作,是則執(zhí)行數(shù)字輸入和模擬輸入操作。最后將輸入數(shù)據(jù)寫入到SM3管理存儲(chǔ)區(qū),以插入到EtherCAT數(shù)據(jù)幀對(duì)應(yīng)的位置中[4]。
圖8 從站通信接口中斷程序流程圖
3.1.2 測(cè)量控制程序設(shè)計(jì)
測(cè)量控制程序包括8路數(shù)字輸入、8路模擬輸入、8路數(shù)字輸出和8路模擬輸出。8路模擬輸入和8路模擬輸出的程序相似,每次只能進(jìn)行一個(gè)通道的操作,依次操作8次才能對(duì)所有通道完成操作,8路模擬輸入的程序流程圖如圖9所示。8路數(shù)字輸入和8路數(shù)字輸出的程序只需利用單片機(jī)I/O口進(jìn)行簡(jiǎn)單開關(guān)控制即可。
圖9 8路模擬輸入程序流程圖
EtherCAT應(yīng)用層支持多種協(xié)議,包括CoE、SoE(Servo Drive over EtherCAT)、EoE(Ethemet over EtherCAT)和FoE(File Access over EtherCAT)。CoE主要實(shí)現(xiàn)的功能有3種:使用郵箱通信訪問(wèn)CANopen對(duì)象字典,實(shí)現(xiàn)通信初始化;使用CANopen應(yīng)急對(duì)象實(shí)現(xiàn)通信管理;將過(guò)程數(shù)據(jù)映射到對(duì)象字典,周期性傳輸過(guò)程數(shù)據(jù)[4]。本系統(tǒng)基于CoE協(xié)議,從站1過(guò)程數(shù)據(jù)通信使用的對(duì)象字典規(guī)劃如表1所示。
表1 從站1過(guò)程數(shù)據(jù)通信對(duì)象字典
0x1C12為SM2分配,SM2負(fù)責(zé)過(guò)程數(shù)據(jù)輸出映射,它選擇了0x1600的映射關(guān)系,0x1600對(duì)0x8000進(jìn)行了組裝,從而完成數(shù)字輸出的映射。0x8000為數(shù)字輸出的對(duì)象字典,它對(duì)應(yīng)8個(gè)LED的狀態(tài),數(shù)據(jù)類型為布爾型。
0x1C13為SM3分配,SM3負(fù)責(zé)過(guò)程數(shù)據(jù)輸入映射,它選擇了0x1A00的映射關(guān)系,0x1A00對(duì)0x6000進(jìn)行了組裝,從而完成數(shù)字輸入的映射。0x6000是數(shù)字輸入的對(duì)象字典,它對(duì)應(yīng)8個(gè)撥碼開關(guān)的狀態(tài),數(shù)據(jù)類型也為布爾型。
表2 從站2過(guò)程數(shù)據(jù)通信對(duì)象字典
0x1C22選擇了0x1700的映射關(guān)系,0x1700對(duì)0x9000進(jìn)行了組裝,從而完成模擬輸出的映射。0x9000為模擬輸出的對(duì)象字典,它對(duì)應(yīng)8路模擬輸出的數(shù)字量,由于采用了12位D/A,所以數(shù)據(jù)類型為16位整型。
0x1C23選擇了0x1B00的映射關(guān)系,0x1B00對(duì)0x7000進(jìn)行了組裝,從而完成模擬輸入的映射。0x7000是模擬輸入的對(duì)象字典,它對(duì)應(yīng)8路模擬輸入的數(shù)字量,由于采用了24位A/D,所以數(shù)據(jù)類型為32位整型。
基于Qt框架的上位機(jī)軟件利用ADS通信接口和TwinCAT軟件交互。TwinCAT提供ADS協(xié)議的動(dòng)態(tài)鏈接庫(kù)給C++高級(jí)語(yǔ)言調(diào)用,并給出了相應(yīng)的樣例代碼[7]。Qt是基于C++語(yǔ)言的圖形界面應(yīng)用程序開發(fā)框架,它具有優(yōu)秀的跨平臺(tái)性[8]。Qt利用ADS接口和TwinCAT通信的關(guān)鍵點(diǎn)如下所述。以一路數(shù)字輸入為例,在TwinCAT軟件中獲得其ADS信息如下所示:
ADS Info:port:11,IGrp:0x3040010,IOffs:0xC0000138,Len:1
對(duì)應(yīng)的C++重要代碼如下:
pAddr->port=11;
AdsSyncReadReq(pAddr,0x3040010,0XC0000138,0x01,&buffer_reader);
其中pAddr為結(jié)構(gòu)體,包含了端口信息,AdsSyncReadReq函數(shù)為讀取TwinCAT變量函數(shù),其形參和ADS Info完全對(duì)應(yīng)。buffer_reader存放讀取到的數(shù)據(jù)。
為什么要培養(yǎng)青年?這是青年觀的首要問(wèn)題。習(xí)近平認(rèn)為:“在革命、建設(shè)、改革各個(gè)歷史時(shí)期,中國(guó)共產(chǎn)黨始終高度重視青年、關(guān)懷青年、信任青年,對(duì)青年一代寄予殷切期望。中國(guó)共產(chǎn)黨從來(lái)都把青年看作是祖國(guó)的未來(lái)、民族的希望,從來(lái)都把青年作為黨和人民事業(yè)發(fā)展的生力軍,從來(lái)都支持青年在人民的偉大奮斗中實(shí)現(xiàn)自己的人生理想?!盵1]在此,習(xí)近平科學(xué)闡述了青年在歷史和現(xiàn)實(shí)中的地位和作用,回答了這個(gè)首要問(wèn)題。青年認(rèn)識(shí)觀,正是習(xí)近平青年觀的邏輯起點(diǎn)。
以一路數(shù)字輸出為例,在TwinCAT軟件中獲得其ADS信息如下所示:
ADS Info:Port:11,IGrp:0x3040010,IOffs:0xC1000138,Len:1
對(duì)應(yīng)的C++重要代碼如下:
AdsSyncWriteReq(pAddr,0x3040010,0xC1000138,0x01,&buffer_writer);
AdsSyncWriteReq函數(shù)為寫入TwinCAT變量函數(shù),其形參和ADS Info完全對(duì)應(yīng)。其中buffer_writer存放要寫入的數(shù)據(jù)。
圖10是TwinCAT軟件掃描出的2個(gè)從站,Box1為從站1,從站1包含8路數(shù)字輸入和8路數(shù)字輸出。Box2為從站2,從站2包括8路模擬輸入和8路模擬輸出。
圖10 TwinCAT掃描從站結(jié)果
圖11是測(cè)控系統(tǒng)的Qt界面。如圖11所示,從站1的DI1,DI6和DI8通道的撥碼開關(guān)關(guān)閉,所以顯示為淺灰色,其余撥碼開關(guān)打開,所以顯示深灰色。對(duì)于數(shù)字輸出通道,可以點(diǎn)擊ON、OFF按鈕進(jìn)行控制,對(duì)應(yīng)的LED會(huì)點(diǎn)亮或者熄滅。
圖11 測(cè)控系統(tǒng)Qt界面
直流電壓源輸出電壓作為模擬輸入測(cè)量電壓,使用數(shù)字萬(wàn)用表與模擬輸入測(cè)量值進(jìn)行比對(duì),測(cè)量結(jié)果見(jiàn)表3。由表3可知,模擬輸入測(cè)量功能符合高精度要求。
使用數(shù)字萬(wàn)用表對(duì)模擬輸出電壓進(jìn)行測(cè)量,測(cè)量結(jié)果見(jiàn)表4。由表4可知,模擬輸出功能符合高精度要求。
表3 模擬輸入測(cè)量
表4 模擬輸出測(cè)量
使用Wireshark軟件對(duì)主站網(wǎng)卡的EtherCAT數(shù)據(jù)幀進(jìn)行捕獲,部分結(jié)果如表5所示。主站在89.040 640 s發(fā)出數(shù)據(jù)幀,在89.040 650 s收到經(jīng)過(guò)從站后的回環(huán)數(shù)據(jù)幀,共用時(shí)10 μs,主站在89.041 644 s發(fā)出另一條數(shù)據(jù)幀,與上一條數(shù)據(jù)幀間隔約1 m/s。由此可知,本系統(tǒng)具有較高的實(shí)時(shí)性。
表5 Wireshark捕獲EtherCAT數(shù)據(jù)幀
181544編號(hào)數(shù)據(jù)幀的過(guò)程數(shù)據(jù)為3d00320090012003b004080760091c0cd80e…,它是主站發(fā)出的控制輸出數(shù)據(jù)幀。3d00即0x003d(00111101),代表8個(gè)LED的狀態(tài),LED2、LED7和LED8熄滅,其余點(diǎn)亮;3200即0x0032(十進(jìn)制50),代表AO通道1輸出50 mV電壓;9001即0x0190(十進(jìn)制400),代表AO通道2輸出400 mV電壓,之后的數(shù)據(jù)以此類推。
181545編號(hào)數(shù)據(jù)幀的過(guò)程數(shù)據(jù)為5e003d3a1f00ae7f3e009aad5d007bec7c00…,它是從站返回給主站的測(cè)量輸入數(shù)據(jù)幀。5e00即0x005e(0101 1110),代表8個(gè)撥碼開關(guān)的狀態(tài),撥碼開關(guān)1、撥碼開關(guān)6和撥碼開關(guān)8閉合,其余打開;3d3a1f00即0x001f3a3d(十進(jìn)制2046525),代表AI通道1 數(shù)字量,由4 096×2 046 525/(2^24)可得AI通道1電壓為499.64 mV;ae7f3e00即0x003e7fae(十進(jìn)制4 095 918),代表AI通道2數(shù)字量,由4 096×4 095 918/(2^24)可得AI通道2電壓為999.98 mV,之后的數(shù)據(jù)以此類推。由此可見(jiàn),系統(tǒng)數(shù)據(jù)傳輸穩(wěn)定可靠。
當(dāng)需要增加或減少測(cè)控節(jié)點(diǎn)時(shí),只需增加或減少串聯(lián)相接的從站,主站重新掃描從站即可。由此可見(jiàn),系統(tǒng)擴(kuò)展性強(qiáng)。
將EtherCAT總線技術(shù)應(yīng)用到分布式測(cè)控系統(tǒng)中,可以提高整個(gè)系統(tǒng)數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性和可靠性,且便于對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行擴(kuò)展。本文設(shè)計(jì)的基于EtherCAT總線的分布式測(cè)控系統(tǒng)適用于工業(yè)、農(nóng)業(yè)等多種領(lǐng)域,具有良好的應(yīng)用前景。