1.参考手册

    下面7个文件存放在本地服务器“\\10.9.1.11\3.研发部\9.ExchangeFolder\郑磊”路径下

    《RealEvo-IDE使用手册》

    《SylixOS应用开发手册》

    《SylixOSshell用户手册》

    《SylixOS-IgH使用说明》

    《SylixOS上IgH移植技术笔记》

    《CiA-402-2-version-3.0.0》 —— CANOPEN运动控制协议

    《M0011098G-ch》 —— 三洋电机的使用说明

    下面7个文件存放在git服务器“路径下”

    《TN0003_SylixOS实时以太网浅析》

    《TN0113_SylixOS周期定时抖动分析》

    《TN0129_SylixOS高精度时钟分析》

    《TN0130_SylixOSRMS调度详解》

    《TN0139_SylixOS上EtherCAT实现》

    《TP0020010003_SylixOS运动控制项目技术方案》

    《TR0011_IgH收发时间和任务周期测试报告_SylixOS测试报告》

2.项目文件

    下面3个工程文件存放在服务器“\\10.9.1.11\3.研发部\9.ExchangeFolder\郑磊”路径下

SylixOS_X86_BASE_164_EtherCAT、SylixOS-IgH、SylixOS-IgH_USER。

3.EtherCAT在SylixOS下的使用步骤

    目前新版IgH已经支持内核模块注册传入参数机制,在/etc/目录下新增ethercat_cfg.ini配置文件。用户在SylixOS上搭建IgH使用平台,可修改配置文件中的设备名称和MAC地址为对应的网络接口参数,详细配置见3.4节。下面介绍SylixOS-IgH在RealEvo-IDE下的详细使用步骤,并驱动三洋电机的运转。RealEvo-IDE的使用请参考《RealEvo-IDE使用手册》,电机的使用参考三洋电机的使用手册《M0011098G-ch》,SylixOS-IgH的介绍可参考《SylixOS-IgH使用说明》、《SylixOS上IgH移植技术笔记》。

3.1 导入SylixOS-IgH 在x86平台下的BASE工程

    1.导入提供的SylixOS_X86_BASE_164_EtherCAT工程,如图3. 1所示。

图3.1 SylixOS_X86_BASE_164_EtherCAT工程

    2.选择目标设备并配置部署路径,如图3. 2所示。

                                                                    图3.2 目标设备和部署路径配置窗口

3. 编译工程,输出结果如图3. 3所示。

                                                                                 图3.3 工程编译输出结果

4. 部署文件到目标设备上如图3. 4所示。

                                              

                                                                                       图3.4 部署文件进程

3.2 导入SylixOS-IgH工程

    1.导入提供的SylixOS-IgH工程,如图3. 5所示

图3.5 SylixOS-IgH工程

2.选择目标设备并配置部署路径,如图3. 6所示

图3.6 目标设备和部署路径配置窗口

    3.编译工程,输出结果如图3.7所示

图3.7 工程编译输出结果

    4.部署文件到目标设备上,如图3. 8 部署文件进程所示

图3.8 部署文件进程

3.3 导入SylixOS-IgH_USER工程

    1.导入提供的SylixOS-IgH_USER工程,如图3. 9所示

图3.9 SylixOS-IgH_USER工程

    2.选择目标设备并配置部署路径,如图3. 10所示

图3.10 目标设备和部署路径配置窗口

    3.编译工程输出结果,如图3. 11所示

图3.11 工程编译输出结果

    4.部署文件到目标设备上,如图3. 12所示

图3.12 部署文件进程

3.4 修改ethercat_cfg.ini文件

    1.打开设备终端,输入“ifconfig”指令,找到相应网口的描述信息,本例程使用的是en1,相关shell指令可参考《SylixOS shell用户手册》,如图3. 13所示

图3.13 en1网口描述信息

    2.进入“/etc/”目录,使用“vi”命令修改文件中的设备名称和MAC地址,如图3. 14所示

图3. 14 ethercat_cfg.ini文件内容

3.5 注册驱动模块

    模块驱动文件部署在“/lib/modules/”下。

    1.注册“ec_master.ko”模块,如图3. 15所示

图3. 15 注册主站模块并查看主站状态

    2.注册“rt_netcard.ko”模块,如图3. 16所示

图3. 16 注册网络设备驱动模块并查看主站状态

    还可以通过“ethercat slaves”命令查看识别到的从站类型,如图3. 17所示

图3. 17 查看识别从站状态

3.6 运行应用程序

    在“/apps/IgHExamples/”下执行“./IgHtest”程序,如图3. 18所示。

图3. 18 用户程序运行状态

    程序运行过程中,电机先低速运行,再高速运行,最后低速运行到停止状态直到程序运行结束。

    至此,SylixOS上使用EtherCAT开源协议栈IgH的基本流程已描述完毕,另外还有一些点需要注意:

    1.IgH协议栈使用时需要提前预知从站设备的拓扑结构,应用程序需要根据从站的拓扑结构提前配置好各个从站的位置信息,          SDO/PDO信息,主站激活后,会将提前预知的配置信息和实际读取从站寄存器获取的信息进行对比,只有匹配后从站才能          进入OP状态;

    2.EtherCAT开源协议栈IgH原生只支持Linux操作系统,SylixOS移植支持会尽可能保留用户层相同使用习惯,而IgH开源社区         提供的资料并没有完全介绍用户层接口的使用和命令行工具的使用,暂时SylixOS-IgH也仅仅提供基础使用说明,其余功能         的使用说明会在后续完善。

4 应用程序代码流程详解

    1.电机数量配置,如图4. 1所示

图4. 1 电机数量配置

    2.PDO映射变量定义,如图4. 2所示

图4. 2 PDO映射变量定义

    3.配置数据域寄存器,如图4. 3所示

图4. 3 数据域寄存器配置

    4.在终端中输入“ethercat cstruct”命令,得到如下结构体定义,如图4. 4所示

 

图4. 4 电机配置结构体定义

    5.申请一个消息队列,如图4. 5所示

图4. 5 申请一个消息队列

    6.申请一个EtherCAT主机,如图4. 6所示

图4. 6 申请一个EtherCAT主机

    7.为每个电机申请数据域,如图4. 7所示

图4. 7 申请数据域

    8.为电机配置PDO,如图4. 8所示

图4. 8 配置PDO

    9.数据域和PDO映射建立关系,如图4. 9所示

图4. 9 数据域和PDO映射建立关系

    10.若使用时钟同步功能需调用以下函数,如图4. 10所示

图4. 10 配置时钟同步功能

    11.激活主机,如图4. 11所示

图4. 11 激活主机

    12.创建打印线程,用于调试,如图4. 12所示

图4. 12 创建打印线程

    13.创建电机驱动线程,用于控制电机运行状态,如图4. 13所示

图4. 13 创建电机驱动线程

    14.打印线程函数,等待接收消息队列中的数据,收到数据后将数据打印到控制台上,如图4. 14所示

图4. 14 打印线程函数

    15.启用RMS调度器功能,RMS调度器相关使用说明参考《TN0130_SylixOS RMS调度详解》、《TN0113_SylixOS周期定时抖动分析》,如图4. 15所示

图4. 15 启用RMS调度器

    16.获取系统启动时间,用于计算电机驱动任务执行周期,可参考《TN0129_SylixOS高精度时钟分析》,如图4. 16所示

图4. 16 获取系统启动时间

    17.主节点向从节点发送数据(站在从机的角度),如图4. 17所示

                                                                

                                                                              图4. 17 发送数据函数

    18.获取从节点数据(站在从机的角度),如图4. 18所示

                                                                 

                                                                              图4.18 接收数据函数