软PLC的EtherCAT主站配置
本指南旨在通过纯文字步骤,指导完成在软PLC系统中搭建EtherCAT主站的全过程,涵盖硬件准备、软件安装、从站扫描及PDO映射配置。
一、 硬件与网络环境准备
在开始配置前,必须确保物理连接正确且操作系统已识别网卡。
-
检查网口兼容性。
确认工控机或软PLC控制器上的网卡芯片支持EtherCAT。绝大多数Intel Realtek千兆网卡均可通用,但某些板载Realtek网卡可能需要特定驱动。 -
连接硬件线路。
使用EtherCAT专用网线,将主站网口(Port)连接到从站设备的In口。若为多设备串联,请依次连接从站的Out口至下一台设备的In口,末端从站的Out口通常需要接入终端电阻或不接。 -
记录物理拓扑。
在纸上简单画出连接顺序,标记每台从站的物理站号(通常设备外壳上有拨码开关或默认站号显示),配置时需核对顺序是否一致。
二、 安装EtherCAT主站软件
以下步骤以常用的Linux环境下的IGH EtherCAT Master为例,Windows环境下的CODESYS或TwinCAT逻辑类似,但操作界面不同。
-
获取主站源码。
打开终端,使用Git命令克隆官方源码库。git clone https://gitlab.com/etherlab.org/ethercat.git -
编译并安装主站。
进入源码目录,执行配置、编译和安装命令。--with-modules参数表示构建内核模块。cd ethercat ./configure --with-modules --prefix=/opt/ethercat make sudo make install -
加载内核模块。
使用modprobe命令加载主站模块。此时,绑定了EtherCAT驱动的网口将不再拥有IP地址。sudo modprobe ec_master -
配置网卡绑定。
创建或编辑/etc/sysconfig/ethercat文件,将MASTER0_DEVICE变量设置为主网卡的MAC地址。使用ifconfig命令查看MAC地址。# 示例配置文件内容 MASTER0_DEVICE="00:0c:29:12:34:56"
三、 扫描网络并识别从站
系统启动主站后,首要任务是扫描总线上的所有从站设备。
-
启动主站服务。
执行以下命令启动EtherCAT主站。sudo /etc/init.d/ethercat start -
查询从站列表。
使用命令行工具查看总线上的设备状态。如果硬件连接正确,你将看到所有从站的列表。sudo /opt/ethercat/bin/ethercat slaves输出结果应显示从站的序号(Position)、厂商名称和产品名称。如果输出为空,请检查网线连接或网卡驱动。
-
生成ESI描述文件。
若从站设备未提供XML格式的ESI(EtherCAT Slave Information)文件,需使用工具读取从站内部信息并生成。通常使用ethercat xml命令。sudo /opt/ethercat/bin/ethercat xml > my_slave.xml将生成的
my_slave.xml文件放置到主站的配置目录中(通常为/etc/ethercat/)。
四、 配置过程数据对象(PDO)映射
这是配置的核心环节,决定了主站与从站交换哪些数据(如控制字、状态字、位置值、速度值等)。
-
查看默认PDO配置。
使用ethercat pdos命令查看当前从站支持的所有PDO条目。sudo /opt/ethercat/bin/ethercat pdos -
分析通信需求。
确定你的应用需要的数据。例如,控制一个伺服驱动器通常需要:- 输出(RX PDO):控制字、模式、目标位置。
- 输入(TX PDO):状态字、实际位置、实际电流。
-
编写配置脚本。
通常需要编写一个C文件或主站配置文件来定义映射。以下展示一个配置逻辑的伪代码结构,用于设置PDO映射。// 配置输出PDO (RX PDO) ecrt_slave_config_pdos(slave_config, EC_DIR_OUTPUT, 0x1600); // 添加控制字 ecrt_slave_config_pdo_mapping_add(slave_config, EC_DIR_OUTPUT, 0x1600, 0x6040, 0x00, 16); // 索引0x6040,子索引0x00,位宽16bit // 配置输入PDO (TX PDO) ecrt_slave_config_pdos(slave_config, EC_DIR_INPUT, 0x1A00); // 添加状态字 ecrt_slave_config_pdo_mapping_add(slave_config, EC_DIR_INPUT, 0x1A00, 0x6041, 0x00, 16); // 索引0x6041,子索引0x00,位宽16bit -
注册PDO域。
为了统一管理数据,需将所有从站的PDO条目注册到一个或多个“域”中。建议将所有输入数据注册到一个域,所有输出数据注册到另一个域。// 注册输入域 domain_in = ecrt_master_create_domain(master); // 注册输出域 domain_out = ecrt_master_create_domain(master); // 将具体的PDO条目注册到域中 ecrt_domain_reg_pdo_entry_list(domain_in, domain_in_regs); ecrt_domain_reg_pdo_entry_list(domain_out, domain_out_regs);
五、 数据周期交换配置
在软PLC的应用层代码中,需要建立周期性任务来处理数据交换。以下为 EtherCAT 运行的标准数据流逻辑。
为了确保代码逻辑清晰,使用流程图描述主站运行时的数据交换状态机:
-
创建周期性任务。
在主程序中创建一个高优先级线程,例如使用pthread并设置调度策略为SCHED_FIFO。pthread_create(&thread, NULL, cyclic_task, NULL); -
设置循环周期。
在线程循环中,计算唤醒时间。EtherCAT的标准周期通常为 $1ms$(即 $1000 \mu s$)。// 计算下一个唤醒时间点 ret = clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &wakeup_time, NULL); -
执行数据接收与发送。
在每个周期内,必须严格按照“先接收,后发送,再应用”的顺序处理。- 接收数据:
ecrt_master_receive(master);和ecrt_domain_process(domain_in); - 处理数据:将原始数据帧转换为实际物理量。
- 发送数据:
ecrt_domain_queue(domain_out);和ecrt_master_send(master);
- 接收数据:
-
检查工作计数器。
为了确保数据真正到达从站,必须检查工作计数器。若 WKC 与预期不符,说明通信丢包或从站掉线。if (ecrt_domain_process(domain_in)) { // 错误处理 }
六、 常见参数配置表
在配置伺服驱动器或IO模块时,以下表格列出了常用的 EtherCAT 状态机控制字(Control Word)位定义,供调试参考。
| 位 (Bit) | 名称 | 功能描述 | 常用值 (16进制) |
|---|---|---|---|
| 0 | Switch On | 接通主电路电源 | 0x0006 (准备就绪) <br> 0x0007 (使能开启) |
| 1 | Enable Voltage | 激活电压 | 0x0007 |
| 2 | Quick Stop | 快速停止位 (1为正常) | 0x0007 |
| 3 | Enable Operation | 使能操作 (运行) | 0x000F |
| 7 | Fault Reset | 故障复位 (脉冲置0) | 0x0000 -> 0x000F |
在配置从站状态机切换时,通常遵循以下状态顺序:Init -> PreOp -> SafeOp -> Op。在软PLC代码中,需通过配置 ecrt_slave_config_state() 函数或在系统启动脚本中自动切换这些状态。

暂无评论,快来抢沙发吧!