• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

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

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

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

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

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

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

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

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

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

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

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

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

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

郵箱模式

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

緩沖模式

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

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

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

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

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

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

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

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

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

一般來說一個從站既需要郵箱模式同步管理器,也需要緩沖模式同步管理器。我們來看一下SEED-RT118X對應(yīng)的TwinCAT主站里關(guān)于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剛好是郵箱的輸入和輸出地址。

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

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

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

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

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

?

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

void?PDO_InputMapping(void)

void?PDO_OutputMapping(void)

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

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

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

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

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

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

?

相關(guān)推薦