ethercat从站mainloop函数
来源:互联网 发布:淘宝护肤品货源 编辑:程序博客网 时间:2024/06/05 10:24
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状态码}
0 0
- ethercat从站mainloop函数
- mainloop函数
- EtherCAT的从站配置
- XMC4300 Relax EtherCAT 套件面向EtherCAT从站应用
- 如何开发EtherCAT从站设备
- 【note】EtherCAT从站代码配置
- EtherCAT从站代码注释(部分)
- EtherCAT从站代码注释(部分)
- ethercat 主 从站的建立
- EtherCAT ET1100从站信息接口介绍
- MainLoop
- mainLoop
- 往死里写——mainloop函数
- Mainloop.c (1) 函数MainLoop 和PQExpBufferData,_psqlSettings
- Beckoff的EtherCAT从站代码架构解析
- 倍福提供的EtherCAT从站代码包解析
- Beckoff的EtherCAT从站代码架构解析
- 倍福提供的EtherCAT从站代码包解析
- 涂鸦数据结构2 基本知识
- hive rcfile存储格式
- 转载-Oracle Flashback技术总结
- 体验dubbo的简单方法
- POI读写Excel格式问题
- ethercat从站mainloop函数
- RCFile存储格式
- hello wcf(wcf入门:iis寄宿)(唐僧式啰嗦版)(上)
- 如何在jsp中设置定时器
- 关于UIView的autoresizingMask属性的研究
- java的web.xml中<url-pattern>配置
- ctags-5.8源码,可以编过,安装
- 分享
- 杭电ACM 1022 Train Problem I