news 2026/4/14 0:34:01

EtherCAT PDO 映射概述:从“是什么”到“怎么配”,一次讲透

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
EtherCAT PDO 映射概述:从“是什么”到“怎么配”,一次讲透

很多人第一次接触 EtherCAT,会有一种困惑:
主站明明在“周期性收发过程数据”,但从站内部那么多变量,它到底是怎么知道要收哪些、发哪些?这些数据又是怎么摆进一帧 EtherCAT 报文里的?
答案就藏在三个关键词里:对象字典(OD)、PDO、映射(Mapping)。
你可以把 EtherCAT(CoE 模式)理解成:

  • 从站内部有一本“数据目录”(OD),每个数据都有地址(Index/SubIndex)
  • 主站周期要用的数据,先“挑选出来”组成 PDO
  • “挑选与排队”,就叫 PDO Mapping(PDO 映射)

1. 先建立直觉:PDO 映射到底在做什么?

1.1 两条“数据通道”:Mailbox vs Process Data

在 EtherCAT 里,从站数据交互常见分两类:

  • Mailbox(邮箱通讯):像“写邮件” 用于参数配置、诊断、非实时数据(例如 SDO 读写对象字典)
  • Process Data(过程数据):像“流水线传送带” 用于实时周期数据(IO、控制字、目标值、传感器采样等)
    PDO 就是过程数据的“承载方式”。
    它的目标很明确:把周期性要传的变量打包成一段紧凑的字节流,每个周期都按同样的布局收发。
    一句话直觉:
    PDO 映射 = “选哪些变量 + 按什么顺序 + 每个变量占多少位”

2. 对象字典 OD:一切映射的“变量来源”

在 CoE(CANopen over EtherCAT)里,从站内部变量统一挂在 对象字典(Object Dictionary, OD) 上。
每个对象由:

  • Index:16 位(如 0x7000)
  • SubIndex:8 位(如 0x7000:01)
  • 数据类型/位宽:如 UINT16、UINT32、BOOL 等

你可以把 OD 想象成一个“地址化的变量表”,主站通过 SDO 可以读写它;而 PDO 映射就是从 OD 里“挑变量装箱”。

3. PDO 相关对象:0x1600、0x1A00、0x1C12、0x1C13 是什么关系?

3.1 RxPDO 与 TxPDO:方向先别搞反

RxPDO(Receive PDO):主站 → 从站(从站“接收”)
通常是控制命令、输出量(比如 DO、目标电流/亮度)

TxPDO(Transmit PDO):从站 → 主站(从站“发送”)
通常是状态量、输入量(比如 DI、采样值、状态字)

3.2 0x1600 / 0x1A00:映射表本体(Mapping Object)

0x1600 ~ 0x17FF:RxPDO Mapping 对象

0x1A00 ~ 0x1BFF:TxPDO Mapping 对象

每个映射对象(比如 0x1600)本质是一个 RECORD:

SubIndex 0(0x1600:00):映射条目数(entry count)

SubIndex 1…n(0x1600:01…n):每一条映射内容(每条通常用 32bit 表示)

32bit 映射条目长什么样?

经典格式(也最常用)是:

映射条目=(Index<<16)|(SubIndex<<8)|(BitLength)

举例:把 0x7000:01 的 UINT16 映射进去

Index = 0x7000

SubIndex = 0x01

BitLength = 16 (0x10)

那么条目值就是:

0x70000110=>0x70000110

再比如 0x7000:02 的 UINT16:

0x70000210=>0x70000210

3.3 0x1C12 / 0x1C13:把“映射表”挂到 SyncManager 上

你可能会问:
“我定义了很多个映射对象(0x1600、0x1601…),到底哪个会生效?谁来决定主站周期数据用哪一套映射?”
答案是:SM Assignment(同步管理器分配对象)

  • 0x1C12:SyncManager 2 Assignment(通常用于 RxPDO)
  • 0x1C13:SyncManager 3 Assignment(通常用于 TxPDO)

它们的结构也类似:

  • SubIndex 0:挂载数量(用了几个映射对象)
  • SubIndex 1…n:分别写入映射对象的 Index(如 0x1600、0x1601…)

你可以把它理解成“插排”:

  • 0x1600/0x1A00 是“插头”(具体映射内容)
  • 0x1C12/0x1C13 是“插排”(决定插哪些插头生效)

4. 把四类对象串起来

OD 变量区(比如0x70000x6000...) │ │(挑选变量、规定顺序和位宽) ▼ PDO Mapping 对象 Rx:0x1600~0x17FFTx:0x1A00~0x1BFF│ │(把哪些映射对象“挂载启用”) ▼ SM Assignment 对象0x1C12(SM2)->选择 RxPDO 映射(0x1600/0x1601/…)0x1C13(SM3)->选择 TxPDO 映射(0x1A00/0x1A01/…) │ │(最终对应到 ESC 的 Process RAM 布局) ▼ 过程数据(Process Data)在 EtherCAT 帧中按固定布局周期交换

5.实战

假设你的从站对象字典有:

  • 0x7000:01 UINT16 OUT_STATE
  • 0x7000:02 UINT16 DA_VALUE

你希望主站每周期下发 4 字节:

  • 前 2 字节 OUT_STATE
  • 后 2 字节 DA_VALUE

5.1 配置 0x1600(RxPDO Mapping)

写条目:

  • 0x1600:01 = 0x70000110
  • 0x1600:02 = 0x70000210

5.2 配置 0x1C12(SM2 Assignment)

挂载映射对象:
0x1C12:01 = 0x1600

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 5:08:30

Qwen2.5-1.5B惊艳对话效果集:10轮连续提问+上下文精准引用真实案例

Qwen2.5-1.5B惊艳对话效果集&#xff1a;10轮连续提问上下文精准引用真实案例 1. 为什么轻量级本地对话助手正在成为刚需 你有没有过这样的经历&#xff1a;想快速查一个Python报错原因&#xff0c;却不想把代码粘贴到网页里&#xff1b;想帮孩子改作文&#xff0c;又担心教育…

作者头像 李华
网站建设 2026/4/2 1:25:55

HY-Motion 1.0多风格支持:运动/舞蹈/武术/日常四类动作Prompt模板库

HY-Motion 1.0多风格支持&#xff1a;运动/舞蹈/武术/日常四类动作Prompt模板库 1. 为什么你需要一套真正好用的动作提示词&#xff1f; 你有没有试过这样输入&#xff1a;“一个年轻人跳街舞”&#xff0c;结果生成的动作要么僵硬得像机器人&#xff0c;要么突然扭到奇怪的角…

作者头像 李华
网站建设 2026/4/13 2:35:19

零基础入门:人脸识别OOD模型一键部署与质量评估

零基础入门&#xff1a;人脸识别OOD模型一键部署与质量评估 1. 为什么你需要关注这个模型&#xff1f; 你是否遇到过这样的问题&#xff1a;人脸考勤系统在阴天识别率骤降&#xff0c;门禁摄像头在逆光下频繁拒识&#xff0c;或者安防系统对模糊抓拍图给出错误匹配&#xff1…

作者头像 李华
网站建设 2026/3/30 15:06:49

人脸识别OOD模型可部署方案:Docker镜像+Supervisor+健康检查全栈交付

人脸识别OOD模型可部署方案&#xff1a;Docker镜像Supervisor健康检查全栈交付 1. 什么是人脸识别OOD模型&#xff1f; 你可能已经用过不少人脸识别系统——刷脸打卡、门禁通行、手机解锁。但有没有遇到过这些情况&#xff1a; 光线太暗时&#xff0c;系统反复提示“未检测到…

作者头像 李华
网站建设 2026/4/11 23:19:46

MTools开源镜像详解:Ollama内核+动态Prompt工程如何提升处理精度

MTools开源镜像详解&#xff1a;Ollama内核动态Prompt工程如何提升处理精度 1. 为什么你需要一个真正私有的文本处理工具 你有没有过这样的经历&#xff1a;想快速总结一篇长文章&#xff0c;却担心把敏感内容发到公有云&#xff1b;需要提取会议纪要的关键词&#xff0c;但又…

作者头像 李华