1、从站EEPROM的PDO信息

从站EEPROM存储的PDO信息如下如所示:

TxPDO的类型名为50(0x0032),RxPDO的类型名为51(0x0033).
每个PDO占用的EEPROM字节数为8+8*er(er位Entry个数)。

2、读取PDOx信息

SOEM中函数ecx_siiPDO()读取EEPROM中PDO信息并:
(1) 统计每个SM所对应的bit length
(2) 返回bit length的总和。

int ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOt* PDO, uint8 t)
{uint16 a , w, c, e, er, Size;uint8 eectl = context->slavelist[slave].eep_pdi;Size = 0;PDO->nPDO = 0;PDO->Length = 0;PDO->Index[1] = 0;for (c = 0 ; c < EC_MAXSM ; c++) PDO->SMbitsize[c] = 0;if (t > 1)t = 1;PDO->Startpos = ecx_siifind(context, slave, ECT_SII_PDO + t);if (PDO->Startpos > 0){a = PDO->Startpos;w = ecx_siigetbyte(context, slave, a++);w += (ecx_siigetbyte(context, slave, a++) << 8);PDO->Length = w;  //PDO信息的字数c = 1;/* traverse through all PDOs */do   //每执行一次do循环,a的值会增加8*e+8, c的值会增加4*e+4, e为PDO中的Entry数目{PDO->nPDO++;PDO->Index[PDO->nPDO] = ecx_siigetbyte(context, slave, a++);PDO->Index[PDO->nPDO] += (ecx_siigetbyte(context, slave, a++) << 8);PDO->BitSize[PDO->nPDO] = 0;c++;e = ecx_siigetbyte(context, slave, a++); //entry 数目PDO->SyncM[PDO->nPDO] = ecx_siigetbyte(context, slave, a++);   //该PDO属于哪个同步管理器a += 4;  //a=8, 跳转到Entry1,每个Entry8个bytesc += 2;  //c的单位为字,a的单位为字节if (PDO->SyncM[PDO->nPDO] < EC_MAXSM) /* active and in range SM? */{/* read all entries defined in PDO */for (er = 1; er <= e; er++)  //每执行一次for循环,c的值会加4,a的值会加8{c += 4;a += 5;PDO->BitSize[PDO->nPDO] += ecx_siigetbyte(context, slave, a++);a += 2;}PDO->SMbitsize[PDO->SyncM[PDO->nPDO] ] += PDO->BitSize[PDO->nPDO];Size += PDO->BitSize[PDO->nPDO];c++;}else /* PDO deactivated because SM is 0xff or > EC_MAXSM */{c += 4 * e;a += 8 * e;c++;}if (PDO->nPDO >= (EC_MAXEEPDO - 1)){c = PDO->Length; /* limit number of PDO entries in buffer */}}while (c < PDO->Length);}if (eectl){ecx_eeprom2pdi(context, slave); /* if eeprom control was previously pdi then restore */}return (Size);
}

3、EL1014实例

EL1014中EEPROM中存储的TxPDO信息如下:

总共有4个PDO,每个PDO包含1个Entry,每个Entry的bitlen为1,所以调用函数ecx_siiPDO()读取EL1014 PDO信息时,该函数的返回值为4.

EtherCAT主站SOEM源码解析----ecx_siiPDO()相关推荐

  1. EtherCAT主站SOEM源码解析----分布时钟DC

    分布时钟(DC,Dsitributed Clock)可以使所有EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行. 1.DC从站 支持分布式时钟的从站称为DC从站,同步原理如下所示: ...

  2. SOEM 源码解析 ecx_LWR

    /* LWR "logical memory write" primitive. Blocking.* 逻辑写(LWR) Logical write 原语 阻塞* @param[i ...

  3. SOEM 源码解析 ecx_FPWR

    /* FPWR "configured address write" primitive. Blocking.* 配置的地址物理写(FPWR) Configured address ...

  4. SOEM 源码解析 ecx_LRD

    /* LRD "logical memory read" primitive. Blocking.* 逻辑读(LRD) Logical read 原语 阻塞* @param[in] ...

  5. SOEM 源码解析 ecx_FRMW

    /* FPRMW "configured address read, multiple write" primitive. Blocking.* 配置的地址物理读多次写(FRMW) ...

  6. SOEM 源码解析 ecx_set_slaves_to_default

    寄存器0x0101 寄存器0x0200 寄存器0x0300 寄存器0x0600 寄存器0x0800 寄存器0x0981 寄存器0x0910 寄存器0x0930 寄存器0x0934 寄存器0x0103 ...

  7. SOEM 源码解析 ecx_map_sii

    /* find SII mapping of slave* 查找从站的 SII 映射* @param[in] context = context struct* 上下文结构体* @param[in] ...

  8. SOEM 源码解析 ecx_APRD

    /* APRD "auto increment address read" primitive. Blocking.* 自增式物理读(APRD) Auto increment ph ...

  9. SOEM 源码解析 ecx_SDOerror

    /* Report SDO error.* 报告SDO错误* @param[in] context = context struct* 上下文结构体* @param[in] Slave = Slave ...

最新文章

  1. 成功解决ModuleNotFoundError: No module named ‘sklearn.grid_search‘
  2. haproxy的丰富特性简介
  3. Boost在Linux和windows下的编译 32位 64位
  4. 10-多写一个@Autowired导致程序崩了
  5. Maven开发笔记(四)—— Maven中plugins和pluginManagement
  6. 微信小程序开发学习笔记001--认识微信小程序,第一个微信小程序
  7. linux 限速命令,Linux下网卡限速
  8. 数据分析汇报用这个神器,让他们弃用了Excel和PPT
  9. 安装Linux系统的一些问题记载
  10. sql vb xml 换行_VB中文本框换行--------急!!!
  11. Excel表格打印时不打印标记填充颜色
  12. 百度、阿里、美团、头条…论剑AI,这里有开发者想知道的未来
  13. 连载:中国最早的一代官派留学生--留美幼童 (结尾)
  14. 哪些软件是用C++写的
  15. 计算机二级讲座宣传语,计算机二级讲座策划书.doc
  16. Print a rhombus (C++)
  17. 青铜三人行之青蛙跳台阶
  18. 织梦 DEDECMS LOOP标签的用法及调用
  19. Linux服务器运行状况全面监测
  20. 计算机网络安全漏洞及防范措施论文,浅谈计算机网络安全漏洞及防范措施论文.doc...

热门文章

  1. angularjs grunt uglify 报错
  2. Codeforces Round #829E 1753E. N Machines
  3. 单位调岗不能正常主张的原因解析
  4. zcmu1684 求余数
  5. tomcat版本和支持的jdk版本匹配表
  6. ⭐UI自动化工具轻松实现微信消息收发⚡朋友圈爬取⁉️
  7. Maven编译Docker 镜像并推送到Nexus
  8. 动感校园行17951长途ip电话卡
  9. python熊猫图案_熊猫Python数据分析库和SQL教会了我如何取平均数
  10. 求任意一个自然数n的立方均可写成n个连续奇数之和。