ethercat从站mainloop函数

void MainLoop(void)
{
//=======bEscIntEnabled :同步模式    bEcatFirstOutputsReceived:接收和发送数据完成    bDcSyncActive:分布时钟同步====//
//=============初始值FAULSE=================初始值FAULSE========================初始值FAULSE=========//

        /* 当运行在FreeRun-Mode:  bEscIntEnabled = FALSE, bDcSyncActive = FALSE //未使能中断,自由运行模式
           当运行在Synchron-Mode: bEscIntEnabled = TRUE, bDcSyncActive = FALSE //同步模式使能,同步模式使用中断处理周期性数据
           当运行在DC-Mode:       bEscIntEnabled = FALSE, bDcSyncActive = TRUE */  //分布时钟模式使能*/
	if ( (!bEscIntEnabled ||!bEcatFirstOutputsReceived)&& !bDcSyncActive)
		/*  非分布时钟同步模式,且非中断同步模式或SM2、SM3事件未完成 */
        { /* 如果应用程序是运行在ECAT同步模式当中,
			  函数ECAT_Application将会在ESC中断里面被调用(在mcihw.c和spihw.c)
			  在ECAT同步模式当中,它可以被另外得检查,
			  如果SM事件被接受至少一次(bEcatFirstOutputReceived=1),
			  否则,没有中断会产生和函数ECAT_Application将会在这里被调用
			  (中断禁止,因为当执行ECAT_Application的时候,SM事件可以产生)*/  

            if ( !bEscIntEnabled )                                  /*自由运行模式,中断不使能,使用自有运行模式读取数据*/
            {
             /* 应用程序正在运行在ECAT 自由运行模式,首先,我们需要检查是否有输出被接受 */
				/*因为其他应用事件也可能发生中断,所以先要判断*/
                UINT16 ALEvent = HW_GetALEventRegister();           /*读取AL状态,判断是否有输出数据,先读低8位后高8位*/
                ALEvent = SWAPWORD(ALEvent);                        /*将ALEvent高低8位互换位置,所以需要交换高低8位*/

                if ( ALEvent & PROCESS_OUTPUT_EVENT )               /*判断ESC是否有数据输出0x0400   检测0X0221地址内的SM2事件*/
                {
                          /*设置状态机的标志,输出或输入成功*/
                    bEcatFirstOutputsReceived = TRUE;
                    if ( bEcatOutputUpdateRunning )                 /*检测是否处于运行状态,在startinputhangler中设置*/
                    {
                        PDO_OutputMapping();                        /*接收主站发送下来的数值    主要为LED灯状态值*/
                    }
                }
                else if ( nPdOutputSize == 0 )                      /*如果输出长度为0,且输入被读取时看门狗必须复位*/
                {
                    if ( ALEvent & PROCESS_INPUT_EVENT )            /*判断ESC是否有数据输出0x0800   检测0X0221地址内的SM3事件*/
                    {
                        bEcatFirstOutputsReceived = TRUE;           /*置输出接收成功标志位,备看门狗检测复位用*/
                    }
                }
            }
            /* 无论自由运行模式还是同步运行模式,都要执行 ECAT_Application() */
            DISABLE_ESC_INT();                     /*关闭中断源INT1*/
            ECAT_Application();                    /*应用外设控制和当Becatinputupdatarunning=1 时执行SM3事件操作*/
            ENABLE_ESC_INT();                      /*使能中断源INT1*/
        }
			//下面因为报错就屏蔽掉了
//      /* 这里没有中断服务程序来处理硬件定时器,所以,检查定时器的寄存器看是否想要的周期已经过了*/
//        {
//            UINT16 CurTimer = HW_GetTimer();       /*定时器7没有配置中断,通过检测计数器值到达期望值后自动调用相关程序*/

//            if(CurTimer>= ECAT_TIMER_INC_P_MS)     /*配置的周期为0X0271        625ticks/ms   即每毫秒执行一次*/
//            {
//                ECAT_CheckTimer();                 /*运行状态灯和错误灯情况设置,*/

////                HW_ClearTimer();                   /*定时器7寄存器的计数器值清零*/
//            }
//        }

        /* 调用EtherCAT函数实现非周期性的数据操作:状态机控制和邮箱数据操作*/
        ECAT_Main();                           

        /* 调用低优先级的应用程序部分 */
//        COE_Main();
        CheckIfEcatError();// 检查通信和同步,如果发生了一个错误则更新AL状态/AL状态码

}

时间: 2024-10-12 07:52:14

ethercat从站mainloop函数的相关文章

EtherCAT从站代码注释(部分)

整体软件架构 intmain(void) { HW_Init();        /*初始化,包括硬件和A/D.SPI口读写配置*/ MainInit();       /*主函数初始化包含:ESC  和COE   */ bRunApplication = TRUE;      /*处于运行状态标志*/ do { MainLoop();   /*主循环函数,实现周期性和非周期性数据交换*/ } while (bRunApplication == TRUE);  /*检查是否处于运行状态*/ HW

倍福提供的EtherCAT从站代码包解析

用倍福的从站配置工具得到的源代码有以下 1 主要代码 ecatappl.c ecatappl.h Ecatappl:  EtherCAT从站应用层接口,整个协议栈运行的核心模块, EtherCAT从站状态机和过程数据接口.Main()函数的定义,输入输出程数据 对象的映射处理,ESC与处理器本地内存的输入输出过程数据的交换等; ecatslv.c ecatslv.h Ecatslv:处理EtherCAT状态机模块.状态机转换请求由主站发起,主 站将请求状态写入A1Control寄存器中,从站采用

Beckoff的EtherCAT从站代码架构解析

用倍福的从站配置工具得到的源代码有以下 2014/12/26  11:24             1,021 1.TXT 2014/12/26  11:24                 0 2.txt 2012/04/11  20:43            22,131 aoeappl.c 2012/04/11  20:43             1,578 aoeappl.h 2012/04/11  20:43             1,757 bootmode.c 2012/04

EtherCAT从站代码配置

从站代码配置 参考EtherCATSlave Implementation Guide(EtherCAT从站实施指南)作为从站实施的开始 Beckhoff将从站协议栈代码(SSC)-源代码免费开放给所有ETG会员. EtherCAT从站实施套件也可以从相关供应商获取.EtherCAT从站协议栈可以从倍福官网获取. 图中各设备规范解释如下: FoE:File overEtherCAT; EoE:Ethernetover EtherCAT; SoE:SERCOSover EtherCAT; CoE:

如何开发EtherCAT从站设备

作为新型工业以太网,EtherCAT网络由于开放性.系统构建成本低和快速性被广泛关注,开发相应的从站设备可以把该网络引入自动化领域,将对自动化传输领域起到很大的推动作用.EtherCAT网络从站设备分为简单从站设备和复杂从站设备,简单从站设备位I/O从站,一般只需要从站接口控制器提供的资源就可以实现,复杂从站控制器则需要应用程序控制器,应用程序控制器完成网络数据的存取和具体应用程序的执行. 在硬件上,主要考虑从站接口控制器的选择和从站应用程序控制器的选择.从站接口控制器可以为ASIC芯片或FPG

基于EtherCAT协议的从站分析

EtherCAT的从站系统实际上是一个嵌入式计算机系统,这个嵌入式控制系统的 主要部分就是EtherCAT从站控制器(ESC),实现EtherCAT协议过程中物理层与数 据链路层之间的数据通讯是它的主要任务,而应用层协议则根据不同的控制任务通过 从站微控制器来完成,这样,应用层微控制器与ESC共同完成EtherCAT从站系统的 构成.EtherCAT从站系统的软件设计主要包括两个部分:EtherCAT主站的管理和 EtherCAT从站应用程序的设计[[36].主站由TwinCAT管理,控制发送相

EtherCAT ---- Kithara RTS

本文翻译了kithara官方文档,也加入了一些理解,暂时做得还不够完美,后续补充修正.2014.06.06 EtherCAT This tutorial describes the following topics using the EtherCAT API 本向导描述了使用EtherCAT API的功能说明 Creating a EtherCAT master assigned to a network adapter Creating slaves assigned to the mast

EtherCAT状态机----Kithara RTS

本文摘自Kithara RTS官网对EtherCAT状态机的介绍 The EtherCAT state machine EtherCAT状态机 EtherCAT defines 5 different states BOOT, INIT, PREOP, SAFEOP and OP.These are identified by the Kithara constants KS_ECAT_STATE_BOOT,KS_ECAT_STATE_INIT, KS_ECAT_STATE_PREOP, KS_

主流的工业以太网简介及比较(EPA , EtherCAT , Ethernet Powerlink , PROFINET, Ethernet/IP, SERCOS III)

主流的工业以太网 在实时工业以太网中有几个主要的竞争者:EPA ,  EtherCAT ,  Ethernet Powerlink , PROFINET, Ethernet/IP,  SERCOS III.下面对它们进行简单比较. 1  Ethernet/IP Ethernet/IP是2000年3月由Control Net International和ODVA( Open DevicenetVendors Association共同开发的工业以太网标准.Ethernet/IP实现实时性的方法是在