当前位置: 首页 > news >正文

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 数据结构版本号。
http://www.lryc.cn/news/596005.html

相关文章:

  • ZooKeeper学习专栏(五):Java客户端开发(原生API)详解
  • 小米视觉算法面试30问全景精解
  • Linux--指令初识
  • RxSwift 核心解析
  • 鸿蒙ArkTS多环境API管理与安全签名方案实践
  • 【React-Three-Fiber实践】放弃Shader!用顶点颜色实现高性能3D可视化
  • 学习做精准、自动化、高效的 GEO优化系统
  • 水电站自动化升级:Modbus TCP与DeviceNet的跨协议协同应用
  • 使用Minio后处理图片回显问题
  • 2025乐彩V8影视系统技术解析:双端原生架构与双H5免签封装实战 双端原生+双H5免签封装+TV级性能优化,一套代码打通全终端生态
  • TDengine 计算百分位函数使用手册
  • 【LINUX】Centos 9使用nmcli更改IP
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人
  • 基于FastMCP创建MCP服务器的小白级教程
  • libgmp库(GNU高精度算术库)介绍
  • Elasticsearch 学习笔记
  • Doxygen生成接口文档
  • Hadoop调度器深度解析:FairScheduler与CapacityScheduler的优化策略
  • 运维实战:100条常用SQL语句,涵盖基础查询、数据操作、表管理、索引视图、连接查询、子查询、日期处理、字符串操作等核心操作,建议收藏!
  • Android常用的adb和logcat命令
  • DOM/事件高级
  • ZooKeeper学习专栏(六):集群模式部署与解析
  • Java中内存屏障在volatile和sychronized的应用
  • Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制
  • 【Go语言-Day 23】接口的进阶之道:空接口、类型断言与 Type Switch 详解
  • TTL+日志的MDC实现简易链路追踪
  • 【从0-1的JavaScript】第2篇:JS对象的创建、使用已经内置对象
  • 操作系统 —— A / 概述
  • API网关原理与使用场景详解
  • Android AppCompat:实现Material Design向后兼容的终极指南