软件环境搭建:主站软件安装、从站配置工具使用、开发环境配置
EtherCAT调试的第一步,往往不是接线,而是把软件环境理顺。很多初学者在拿到从站板卡后,第一反应是“先跑个例程看看”,结果卡在驱动装不上、主站扫描不到设备、XML文件报错等基础问题上。本节将围绕主站软件安装、从站配置工具使用、开发环境配置三个层面,梳理一套可复用的搭建流程,并指出常见误区。
4.1 主站软件安装:分清“实时补丁”与“用户态库”
EtherCAT主站软件在Linux下最常用的是开源的IgH EtherCAT Master(简称IgH),它分为两个部分:内核模块(ec_master.ko)和用户态库(libethercat)。安装时最容易犯的错误是:只编译了用户态库,却没有加载内核模块,导致调用 ecrt_request_master() 时返回“No such device”。
安装IgH主站的标准流程如下:
# 1. 下载源码并解压
tar -xzf ethercat-1.5.2.tar.gz
cd ethercat-1.5.2
# 2. 配置(注意:必须指定主站网卡MAC地址)
./configure --prefix=/opt/ethercat \
--enable-generic \
--with-linux-dir=/usr/src/linux-headers-$(uname -r) \
--with-mac=00:11:22:33:44:55
# 3. 编译并安装
make
sudo make install
# 4. 加载内核模块
sudo modprobe ec_master
# 5. 验证主站是否识别
dmesg | grep -i ethercat
# 应看到类似:EtherCAT Master 1.5.2 started
安装完成后,还需要设置运行环境变量,否则用户态程序找不到主站设备节点:
export PATH=/opt/ethercat/sbin:$PATH
export LD_LIBRARY_PATH=/opt/ethercat/lib:$LD_LIBRARY_PATH
# 建议写入 ~/.bashrc 永久生效
4.2 从站配置工具:XML文件与SII烧录
每个EtherCAT从站都有一个从站信息接口(SII),通常是一颗EEPROM,存储着从站的厂商ID、产品码、对象字典描述等。调试时,主站通过读取SII内容来识别从站类型。如果SII内容为空或损坏,主站扫描时会显示“Unknown slave”或“Slave not responding”。
常用的从站配置工具包括:
- SSC(Slave Stack Code)工具:用于生成从站固件源码和EEPROM配置文件(.xml或.bin)。
- ESI文件(EtherCAT Slave Information):由从站厂商提供,描述从站支持的对象字典、PDO映射、同步模式等。主站通过加载ESI文件来正确配置从站。
- EEPROM烧录工具:如TwinCAT的“EtherCAT Slave”界面,或IgH自带的
ethercat ee_read/ethercat ee_write命令。
在IgH主站下,查看从站信息最直接的方式是:
# 列出总线上所有从站
ethercat slaves
# 输出示例:
# 0 0:0 PREOP + 0x00000001 Beckhoff Automation GmbH EL2008
# 1 0:1 PREOP + 0x00000002 Beckhoff Automation GmbH EL1008
# 查看从站0的详细SII信息
ethercat sii -p 0
如果从站显示为“Unknown”,通常需要手动加载ESI文件。在IgH中,ESI文件放在 /opt/ethercat/etc/ 目录下,并在主站启动时通过 ethercat.conf 指定:
# /opt/ethercat/etc/ethercat.conf
MASTER0_DEVICE="00:11:22:33:44:55"
MASTER0_SLAVE_INFO="/opt/ethercat/etc/slave/我的从站.xml"
ethercat xml 命令导出当前总线的完整拓扑和从站配置,保存为XML文件。这样即使后续更换主站电脑,也能快速恢复环境。
4.3 开发环境配置:从“能跑”到“可调试”
开发环境的核心是应用层代码与主站库的链接。IgH提供两种开发模式:
- 直接调用用户态库(libethercat):适合快速原型验证,但实时性较差。
- 内核态模块开发:适合对实时性要求高的运动控制场景,但调试难度大。
对于初学者,推荐先用用户态库跑通周期通信,再逐步迁移到内核态。一个最小用户态程序的结构如下:
#include <ecrt.h>
static ec_master_t *master = NULL;
static ec_domain_t *domain = NULL;
int main(void) {
master = ecrt_request_master(0);
if (!master) { perror("Failed to request master"); return -1; }
domain = ecrt_master_create_domain(master);
if (!domain) { perror("Failed to create domain"); return -1; }
// 添加从站配置(以位置0的从站为例)
ec_slave_config_t *sc = ecrt_master_slave_config(
master, 0, 0, 0x00000001, 0x00000002);
if (!sc) { perror("Failed to configure slave"); return -1; }
// 配置PDO映射(此处省略具体映射)
// ecrt_slave_config_pdos(sc, ...);
// 激活主站
if (ecrt_master_activate(master) < 0) { perror("Activate failed"); return -1; }
// 周期运行循环
while (1) {
ecrt_master_send(master);
ecrt_master_receive(master);
// 处理过程数据...
usleep(1000); // 1ms周期
}
return 0;
}
编译时,需要链接IgH的用户态库:
gcc -o my_app my_app.c -I/opt/ethercat/include -L/opt/ethercat/lib -lethercat -lpthread
开发环境配置中,还有一个容易被忽略的点:网卡驱动与实时补丁。如果使用PREEMPT_RT内核,建议将主站网卡驱动编译为模块,并设置中断亲和性,避免网卡中断与其他实时任务争抢CPU。
4.4 案例:从零搭建一套EtherCAT调试环境
下面以一个实际案例说明完整流程。假设我们有一块汇川IS620N伺服驱动器作为从站,主站为Ubuntu 20.04 + IgH 1.5.2。
| 步骤 | 操作 | 验证方法 |
|---|---|---|
| 1 | 安装IgH主站,配置网卡MAC | dmesg | grep EtherCAT 显示主站启动 |
| 2 | 将伺服驱动器的ESI文件(IS620N.xml)放入 /opt/ethercat/etc/slave/ | ethercat slaves 能识别出“Inovance IS620N” |
| 3 | 用 ethercat upload 读取从站对象字典,确认通信正常 | 能读到0x1000等对象 |
| 4 | 编写用户态程序,配置PDO映射(控制字、状态字、目标速度) | 程序能周期性发送控制字,伺服使能后无报错 |
| 5 | 用 ethercat debug 查看实时帧计数 | 帧计数持续增长,无丢帧 |
在步骤2中,如果ESI文件版本与固件不匹配,可能会出现“PDO映射不匹配”的警告。此时需要核对从站固件版本,并从厂商官网下载对应的ESI文件。
4.5 误区与复盘:环境搭建中的“隐形杀手”
根据大量调试经验,环境搭建阶段最常见的坑有以下几类:
- 网卡选择错误:IgH默认使用第一个网卡,如果电脑有多个网卡(如板载+USB网卡),必须用
--with-mac明确指定,否则主站会绑定到错误的网卡上。 - 权限不足:运行
ethercat命令需要root权限,或者将用户加入root组并设置udev规则。否则会出现“Operation not permitted”。 - XML文件路径错误:IgH在启动时读取
ethercat.conf中的路径,如果路径写错,主站会静默忽略,导致从站无法识别。 - 实时性不足:如果只是普通内核,周期抖动可能达到几百微秒,导致伺服运行不平稳。建议使用PREEMPT_RT内核,并将主站进程设置为SCHED_FIFO调度策略。