之前发过一个帖子,关于开源Ethercat Igh 1.5.2的二次开发的,忘记开放源码了。虽然现在不做工业控制的方向了,还是把之前代码开源出来。便于需要的人学习。
有钱的公司肯定时推荐用商用主站倍福,KPA等。如果个人学习Ethercat的话没有太多资金情况下尝试下Igh Master 也是不错的选择。之前公司做的项目通过Ethrecat Igh Master1.5.2实现对IO(ET1000模块实现的slave)量读取,设置的Ethrecat控制;实现了对于Sanyo伺服电机的力矩控制;最后还实现了基于插补算法实现对泰科Ethercat 伺服关节模组的控制。详细介绍如下。
软硬件平台:
Linux(3.0.35 内核,没有进行实时优化)+Igh Master 1.5.2+Et1100从站IO+山羊Ethercat伺服驱动器+泰科伺服驱动关节模组
目前已经调试通过的功能:
1.基于SDO方式,读取ET1100 IO数据,温湿度数据,通过IO控制从站Led
2.基于PDO方式,读取ET1100 IO数据,温湿度数据,通过IO控制从站Led
3.基于SDO方式,通过力矩模式,控制山羊电机运行,并且实时读取山羊电机位置,速度,力矩,错误状态等数据
4.基于PDO方式,通过力矩模式,控制山羊电机运行,并且实时读取山羊电机位置,速度,力矩,错误状态等数据
5.基于SDO方式,通过力矩模式,控制泰科伺服电机运行,并且实时读取山羊电机位置,速度,力矩,错误状态等数据
6.基于PDO方式,通过力矩模式,控制泰科伺服电机运行,并且实时读取山羊电机位置,速度,力矩,错误状态等数据
基于Igh Master库的二次开发:
1.Igh Master 1.5.2原始编译的库原生API使用,要经过大量的手动配置。在熟悉Igh Master api基础上进行二次开发。
2.目前所有从站信息可以通过Shell脚本自动生成,结合二次开发的Igh Master接口只需几行代码就可以实现对从站的配置
3.更方便的PDO数据读取接口。原始Igh Master PDO读取接口要准确的知道从站vendorid,productid, index,sudindex,off_bytes.off_bits等信息,对用户友好。封装后的二次接口只需提供从站位置编号,index,sudindex就可以完成PDO数据读取,写入。所有其他模块信息由二次开发模块内部维护。
压缩包Readme.txt:
文档目录结构及简要说明
0.Ethercat调试记录.txt
调试Ethercat过程中碰到的问题及解决办法
1. libethercat\std 目录
编译Igh生成的ethecat库
2. libethercat\include
Igh Master Ethercat库包含的头文件
3. scripts/
自动生成从站信息的相关脚本文件,要生成从站信息,将该文件夹复制到开发板运行GenerateSlavesConfig.sh。
默认生成ec_common_configs_define.h和ec_common_configs_define.c文件,这两个文件会在libethercat\ec_common\ecat_common.c,libethercat\ec_common\ecat_common.h相关接口使用。
4. libethercat\ec_common
4.0
ec_common_configs_define.h
ec_common_configs_define.c
由脚本scripts/GenerateSlavesConfig.sh自动生成的从站信息,包括从站PDO,SDO设置等,更具体的可以参照scripts/README.txt
4.1
ecat_common.h
ecat_common.c
基于ibethercat\std 中的库的二次封装库,简化了PDO,SDO等操作
4.2
ecat_common_intermediate_interface.h
ecat_common_intermediate_interface.c
与具体厂商相关的接口库,基于ecat_common.c中接口的实现,不同设备修改这两个文件中的接口进行适配。
目前该文件实现的山羊电机接口。主要实现的PDO接口的电机状态查询,上电开机,关机,操作模式设置,力矩设置等接口,不同电机的类似接口可以参照该文件实现,接口作用见名知意。
封装接口的关键是对象字典的操作,根据手册设置对象字典即可,标准的Ethercat接口伺服电机一般来说对象字典定义基本是一样的,可能稍微有差别
5. 标准Igh Master接口的使用例子
mytest目录
mytest/test_torque_sanyo_ioctl
基于ioctl接口的sanyo电机测试例子
mytest/test_torque_tec_ioctl
基于ioctl接口的泰科电机电机测试例子
mytest/test_torque_tec_lib
基于libethercat\std库接口的电机测试例子
mytest/test_torque2
基于libethercat\std库接口的电机测试例子2
mytest/test_io_board
ET1100,IO板的测试例子
基于标准的Igh 库及iotcl接口可以参照该文件夹例子
6.二次封装接口库ecat_common_intermediate_interface.c的使用说明
使用步骤
(1)将编译生成的Igh库文件替换libethercat\std文件, 文件名可能要改成,或者不该也行,自己写Makefile时匹配库名称就行
(2)将 scripts/ 目录复制到开发运行GenerateSlavesConfig.sh脚本,将脚本生成的ec_common_configs_define.h ec_common_configs_define.h 复制到libethercat\ec_common 文件夹
(3)基于二次封装接口的电机一般操作步骤
参照demo.c中的ethercat_init() 进行从站初始化
初始化后就可以调用ecat_common_intermediate_interface.c中接口对从站进行操作
比如
interpolation_2_ecat_set_slave_pwr_on()接口使能电机,
interpolation_2_ecat_set_slave_pwr_off() 关闭电机
interpolation_2_ecat_set_slave_target_pos() 设置目标位置,对应位置模式操作
其它接口作用见参照具体实现
7.关于轴操作的几点说明
(1)每个轴对应一个从站,由alias,position确定,一般来说从站不多时alias=0固定不变,对不同轴根据positon确定。
例如使能和关闭不同的轴
int interpolation_2_ecat_set_slave_pwr_on(MasterSpecifiedInfo_T *master_specified_info, int slave_pos);
int interpolation_2_ecat_set_slave_pwr_off(MasterSpecifiedInfo_T *master_specified_info, int slave_pos);
中slave_pos参数就对应不同的轴,slave_pos=0,axis1 slave_pos=1,axis2...
(2)设置不同轴的操作模式,位置,力矩,速度模式
int interpolation_2_ecat_set_slave_operation_model(MasterSpecifiedInfo_T *master_specified_info, int slave_pos, unsigned char operation_model)
最新的代码托管在 https://gitee.com/wllw7176/MyEthercat-IGH-1.5.2.git 。
git clone https://gitee.com/wllw7176/MyEthercat-IGH-1.5.2.git 或者直接下载zip压缩包就可以获得最新的全部代码,
里面包含了IghMaster1.5.2的官方源码,编译脚本及安装到Arm开发板上的shell脚本,有需要的拿去。