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

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

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

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

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

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

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

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

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

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

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

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

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

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

郵箱模式

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

緩沖模式

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

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

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

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

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

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

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

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

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

一般來(lái)說(shuō)一個(gè)從站既需要郵箱模式同步管理器,也需要緩沖模式同步管理器。我們來(lái)看一下SEED-RT118X對(duì)應(yīng)的TwinCAT主站里關(guān)于FMMU以及SM的配置,這些配置通過(guò)XML文件獲取。

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

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

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

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

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

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

?

我們?cè)俳Y(jié)合SEED-RT18X源代碼看一下從站如何處理緩沖模式同步管理器數(shù)據(jù)即PDO過(guò)程數(shù)據(jù),PDO過(guò)程數(shù)據(jù)主要通過(guò)下面兩個(gè)函數(shù)來(lái)處理

void?PDO_InputMapping(void)

void?PDO_OutputMapping(void)

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

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

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

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

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

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

?

相關(guān)推薦