EtherCAT主站協議棧?

Tags: 資料, 協議, 主站,

EtherCAT工業實時乙太網技術以其高速,穩定的效能特點,被大量應用於運動控制,機器人,CNC等領域。為了快速、高效地開發一款EtherCAT主站產品,選用一套商業版的EtherCAT主站協議棧進行移植是一種可行性高,價效比高的解決方案。

7 EtherCAT主站開發經驗——基於Zynq

6 EtherCAT主站開發經驗——基於X86或ARM

1 EtherCAT伺服驅動器-如何選擇硬體開發方案

工具/原料

EtherCAT主站原始碼或API函式庫:德國KPA EtherCAT主站協議棧

X86/ARM/Zynq等硬體平臺,注意CPU和NIC(網絡卡)的型號

X86/ARM/Zynq相對應的開發環境

INtime,QNX,RTX,VxWorks,Xenomai,Linux Posix rt-preempt,Windows等實時或非實時作業系統

EtherCAT配置工具:KPA Studio配置工具軟體

方法/步驟

KPA EtherCAT主站協議棧簡介

優勢:1、最小週期時間;2、高效能;3、最小成本投入

KPA EtherCAT主站協議棧的模組化結構使得該程式碼可完全相容地移植到不同的作業系統中,如INtime,Linux Posix rt-preempt,QNX,RTX,VxWorks,Xenomai,Windows,WinCE等;也可以擴充套件至不同的功能版本,如Basic(Class B),Standard(Class A),Feature/Extension等;當然該協議棧也可以移植到各種各樣不同的硬體平臺上,如ARM,X86,Zynq,ppc等。

EtherCAT主站協議棧

硬體平臺和作業系統的選擇:

硬體平臺方面,X86,ARM和Zynq(即FPGA+ARM)各有特點,X86大多用於工控機,ARM多用於控制器,Zynq的話效能最強,多用於高精度場合。而從移植難度看,X86和ARM的開發難度相對Zynq要小一些。

作業系統方面,INtime,Linux Posix rt-preempt,Xenomai等實時作業系統是首選,可讓迴圈週期達到us級別,其次是Windows,Linux等普通的非實時作業系統。一般情況下,為了體現EtherCAT的速度優勢,實時作業系統是必要的。

下面是一些平臺和作業系統的測試資料。

EtherCAT主站協議棧

功能版本的選擇:

根據ETG協會的EtherCAT規範,EtherCAT主站可分為兩個版本,基礎版本(ClassB)和標準版本(Class A)。其中基礎版本包括PDO,CoE,FoE,S2S等功能,而標準版本在基礎版本的基礎上又增加了EoE,SoE,AoE,VoE和最主要的DC功能。所以一般情況下用得最多的是標準版本(Class A)。除此之外,KPA EtherCAT主站協議棧還帶有進階版本和拓展版本,有線纜冗餘,熱連結,TCP/UDP郵箱,資料記錄,幀記錄,外部同步,DBC-CAN,事件處理,多主站機制等功能。這些功能都是KPA公司在結合客戶的真實需求之後開發出來的,實用性和可操作性都是非常強的。

EtherCAT主站協議棧

KPA EtherCAT主站協議棧的整體架構

KPA EtherCAT主站協議棧可分為以下幾個部分:

1、API函式,用於管理和配置EtherCAT網路

◆主站初始化和配置

◆過程通訊處理

◆郵箱通訊處理

◆主/從站狀態控制

◆網路狀態(從站掃描)

◆主站資訊統計,主站診斷

◆記錄/錯誤處理

2、過程通訊(Process Image)

3、郵箱通訊實現(Mailbox implementation)

4、主站程序(PI update cycle(HI-time-critical cycle),Mailbox update cycle(NR-mailbox processing cycle),Autorecovery and diagnostics cycle(LO-auto-recovery,diagnostics cycle))

5、幀排程(Frame scheduler)

6、作業系統抽象層(OS abstraction layer)

◆EtherCAT網路驅動(API函式:ecat_open, ecat_close, ecat_is_opened,

ecat_send_frame, ecat_recv_frame, ecat_get_statistics, ecat_reset_statistics,ecat_get_link_state, ecat_set_callback, ecat_is_available, ecat_get_adapterslist.該驅動與OS網路協議棧或網絡卡驅動緊密結合。)

◆封裝了程序處理功能,過程同步功能(如mutexes,semaphores等),時鐘處理功能等。

EtherCAT主站協議棧

EtherCAT主站協議棧架構詳解

1、主站程序(Master threads)——共三個處理迴圈,用於初始化EtherCAT幀並傳送給幀排程(frame scheduler),其中包括過程通訊更新(HI),郵箱通訊(NR),診斷和自恢復(LO)。

◆所有要求硬實時的任務都必須在HI(PI update cycle)中完成。HI在這三個主站程序中擁有最高的優先順序。

◆NR用於郵箱資料處理。NR的優先順序比HI低,但比LO要高。

◆LO用於改變從站狀態,監控,自恢復和診斷。LO並不像HI和NR那樣對時序要求非常嚴格,所以它的優先順序是最低的。

2、應用程式(Application)——這是一個獨立的程序,呼叫主站API函式實現功能。通過呼叫API函式,幾乎可以完全控制EtherCAT主站:啟動/停止主站,配置主站,更新過程資料(PI)等。

3、Process task(external task)——實現各種控制邏輯的回撥函式。每一次更新PI時(即HI程序)都會呼叫這個回撥函式。

4、過程映像(Process Image)——由隱藏緩衝區(Shadow buffer)和活躍緩衝區(Active buffer)構成。

隱藏緩衝區:接收或傳送給EtherCAT網路的資料。

活躍緩衝區:與使用者互動的資料,如傳送資料的準備。

5、幀排程(Frame scheduler)——收集EtherCAT幀並根據幀的優先順序轉發給EtherCAT網路驅動。

6、EtherCAT網路驅動(EtherCAT network driver)——從底層網路中抽象出EtherCAT Master Stack core。

7、NIC1,NIC2——物理網絡卡介面,用於傳送報文或從EtherCAT網路接收報文。

8、網絡卡驅動(NIC drivers)——物理網絡卡介面的驅動。

9、Threads, mutexes, timers, etc.——封裝了一些依賴於作業系統的功能,處理程序,互斥,定時等。

10、RPC伺服器(RPC-server)——主站協議棧的一部分。用於連線RPC遠端客戶端(如KPA EtherCAT Studio軟體)並轉發請求給EtherCAT Master Stack core。它支援user-to-user和user-to-kernel(通過程式碼呼叫)兩種模式。

11、遠端客戶端(Remote Client)——KPA EtherCAT Studio或其它相容的軟體。

寫在移植之前:

在移植之前,強烈建議只使用動態連結庫(dll)去實現各種功能,以避免庫的初始化問題。換局話說,使用者的應用程式在使用任何Master API和EcatMkpaDestroy()之前必須先呼叫EcatMkpaInit(NULL)。

此時,在使用Master API之前載入Master Library是非常必要的,如Windows下的ecatmkpa.dll,INtime中的ecatmkpa.rsl,RTX下的RTXEcatKPAMaster.rtdll等。如下圖,Windows下通過呼叫LoadLibrary函式載入動態連線庫ecatmkpa.dll。

換句話說,使用封裝庫的方法可以讓您的應用更獨立於硬體平臺,且更容易適應到其它的作業系統中。

EtherCAT主站協議棧

EtherCAT主站協議棧

主站初始化

在使用者應用程式開始之前,主站至少必須被初始化一次。主站初始化包含以下幾個步驟:

1、呼叫EcatGetAdapterList()函式獲取可用的網路介面列表。

2、呼叫EcatCreateMaster()函式為後面用到的主站建立一個唯一的標識。

3、呼叫EcatConnectMaster()函式把步驟1選擇的網口連線到已建立的主站,並預先指定期望的操作模式。

4、呼叫EcatLoadConfigFromString()載入ENI檔案。ENI檔案包含了主站週期的一些引數描述,如週期時間等。

5、呼叫EcatStartCyclicOperation()初始化週期數據交換。

6、呼叫EcatSetAutoRecoveryTimeout()設定輔助任務的時間,輔助任務可掃描EtherCAT網路中的從站數量,也可實現其它功能。

至此,主站初始化程序完成。

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

過程映像(Process Image)

之前介紹協議棧架構已經提到,過程映像分為活躍區和隱藏區兩部分。之所以分為兩部分是為了避免主站和使用者程式同時呼叫資料時造成的各種各樣的衝突。

隱藏緩衝區的速度要比活躍緩衝區的快一點。但它只能工作在主站同步操作模式下(只有使用者程式有接觸Process Image的許可權)此時,只有極少的client可以同時請求Process Image的資料。當使用不同的HMI(如SCADA,PLC配置器,或是KPA EtherCAT Studio等)作為使用者應用的附加元件時,HMI對PI資料的請求是不會被實行的,否則將會引起各種不確定性。例如,當控制程式直接呼叫隱藏緩衝區時,HMI呼叫了活躍緩衝區,此時隱藏緩衝區會被重寫,我們並不能確定隱藏區的資料導致是什麼,也不能確定通過隱藏區傳送至EtherCAT網路的資料是什麼。

一般情況下,強烈推薦使用活躍緩衝區。

下圖是Active buffer與Input Process Image的工作機制。在t1時刻,Master更新Input資料,並從Shadow buffer把資料(輸入資料的最後一次更新)複製到Active buffer。在t2時刻,client2呼叫EcatStartReadInputs()啟動PI輸入資料獲取操作,而t2與主站更新時刻(t1)並不是同一時刻,那麼應用程式只能獲取到t1時刻更新的資料快取,此時PI輸入資料是"鎖定的",再到t5時刻,client2呼叫EcatDoneReadInputs()完成PI輸入資料獲取操作,"釋放"PI輸入資料,此時,使用者程式再真正獲取到真實的PI輸入資料。如果另一個client1在t3時刻請求PI輸入資料,那麼也只能取到與t2相同的資料快取。而當client1在t7時刻請求PI輸入資料時,獲取到的是t6時刻主站更新的PI輸入資料。

另外一個圖是work with Input PI的流程圖。

1、呼叫EcatStartReadInputs()初始化當前輸入資料塊讀操作;

2、呼叫EcatGetVariable()從PI中獲取必要的資料;

3、呼叫EcatDoneReadInputs()確認已從PI中讀到輸入資料。

而Output Process Image的工作機制和流程圖與Input類似,只是傳輸方向相反而已。如第三圖和第四圖。

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

主站工作模式

KPA EtherCAT主站協議棧支援以下三種操作模式。

1、非同步模式(Asynchronous mode)

指的是使用者的應用程式(控制邏輯)與主站的迴圈(PI資料更新)這兩部分是相互獨立執行的。換句話說,使用者的控制邏輯與主站迴圈是不同步的。主站迴圈根據初始化時的頻率去更新過程資料,而控制邏輯也是按著自己的頻率在執行。

2、同步模式1(Synchronous 1 mode)

指的是使用者的控制邏輯是由Process Task callback function完成的,在每一次主站迴圈週期內HI都會呼叫Process Task callback。換句話說,使用者的應用程式中並沒有控制邏輯,而是Process Task callback function帶有。此時,主站迴圈依然按照初始化頻率更新資料,控制邏輯也跟著主站迴圈以同樣的頻率執行。

3、同步模式2(Synchronous 2 mode)

使用者應用程式直接啟動與EtherCAT從站進行資料交換,而主站的迴圈中已不帶有PI資料更新部分。

◆Synchronous 2a mode:呼叫EcatUpdateProcessImage()同時更新輸入輸出資料。

◆Synchronous 2b mode:呼叫EcatUpdateProcessImageInputs()更新輸入資料,呼叫EcatUpdateProcessImageOutputs()更新輸出資料。更新輸入與輸出是在不同的EtherCAT幀完成的,也就是說兩者是相互獨立的。

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

CAN applicatilon protocol over EtherCAT (CoE)

KPA EtherCAT主站協議棧中,CoE可以分為以下幾塊:

1、獲取從站的物件字典(OD),流程圖如下

◆EcatSlaveODCreateObject()——OD初始化

◆EcatSlaveODGetObjectsIndexes()——獲取從站所有索引的資訊

◆EcatSlaveODGetDescription()——返回確切索引的描述

◆EcatSlaveODGetEntryDescription()——返回確切子索引的描述

◆EcatSlaveODDestroyObject()——移除 (releases used memory)

2、讀寫整個OD的所有索引;

◆EcatAddCoEObject()

3、讀寫整個OD的單個索引;

◆EcatAddCoEObject()

4、緊急報文服務。

EtherCAT主站協議棧

EtherCAT主站協議棧

主站狀態機控制

在KPA EtherCAT主站協議棧中,呼叫以下兩個函式可以實現對主站狀態機的控制。

◆EcatRequestMasterState()——設定需要的主站狀態機狀態

◆EcatGetMasterState()——檢查當前主站狀態機狀態

需要注意的是狀態機從某個狀態切換到另一個狀態是需要時間的,而不是瞬時的。這個時間取決於網路中EtherCAT從站的數量。

EtherCAT主站協議棧

EtherCAT主站協議棧

從站狀態機控制

在KPA EtherCAT主站協議棧中,呼叫以下兩個函式可以實現對從站狀態機的控制。

◆EcatRequestSlaveState()——設定需要的從站狀態機狀態

◆EcatGetSlaveState()——檢查單個從站狀態機狀態

◆EcatGetSlaveStateByPosIndex()——檢查幾個從站狀態機狀態

需要注意的是狀態機從某個狀態切換到另一個狀態是需要時間的,而不是瞬時的。這個時間取決於從站的內部特性(如從站應用資料的初始化時間等)。

除此之外,多種不同的原因(如DC錯誤,錯誤初始化命令等)都可能導致從站狀態機進入錯誤的狀態(非請求的狀態),此時,一些從站會在他們的AL Status暫存器中設定錯誤標誌位EcatStateErrorFlag。

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

停止主站

在KPA EtherCAT主站協議棧中,按以下步驟完成主站的關閉。

1、呼叫EcatStopCyclicOperation()停止週期數據更新;

2、呼叫EcatDisconnectMaster()釋放被佔用的網絡卡介面;

3、呼叫EcatFreeMaster()釋放主站資源;

4、釋放主站函式庫(used Master's libraries)

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

補充:

1、KPA EtherCAT主站協議棧的功能還遠遠不止這些,從下面的說明文件截圖就可以看出來了。說到這裡,不得不提一下,KPA在說明文件和技術支援方面真的做得很詳細,很到位。

2、除此之外,KPA EtherCAT主站協議棧還提供了超過20個的樣例工程和相應的幫助檔案。這可以有效地幫助開發人員理解和使用協議棧,大大縮短開發週期。

EtherCAT主站協議棧

EtherCAT主站協議棧

EtherCAT主站協議棧

注意事項

選擇好符合您要求的硬體,最主要是CPU和網絡卡

選擇合適的作業系統

相關問題答案