ethercat從站移植到linux應(yīng)用層
【EtherCAT】4.實(shí)現(xiàn)一個(gè)成熟的從站 - 知乎
【EtherCAT】4.實(shí)現(xiàn)一個(gè)成熟的從站 - 知乎首發(fā)于EtherCAT切換模式寫文章登錄/注冊【EtherCAT】4.實(shí)現(xiàn)一個(gè)成熟的從站小皎皎一只可愛的小皎皎學(xué)習(xí)EtherCAT最好從從站開始,因?yàn)閺恼景薊therCAT大量原理,例如狀態(tài)機(jī),PDO映射等。學(xué)習(xí)從站代碼有利于理解過程數(shù)據(jù)如何傳輸,XML有什么作用。本文介紹一些從站的基礎(chǔ)知識,以及如何設(shè)計(jì)一個(gè)功能完善的從站。從站硬件無論是以ASIC還是FPGA的形式,ESC都是從站的核心,主站通過讀寫ESC的DPRAM空間實(shí)現(xiàn)數(shù)據(jù)傳輸。ESC通過PDI接口將數(shù)據(jù)發(fā)送到MCU,在MCU中執(zhí)行實(shí)際的應(yīng)用層操作。ESC根據(jù)倍福公司的IP core設(shè)計(jì),目前主流的ESC芯片包括: ASIX公司的AX58100芯片;BeckHoff自己的ET1100芯片;Microchip的LAN9252芯片;FPGA:ET1810(altera)和ET181(xilinx);由于都是基于BeckHoff的IP core設(shè)計(jì)的,因此這幾個(gè)芯片在實(shí)際功能上差距并不大,區(qū)別在于DPRAM的大小,SM的數(shù)量,F(xiàn)MMU的數(shù)量,PDI的方式等。芯片網(wǎng)口FMMUSMRAM(kBYTE)數(shù)字IOSPI slaveLocal BUSAX581002內(nèi)部PHY,1MII88932Y8/16 asyncLan92522內(nèi)部PHY,1MII34432Y8/16 sync/asyncET11004EBUS/MII88816Y8/16 sync/async關(guān)于芯片的詳細(xì)參數(shù),可以訪問ESC具有各類AL寄存器供主站訪問,但實(shí)際不執(zhí)行具體的應(yīng)用層操作,從站應(yīng)用層的管理由專門的MCU進(jìn)行。stm32有強(qiáng)大的性能和完善的生態(tài),因而是應(yīng)用層使用最為廣泛的芯片,也可以采用其他的硬件例如Arduino或者ESP32實(shí)現(xiàn)應(yīng)用層邏輯,但是要支持對應(yīng)ESC的相關(guān)PDI接口。一般來說,從站硬件系統(tǒng)如下圖所示:從站最小系統(tǒng)從站軟件從站幀的鏈路層功能都是由ESC完成的。從站軟件運(yùn)行在MCU中,主要執(zhí)行的是應(yīng)用層的操作。MCU通過PDI接口讀取ESC中的PDO和SDO數(shù)據(jù),然后執(zhí)行應(yīng)用層的處理,例如狀態(tài)機(jī),COE,EOE等相關(guān)邏輯。MCU需要一套協(xié)議棧執(zhí)行相關(guān)的邏輯,目前使用最多的從站協(xié)議棧是EtherCAT技術(shù)組(EtherCAT Technology Group,ETG)為會員提供的Slave Stack Code(SSC),SSC支持幾乎所有應(yīng)用層協(xié)議棧(EOE,COE,F(xiàn)OE)等,同時(shí)還提供了對專有協(xié)議Cia402等的支持。除此之外,SSC還提供了專門的工具來配置協(xié)議棧和PDO。SSC的缺點(diǎn)是,它是針對BeckHoff自己的PIC和ET1100芯片寫的,如果使用stm32或者其他通用處理器,需要手工移植代碼。ssc的代碼框架除了SSC之外,另一個(gè)比較有名的EtherCAT開源協(xié)議棧是SOES(GitHub - OpenEtherCATsociety/SOES: Simple Open Source EtherCAT Slave),SOES支持EOE和COE這兩種較為常用的應(yīng)用層協(xié)議,同時(shí)支持靜態(tài)和動態(tài)的PDO映射。SOES的代碼相較于SSC精簡很多,代碼可移植性較好。商用從站協(xié)議棧中,比較具有代表性的是KPA協(xié)議棧(https://koenig-pa.de/products/ethercat/kpa-ethercat-slave-stack)。作為商用協(xié)議棧,KPA協(xié)議棧幾乎支持所有的EtherCAT特性,包括: 郵箱協(xié)議:COE,EOE,F(xiàn)OE,SOE,VOE 分布時(shí)鐘DC;不同的掃描速率;從可移植性的角度,KPA協(xié)議棧實(shí)現(xiàn)了一個(gè)硬件抽象層,支持不同ESC和主控芯片的數(shù)據(jù)交互。下圖是KPA協(xié)議棧的程序結(jié)構(gòu),從圖中可以看出,數(shù)據(jù)從DPI傳輸?shù)組CU后,首先通過的是硬件抽象層,主循環(huán)輪詢AL事件來獲取過程數(shù)據(jù)和郵箱數(shù)據(jù)的更新,然后基于對象字典更新PDO和SDO。從站功能操作系統(tǒng)層對于實(shí)時(shí)性和同步要求極高的場合,一般一個(gè)系統(tǒng)運(yùn)行一個(gè)從站任務(wù)就好了,例如電機(jī)驅(qū)動從站,此時(shí)不建議使用操作系統(tǒng),直接進(jìn)行SSC協(xié)議棧移植即可。但是實(shí)時(shí)要求不強(qiáng)的場合,每個(gè)任務(wù)/接口使用一個(gè)從站是很浪費(fèi)的,畢竟ESC還是有點(diǎn)小貴的,對于任務(wù)很多的從站,還是有必要上嵌入式實(shí)時(shí)系統(tǒng)。下面介紹一下嵌入式操作系統(tǒng)的作用。操作系統(tǒng)層的主要作用是合理對從站任務(wù)進(jìn)行調(diào)度。作為現(xiàn)場總線的一部分,一個(gè)EtherCAT從站一般至少包含兩個(gè)任務(wù),一個(gè)從主站獲取EtherCAT數(shù)據(jù),另一個(gè)與控制設(shè)備(比如電機(jī)或CAN總線)交互。在多任務(wù)環(huán)境下,為了確保EtherCAT通信的實(shí)時(shí)性、增強(qiáng)任務(wù)調(diào)度的合理性、有效利用系統(tǒng)資源,從站應(yīng)當(dāng)基于實(shí)時(shí)操作系統(tǒng)進(jìn)行開發(fā)。相較于Linux等操作系統(tǒng),嵌入式操作系統(tǒng)具有如下特點(diǎn):小型系統(tǒng):由于嵌入式設(shè)備功能明確,操作系統(tǒng)往往與應(yīng)用程序編譯在一起運(yùn)行。實(shí)時(shí)性:嵌入式操作系統(tǒng)往往是實(shí)時(shí)操作系統(tǒng)。很多嵌入式設(shè)備對處理的實(shí)時(shí)性有嚴(yán)格要求,這種實(shí)時(shí)性是通過操作系統(tǒng)層面的任務(wù)調(diào)度機(jī)制、任務(wù)優(yōu)先級的設(shè)定和應(yīng)用程序的快速處理來達(dá)到的??梢浦残裕河捎谇度胧皆O(shè)備的應(yīng)用場景多樣,復(fù)雜程度千差萬別,應(yīng)用程序的大小各不相同,移植的需求是頻繁發(fā)生的。ucos,vxworks,F(xiàn)reeRTOS和RT-thread是較具代表性的實(shí)時(shí)操作系統(tǒng)。這里以RT-thread為例介紹嵌入式實(shí)時(shí)系統(tǒng)的組成,RT-thread不僅是一個(gè)實(shí)時(shí)操作系統(tǒng),也是一個(gè)完善的嵌入式軟件生態(tài)。它的底層是RT-thread內(nèi)核,基于內(nèi)核還提供了網(wǎng)絡(luò)框架,設(shè)備框架,以及各類API。最后在應(yīng)用層還提供了各類具體應(yīng)用。RT-thread架構(gòu)線程管理 RT-thread內(nèi)核是一個(gè)RT-thread程序的核心,RT-thread內(nèi)核是一個(gè)基于優(yōu)先級的全搶占式多線程調(diào)度系統(tǒng),在該實(shí)時(shí)系統(tǒng)中,線程是最小的調(diào)度單位,系統(tǒng)中除了中斷處理函數(shù)、調(diào)度器上鎖部分的代碼和禁止中斷的代碼是不可搶占的之外,系統(tǒng)的其他部分都是可以搶占的,包括線程調(diào)度器自身。RT-thread的線程調(diào)度關(guān)系如下。在RT-thread 中,實(shí)際上線程并不存在運(yùn)行狀態(tài),就緒狀態(tài)和運(yùn)行狀態(tài)是等同的。RT-thread線程RT-thread最多支持256個(gè)線程優(yōu)先級,0優(yōu)先級代表最高優(yōu)先級,最低優(yōu)先級留給空閑線程使用。同時(shí)它也支持創(chuàng)建多個(gè)具有相同優(yōu)先級的線程,相同優(yōu)先級的線程間采用時(shí)間片輪轉(zhuǎn)調(diào)度算法進(jìn)行調(diào)度,使每個(gè)線程運(yùn)行相應(yīng)時(shí)間。線程間通信 RT-thread支持線程間的同步和通信。采用信號量、互斥量與事件集實(shí)現(xiàn)線程間同步,線程通過對信號量、互斥量的獲取與釋放進(jìn)行同步。支持郵箱和消息隊(duì)列等通信機(jī)制。郵箱和消息隊(duì)列的發(fā)送動作可安全用于中斷服務(wù)例程中。通信機(jī)制支持線程按優(yōu)先級等待或按先進(jìn)先出方式獲取。時(shí)鐘管理 任何操作系統(tǒng)都需要提供一個(gè)時(shí)鐘節(jié)拍,以供系統(tǒng)處理所有和時(shí)間有關(guān)的事件,如線程的延時(shí)、線程的時(shí)間片輪轉(zhuǎn)調(diào)度以及定時(shí)器超時(shí)等。時(shí)鐘節(jié)拍是特定的周期性中斷,中斷之間的時(shí)間間隔取決于不同的應(yīng)用,時(shí)鐘節(jié)拍率越快,系統(tǒng)的額外開銷就越大,從系統(tǒng)啟動開始計(jì)數(shù)的時(shí)鐘節(jié)拍數(shù)稱為系統(tǒng)時(shí)間。RT-Thread 的時(shí)鐘管理以時(shí)鐘節(jié)拍為基礎(chǔ),時(shí)鐘節(jié)拍是 RT-Thread 操作系統(tǒng)中最小的時(shí)鐘單位。RT-Thread 的定時(shí)器提供兩類定時(shí)器機(jī)制: 單次觸發(fā)定時(shí)器:這類定時(shí)器在啟動后只會觸發(fā)一次定時(shí)器事件,然后定時(shí)器自動停止。 周期觸發(fā)定時(shí)器:這類定時(shí)器會周期性的觸發(fā)定時(shí)器事件,直到用戶手動的停止定時(shí)器否則將永遠(yuǎn)持續(xù)執(zhí)行下去。通常使用定時(shí)器定時(shí) 回調(diào)函數(shù)(即超時(shí)函數(shù)),完成定時(shí)服務(wù)。用戶根據(jù)自己對定時(shí)處理的實(shí)時(shí)性要求選擇合適類型的定時(shí)器。內(nèi)存管理 內(nèi)存是系統(tǒng)的重要資源,特別是對于資源緊張的嵌入式設(shè)備來說。RT-Thread將內(nèi)存分為動態(tài)內(nèi)存堆和靜態(tài)內(nèi)存池,對于動態(tài)內(nèi)存的申請,RT-Thread提供小內(nèi)存分配算法,slab算法和memheap算法。為了避免內(nèi)存碎片,提高分配效率,RT-Thread還在.data段提供一個(gè)靜態(tài)的內(nèi)存池。設(shè)備管理 和Linux驅(qū)動框架類似,RT-Thread也通過I/O設(shè)備模型框架對外設(shè)進(jìn)行管理。I/O 設(shè)備管理層實(shí)現(xiàn)了對設(shè)備驅(qū)動程序的封裝。應(yīng)用程序通過 I/O 設(shè)備管理接口獲得正確的設(shè)備驅(qū)動,然后通過這個(gè)設(shè)備驅(qū)動與底層 I/O 硬件設(shè)備進(jìn)行數(shù)據(jù)交互。設(shè)備驅(qū)動程序的升級、更替不會對上層應(yīng)用產(chǎn)生影響。這種方式使得設(shè)備的硬件操作相關(guān)的代碼能夠獨(dú)立于應(yīng)用程序而存在,雙方只需關(guān)注各自的功能實(shí)現(xiàn),從而降低了代碼的耦合性、復(fù)雜性,提高了系統(tǒng)的可靠性。硬件抽象層硬件抽象層的主要作用是提升程序的可移植性。與ESC的數(shù)據(jù)交互,是EtherCAT從站MCU最為重要的功能。MCU通過PDI訪問ESC的內(nèi)存空間,讀取寄存器和過程數(shù)據(jù),因此,有必要對ESC的數(shù)據(jù)訪問進(jìn)行封裝,封裝的目的是保證在MCU應(yīng)用層能夠通過通用的接口實(shí)現(xiàn)對不同類型從站ESC,不同接口PDI的訪問。關(guān)于硬件抽象層的封裝,SOES實(shí)現(xiàn)了所有硬件訪問相關(guān)函數(shù):應(yīng)用層協(xié)議EtherCAT從站的目標(biāo)是能夠支持各類應(yīng)用層協(xié)議,這其中最主要的是COE協(xié)議和基于COE的各類行規(guī)。此外還需要支持FOE,EOE,SOE等協(xié)議。COE:CANopen over EtherCAT,EtherCAT協(xié)議在應(yīng)用層支持CANopen協(xié)議,并作了相應(yīng)的擴(kuò)充,CoE協(xié)議完全遵從CANopen協(xié)議。COE協(xié)議十分核心且復(fù)雜,在此不作過多介紹。EOE:EtherNet over EtherCAT,該協(xié)議支持EtherCAT能分段傳遞標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)報(bào)文,使得EtherCAT協(xié)議同樣能支持TCP/IP、UDP/IP協(xié)議。SOE:Servo Drive over EtherCAT。SERCOS是世界首個(gè)應(yīng)用于伺服控制的協(xié)議。EtherCAT協(xié)議在應(yīng)用層接口上兼容了這個(gè)協(xié)議,簡稱為SOE。SERCOS應(yīng)用層協(xié)議為主站設(shè)計(jì)了信息接口,可以通過配置EtherCAT過程數(shù)據(jù)報(bào)文,實(shí)現(xiàn)周期性傳遞伺服驅(qū)動器的數(shù)據(jù)。FOE:File Access over EtherCAT。該協(xié)議可以使用EtherCAT總線上傳、下載固件,刷新從站的固件。并且可以通過命令行工具加載或存儲文件。結(jié)合實(shí)際需求,COE和基于COE的行規(guī)協(xié)議CiA402等是必須實(shí)現(xiàn)的,F(xiàn)OE、EOE作為程序的擴(kuò)展功能有必要實(shí)現(xiàn),而SOE不是常用需求。動態(tài)PDO映射靜態(tài)PDO映射是將PDO變量“寫死”在從站中,對于實(shí)際應(yīng)用場景是十分不友好的,例如某個(gè)機(jī)型的電機(jī)需要實(shí)時(shí)傳輸電機(jī)溫度,但在另一個(gè)機(jī)型中不需要溫度信息,如果使用靜態(tài)PDO映射,為了提升傳輸效率,刪除溫度PDO,則需要修改代碼,燒寫固件,更新XML文件。這樣會帶來巨大的工作量。特別是基于CiA402的驅(qū)動器來說,經(jīng)常要根據(jù)上位機(jī)軟件的需求修改傳輸變量。動態(tài)PDO映射允許定制PDO以滿足客戶需求,TwinCAT和KPA studio等上位機(jī)軟件都支持以勾選的形式動態(tài)配置PDO。為了使得上位機(jī)能夠修改PDO assign,需要在xml中配置mandatory為false(SSC在EXCEL)中可以配置。動態(tài)PDO映射的基本原理是操作對象字典的0x1C12和0x1C13對象,這兩個(gè)對象分別管理輸出和輸入的PDO映射。過程如下:將Ethercat狀態(tài)機(jī)切換到PreOP狀態(tài),此狀態(tài)可以用SDO來配置PDO映射;清除PDO指定對象的PDO映射對象,即設(shè)置0x1C12-00,與0x1C13-00為0;PDO映射對象無效,即對0x1600-0x1603/0x1A00-0x1A01的子索引設(shè)置為0;重新配置PDO映射內(nèi)容;0x1600-01開始的是RxPDO內(nèi)容,0x1A00-01開始的是TxPDO;設(shè)置PDO映射對象總數(shù);寫有效的PDO映射對象索引到PDO指定對象設(shè)置PDO指定對象的總個(gè)數(shù),即將映射對象個(gè)數(shù)寫入到1C12-00h和1C13-00h轉(zhuǎn)換Ethercat狀態(tài)機(jī)到安全操作以上,配置的PDO映射將有效。分布時(shí)鐘EtherCAT各個(gè)從站得到幀后會進(jìn)行處理或者轉(zhuǎn)發(fā),這需要一定的微小時(shí)間。但當(dāng)需要經(jīng)手的從站多,或者數(shù)據(jù)量大的時(shí)候,積少成多會導(dǎo)致較大的延遲,并且電纜線內(nèi)信號傳輸也占有一定的延時(shí)時(shí)間。分步時(shí)鐘可以使所有的EtherCAT設(shè)備使用相同的系統(tǒng)時(shí)間,從而控制各設(shè)備的任務(wù)的同步執(zhí)行,支持分布式時(shí)鐘的從站稱為DC從站。為使各個(gè)從站的參考時(shí)鐘達(dá)到絕對同步,主站會計(jì)算各個(gè)從站的偏移時(shí)間,這個(gè)值會寫入對應(yīng)從站的系統(tǒng)時(shí)間偏移寄存器。在從站端,分布時(shí)鐘由ESC芯片實(shí)現(xiàn),ESC為從站控制微處理器提供同步的中斷信號和時(shí)鐘信息,分布時(shí)鐘單元可以產(chǎn)生兩個(gè)同步信號SYNC0和SYNC1,用于給應(yīng)用層提供中斷或直接觸發(fā)的輸出數(shù)據(jù)更新。MCU可以通過ESC的中斷信息和時(shí)間漂移寄存器的值更新本地系統(tǒng)時(shí)鐘。分布時(shí)鐘是從站的重要功能,SSC和SOES都實(shí)現(xiàn)了分布時(shí)鐘,可以參考這兩者的設(shè)計(jì)實(shí)現(xiàn)該功能。SDK目前從站代碼開發(fā)主要有兩種方式: 基于現(xiàn)有的代碼進(jìn)行移植:目前對于成熟的ESC(ET1100、LAN9252、AX58100)都有比較成熟的解決方案。但移植仍然要求對代碼較為熟悉,如果添加新功能較為困難,綜合來看較為麻煩;基于從站軟件生成:SSC,SOES和KPA都提供了對應(yīng)的從站代碼生成器,但是SSC是針對自己的的PIC32芯片的,仍然需要手動移植代碼;SOES和KPA的從站軟件都屬于商用軟件需要較高的授權(quán)費(fèi);因此通過一個(gè)SDK簡化從站開發(fā)流程是有必要的,參考SOES的slave editor,SDK所需的功能如下:從站基本信息:允許通過界面添加XML的必要信息,例如vendor ID,product ID等;數(shù)據(jù)鏈路層配置,允許通過界面配置FMMU,SM同步管理器和郵箱;PDI的配置:允許通過界面配置PDI相關(guān)寄存器;PDO的配置:這是從站軟件的核心,允許通過界面直接添加和管理PDO,由于PDO是從站最重要的功能,此功能將極大簡化從站開發(fā)過程;代碼生成和XML的生成。SOES的上位機(jī)軟件從站性能從站響應(yīng)時(shí)間從站響應(yīng)時(shí)間是從站的性能指標(biāo),指從發(fā)送一幀數(shù)據(jù),經(jīng)過每個(gè)從站ESC的處理,到主站接收到這幀數(shù)據(jù)的時(shí)間。從站響應(yīng)時(shí)間主要由硬件和網(wǎng)絡(luò)結(jié)構(gòu),數(shù)據(jù)傳輸量決定,具體地:帶寬:傳輸延時(shí)和帶寬有關(guān)系,對于單個(gè)bit,從發(fā)送到確認(rèn),不考慮線路損耗的時(shí)間是(1/BandWidth)。假設(shè)EtherCAT網(wǎng)絡(luò)的帶寬是100Mbit/s,則每字節(jié)的傳輸延時(shí)是(1/100M)*8 = 80us;主站硬件延時(shí):主站硬件同樣存在延時(shí),一般在幾u(yù)s左右;主站軟件延時(shí):主站軟件一般會帶來幾微秒的延時(shí),取決于主站的性能;從設(shè)備數(shù)量:每個(gè)MII/PHY接口的ESC會帶來1us的延時(shí),而EBUS接口的則只有0.3us;KPA studio的數(shù)據(jù)界面,在運(yùn)行狀態(tài)下可以查看從站響應(yīng)時(shí)間。編輯于 2023-08-29 15:47?IP 屬地浙江EtherCAT 總線驅(qū)動器?贊同 20??11 條評論?分享?喜歡?收藏?申請轉(zhuǎn)載?文章被以下專欄收錄EtherCAT介紹工業(yè)以太網(wǎng)總線EtherCAT技-1.4
%????
2 0 obj
<>stream
H?|W??? ??S?/pfě.@ nYhvAS?M?qbL???CI?h????/??x?>??//??????曧?^^?????????~???????~??HP???/??????I{lTu???????~?p=}????_?????_>??????o????????c, ?*??6?0*?U??m?b????#?x??2??q}?????@X????????:??~z?a????p?n8??X{o?;???-i!AR ^7}??["f??$DU???\??a?K?J? ??,?J{Y?_???-m?????C4??z???6??V?T???6?b"?K?7q????#?[?v9???As??[W?4-?{Mz ?p??nJo??m-??js*Ykqc4-?5M????H???^??}.?G??}???!?}??\=??tC?4????x/4?}u??`{d????f? (??RB??n??^.?j9??\3G????b??F?X?`??xcQ???t???0SG??4??6OWk#F??dB?B?t??Y? '???\??;???T??a??
eWвj???_-?*???m-i????????$?f?d???+ ??B?.xw2?"]?