EtherCAT主站SOEM函数详解---- ecx_statecheck

  • ecx_statecheck头文件
  • ecx_statecheck源码

介绍状态检测函数,该函数内部调用了状态读取函数,状态读写可以看另一篇博客EtherCAT主站SOEM函数详解---- ecx_readstate、ecx_writestate,本章涉及到相关知识只做简单介绍。

ecx_statecheck头文件

ecx_statecheck函数在ethercatmain.h文件中,器函数头和介绍如下

/** Check actual slave state.* This is a blocking function.* To refresh the state of all slaves ecx_readstate()should be called* @param[in] context     = context struct* @param[in] slave       = Slave number, 0 = all slaves (only the "slavelist[0].state" is refreshed)* @param[in] reqstate    = Requested state* @param[in] timeout     = Timeout value in us* @return Requested state, or found state after timeout.*/
uint16 ecx_statecheck(ecx_contextt *context, uint16 slave, uint16 reqstate, int timeout)

函数的输入参数是报文,从站编号,请求状态,超时

  • context: 报文指针
  • slave:从站编号
  • reqstate:求取运行到的状态,参看相关协议,用16进制表示,下文有介绍。
  • timeout:超时,设置请求的时间,超过时间将不在请求

函数功能:使从站达到网络状态机对应状态,如预运行、安全运行等

备注:运行状态,在ethercattype.h文件中定义了枚举变量,如下所示,其状态切换关系可以参照我以前写的博客EtherCAT状态机详解,其中网络状态机讲解的就是该状态切换。

/** Possible EtherCAT slave states */
typedef enum
{/** Init state*/EC_STATE_INIT           = 0x01,/** Pre-operational. */EC_STATE_PRE_OP         = 0x02,/** Boot state*/EC_STATE_BOOT            = 0x03,/** Safe-operational. */EC_STATE_SAFE_OP        = 0x04,/** Operational */EC_STATE_OPERATIONAL    = 0x08,/** Error or ACK error */EC_STATE_ACK            = 0x10,EC_STATE_ERROR          = 0x10
} ec_state;

ecx_statecheck源码

uint16 ecx_statecheck(ecx_contextt *context, uint16 slave, uint16 reqstate, int timeout)
{uint16 configadr, state, rval;ec_alstatust slstat;osal_timert timer;if ( slave > *(context->slavecount) ){return 0;}osal_timer_start(&timer, timeout);configadr = context->slavelist[slave].configadr;do{if (slave < 1){rval = 0;ecx_BRD(context->port, 0, ECT_REG_ALSTAT, sizeof(rval), &rval , EC_TIMEOUTRET);rval = etohs(rval);}else{slstat.alstatus = 0;slstat.alstatuscode = 0;ecx_FPRD(context->port, configadr, ECT_REG_ALSTAT, sizeof(slstat), &slstat, EC_TIMEOUTRET);rval = etohs(slstat.alstatus);context->slavelist[slave].ALstatuscode = etohs(slstat.alstatuscode);}state = rval & 0x000f; /* read slave status */if (state != reqstate){osal_usleep(1000);}}while ((state != reqstate) && (osal_timer_is_expired(&timer) == FALSE));context->slavelist[slave].state = rval;return state;
}

EtherCAT主站SOEM函数详解---- ecx_statecheck相关推荐

  1. EtherCAT主站SOEM函数详解---- ecx_readstate、ecx_writestate

    EtherCAT主站SOEM函数详解----状态读取函数 ecx_readstate ecx_writestate 在控制驱动器等从站中,经常需要只知道从站的状态,在SOEM开发的主站中,如何读取从站 ...

  2. EtherCAT主站SOEM在Ubuntu上的移植

    EtherCAT主站SOEM在Ubuntu上的移植 原文:https://blog.csdn.net/ethercat_i7/article/details/52794069?utm_medium=d ...

  3. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  4. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  5. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

  6. 【FFmpeg】函数详解(一)

    FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...

  7. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  8. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  9. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  10. python基础知识~ 函数详解2

    python~函数详解2  1 生成器函数    定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数   须知 yield和return一样,都可以返回数 ...

最新文章

  1. C#调用API向外部程序发送数据(转载)
  2. python arp脚本_Python scapy 实现一个简易 arp 攻击脚本
  3. Python 实例方法,类方法和静态方法的区别
  4. php phar包require报错,被遗忘的PHP5.3新特性——Phar
  5. 将RGB转换成ToWin32值
  6. Linux 关闭、开启、查看 防火墙命令
  7. Java进阶 | IO流核心模块与基本原理
  8. 配置window下python3环境
  9. PETERSON互斥算法解析
  10. k8s之创建etcd集群
  11. 设计模式——状态模式
  12. python 爬虫入门(3) proxy详解 代理详解
  13. GB35114—②、公共安全视频监控联网信息安全系统互联结构
  14. u盘大计算机视频,处理视频太大在无法从电脑复制到U盘的操作方法
  15. kpi绩效考核流程图_KPI绩效考核如何运作起来(内含企业KPI实例之详解)
  16. mysql建表语句转oracle_求大神将该MySQL建表语句改为oracle的,感激不尽。
  17. RepOptimizer学习笔记
  18. 记首次CCF数据算法竞赛的心得与收获(排名top1、top2%、top8%),CCF明年再会!
  19. 安装NVIDIA驱动与CUDA教程(+cuDNN)(终极版)
  20. git 常用的命令行

热门文章

  1. 如何在windows10电脑上创建ftp站点
  2. 中国科学院大学数学院本科生教材
  3. 清理oracle残留注册表,Oracle 卸载注册表残余文件清理
  4. 同台同时多开DELPHI2007的解决办法
  5. 诺基亚手机: 诺基亚N9将在下月19日开卖 售价4400元
  6. Java高级工程师需要掌握哪些核心点?
  7. 小编详解网络蜘蛛的安全隐患及预防方法
  8. 计算机毕业设计之答辩
  9. iso硬盘安装 凤凰os_凤凰os系统下载_凤凰系统phoenix os官方下载-188软件园
  10. 怎样使用计算机定时关机,如何设置电脑定时关机