胡鑫明,蔣大海,雷妮,鞏芫芳,寧少楠,馮武彤
(1.西安西電數(shù)字科技有限公司,陜西 西安 710075;2.西安西電電力系統(tǒng)有限公司,陜西 西安 710075;3.中國(guó)人民武裝警察部隊(duì)工程大學(xué) 信息工程學(xué)院,陜西 西安 710086)
工業(yè)以太網(wǎng)技術(shù)是以太網(wǎng)技術(shù)的延伸,該技術(shù)以其兼容性強(qiáng)、成本低、拓?fù)潇`活、帶寬大等優(yōu)點(diǎn),正在逐步取代傳統(tǒng)的現(xiàn)場(chǎng)總線技術(shù),其中EtherCAT 是最好的實(shí)時(shí)以太網(wǎng)之一[1]。EtherCAT 總線是Beckhoff 于2003 年提出的一種高性能實(shí)時(shí)工業(yè)以太網(wǎng)技術(shù)。EtherCAT 實(shí)時(shí)工業(yè)以太網(wǎng)以其極短的循環(huán)時(shí)間、高速、高同步性等優(yōu)勢(shì),使其在機(jī)器人、機(jī)床等領(lǐng)域得到廣泛的應(yīng)用[2-5]。EtherCAT 網(wǎng)絡(luò)的物理拓?fù)淇梢允蔷€型、星型、樹型、菊花鏈型等,且可任意組合。但EtherCAT 邏輯拓?fù)涫俏ㄒ坏模W(wǎng)絡(luò)內(nèi)所有幀只能以“邏輯環(huán)網(wǎng)”的方式進(jìn)行傳播,即所有幀均由主站發(fā)送,以確定的順序通過(guò)所有網(wǎng)絡(luò)從站,并完成循環(huán)后返回主站[6]。EtherCAT 幀傳輸過(guò)程如圖1 所示。
圖1 EtherCAT 幀傳輸過(guò)程
目前工業(yè)控制系統(tǒng)中EtherCAT 主站設(shè)備為了檢查實(shí)際所搭建網(wǎng)絡(luò)與設(shè)計(jì)方案是否一致,一種方法是將網(wǎng)絡(luò)結(jié)構(gòu)即從站的部分關(guān)鍵信息直接添加到主站軟件的代碼中,用于構(gòu)建主站程序的設(shè)計(jì)軟件開(kāi)發(fā)難度較高,配置過(guò)程中每次調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)都需要直接對(duì)代碼文件進(jìn)行修改,如發(fā)生錯(cuò)誤不易排查;另一種方法是先將從站型號(hào)和網(wǎng)絡(luò)設(shè)計(jì)方案保存在文件,當(dāng)主站程序運(yùn)行后讀取這些文件內(nèi)容再與實(shí)際網(wǎng)絡(luò)進(jìn)行對(duì)比,實(shí)現(xiàn)這個(gè)過(guò)程同樣較為復(fù)雜[7]。
本文所提出的方法針對(duì)EtherCAT 主站設(shè)備存儲(chǔ)和讀取網(wǎng)絡(luò)結(jié)構(gòu)方法進(jìn)行優(yōu)化,并通過(guò)在線檢查對(duì)實(shí)際網(wǎng)絡(luò)進(jìn)行確認(rèn)。EtherCAT 主站配置軟件支持用戶設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)并最終生成主站應(yīng)用程序,如圖2 所示。首先在設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)階段生成描述從站型號(hào)信息以及從站選型的配置文件,然后在構(gòu)建過(guò)程中將這些文件嵌入源代碼,每次調(diào)整僅生成新的配置文件,無(wú)需修改協(xié)議棧和相關(guān)功能的源代碼。
圖2 EtherCAT 網(wǎng)絡(luò)結(jié)構(gòu)配置過(guò)程
EtherCAT 標(biāo)準(zhǔn)規(guī)定每個(gè)從站設(shè)備型號(hào)均需提供配套ESI(EtherCAT Slave Information)文件,該文件為XML格式,存儲(chǔ)在主站開(kāi)發(fā)環(huán)境和從站設(shè)備的E2PROM中[8]。XML 作為一種靈活的半結(jié)構(gòu)化標(biāo)簽語(yǔ)言,在信息表示和數(shù)據(jù)交換方面有先天的優(yōu)勢(shì)[9]。ESI文獻(xiàn)件中包含從站型號(hào)的所有信息,例如制造商ID、型號(hào)ID、設(shè)備名稱等,用來(lái)識(shí)別設(shè)備;還包含通道數(shù)量、類型、映射關(guān)系、寄存器地址等信息,以供主站設(shè)備確定如何驅(qū)動(dòng)從站工作。
EtherCAT 主站運(yùn)行后首先初始化EtherCAT 網(wǎng)絡(luò),激活所有接入網(wǎng)絡(luò)的從站設(shè)備;再讀取每個(gè)從站的信息,這些從站信息與對(duì)應(yīng)型號(hào)ESI文獻(xiàn)件內(nèi)容一致;最后將收集到的從站信息與程序內(nèi)存儲(chǔ)的網(wǎng)絡(luò)結(jié)構(gòu)信息進(jìn)行對(duì)比,若發(fā)現(xiàn)不一致則將對(duì)應(yīng)錯(cuò)誤信息報(bào)出以供運(yùn)維人員排查問(wèn)題。
EtherCAT 主站軟件基于開(kāi)源協(xié)議棧SOEM(Simple Open Source EtherCAT Master)開(kāi)發(fā),EtherCAT主站協(xié)議棧軟件按授權(quán)方式可分為付費(fèi)的商業(yè)軟件和免費(fèi)的開(kāi)源軟件,其中開(kāi)源軟件主要是RT-LAB的SOEM 和EtherLab 的IgH。兩款協(xié)議棧進(jìn)行對(duì)比發(fā)現(xiàn)SOEM 更簡(jiǎn)單易用,而IgH 復(fù)雜但功能更完整[10-12]。
因SOEM 是基于C 語(yǔ)言開(kāi)發(fā),可充分利用C 語(yǔ)言的預(yù)處理指令#include 將網(wǎng)絡(luò)設(shè)計(jì)方案與代碼分離。如圖3 所示,將C/C++語(yǔ)言代碼構(gòu)建為二進(jìn)制文件的過(guò)程包含預(yù)處理、編譯、匯編、鏈接4 個(gè)階段。在預(yù)處理階段,預(yù)處理器將可能包含預(yù)處理指令的原始代碼文件作為輸入,執(zhí)行這些指令并將指令刪除,輸出不再包含指令信息的中間文件。其中#include 指令指示打開(kāi)指定文件,將其內(nèi)容作為當(dāng)前代碼文件的一部分填充到指令所在位置。
圖3 C 語(yǔ)言程序構(gòu)建過(guò)程圖
配置軟件存儲(chǔ)了每個(gè)從站型號(hào)的ESI文獻(xiàn)件,從所有ESI文獻(xiàn)件提取從站信息生成設(shè)備型號(hào)信息列表,再?gòu)脑O(shè)備型號(hào)信息列表提取設(shè)備名稱生成型號(hào)索引列表,用戶創(chuàng)建的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)方案結(jié)合型號(hào)索引生成從站選型列表。配置軟件將上述3 個(gè)列表保存為文本文件,如表1 所示。這3 個(gè)文件存入指定目錄,在預(yù)處理階段通過(guò)主站源代碼#include 指令填充到中間文件內(nèi)。這些中間文件再與EtherCAT 協(xié)議棧中間文件一并被處理生成主站應(yīng)用程序。
表1 文獻(xiàn)本文件表
為使源代碼與網(wǎng)絡(luò)結(jié)構(gòu)信息分離,在主站存儲(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)和在線檢查功能軟件代碼中定義新的數(shù)據(jù)類型如表2 所示,其源代碼如圖4 所示。
表2 數(shù)據(jù)類型表
圖4 數(shù)據(jù)類型源代碼
結(jié)構(gòu)體類型Device_Info 用來(lái)定義設(shè)備型號(hào)信息,內(nèi)部元素包含整數(shù)類型的制造商ID、型號(hào)ID 和字符數(shù)組類型的設(shè)備名稱。
枚舉類型Device_Index 用來(lái)定義設(shè)備索引,第1 個(gè)元素“MASTER”為主站索引并賦值為0,最后1 個(gè)元素“DEV_MODEL_QUANTITY”作為設(shè)備型號(hào)數(shù)量,其他元素為從站索引且通過(guò)預(yù)處理指令#include 聲明相關(guān)內(nèi)容由從站型號(hào)索引文件導(dǎo)入,枚舉類型的元素實(shí)際上是整數(shù)類型,若不明確指定枚舉的數(shù)值,其數(shù)值將是上一個(gè)枚舉值加1 的結(jié)果。
結(jié)構(gòu)體類型DevIndex_Struct 內(nèi)部元素僅有枚舉類型Device_Index,是對(duì)枚舉類型Device_Index 進(jìn)行再次封裝,使代碼符合C 語(yǔ)言語(yǔ)法,以避免一些編譯錯(cuò)誤。
代碼中再利用上述創(chuàng)建的數(shù)據(jù)類型創(chuàng)建新的變量,如表3 所示,其源代碼如圖5 所示。
表3 變量表
圖5 數(shù)組變量源代碼
數(shù)組EC_Dev_DB 作為存儲(chǔ)設(shè)備型號(hào)信息的變量,其類型為結(jié)構(gòu)體Device_Info。該數(shù)組第一個(gè)元素存儲(chǔ)主站信息,設(shè)備名稱為“MASTER”,廠商ID 和型號(hào)ID 均為0;其他元素存儲(chǔ)從站型號(hào)信息且通過(guò)預(yù)處理指令#include 聲明相關(guān)內(nèi)容由Slave_Model.idb文獻(xiàn)件導(dǎo)入。
數(shù)組EC_Dev_Deploy作為存儲(chǔ)每個(gè)節(jié)點(diǎn)設(shè)備型號(hào)的變量,其類型為結(jié)構(gòu)體DevIndex_Struct,該數(shù)組第一個(gè)元素固定為主站的索引“MASTER”,其他元素為各節(jié)點(diǎn)從站對(duì)應(yīng)型號(hào)的索引且通過(guò)預(yù)處理指令#include 聲明相關(guān)內(nèi)容由網(wǎng)絡(luò)結(jié)構(gòu)信息文件導(dǎo)入。
配置軟件解析ESI文獻(xiàn)件,將型號(hào)關(guān)鍵信息提取出來(lái)添加到內(nèi)存中的設(shè)備型號(hào)列表,設(shè)備名稱中如有空格符,用下劃線替代;再創(chuàng)建Slave_Model.idb 并將列表中所有從站型號(hào)信息逐條以數(shù)組EC_Dev_DB 元素的形式寫入其中。
配置軟件在生成設(shè)備型號(hào)列表后將其中的設(shè)備名稱提取出來(lái)生成型號(hào)索引列表;再創(chuàng)建Slave_Index.idb,并將列表中所有從站型號(hào)索引逐條以枚舉類型Device_Index 元素的形式寫入其中,包含部分型號(hào)的上述文件內(nèi)容如圖6 所示。
圖6 型號(hào)信息與索引文件內(nèi)容
配置軟件將從站型號(hào)分組和排序,通過(guò)操作界面以列表的形式供設(shè)計(jì)人員選擇。因EtherCAT 網(wǎng)絡(luò)邏輯拓?fù)涫俏ㄒ坏?,為每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)選擇對(duì)應(yīng)從站型號(hào),即確定了網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計(jì)方案,配置軟件即可確定從站數(shù)量和從站選型列表內(nèi)容。配置軟件創(chuàng)建Slave_Deploy.idb并按節(jié)點(diǎn)順序逐條將從站型號(hào)索引以數(shù)組EC_Dev_Deploy 元素的形式寫入其中。
從站型號(hào)信息文件、從站型號(hào)索引文件存儲(chǔ)在配置軟件目錄下,作為公共文件供所有項(xiàng)目使用,僅在添加或刪除從站型號(hào)后更新;網(wǎng)絡(luò)結(jié)構(gòu)信息文件存儲(chǔ)在項(xiàng)目目錄,為該項(xiàng)目專用文件。
EtherCAT 主站不僅能夠基于高性能處理器實(shí)現(xiàn),也能基于微控制器實(shí)現(xiàn)[13-16]。上述設(shè)計(jì)適用于資源豐富的MPU 平臺(tái),將配置軟件支持的所有從站型號(hào)都存入從站型號(hào)信息文件,可縮短構(gòu)建程序的時(shí)間。另外,針對(duì)基于MCU 開(kāi)發(fā)的主站設(shè)備,為節(jié)約有限的硬件資源尤其是ROM 和RAM,還設(shè)計(jì)了緊湊型方案。
緊湊型方案中,配置軟件在項(xiàng)目目錄下還要生成從站型號(hào)信息集合文件和從站型號(hào)索引文件,文件中僅包含本次方案所選用的從站型號(hào),而將未選用的型號(hào)排除在外,能夠有效減少應(yīng)用程序?qū)OM 和RAM 資源的需求。用戶在創(chuàng)建項(xiàng)目過(guò)程中,將選擇該項(xiàng)目是否為緊湊型,若不勾選此項(xiàng)配置,則為完整型項(xiàng)目。
在完成網(wǎng)絡(luò)上每個(gè)節(jié)點(diǎn)從站選型并保存項(xiàng)目后,配置軟件調(diào)用編譯工具鏈執(zhí)行構(gòu)建應(yīng)用程序的流程。預(yù)處理器識(shí)別到代碼中#include 指令,將從站型號(hào)信息文件、從站型號(hào)索引文件和網(wǎng)絡(luò)結(jié)構(gòu)信息文件內(nèi)容導(dǎo)入代碼,再通過(guò)一系列處理最終獲得可在EtherCAT 主站設(shè)備執(zhí)行的二進(jìn)制應(yīng)用程序。
設(shè)計(jì)和構(gòu)建過(guò)程中所有源代碼文件因不受網(wǎng)絡(luò)結(jié)構(gòu)影響而無(wú)需修改;從站型號(hào)信息文件、從站型號(hào)索引文件內(nèi)容都來(lái)源于配置軟件對(duì)ESI 的提??;網(wǎng)絡(luò)結(jié)構(gòu)信息文件由配置軟件基于網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)方案和索引自動(dòng)生成。上述過(guò)程無(wú)需人工干預(yù),可以正確高效的運(yùn)行。
EtherCAT 主站收集到從站數(shù)量及每個(gè)從站的信息后,將這些信息與所設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行對(duì)比,即可判斷實(shí)際部署的網(wǎng)絡(luò)與設(shè)計(jì)方案是否一致,過(guò)程如圖7所示。
圖7 EtherCAT 網(wǎng)絡(luò)結(jié)構(gòu)在線檢查流程圖
在激活所有從站后,主站獲取并在內(nèi)存中存儲(chǔ)網(wǎng)絡(luò)中實(shí)際部署的所有從站信息,隨即獲得實(shí)際節(jié)點(diǎn)數(shù)量Num_R,將Num_R 與設(shè)計(jì)方案中的從站總數(shù)量Num_D對(duì)比,若不匹配則輸出數(shù)量錯(cuò)誤提示信息;將從站序號(hào)Sub 設(shè)置為1 開(kāi)始,逐個(gè)節(jié)點(diǎn)判斷序號(hào)是否超過(guò)設(shè)計(jì)方案和實(shí)際節(jié)點(diǎn)數(shù)量,再先后提取該節(jié)點(diǎn)實(shí)際從站和設(shè)計(jì)方案中從站的ID 值(含廠商ID 和型號(hào)ID),若ID 不匹配,則報(bào)告型號(hào)錯(cuò)誤。
主站軟件通過(guò)指針尋址訪問(wèn)內(nèi)存數(shù)據(jù)的特性,實(shí)現(xiàn)高效提取ID 值。數(shù)據(jù)結(jié)構(gòu)與變量關(guān)系如圖8 所示,利用數(shù)組EC_Dev_DB 存儲(chǔ)所有從站的型號(hào)信息,DevIndex_Struct(內(nèi)含枚舉類型Device_Index)定義的枚舉值可作為數(shù)組EC_Dev_DB 下標(biāo),用于快速定位數(shù)組EC_Dev_DB 元素位置;數(shù)組EC_Dev_Deploy 中存儲(chǔ)了所設(shè)計(jì)網(wǎng)絡(luò)方案中包含主站在內(nèi)的所有設(shè)備型號(hào),其數(shù)組下標(biāo)與網(wǎng)絡(luò)節(jié)點(diǎn)順序?qū)?yīng),起始下標(biāo)0 對(duì)應(yīng)主站,1 對(duì)應(yīng)第1 個(gè)從站,以此類推,通過(guò)下標(biāo)讀取對(duì)應(yīng)元素的值即為該位置節(jié)點(diǎn)的型號(hào)索引;將型號(hào)索引作為下標(biāo)在數(shù)組EC_Dev_DB 中直接定位到的對(duì)應(yīng)型號(hào),讀取該元素內(nèi)容即可獲得型號(hào)的ID 值。
圖8 數(shù)據(jù)結(jié)構(gòu)與變量關(guān)系圖
為驗(yàn)證本文提出的配置EtherCAT 網(wǎng)絡(luò)結(jié)構(gòu)和在線檢查功能的準(zhǔn)確性,通過(guò)多型號(hào)從站搭建網(wǎng)絡(luò)開(kāi)展測(cè)試工作,所涉及設(shè)備型號(hào)如表4 所示。
表4 設(shè)備型號(hào)表
選取6 臺(tái)從站與主站搭建EtherCAT 網(wǎng)絡(luò),實(shí)際網(wǎng)絡(luò)設(shè)備選型如表5 所示。
表5 實(shí)際網(wǎng)絡(luò)節(jié)點(diǎn)選型表
配置軟件設(shè)計(jì)主站內(nèi)網(wǎng)絡(luò)結(jié)構(gòu)方案與實(shí)際網(wǎng)絡(luò)保持一致,經(jīng)測(cè)試,主站檢查后報(bào)告結(jié)果為正確,測(cè)試通過(guò),從站選型文件內(nèi)容如圖9 所示。
圖9 從站選型文件內(nèi)容
配置軟件在正確的網(wǎng)絡(luò)結(jié)構(gòu)方案基礎(chǔ)上進(jìn)行多次修改,第1 次將正確方案第7 節(jié)點(diǎn)刪除,第2 次在正確方案上增加第8 節(jié)點(diǎn)型號(hào)為ServoDrive_FSMC。對(duì)上述方案分別進(jìn)行測(cè)試,均報(bào)告從站數(shù)量錯(cuò)誤,測(cè)試通過(guò)。
配置軟件在正確的網(wǎng)絡(luò)結(jié)構(gòu)方案基礎(chǔ)上進(jìn)行修改,將第3 節(jié)點(diǎn)替換為EL2008,將第6 節(jié)點(diǎn)替換為EL1859。對(duì)主站運(yùn)行修改的方案版本軟件進(jìn)行測(cè)試,報(bào)告第3、第6 節(jié)點(diǎn)的從站型號(hào)錯(cuò)誤,測(cè)試通過(guò)。
本文設(shè)計(jì)了一種針對(duì)EtherCAT 主站存取網(wǎng)絡(luò)結(jié)構(gòu)信息的方法,并基于SOEM 協(xié)議棧進(jìn)行實(shí)現(xiàn)和驗(yàn)證。測(cè)試結(jié)果表明,在保證主站裝置保持原有功能、性能及穩(wěn)定性要求的前提下,顯著降低了維護(hù)網(wǎng)絡(luò)結(jié)構(gòu)信息的復(fù)雜度;緊湊型方案進(jìn)一步減少了應(yīng)用程序中的冗余信息;網(wǎng)絡(luò)結(jié)構(gòu)在線檢查過(guò)程中,主站通過(guò)指針尋址方式迅速獲得相關(guān)信息,確保了程序的執(zhí)行效率。上述優(yōu)勢(shì)有效降低主站配套網(wǎng)絡(luò)設(shè)計(jì)工具開(kāi)發(fā)難度的同時(shí)改善了主站產(chǎn)品的用戶體驗(yàn)和經(jīng)濟(jì)效益,另外,該方法也能夠在其他類型總線產(chǎn)品設(shè)計(jì)中進(jìn)行推廣,具有廣泛的應(yīng)用前景。
注:本文通訊作者為胡鑫明。