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