寄存器0x0101

寄存器0x0200

寄存器0x0300

寄存器0x0600

寄存器0x0800

寄存器0x0981

寄存器0x0910

寄存器0x0930

寄存器0x0934

寄存器0x0103

寄存器0x0120

寄存器0x0500

寄存器0x0501

/* 重置从站默认值* @param[in] context      = context struct*                           上下文结构体*/
static void ecx_set_slaves_to_default(ecx_contextt *context)
{uint8 b;/* 要写入从站的数据 uint8 */uint16 w;/* 要写入从站的数据 uint16 */uint8 zbuf[64];/* 临时缓冲区 uint8[64] */memset(&zbuf,/* 临时缓冲区 uint8[64] */0x00, sizeof(zbuf));/* 临时缓冲区大小=64 */b = 0x00;/* Loop Port: 端口环路控制 *//** 0x0101[1:0]端口0环路控制 Loop control port 0 * 0x0101[3:2]端口1环路控制 Loop control port 1 * 0x0101[5:4]端口2环路控制 Loop control port 2 * 0x0101[7:6]端口3环路控制 Loop control port 3 该端口是处于物理连接时自动激活状态还是由主机的命令打开或关闭00: Auto:自动链路断开时闭合,链路连接时打开: loop closed at link down, opened at link up Auto Close01: Auto Close:自动闭合链路断开时闭合,链路连接时写入0x01后打开: loop closed at link down, opened with writing 01 again after link up (or receiving a valid Ethernet frame at the closed port)10: Open:无论链路状态如何,都打开: loop open regardless of link state11: Closed :无论链路状态如何,都闭合: loop closed regardless of link state*/ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000, ECT_REG_DLPORT, // Loop Port: 端口环路控制[Loop Port 0~3]sizeof(b), /* Loop Port: 端口环路控制 */&b, /* Loop Port: 端口环路控制 */EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* deact loop manual */w/* ECAT中断屏蔽 */= htoes(/* 大小端转换操作宏 uint16 */0x0004);/* 0x0200:0x0201 外部事件掩码 External event mask对每一个元素 For each element:0:禁止事件: disable event1:使能事件: enable event */ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000, ECT_REG_IRQMASK, // ECAT Event Mask:ECAT中断屏蔽 // Interrupts 中断sizeof(w),/* ECAT中断屏蔽大小=2 */&w, /* ECAT中断屏蔽 */EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* set IRQ mask *//* 设置中断掩码 */ecx_BWR(// 广播写(BWR) Broadcast writecontext->port, /* 端口(port) */0x0000, ECT_REG_RXERR,// Rx Error Counter[3:0]:接收错误计数器8,// Rx Error Counter[3:0]:接收错误计数器大小=2*4 &zbuf,// Rx Error Counter[3:0]:接收错误计数器EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);  /* reset CRC counters *//* 重置 RX 错误计数器 */ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000,ECT_REG_FMMU0,/* 0x0600:0x06FF:FMMU配置寄存器:现场总线内存管理单元 FMMU[15:0] */16 * 3, /* sizeof(ec_fmmut)*3 */&zbuf,/* FMMU配置寄存器:现场总线内存管理单元 FMMU[2:0] */EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);  /* reset FMMU's *//* 重置FMMU配置寄存器 */ecx_BWR(// 广播写(BWR) Broadcast writecontext->port, /* 端口(port) */0x0000, ECT_REG_SM0,// SyncManager[15:0]:同步管理器SM[15:0]8 * 4,/* sizeof(ec_smt)*4 */&zbuf,// SyncManager[3:0]:同步管理器SM[3:0]EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);  /* reset SyncM *//* 重置同步管理器SM */b = 0x00;// DC–Activation:DC激活/*0x0981.0Sync Out Unit activation:激活周期运行0: Deactivated :无效1: Activated:如果SYNC周期为0,只产生一个SYNC脉冲0x0981.1SYNC0 generation:激活SYNC00: Deactivated  :无效1: SYNC0 pulse is generated:产生SYNC0脉冲0x0981.2SYNC1 generation:激活SYNC10: Deactivated  :无效1: SYNC1 pulse is generated:产生SYNC1脉冲*/ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000, ECT_REG_DCSYNCACT,// DC–Activation:DC激活sizeof(b), &b, // DC–Activation:DC激活EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* reset activation register *//* 重置激活寄存器 */ecx_BWR(// 广播写(BWR) Broadcast writecontext->port, /* 端口(port) */0x0000,ECT_REG_DCSYSTIME,/* 0x0910,DC系统时间,本地系统时间 */4, /* DC系统时间,本地系统时间大小=32bit */&zbuf,/* DC系统时间,本地系统时间大小 */EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);  /* reset system time+ofs *//* 重置系统时间+偏移 */w // Speed Counter Start:DC速度寄存器起始= htoes(/* 大小端转换操作宏 uint16 */0x1000);ecx_BWR(// 广播写(BWR) Broadcast writecontext->port, /* 端口(port) */0x0000, ECT_REG_DCSPEEDCNT,// Speed Counter Start:DC速度寄存器起始sizeof(w) ,&w,// Speed Counter Start:DC速度寄存器起始EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* DC speedstart *//* DC速度寄存器起始 */w // 0x0934:System Time Filter Depth:DC系统时间偏移过滤深度// 0x0935:Speed Counter Filter Depth:DC速度寄存器过滤深度= htoes(/* 大小端转换操作宏 uint16 */0x0c00);ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000, ECT_REG_DCTIMEFILT,// 0x0934:System Time Filter Depth:DC系统时间偏移过滤深度// 0x0935:Speed Counter Filter Depth:DC速度寄存器过滤深度sizeof(w),&w,// 0x0934:System Time Filter Depth:DC系统时间偏移过滤深度// 0x0935:Speed Counter Filter Depth:DC速度寄存器过滤深度EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* DC filt expr *//* DC时间过滤深度 */b = 0x00;/* 站点别名 *//* 0x0103Station alias: 站点别名0: Ignore Station Alias 忽略站点别名1: Alias can be used for all configured address command types (FPRD, FPWR, …)所有配置地址寻址使用别名 */ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000,ECT_REG_DLALIAS,// Station alias:站点别名=0x0103sizeof(b),&b,/* 站点别名 */EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* Ignore Alias register *//* 忽略别名寄存器 */b /* AL Control:应用层控制 */= EC_STATE_INIT/* 初始化状态 */| EC_STATE_ACK;/* Error Ind Ack: AL错误应答 */ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000, ECT_REG_ALCTL, // AL Control:应用层控制=0x0120 [bit0:3:AL控制位 bit4:AL错误应答]sizeof(b) , /* AL Control:应用层控制 */&b,/* AL Control:应用层控制 */EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* Reset all slaves to Init *//* 将所有从站重置为初始状态 */b = 2;// EEPROM Configuration:EEPROM配置=0x0500/*0x0500:0x0501.0EEPROM control is offered to PDI:EEPROM访问分配0: no:ECAT 帧1: yes (PDI has EEPROM control):PDI0x0500:0x0501.1Force ECAT access: 强制PDI操作释放0: Do not change Bit 501.0 :不改变0X501.01: Reset Bit 501.0 to 0:复位0x501.0为0*/ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000,ECT_REG_EEPCFG,// EEPROM Configuration:EEPROM配置=0x0500sizeof(b) ,&b,// EEPROM Configuration:EEPROM配置=0x0500EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* force Eeprom from PDI */b = 0;ecx_BWR(// 广播写(BWR) Broadcast writecontext->port,/* 端口(port) */0x0000,ECT_REG_EEPCFG,// EEPROM Configuration:EEPROM配置=0x0500sizeof(b) ,&b, // EEPROM Configuration:EEPROM配置=0x0500EC_TIMEOUTRET3/* 安全数据传输的超时时间值,最大重试次数为三次 */);     /* set Eeprom to master *//* 将Eeprom设置到主站 */
}

SOEM 源码解析 ecx_set_slaves_to_default相关推荐

  1. EtherCAT主站SOEM源码解析----ecx_siiPDO()

    1.从站EEPROM的PDO信息 从站EEPROM存储的PDO信息如下如所示: TxPDO的类型名为50(0x0032),RxPDO的类型名为51(0x0033). 每个PDO占用的EEPROM字节数 ...

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

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

  3. SOEM 源码解析 ecx_LWR

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

  4. SOEM 源码解析 ecx_FPWR

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

  5. SOEM 源码解析 ecx_FPWRw

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

  6. SOEM 源码解析 ecx_LRD

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

  7. SOEM 源码解析 ecx_FRMW

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

  8. SOEM 源码解析 ecx_map_sii

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

  9. SOEM 源码解析 ecx_lookup_prev_sii

    /* 通过SII[从站信息接口(Slave Information Interface)]查找从站* If slave has SII and same slave ID done before, u ...

最新文章

  1. 高通将用芯片改变无人机行业格局
  2. 《Python入门经典》——导读
  3. complementary prior
  4. elementuiDemo1.1
  5. vi交互式批量替换 vi批量替换 vi查找和替换
  6. 光流估计——从传统方法到深度学习
  7. 奇怪,Python有的函数调用需要两对括号?(2)
  8. Android模拟器的模拟键盘区不见了怎么办
  9. Docker教程小白实操入门(13)--如何使用COPY和ADD复制文件到容器内
  10. arcgis的numpy模块_01. Numpy模块
  11. 【从零开始学架构-李运华】03|架构设计的目的
  12. GIMP小波分解处理照片
  13. Linux grep命令详解:查找文件内容
  14. 最简单的方法来压缩图片,改变图片大小
  15. shine your way
  16. 你想要的WinForm界面开发教程在这里 - 如何使用自定义用户控件
  17. 树莓派3 搭建tensorflow并进行物体识别
  18. Java电商平台之订单功能和支付功能实现
  19. 用xinnet新网API实现动态域名
  20. 项目经理如何做好项目数据分析?

热门文章

  1. 会议管理、会议预约、教室预约之叮当会议使用教程
  2. 皮卡丘(pikachu)敏感信息泄露
  3. windows快速切换jdk版本号
  4. Cuckoo针对恶意软件自动化分析系统
  5. 华为手机计算机怎么语音算术,只动口不动手!华为手机这个自带功能绝了,录音秒变文字!...
  6. unity 双指触控(以及多指触摸的代码原理分析)
  7. [转]Windows CE 6.0(PB6)离线安装版下载
  8. matlab极坐标系给定圆心画圆,matlab画极坐标
  9. solidworks2022 - 双开
  10. Caffeine Cache和Ehcache3.x 进程缓存性能比较