十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零开发 EtherCAT 主站(三):EtherCAT 状态机(ESM)完整解析,Init、Pre-OP、Safe-OP、OP 到底有什么区别?

从零开发 EtherCAT 主站(三):EtherCAT 状态机(ESM)完整解析,Init、Pre-OP、Safe-OP、OP 到底有什么区别? 从零开发 EtherCAT 主站三EtherCAT 状态机ESM完整解析Init、Pre-OP、Safe-OP、OP 到底有什么区别文章目录从零开发 EtherCAT 主站三EtherCAT 状态机ESM完整解析Init、Pre-OP、Safe-OP、OP 到底有什么区别一、前言二、为什么 EtherCAT 需要状态机三、EtherCAT 状态机有哪些状态四、INIT初始化状态五、PRE-OP预运行状态六、SAFE-OP安全运行状态七、OP正式运行状态八、四种状态区别总览九、状态切换是怎么完成的9.1 AL Control9.2 AL Status十、状态切换为什么可能失败10.1 PRE-OP → SAFE-OP 失败10.2 SAFE-OP → OP 失败十一、SOEM 中的典型启动流程为什么 OP 前必须先发送 PDO十二、异常情况下状态机如何变化十三、BOOTSTRAP特殊状态十四、如何快速判断 EtherCAT 卡在哪个状态情况一INIT → PRE-OP 失败情况二PRE-OP → SAFE-OP 失败情况三SAFE-OP → OP 失败十五、用一句话理解整个 ESM十六、总结系列文章导航写在最后一、前言在上一篇文章中我们从 EtherCAT Frame、Datagram、ESC、FMMU、On-The-Fly 和 WKC 等概念入手分析了 EtherCAT 为什么能够实现高效的实时通信。但实际开发主站时你会很快遇到一个问题为什么从站明明已经连接上了却不能直接进行 PDO 通信SOEM 扫描设备后你可能会看到Slave 1 State: PRE-OP Slave 2 State: PRE-OP Slave 3 State: PRE-OP而我们最终希望看到的是所有从站都进入OP状态。从PRE-OP到OP并不是简单修改一个变量而是主站与从站之间按照规定的状态机逐步完成初始化、参数配置和通信准备的过程。这个状态机就是EtherCAT State Machine简称 ESM。无论是 SOEM 初始化、PDO 配置、SDO 参数读写、FoE 固件升级还是从站异常恢复都会不断与 ESM 打交道。本文就把 EtherCAT 从站的状态机彻底讲清楚。二、为什么 EtherCAT 需要状态机从站上电后尚未完成 EtherCAT 初始化、PDO 配置、SyncManager 配置、FMMU 配置、DC 配置和应用层初始化。如果此时主站直接发送 Process Data从站根本不知道这些数据应该如何处理。因此 EtherCAT 必须定义一套统一的启动流程上电 → 初始化 → 配置 → 准备通信 → 正式运行ESM 主要解决三个问题明确当前从站处于什么阶段规定当前状态允许进行什么操作规定状态切换需要满足什么条件三、EtherCAT 状态机有哪些状态EtherCAT 最核心的四个状态是INIT → PRE-OP → SAFE-OP → OP状态全称主要作用INITInitialization初始化PRE-OPPre-Operational预运行配置阶段SAFE-OPSafe Operational安全运行OPOperational正式运行另外还有一个特殊状态BOOTSTRAP主要用于从站固件升级FoE后面会单独介绍。四、INIT初始化状态INIT是从站上电后最先进入的状态表示“已接入 EtherCAT 网络但尚未准备好进行正常通信”。此阶段主站主要确认从站是否存在从站身份信息ESC 是否正常从站是否能够正常响应INIT 阶段能做什么可以不可以访问 ESC 寄存器正常 PDO 通信读取基本信息正常运行配置基础参数五、PRE-OP预运行状态从站完成基本初始化后主站让其进入PRE-OPPre-Operational。这是一个重要的配置阶段表示“设备已准备好现在开始告诉我应该怎么工作”。PRE-OP 最重要的功能Mailbox 通信在 PRE-OP 状态下主站可以进行大量非周期通信SDO 读写对象字典CoE 配置FoE 固件传输准备PDO 映射配置修改设备参数PRE-OP 阶段 Process Data 通道尚未完全配置完成PDO 实时通信还未正式开始因此这个阶段更像是“设备配置阶段”。六、SAFE-OP安全运行状态完成基本配置后从站进入SAFE-OPSafe Operational。SAFE-OP 的核心特点从站可以接收并更新 Process Data但不会真正执行输出动作。例如伺服驱动器✅ 可以收到 Target Position✅ 可以反馈 Actual Position❌ 电机不会真正转动输出处于安全状态这样做的目的是防止设备还没完全准备好时电机突然动作。七、OP正式运行状态OPOperational是正常运行状态。当从站进入 OP 后实时 Process Data 正式运行伺服系统可以执行位置/速度/力矩控制形成完整的实时控制闭环主站发送从站返回Control WordStatus WordTarget PositionActual PositionTarget VelocityActual VelocityTarget TorqueActual Torque八、四种状态区别总览状态MailboxSDOPDO设备正常运行INIT××××PRE-OP√√××SAFE-OP√√√×OP√√√√一句话记忆INIT 是初始化PRE-OP 是配置SAFE-OP 是准备运行OP 才是真正运行。九、状态切换是怎么完成的状态切换由主站发起从站检查条件后决定是否接受。9.1 AL Control主站通过AL Control Register向从站发送状态请求例如请求INIT → PRE-OP。9.2 AL Status从站通过AL Status Register反馈当前状态。主站读取后即可确认从站是否成功进入目标状态。十、状态切换为什么可能失败10.1 PRE-OP → SAFE-OP 失败通常需要完成PDO 配置SyncManager 配置FMMU 配置必要参数配置从站内部初始化以上任何一项配置错误都会导致切换失败。10.2 SAFE-OP → OP 失败这一阶段要求更高通常需要Process Data 配置正确PDO 映射正确WKC 正常从站应用层准备完成必要同步机制准备完成这也是实际调试 EtherCAT 时最常遇到的问题之一。十一、SOEM 中的典型启动流程一个典型的 SOEM 主站初始化流程可以抽象为打开网卡 → ec_init() → 扫描从站 → ec_config_init() ↓ INIT → PRE-OP → 配置 PDO → 配置 FMMU/SyncManager ↓ SAFE-OP → 发送 Process Data → 检查 WKC → OP为什么 OP 前必须先发送 PDO很多初学者会直接写ec_slave[0].stateEC_STATE_OPERATIONAL;ec_writestate(0);然后发现从站无法进入 OP。原因之一是主站需要先让从站看到有效的 Process Data 通信。典型 SOEM 流程中会先调用ec_send_processdata();ec_receive_processdata(EC_TIMEOUTRET);之后再请求 OP从站才更容易正常进入。十二、异常情况下状态机如何变化假设设备已正常运行OP突然网线断开主站检测到 WKC 异常从站状态可能回退到SAFE-OP甚至INIT。主站此时不能简单地认为“通信失败了重新发送一次就行”而是需要检测异常 → 读取 Slave State → 判断异常原因 ↓ 重新配置 / 恢复 → SAFE-OP → OP这就是后续会讲到的Lost Slave Recovery从站恢复机制。十三、BOOTSTRAP特殊状态BOOTSTRAP主要用于从站固件升级OP → INIT → BOOTSTRAP → FoE → Firmware Update在 Bootstrap 状态下从站开放专门的固件升级功能如 FoE与正常运行的 OP 是两条不同的工作路径。十四、如何快速判断 EtherCAT 卡在哪个状态情况一INIT → PRE-OP 失败重点检查EtherCAT 网卡物理链路ESC从站是否正常响应情况二PRE-OP → SAFE-OP 失败重点检查PDO MappingSyncManagerFMMUESI 配置从站参数情况三SAFE-OP → OP 失败重点检查PDO 数据WKCExpected WKC vs Actual WKCProcess DataDC 同步从站应用层十五、用一句话理解整个 ESMINIT → “我是谁” PRE-OP → “告诉我怎么工作。” SAFE-OP → “我已经准备好了但先别让我真正动作。” OP → “开始正常工作。”十六、总结状态核心功能INIT基础初始化、设备识别PRE-OPMailbox 通信、设备参数和 PDO 配置SAFE-OPProcess Data 准备和交换设备处于安全状态OP正常运行实时 PDO 通信BOOTSTRAPFoE 固件升级整个正常启动流程就是INIT → PRE-OP → SAFE-OP → OP一个真正的 EtherCAT 主站本质上就是不断完成配置从站 → 控制状态 → 交换 Process Data → 监控 WKC → 发现异常 → 恢复从站理解了这个过程之后再去看 SOEM 的初始化代码就不会觉得ec_init()、ec_config_init()、ec_statecheck()这些函数杂乱无章了。系列文章导航章节标题状态第一篇EtherCAT 为什么能成为工业实时通信的主流✔第二篇EtherCAT 通信原理详解✔第三篇EtherCAT 状态机ESM完整解析✔第四篇PDO、Mailbox、CoE、FoE 到底是什么待更新第五篇SOEM 框架源码解析待更新写在最后到这里我们已经把 EtherCAT 的三层核心知识串起来了第一篇为什么 EtherCAT 快 第二篇EtherCAT 是怎么通信的 第三篇从站是怎么一步一步进入 OP 的接下来将真正进入 EtherCAT 通信数据层PDO、Mailbox、CoE含 SDO、FoE理解这一层之后我们就可以正式开始写 SOEM 主站的核心功能了。
返回列表