• 正文
  • 相關推薦
申請入駐 產業(yè)圖譜

基于i.MX RT118X開發(fā)ethercat從站(三)-通信機制

01/03 16:20
3834
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

在EtherCAT系統(tǒng)中,一旦系統(tǒng)搭建完成,主站便能夠通過網絡數據包與從機的EtherCAT控制器進行通信。為了實現主站與從站應用層之間的數據交互,EtherCAT引入了現場總線內存管理單元(FMMU)和從站同步管理器的概念。

FMMU(Fieldbus Memory Management Unit)是一個核心組件,它通過內部地址映射機制將邏輯地址轉換為物理地址。在系統(tǒng)初始化階段,主站會配置從站的FMMU模塊,為每個從站的物理地址分配一個唯一的邏輯地址。此后,主站訪問從站寄存器時,不是直接訪問從站的物理地址,而是訪問這些邏輯地址。FMMU單元會自動將這些邏輯地址轉換成對應的實際物理地址,從而實現數據的準確傳輸。

這種地址映射機制的好處在于,它允許使用邏輯尋址來訪問跨越多個從屬設備的數據段。也就是說,一個數據包可以尋址多個任意分布的EtherCAT伺服控制器(ESC)內的數據。每個FMMU通道都負責將一個連續(xù)的邏輯地址空間映射到從屬設備的一個連續(xù)的物理地址空間,從而實現了數據的集中管理和高效傳輸。

EtherCAT控制器的FMMU支持位映射功能,這使得數據的讀寫操作更加靈活和高效。同時,FMMU支持的訪問類型可以配置為只讀、只寫或讀寫,以滿足不同應用場景的需求。

FMMU(Fieldbus Memory Management Unit)在EtherCAT系統(tǒng)中扮演著關鍵角色,它負責管理主站對從站EtherCAT控制器的訪問。然而,當EtherCAT主站需要與本地應用程序(如M7或M33)進行通信時,這種交互并非直接進行,而是必須通過EtherCAT從站控制器來實現。此時,從站控制器內的SyncManagers(同步管理器)便承擔了管理這一通信功能的重任。

SyncManagers確保了EtherCAT主站與本地應用程序之間的數據交換既一致又安全。它們不僅管理數據的流動,還負責生成中斷以通知雙方數據的變化。這些SyncManagers由EtherCAT主站進行配置。

在通信過程中,SyncManagers支持不同的通信方向和通信模式,如緩沖模式和郵箱模式,這些都可以根據應用需求進行配置。當使用緩沖模式時,SyncManagers利用位于內存區(qū)域的一個特定緩沖區(qū)來交換數據。這個緩沖區(qū)的訪問受到SyncManagers的硬件控制,確保了數據訪問的安全性和一致性。

為了訪問這個緩沖區(qū),必須先訪問其起始地址。如果未先訪問起始地址,則對緩沖區(qū)的任何訪問都將被拒絕。一旦起始地址被訪問,就可以對整個緩沖區(qū)進行訪問,無論是整體訪問還是分幾次訪問。這種訪問方式保證了數據的完整性和準確性。

當對緩沖區(qū)的訪問完成后,必須訪問其結束地址以標識訪問的結束。此時,緩沖區(qū)的狀態(tài)將發(fā)生變化,并可能生成中斷或看門狗觸發(fā)脈沖(如果已配置)。需要注意的是,在一個幀內不能兩次訪問結束地址,這確保了數據交換的規(guī)范性和準確性。

通過SyncManagers的精心管理,EtherCAT主站與本地應用程序之間的通信變得既高效又可靠,為工業(yè)自動化應用提供了強大的支持。

SyncManagers在EtherCAT系統(tǒng)中提供了兩種主要的通信模式:郵箱模式和緩沖模式。

郵箱模式

郵箱模式在數據交互時采用了一種握手機制。在這種模式下,EtherCAT主站和從站應用層之間的通信是同步的,即只有在對方已經訪問完緩沖區(qū)的情況下,雙方才能繼續(xù)訪問。當發(fā)送方(無論是主站還是從站)寫入緩沖區(qū)時,該緩沖區(qū)將被鎖定以防止進一步的寫操作,直到接收方完全讀取了緩沖區(qū)中的數據。郵箱模式通常用于應用層協(xié)議和非周期性數據的交互,例如參數設置或診斷數據交換。

緩沖模式

緩沖模式則更適合于周期性數據的交互,如過程數據。在這種模式下,EtherCAT主站和從站應用層可以在任何時候訪問通訊緩沖區(qū)。發(fā)送方總是可以更新緩沖區(qū)的內容,而不必等待接收方完成讀取。然而,如果發(fā)送方寫入數據的速度遠快于接收方讀取的速度,舊的數據可能會被新的數據覆蓋。因此,接收方將始終收到最新的且與緩沖區(qū)內容一致的數據。緩沖模式傳輸的數據通常被稱為PDO(過程數據對象)過程數據,它們是EtherCAT系統(tǒng)中實現高速數據傳輸的關鍵。

對于郵箱模式的通信協(xié)議,我們可以進一步細分為不同的種類。這些協(xié)議為EtherCAT系統(tǒng)提供了豐富的功能和靈活性:

EoE(Ethernet over EtherCAT):定義了一個標準方式,用于在EtherCAT網絡上交換或隧道傳輸標準以太網幀,實現了EtherCAT與標準以太網協(xié)議的互操作性。

CoE(CANopen over EtherCAT):定義了一個標準方式,用于訪問CAN應用層對象字典,并在事件驅動路徑上交換CAN應用層緊急消息和PDO消息,為CANopen協(xié)議在EtherCAT系統(tǒng)中的應用提供了支持。

FoE(File Access over EtherCAT):定義了一個標準方式,用于下載和上傳固件以及其他類型的“文件”,為從站的遠程配置和更新提供了便利。

SoE(Service over EtherCAT):定義了一個標準方式,用于訪問IEC 61800-7標識符,為從站設備提供了標準化的服務接口。

VoE(Vendor-specific over EtherCAT):在VoE頭部之后跟隨的是一個特定廠商的協(xié)議,用于識別廠商和廠商特定的類型,為廠商自定義協(xié)議在EtherCAT系統(tǒng)中的應用提供了可能性。

AoE(ADS over EtherCAT):定義了一個標準方式,用于在EtherCAT上交換自動化設備規(guī)范(ADS)消息,為基于PC的自動化系統(tǒng)和EtherCAT設備之間的通信提供了橋梁。

從下圖EtherCAT從站控制器結構中,我們可以直觀的看到FMMU以及同步管理器的位置。

一般來說一個從站既需要郵箱模式同步管理器,也需要緩沖模式同步管理器。我們來看一下SEED-RT118X對應的TwinCAT主站里關于FMMU以及SM的配置,這些配置通過XML文件獲取。

可以看到SEED-RT118X從站它使用了三個FMMU單元。前兩個FMMU用于主站訪問同步管理器,而第三個則用于主站訪問從站的郵箱狀態(tài)。例如,第一個FMMU配置表明:主站通過寫入邏輯地址0x01000000.0來更新從站的物理地址0x1100.0,而該物理地址0x1100.0(地址0x1100的0bit位)恰好是同步管理器SM2的起始地址。

SEED-RT118X從站配備了四個同步管理器,分別用于郵箱模式的輸入和輸出,以及緩沖模式的輸入和輸出。這四個同步管理器的物理地址分別為:0x1000、0x1080、0x1100、0x1400。其中,0x1000和0x1080剛好是郵箱的輸入和輸出地址。

值得注意的是,盡管郵箱數據在實時性方面要求不高,但郵箱的通信仍然需要有序地進行。因此,雖然郵箱數據本身沒有直接使用FMMU進行地址映射,但第三個FMMU被用于傳輸郵箱狀態(tài)(0x080D),以確保主站和從站能夠有序地訪問郵箱數據。通過讀取這個郵箱狀態(tài),主站和從站能夠確保在適當的時候進行數據的寫入和讀取操作,從而維持通信的同步性和有序性。

在SEED-RT118X從站的源代碼中,我們可以深入探索郵箱模式同步管理器的數據處理流程。首先,我們定位到cia402appl.c文件中的main()函數:

int?main(void)

{

uint32_t?startupData,?i;

HW_Init();

MainInit();

SystemCoreClock =?CLOCK_GetRootClockFreq(kCLOCK_Root_M7);

CiA402_Init();

APPL_GenerateMapping(&nPdInputSize,&nPdOutputSize);

bRunApplication =?TRUE;

do

{

MainLoop();

Application_Control_BL();

?

}?while?(bRunApplication ==?TRUE);

?

CiA402_DeallocateAxis();

?

HW_Release();

return?0;

}

Main函數在從站執(zhí)行一系列初始化操作后,會進入MainLoop()循環(huán)。這個循環(huán)是從站程序的主要執(zhí)行路徑,負責持續(xù)監(jiān)控和處理各種任務。

在MainLoop()循環(huán)中,會調用ecatslv.c文件中的ECAT_Main(void)函數。這個函數是EtherCAT從站軟件庫的核心部分,負責處理EtherCAT通信協(xié)議相關的任務。在ECAT_Main(void)中,會進一步調用mailbox.c中的MBX_Main()函數。進入MBX_Main(void)函數后,會調用MailboxServiceInd(pMbx)函數。這個函數是處理郵箱服務指示的入口點,它根據郵箱的狀態(tài)和配置來執(zhí)行相應的操作。在MailboxServiceInd(pMbx)函數中,我們可以看到SEED-RT118X從站支持了CANopen over EtherCAT(CoE)協(xié)議,因為該函數中調用了COE_ServiceInd(TCOEMBX MBXMEM *pCoeMbx)這個特定于CoE協(xié)議的函數。

進一步跟蹤代碼,我們可以發(fā)現EtherCAT通過CoE協(xié)議進行了一些PDO(過程數據對象)過程數據的初始化配置。這些配置涉及數據的映射、傳輸方式等,確保PDO數據能夠正確地在EtherCAT主站和從站之間傳輸。

?

我們再結合SEED-RT18X源代碼看一下從站如何處理緩沖模式同步管理器數據即PDO過程數據,PDO過程數據主要通過下面兩個函數來處理

void?PDO_InputMapping(void)

void?PDO_OutputMapping(void)

PDO_InputMapping函數主要負責將從站本地數據寫入EtherCAT控制器中,以便主站能夠讀取。這個函數通常在PDI_Isr和Sync1_Isr這兩個由EtherCAT控制器觸發(fā)的中斷處理函數中執(zhí)行。以下是該函數的主要處理步驟:

1、調用APPL_InputMapping((UINT16*)aPdInputData);函數,將從站本地數據寫入到aPdInputData數組中。這個數組作為PDO輸入數據的緩沖區(qū),供主站讀取。

2、調用HW_EscWriteIsr(((MEM_ADDR *) aPdInputData), nEscAddrInputData, nPdInputSize);函數,將aPdInputData數組中的數據寫入EtherCAT從站控制器中對應的同步管理器地址。這里的nEscAddrInputData是在從站初始化時已經設置為對應緩沖模式輸入同步管理器的地址。

另一方面,PDO_OutputMapping函數則負責將從EtherCAT控制器接收到的來自主站數據寫入從站本地地址。這個函數主要在PDI_Isr中斷處理函數中執(zhí)行。以下是該函數的主要處理步驟:

1、調用HW_EscReadIsr(((MEM_ADDR *)aPdOutputData), nEscAddrOutputData, nPdOutputSize);函數,將從EtherCAT從站控制器中對應同步管理器地址的數據讀取到aPdOutputData數組中。這里的nEscAddrOutputData是在從站初始化時已經設置為對應緩沖模式輸出同步管理器的地址。

2、調用APPL_OutputMapping((UINT16*) aPdOutputData);函數,將aPdOutputData數組中的數據寫入從站本地的相應位置,供本地應用程序后續(xù)使用。

?

相關推薦