EtherCAT State Transition
来源:互联网 发布:如何提高淘宝宝贝排名 编辑:程序博客网 时间:2024/06/08 14:23
EtherCAT状态机
EtherCAT有如下几种状态,Init、PreOP、SafeOP、OP和bootstrap。
EtherCAT状态机模块负责控制EtherCAT状态机在以上几种状态间跳转。EtherCAT主函数名称为ECAT_Main(),可以在定时器中断函数或程序主函数,周期性运行。
该函数主要包含以下功能:
1、读取中断标志寄存器ALEventReg的值,根据值来判断是什么触发的中断,中断类型包括EEPROM_CMD_PENDING(EEPROM命令)、SM_CHANGE(SM寄存器被重新配置)、AL_CONTROL_EVENT(AL_CONTROL寄存器被写入数值)、MAILBOX_READ等事件。
2、根据不同事件,分别作出不同处理。就AL_CONTROL_EVENT而言,则调用AL_ControlInd(状态机状态, 0)来处理。就SM_CHANGE事件,则使用AL_ControlInd(自身原来的状态, 0)来重新对SM的设置进行检查。
3、由于状态机的转换需要考虑的应用层的情况,有可能应用层处理较慢而导致超时,因此设置变量bEcatWaitForAlControlRes来标志程序进入等待状态。进入等待状态的状态机调用AL_ControlRes()函数处理。
关于AL_ControlInd()函数:
1、先处理AL_STATUS寄存器的错误位(bit4),如果有错误位并且目标不是Init状态,则退出函数,否则消除错误位。对AL_CONTROL错误位处理,则存储起来。
2、生成一个16位变量statetrans,高8位用来存储原始状态AL_STATUS,低8位用来存储转换的目标状态AL_CONTROL。
3、根据不同的状态转换,检查SM寄存器的配置。对于PreOP,检查SM0和SM1的配置;对于SafeOP,检查应用层输入和输出数据映射(还不太明白为啥不检查SM2);对于OP,则检查SM0-SM3。
4、如果第三步没问题,则启动相应状态机对应的服务。
对于PreOP,检查EEPROM的加载是否正确,打开邮箱通信服务MBX_StartMailboxHandler()和应用层的APPL_StartMailboxHandler(),如果打开失败,则关闭。MBX_StopMailboxHandler()和APPL_StopMailboxHandler(),并保存错误Code。对于SafeOP,APPL_StartInputHandler()和StartInputHandler(),打开失败则关闭,保存错误Code。对于OP, APPL_StartOutputHandler()和StartOutputHandler(),打开失败则关闭,并回退到PreOP状态,保存错误Code。对于OP2OP、SafeOP2SafeOP、PreOP2PreOP,则处理错误位,并重新使能SM。
5、如果返回状态为NOERROR_INWORK,标记bEcatWaitForAlControlRes,设置超时计数器等待。
6、如果有错误,则设置错误位(bit4),同时修改AL_STATUS,否则直接修改AL_STATUS。
关于AL_ControlRes()函数:
1、如果已经超时。
Init2PreOP或Init2Bootstrap,关闭MailboxHandler,并输出localerror本地错误或者EtherCAT错误码。PreOP2SafeOP,关闭InputHandler,输出本地错误或者EtherCAT错误码。SafeOP2OP,如果DC时钟使能但没有收到SYNC信号中断,同步错误;如果没有接收到输出数据,看门狗错误。其他,同步错误。如果DC时钟没有使能,并且没有输出数据,也让它进入OP。有错误则关闭OutputHandler,输出SafeOP和错误码。
2、如果没有超时。
重试。
- EtherCAT State Transition
- EtherCAT State Machine Transitions
- State与Transition之Transition
- State与Transition之State
- transition,state的综合运用
- ethercat
- EtherCAT
- Flex 状态(state)和过渡(transition)
- TCP状态转换图(state transition diagram)
- NG Cannot transition to abstract state
- BREW App State Transition based BREW3.1.x
- 状态转换测试法(State Transition Testing)
- QML中state元素与transition的使用个人体会
- transition
- transition
- transition
- transition
- transition
- 常用框架
- IO流学习小结
- 【二分图匹配入门专题1】M
- noip2013货车运输(lca)
- 杭电 OJ 1720 A+B Coming
- EtherCAT State Transition
- lower_bound()返回值
- STM8S105系列单片机管脚复用配置(选项字节的配置)
- 交叉排序
- HDU-Kirinriki
- JavaScript Canvas 绘图
- junit测试、内省、BeanUtils
- 数据中心的女性如何工作的?
- Spring Data JPA调用存储过程实例