SOEM 源码解析 ecx_lookup_prev_sii
/* 通过SII[从站信息接口(Slave Information Interface)]查找从站* If slave has SII and same slave ID done before, use previous data.* 如果从站具有SII并且之前完成相同的从站ID,使用以前的数据* This is safe because SII is constant for same slave ID.* 这是安全的,因为 SII 对于同一从站 ID 是常量* @param[in] context = context struct* 上下文结构体* @param[in] slave = Slave number* 从站编号* @return 返回值:发现时返回1,没有找到时返回0*/
static int ecx_lookup_prev_sii(ecx_contextt *context, uint16 slave)
{int i,/* 从站编号循环计数 */nSM;/* SM 编号 */if ((slave/* 从站编号 */ > 1) && (*(context->slavecount)/* 从站数量[从站个数] */ > 0)){i = 1;/* 从站编号循环计数 */while(((context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].eep_man/* EEprom中的从站厂家制造商代码 */!= context->slavelist/* 从站列表 */[slave/* 从站编号 */].eep_man/* EEprom中的从站厂家制造商代码 */) ||(context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].eep_id/* EEprom中的厂商标识[从站ID] */!= context->slavelist/* 从站列表 */[slave/* 从站编号 */].eep_id/* EEprom中的厂商标识[从站ID] */ ) ||(context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].eep_rev/* EEprom中的版本号 *//* Revision Number */!= context->slavelist/* 从站列表 */[slave/* 从站编号 */].eep_rev/* EEprom中的版本号 *//* Revision Number */)) &&(i/* 从站编号循环计数 */ < slave/* 从站编号 */)){i++;/* 从站编号循环计数 */}if(i/* 从站编号循环计数 */ < slave/* 从站编号 */){/* CoE detailsBit 0: Enable SDO: 使能SDOBit 1: Enable SDO Info: 使能SDO 信息Bit 2: Enable PDO Assign: 使能PDO 赋值Bit 3: Enable PDO Configuration: 使能PDO 配置Bit 4: Enable Upload at startup: 使能在启动时上载Bit 5: Enable SDO complete acces: 使能SDO 完全访问 */context->slavelist/* 从站列表 */[slave/* 从站编号 */].CoEdetails/* CoE details */= context->slavelist/* 从站列表 */[i].CoEdetails;/* CoE details */context->slavelist/* 从站列表 */[slave/* 从站编号 */].FoEdetails/* FoE details *//* Bit 0:Enable FoE:使能FoE */= context->slavelist/* 从站列表 */[i].FoEdetails;/* FoE details *//* Bit 0:Enable FoE:使能FoE */context->slavelist/* 从站列表 */[slave/* 从站编号 */].EoEdetails/* EoE details *//* Bit 0: Enable EoE:使能EoE */= context->slavelist/* 从站列表 */[i].EoEdetails;/* EoE details *//* Bit 0: Enable EoE:使能EoE */context->slavelist/* 从站列表 */[slave/* 从站编号 */].SoEdetails/* SoE details */= context->slavelist/* 从站列表 */[i].SoEdetails;/* SoE details */if(context->slavelist/* 从站列表 */[i].blockLRW > 0)/* 如果>0 块在过程数据中使用 LRW */{context->slavelist/* 从站列表 */[slave/* 从站编号 */].blockLRW = 1;/* 如果>0 块在过程数据中使用 LRW */context->slavelist/* 从站列表 */[0].blockLRW++;/* 如果>0 块在过程数据中使用 LRW */}context->slavelist/* 从站列表 */[slave/* 从站编号 */].Ebuscurrent/* EBUS 电流消耗[单位:mA] *//* EBus Current */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].Ebuscurrent;/* EBUS 电流消耗[单位:mA] *//* EBus Current */context->slavelist/* 从站列表 */[0].Ebuscurrent/* EBUS 电流消耗[单位:mA] *//* EBus Current */+= context->slavelist/* 从站列表 */[slave/* 从站编号 */].Ebuscurrent;/* EBUS 电流消耗[单位:mA] *//* EBus Current */memcpy(context->slavelist/* 从站列表 */[slave/* 从站编号 */].name,/* 从站产品型号名称 */context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].name,/* 从站产品型号名称 */EC_MAXNAME/* 名称的最大长度 */ + 1);for( nSM/* SM 编号 */ =0 ;nSM/* SM 编号 */ < EC_MAXSM/* SM 最大使用数=8 */;nSM++/* SM 编号 */ ){context->slavelist/* 从站列表 */[slave/* 从站编号 */].SM[nSM/* SM 编号 */].StartAddr/* 物理起始地址 */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].SM[nSM/* SM 编号 */].StartAddr;/* 物理起始地址 */context->slavelist/* 从站列表 */[slave/* 从站编号 */].SM[nSM/* SM 编号 */].SMlength /* SM通道数据长度 */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].SM[nSM/* SM 编号 */].SMlength;/* SM通道数据长度 */context->slavelist/* 从站列表 */[slave/* 从站编号 */].SM[nSM/* SM 编号 */].SMflags /* 标志位 */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].SM[nSM/* SM 编号 */].SMflags /* 标志位 */;}context->slavelist/* 从站列表 */[slave/* 从站编号 */].FMMU0func/* FMMU0功能 */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].FMMU0func;/* FMMU0功能 */context->slavelist/* 从站列表 */[slave/* 从站编号 */].FMMU1func/* FMMU1功能 */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].FMMU1func;/* FMMU1功能 */context->slavelist/* 从站列表 */[slave/* 从站编号 */].FMMU2func/* FMMU2功能 */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].FMMU2func;/* FMMU2功能 */context->slavelist/* 从站列表 */[slave/* 从站编号 */].FMMU3func/* FMMU3功能 */= context->slavelist/* 从站列表 */[i/* 从站编号循环计数 */].FMMU3func;/* FMMU3功能 */EC_PRINT(// 格式化输出函数"Copy SII slave %d from %d.\n",slave, /* 从站编号 */i);/* 从站编号循环计数 */return 1;/* 找到从站 */}}return 0;/* 没有找到从站 */
}
SOEM 源码解析 ecx_lookup_prev_sii相关推荐
- EtherCAT主站SOEM源码解析----ecx_siiPDO()
1.从站EEPROM的PDO信息 从站EEPROM存储的PDO信息如下如所示: TxPDO的类型名为50(0x0032),RxPDO的类型名为51(0x0033). 每个PDO占用的EEPROM字节数 ...
- EtherCAT主站SOEM源码解析----分布时钟DC
分布时钟(DC,Dsitributed Clock)可以使所有EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行. 1.DC从站 支持分布式时钟的从站称为DC从站,同步原理如下所示: ...
- SOEM 源码解析 ecx_LWR
/* LWR "logical memory write" primitive. Blocking.* 逻辑写(LWR) Logical write 原语 阻塞* @param[i ...
- SOEM 源码解析 ecx_FPWR
/* FPWR "configured address write" primitive. Blocking.* 配置的地址物理写(FPWR) Configured address ...
- SOEM 源码解析 ecx_FPWRw
/* FPWR "configured address write" primitive. Blocking.* 配置的地址物理写(FPWR) Configured address ...
- SOEM 源码解析 ecx_LRD
/* LRD "logical memory read" primitive. Blocking.* 逻辑读(LRD) Logical read 原语 阻塞* @param[in] ...
- SOEM 源码解析 ecx_FRMW
/* FPRMW "configured address read, multiple write" primitive. Blocking.* 配置的地址物理读多次写(FRMW) ...
- SOEM 源码解析 ecx_set_slaves_to_default
寄存器0x0101 寄存器0x0200 寄存器0x0300 寄存器0x0600 寄存器0x0800 寄存器0x0981 寄存器0x0910 寄存器0x0930 寄存器0x0934 寄存器0x0103 ...
- SOEM 源码解析 ecx_map_sii
/* find SII mapping of slave* 查找从站的 SII 映射* @param[in] context = context struct* 上下文结构体* @param[in] ...
最新文章
- Android 保存图片到系统及相关问题的解决方案
- 实现Excel数据导入到SQL2005中的方法(回顾)
- 求二叉树某个结点的祖先
- WPF的样式(Style)继承
- Java讲课笔记11:构造方法与this关键字
- 圆柱与平面接触宽度_圆柱滚子轴承保持架锁爪变形引起的轴承故障
- python-excel-openpyxl读取数据---更新完善--1
- 计算机大学毕业好考公务员,哪些大学的毕业生更容易考上公务员?
- 4.28下午 听力611
- css 点击效果_纯 CSS 实现吸附效果
- 浅谈5类过零检测电路
- MFC 键盘鼠标钩子
- 2021上交应用统计考研经验贴(初试)
- 华为、华三交换机查看光模块收发光及光模块信息
- 神秘的百度工业互联网,到底有多厉害?
- html项目符号正方形,html – 列表项下的项目符号
- as转html5工具,HTML5 Convas APIs方法详解
- 基于ssm的crm系统开源_基于云的CRM软件工具
- 企立方:拼多多商家运营思路
- 盘点那些具有特色的写作软件