Linux下的EtherCAT主站环境搭建和通信测试
一:SOEM主站环境搭建
1.SOEM主站源码拉取
git clone https://github.com/OpenEtherCATsociety/SOEM.git
出现下图就说明拉取成功了
2.环境变量配置
先建立buid构建文件夹,输入下面的指令
mkdir -p build && cd build
此时会进入到build文件夹下,然后需要安装一下cmake,因为SOEM主站是由cmake构建的。输入下面的指令安装cmake
sudo apt install cmake
出现下这个就代表已经安装成功了。
然后就是最关键的环境变量的配置。
输入下面的指令。
cmake .. \-DCMAKE_C_COMPILER="/home/meetyoo/t113/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-gcc" \-DCMAKE_CXX_COMPILER="/home/meetyoo/t113/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-g++" \-DCMAKE_SYSTEM_NAME=Linux \-DCMAKE_SYSTEM_PROCESSOR=arm \
在这里需要注意,路径和编译器要修改为自己的。
出现下图就代表配置成功了。
3.编译SOEM
直接make就行,出现下面的图片就代表编译成功了。
4.测试可执行文件
先用adb发送到自己的板子,adb push test ...一下
然后进入下面的文件下
cd test/linux/simple_test/
该文件下有一个测试文件
输入./测试一下,会出现下面的界面
这个时候挑选自己的网口就行
./simple_test eth0
这个时候就会出现下面的内容,就代表成功了,我没有接从站,所以就显示找到。
二:主从站通信测试
在进行测试前确保主从站已经连接,且主站网口能正常开启!!!
1.EtherCAT从站信息获取
还是进入到测试demo的目录下,cd slaveinfo/进入目录下。
执行下面这条指令
./slaveinfo eth0
执行完之后就能看见从站的配置信息。
2. 信息解读:
1. 整体环境与主站初始化
SOEM (Simple Open EtherCAT Master)
:明确工具基于 SOEM 库,用于操作 EtherCAT 主站。ec_init on eth0 succeeded.
:主站在网口eth0
初始化成功,EtherCAT 通信链路已建立。1 slaves found and configured.
:扫描到 1 个从站设备,且完成配置(主站与从站完成数据交互、参数协商 )。Calculated workcounter 3
:工作计数器(WKC)值为 3,用于校验数据完整性,稳定非零值说明通信正常(无丢包、CRC 错误 )。
2. 从站(Slave:1)核心参数
基本标识:
Name:SSC-Device
:从站名称(通常是设备固件定义,这里是 “SSC 设备”,SSC 是 EtherCAT 从站协议栈常见实现 )。State: 4
:从站状态码,4
一般对应 OP(Operation,运行)状态,说明从站已就绪、可正常交互过程数据。Has DC: 1
:支持 分布式时钟(DC),用于 EtherCAT 多从站高精度同步。
IO 数据尺寸:
Output size: 16bits
:主站→从站的输出数据区大小(16 位,即 2 字节,主站发控制指令、设定值的区域 )。Input size: 48bits
:从站→主站的输入数据区大小(48 位,即 6 字节,从站反馈状态、传感器数据的区域 )。
内存映射(SM、FMMU):
SM0~SM3
(Sync Manager,同步管理器 ):定义从站内存区与主站的数据交互规则(地址A:
、长度L:
、功能Type
等 ),比如SM2 A:1100 L: 2
代表 2 字节的输出数据区,SM3 A:1400 L: 6
代表 6 字节的输入数据区。FMMU0~FMMU1
(Fieldbus Memory Management Unit,现场总线内存管理单元 ):映射从站本地内存到 EtherCAT 逻辑地址,实现主站对从站数据的 “直接访问”,Ls
(本地地址)、Ps
(过程数据地址) 定义了映射关系。
其他协议支持:
CoE details: 23
:支持 CoE(CAN over EtherCAT),可通过对象字典配置从站参数(类似 CANopen 的对象字典机制 )。Ebus current: 0[mA]
:从站总线电流消耗
3.数据采集测试
还是返回到linux目录下,cd simple_test/目录下
指向下面的指令进行测试
./simple_test eth0
这个时候会出现如下信息。
4.信息解读
1. 固定前缀与循环计数
Processdata cycle
是 “过程数据循环” 的标识,5313
/5314
… 是循环计数,代表 EtherCAT 主站周期性读取从站数据的轮次,体现通信的实时性(主站以固定周期与从站交互数据)。
2. WKC(Working Counter)
WKC 3
是工作计数器,用于校验数据完整性:主站发送指令后,从站返回有效数据时 WKC 会递增 。这里稳定为 3
,说明数据交互流程正常(无丢包、无 CRC 校验错误等)。
3. 寄存器 / 数据段(O:、I:)
O: 00 00
:通常是 主站→从站的输出数据(Output),十六进制形式,代表主站发给从站的控制指令 / 设定值(比如控制电机启停、调速的参数)。I: 00 00 00 80
或I: 00 00 00 00
:是 从站→主站的输入数据(Input),同样是十六进制,代表从站反馈的状态(比如传感器数值、设备运行状态位)。其中80
这类非零值,可能对应特定功能的 “状态标志位”(比如某一路开关量输入为高电平)。
4. 轴 / 通道标识(f3 0d、f4 0d)
f3 0d
/f4 0d
是 从站设备的逻辑地址或通道编码,不同的 f3
/f4
可能对应不同轴、不同模块(比如机器人的多个关节、产线的多组传感器),用于区分数据所属的物理通道。
5. 时间戳(T: 33482827161844238…)
T:
后是时间戳(一般是主站的高精度计时),记录数据交互的精确时刻,用于分析通信延迟、同步多设备时序。
简单说,这是 EtherCAT 总线里 “主站周期性读写从站 IO 数据” 的实时日志,能帮调试:
- 看
WKC
是否稳定,判断通信是否丢包; - 分析
I:/O:
的数值变化,验证控制指令是否下发、设备状态是否正确反馈; - 结合
cycle
计数和时间戳,排查实时性问题(比如周期是否漂移) 。
如果是调试阶段,重点关注I:/O:
的数值是否符合预期功能(比如发指令后O:
变化、设备动作后I:
反馈对应标志位)。
三:SOEM的eeprom tool工具使用
eepromtool
是 SOEM 提供的命令行工具,专门用于读写、配置 EtherCAT 从站设备的 EEPROM 数据。
1.指令信息解读
还是进入到linux目录下,cd eepromtool/进入到该目录下。执行下面的指令
./eepromtool
会出现如下信息
ifname
:EtherCAT 主站绑定的网口,如eth0
。slave
:从站编号(EtherCAT 网络中从站的顺序,1..n
,比如第 1 个从站填1
)。OPTION
:操作选项,常用功能:-i
:显示 EEPROM 信息(读取并打印从站 EEPROM 里的设备标识、参数摘要 )。-walias
:写入从站别名(给从站设置 Alias,方便主站通过别名而非编号寻址 )。-r
/-ri
:读取 EEPROM(-r
输出二进制,-ri
输出 Intel Hex 格式,用于备份数据 )。-w
/-wi
:写入 EEPROM(-w
用二进制文件写入,-wi
用 Intel Hex 文件写入,用于烧录参数 )。
2.从站EEPROM数据读取测试
输入下面的指令
./eepromtool eth0 1 -i
会打印如下信息
3.信息解读
1. 基本通信与从站发现
ec_init on eth0 succeeded.
:主站在网口eth0
初始化成功,与 EtherCAT 网络建立通信。1 slaves found.
:网络中检测到 1 个从站设备(编号为 1)。
2. 从站 EEPROM 核心参数
PDI(Process Data Interface)控制与配置
PDI Control : 0E05
PDI 控制寄存器值,用于配置过程数据接口的工作模式(如数据交换方式、同步机制)。PDI Config : 4403
PDI 配置寄存器值,定义过程数据的结构(如输入 / 输出数据长度、分布)。
从站寻址与校验
Config Alias : 0000
从站别名(Alias),当前未设置(值为 0)。别名可简化主站对从站的寻址(替代默认编号)。Checksum : 0052
calculated : 0052
EEPROM 校验和(CRC),用于验证 EEPROM 数据完整性。当前值与计算值一致,说明数据未损坏。
设备标识
Vendor ID : 00000009
厂商 ID,00000009
对应 Beckhoff Automation(倍福自动化,EtherCAT 技术的主要推动者)。Product Code : 26483052
产品代码(16 进制0x194806C
),标识具体设备型号(需查厂商文档确认)。Revision Number : 00020111
设备版本号(可能表示硬件 / 固件版本)。Serial Number : 00000000
序列号,当前为 0(可能设备未设置或未启用序列号功能)。
邮箱与内存配置
Mailbox Protocol : 0004
邮箱协议支持位(0x04
),通常表示支持 CoE(CAN over EtherCAT) 协议(用于参数配置)。Size : 000F = 2048 bytes
EEPROM 大小为 2048 字节(0x000F
表示 16 进制的 15,对应 2^11 = 2048 字节)。Version : 0001
EEPROM 数据结构版本号。