版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangzheng_1986/article/details/82349416
前言:
EtherCAT(以太网控制自动化技术)是一个开放架构,以以太网为基础的现场总线系统,其名称的CAT为控制自动化技术(Control Automation Technology)字首的缩写。EtherCAT是确定性的工业以太网,最早是由德国的Beckhoff公司研发。
优势:免费、开源、稳定性能良好、支持实时扩展。
环境:Ubuntu14.04
一、获取
(1) 从EtherLab官方网站获取
网址:http://etherlab.org/download/ethercat/ethercat-1.5.2.tar.bz2
(2) 从开源代码托管平台github上获取
进入github搜索”igh ethercat”即可下载所需要的源码包。
网址:https://github.com/synapticon/Etherlab_EtherCAT_Master/releases/download/v1.5.2-sncn-5/EtherCAT_Master-1.5.2-sncn-5.zip
二、编译及安装
wget https://github.com/synapticon/Etherlab_EtherCAT_Master/releases/download/v1.5.2-sncn-5/EtherCAT_Master-1.5.2-sncn-5.zip
unzip EtherCAT_Master-1.5.2-sncn-5.zip
cd sncn_installer
make ethercatMasterInstallWithAutoStart
三、文件解析
(1)官方文档配置
(2)根目录Makefile文件解析:
SHELL := /bin/bash
ethercatMasterVersion:=1.5.2-sncn-5
ethercatMasterZip:=ethercat-$(ethercatMasterVersion).tar.bz2
udevRulesFile:=99-EtherCAT.rules
ethercatUserGroup:=$(shell whoami)
$(udevRulesFile):
@echo "Generating udev rules file"
@echo "KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\", GROUP=\"$(ethercatUserGroup)\"">$(udevRulesFile)
ethercatMaster: $(udevRulesFile)
tar -xvf $(ethercatMasterZip) #解压源代码
cd ethercat-$(ethercatMasterVersion);\
./configure --disable-8139too;\ #配置并生成Makefile
make all modules; #生成应用程序及驱动模块
ethercatMasterInstall: ethercatMaster
cd ethercat-$(ethercatMasterVersion);\ #
sudo make modules_install install;\ #将驱动模块拷贝到/lib/modules/3.13.0-32-generic/ethercat/
sudo depmod;\ #检测模块的相依性,供modprobe在安装模块时使用。
sudo mv ../$(udevRulesFile) /etc/udev/rules.d/$(udevRulesFile);\ #修改设备操作权限。
sudo ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/ethercat;\ #ethercat加载服务文件
sudo mkdir -p /etc/sysconfig/;\
sudo cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/ethercat;\
sudo sed -i 's/DEVICE_MODULES=\"\"/DEVICE_MODULES=\"generic\"/g' /etc/sysconfig/ethercat;\
sudo ln -s /opt/etherlab/bin/ethercat /usr/bin/ethercat;\ #建立ethercat命令软连接
interfaces=`ifconfig | grep -e "^e[tn][a-z0-9]*" -o`;\ #获取网卡名称eth0
for i in $$interfaces;do lastInterface=$$i; done;\ #获取网卡名称对应MAC地址
interfaceMAC=`ifconfig $$lastInterface | grep "[0-9A-Fa-f]\{2\}:[0-9A-Fa-f]\{2\}:[0-9A-Fa-f]\{2\}:[0-9A-Fa-f]\{2\}:[0-9A-Fa-f]\{2\}:[0-9A-Fa-f]\{2\}" -o`;\
sudo sed -i "s/MASTER0_DEVICE=\"\"/MASTER0_DEVICE=\"$$interfaceMAC\"/g" /etc/sysconfig/ethercat;\ #查找字段MASTER0_DEVIC将MAC地址写入
ethercatMasterInstallWithAutoStart: ethercatMasterInstall
sudo update-rc.d ethercat defaults;\ #利用工具update-rc.d 添加系统开机启动,rc(1.2.3.4.5)
sudo /etc/init.d/ethercat start; #安装驱动文件
clean:
@echo Removing compiled installation files
@rm -f -r ethercat-$(ethercatMasterVersion) $(udevRulesFile)
四、相关操作
master 信息
root@positec:/# ethercat master
slave 信息
root@positec:/# ethercat slaves
列出 sdo
root@positec:/# ethercat sdos
读取 sdo
root@positec:/# ethercat upload 0x6000 0x01
写入 sdo
root@positec:/# ethercat download 0x6000 0x01 1 –type bool
五、说明
(1)主站代码运行在内核态,安装驱动后从站设备直接进入PREOP状态。
(2)编译完成后生成两个驱动文件,ec_master.ko完成主站控制逻辑,ec_generic.ko完成网络收发包驱动。
(3)目前EtherLab的最新版本1.5.2只支持到Linux4.0以下内核。
如果是单独安装驱动,遵循以下顺序:
root@positec:/#insmod ec_master.ko main_devices=00:0c:29:c7:76:62
root@positec:/#insmod ec_generic.ko