继上一期基于SEED-RT118X套件开发EtherCat从站(二)同步机制,这期为您带来该系列的第三篇。
继上一期基于SEED-RT118X套件开发EtherCat从站(二)同步机制,这期为您带来该系列的第三篇。
继上一期基于SEED-RT118X套件开发EtherCat从站(二)同步机制,这期为您带来该系列的第三篇。
FMMU的映射机制
在EtherCAT系统中,一旦系统搭建完成,主站便能够通过网络数据包与从机的EtherCAT控制器进行通信。为了实现主站与从站应用层之间的数据交互,EtherCAT引入了现场总线内存管理单元(FMMU)和从站同步管理器的概念。
FMMU(Fieldbus Memory Management Unit)是一个核心组件,它通过内部地址映射机制将逻辑地址转换为物理地址。在系统初始化阶段,主站会配置从站的FMMU模块,为每个从站的物理地址分配一个唯一的逻辑地址。此后,主站访问从站寄存器时,不是直接访问从站的物理地址,而是访问这些逻辑地址。FMMU单元会自动将这些逻辑地址转换成对应的实际物理地址,从而实现数据的准确传输。
这种地址映射机制的好处在于,它允许使用逻辑寻址来访问跨越多个从属设备的数据段。也就是说,一个数据包可以寻址多个任意分布的EtherCAT伺服控制器(ESC)内的数据。每个FMMU通道都负责将一个连续的逻辑地址空间映射到从属设备的一个连续的物理地址空间,从而实现了数据的集中管理和高效传输。
EtherCAT控制器的FMMU支持位映射功能,这使得数据的读写操作更加灵活和高效。同时,FMMU支持的访问类型可以配置为只读、只写或读写,以满足不同应用场景的需求。
SyncManagers的关键角色
FMMU(Fieldbus Memory Management Unit)在EtherCAT系统中扮演着关键角色,它负责管理主站对从站EtherCAT控制器的访问。然而,当EtherCAT主站需要与本地应用程序(如M7或M33)进行通信时,这种交互并非直接进行,而是必须通过EtherCAT从站控制器来实现。此时,从站控制器内的SyncManagers(同步管理器)便承担了管理这一通信功能的重任。
SyncManagers确保了EtherCAT主站与本地应用程序之间的数据交换既一致又安全。它们不仅管理数据的流动,还负责生成中断以通知双方数据的变化。这些SyncManagers由EtherCAT主站进行配置。
在通信过程中,SyncManagers支持不同的通信方向和通信模式,如缓冲模式和邮箱模式,这些都可以根据应用需求进行配置。当使用缓冲模式时,SyncManagers利用位于内存区域的一个特定缓冲区来交换数据。这个缓冲区的访问受到SyncManagers的硬件控制,确保了数据访问的安全性和一致性。
为了访问这个缓冲区,必须先访问其起始地址。如果未先访问起始地址,则对缓冲区的任何访问都将被拒绝。一旦起始地址被访问,就可以对整个缓冲区进行访问,无论是整体访问还是分几次访问。这种访问方式保证了数据的完整性和准确性。
当对缓冲区的访问完成后,必须访问其结束地址以标识访问的结束。此时,缓冲区的状态将发生变化,并可能生成中断或看门狗触发脉冲(如果已配置)。需要注意的是,在一个帧内不能两次访问结束地址,这确保了数据交换的规范性和准确性。
通过SyncManagers的精心管理,EtherCAT主站与本地应用程序之间的通信变得既高效又可靠,为工业自动化应用提供了强大的支持。
邮箱模式在数据交互时采用了一种握手机制。在这种模式下,EtherCAT主站和从站应用层之间的通信是同步的,即只有在对方已经访问完缓冲区的情况下,双方才能继续访问。当发送方(无论是主站还是从站)写入缓冲区时,该缓冲区将被锁定以防止进一步的写操作,直到接收方完全读取了缓冲区中的数据。邮箱模式通常用于应用层协议和非周期性数据的交互,例如参数设置或诊断数据交换。
缓冲模式
缓冲模式则更适合于周期性数据的交互,如过程数据。在这种模式下,EtherCAT主站和从站应用层可以在任何时候访问通讯缓冲区。发送方总是可以更新缓冲区的内容,而不必等待接收方完成读取。然而,如果发送方写入数据的速度远快于接收方读取的速度,旧的数据可能会被新的数据覆盖。因此,接收方将始终收到最新的且与缓冲区内容一致的数据。缓冲模式传输的数据通常被称为PDO(过程数据对象)过程数据,它们是EtherCAT系统中实现高速数据传输的关键。
对于邮箱模式的通信协议,我们可以进一步细分为不同的种类。这些协议为EtherCAT系统提供了丰富的功能和灵活性:
FMMU和SyncManagers的配置
从下图EtherCAT从站控制器结构中,我们可以直观的看到FMMU以及同步管理器的位置。
一般来说一个从站既需要邮箱模式同步管理器,也需要缓冲模式同步管理器。我们来看一下SEED-RT118X开发套件对应的TwinCAT主站里关于FMMU以及SM的配置,这些配置通过XML文件获取。
可以看到SEED-RT118X开发套件从站它使用了三个FMMU单元。前两个FMMU用于主站访问同步管理器,而第三个则用于主站访问从站的邮箱状态。例如,第一个FMMU配置表明:主站通过写入逻辑地址0x01000000.0来更新从站的物理地址0x1100.0,而该物理地址0x1100.0(地址0x1100的0bit位)恰好是同步管理器SM2的起始地址。
SEED-RT118X开发套件从站配备了四个同步管理器,分别用于邮箱模式的输入和输出,以及缓冲模式的输入和输出。这四个同步管理器的物理地址分别为:0x1000、0x1080、0x1100、0x1400。其中,0x1000和0x1080刚好是邮箱的输入和输出地址。
值得注意的是,尽管邮箱数据在实时性方面要求不高,但邮箱的通信仍然需要有序地进行。因此,虽然邮箱数据本身没有直接使用FMMU进行地址映射,但第三个FMMU被用于传输邮箱状态(0x080D),以确保主站和从站能够有序地访问邮箱数据。通过读取这个邮箱状态,主站和从站能够确保在适当的时候进行数据的写入和读取操作,从而维持通信的同步性和有序性。
SEED-RT118X开发套件从站源代码的数据处理流程
在SEED-RT118X开发套件从站的源代码中,我们可以深入探索邮箱模式同步管理器的数据处理流程。首先,我们定位到cia402appl.c文件中的main()函数:
Main函数在从站执行一系列初始化操作后,会进入MainLoop()循环。这个循环是从站程序的主要执行路径,负责持续监控和处理各种任务。
在MainLoop()循环中,会调用ecatslv.c文件中的ECAT_Main(void)函数。这个函数是EtherCAT从站软件库的核心部分,负责处理EtherCAT通信协议相关的任务。在ECAT_Main(void)中,会进一步调用mailbox.c中的MBX_Main()函数。进入MBX_Main(void)函数后,会调用MailboxServiceInd(pMbx)函数。这个函数是处理邮箱服务指示的入口点,它根据邮箱的状态和配置来执行相应的操作。在MailboxServiceInd(pMbx)函数中,我们可以看到SEED-RT118X开发套件从站支持了CANopen over EtherCAT(CoE)协议,因为该函数中调用了COE_ServiceInd(TCOEMBX MBXMEM *pCoeMbx)这个特定于CoE协议的函数。
进一步跟踪代码,我们可以发现EtherCAT通过CoE协议进行了一些PDO(过程数据对象)过程数据的初始化配置。这些配置涉及数据的映射、传输方式等,确保PDO数据能够正确地在EtherCAT主站和从站之间传输。
我们再结合SEED-RT18X开发套件源代码看一下从站如何处理缓冲模式同步管理器数据即PDO过程数据,PDO过程数据主要通过下面两个函数来处理。
PDO_InputMapping函数主要负责将从站本地数据写入EtherCAT控制器中,以便主站能够读取。这个函数通常在PDI_Isr和Sync1_Isr这两个由EtherCAT控制器触发的中断处理函数中执行。以下是该函数的主要处理步骤:
调用APPL_InputMapping((UINT16*)aPdInputData);函数,将从站本地数据写入到aPdInputData数组中。这个数组作为PDO输入数据的缓冲区,供主站读取。
另一方面,PDO_OutputMapping函数则负责将从EtherCAT控制器接收到的来自主站数据写入从站本地地址。这个函数主要在PDI_Isr中断处理函数中执行。以下是该函数的主要处理步骤:
调用HW_EscReadIsr(((MEM_ADDR *)aPdOutputData), nEscAddrOutputData, nPdOutputSize);函数,将从EtherCAT从站控制器中对应同步管理器地址的数据读取到aPdOutputData数组中。这里的nEscAddrOutputData是在从站初始化时已经设置为对应缓冲模式输出同步管理器的地址。
相关阅读