为什么有些PDO是选定的有些PDO没有选定
问题由来:为什么有些PDO是选定的有些PDO没有选定?

EtherCAT 主站(如 TwinCAT、CODESYS 等)在扫描从站 XML 时,会解析 PDO 的 Sm 标签:
- 带有
Sm="2":表示该 PDO 已被设备制造商预设为映射到Sync Manager 2(输出过程数据通道)。主站会将其视为“标准/默认输出 PDO”,因此会自动将其添加到主站的默认 PDO 分配列表(对应对象字典0x1C12)中,在界面中表现为“已选定”。 - 缺少
Sm标签:表示该 PDO 没有预设的同步管理器通道,属于“可选扩展功能”。主站不会主动将其分配给任何 SM 通道,需要用户根据实际应用需求,在配置界面中手动勾选(此时主站会将它的索引写入0x1C12),因此默认状态为“未选定”。
在 EtherCAT 中,每个从站最多有 32 个 sync manager(SM),每个 SM 都可以配置一种通信类型,用于定义数据流方向,以及该 SM 是用于邮箱通信还是过程数据。
- 通信类型
0是无效的,表示该 SM 未使用或被禁用。 - 通信类型
1用于邮箱接收(MbxIn = 主站→从站方向) - 通信类型
2用于邮箱发送(MbxOut = 从站→主站方向) - 通信类型
3用于过程数据输出(RxPDO:主站→从站方向)。 - 通信类型
4用于过程数据输入(TxPDO:从站→主站方向)
如何访问 sync manager 通信类型?#
sync manager 通信类型可在对象字典中的索引 0x1C00 处访问。
- 子索引
0包含已使用的 sync manager 通道数量4..32。 - 子索引
1包含 SM0 的通信类型(见上文) - 子索引
2包含 SM1 的通信类型 - 以此类推(最大到子索引
33)
注意: 大多数从站只支持 4..8 个 sync manager。你需要查阅从站芯片的数据手册。
各个 sync manager 分别用于什么?#
根据 ETG1000.6 规范,应使用以下 sync manager 通信类型:
- sync manager 0:邮箱接收(MbxIn)——通信类型
1 - sync manager 1:邮箱发送(MbxOut)——通信类型
2 - sync manager 2:过程数据输出(RxPDO)——通信类型
3- 如果从站不支持输出,则可用于过程数据输入(通信类型
4)
- 如果从站不支持输出,则可用于过程数据输入(通信类型
- sync manager 3:过程数据输入(TxPDO)——通信类型
4
仅当从站不支持邮箱(这种情况很少见)时,才应使用以下备用映射:
- sync manager 0:过程数据输出(RxPDO)——通信类型
3- 如果从站不支持输出,则可用于过程数据输入(通信类型
4)
- 如果从站不支持输出,则可用于过程数据输入(通信类型
- sync manager 1:过程数据输入(TxPDO)——通信类型
4
8 Ethercat SM同步管理器——基于ET1100芯片手册第八章
ESC存储器可用于EtherCAT主站与本地应用(连接在PDI上的微控制器)之间的数据交换,且不受任何限制。但直接使用存储器进行此类通信存在若干缺陷,而ESC内部的同步管理器(SyncManager)正是为解决这些问题而设计:
• 数据一致性无法保证,需要通过软件实现信号量机制来协调数据交换
• 数据安全性无法保证,需要通过软件实现安全机制
• EtherCAT主站和应用程序均需轮询存储器以判断对方访问是否完成
同步管理器能够实现EtherCAT主站与本地应用之间一致且安全的数据交换,并生成中断以通知双方状态变更。
同步管理器由EtherCAT主站配置,支持可配置的通信方向及通信模式(缓冲模式和邮箱模式)。同步管理器使用位于存储区域的缓冲区进行数据交换,对该缓冲区的访问由其硬件模块控制。
访问缓冲区必须从起始地址开始,否则将被拒绝。在访问起始地址后,可访问整个缓冲区(包括再次访问起始地址),支持一次性或分多次访问。通过访问结束地址完成缓冲区访问后,缓冲区状态将发生改变,并生成中断或看门狗触发脉冲(若已配置)。结束地址在同一帧内不可重复访问。
建议将同步管理器缓冲区的起始地址按64位(8字节)边界对齐。
同步管理器支持两种通信模式:
• 缓冲模式
-允许EtherCAT主站和本地应用随时访问通信缓冲区。消费者始终获取生产者写入的最新有效缓冲区,生产者可随时更新缓冲区内容。若写入速度快于读取速度,旧数据将被丢弃
-通常用于循环过程数据交换
• 邮箱模式
-通过握手机制实现数据交换,确保数据不丢失。EtherCAT主站或本地应用任何一方仅当对方完成访问后才有权访问缓冲区。首先由生产者写入缓冲区,随后缓冲区进入写锁定状态直至消费者完成读取。之后生产者重新获得写权限,而缓冲区对消费者保持锁定
-通常用于应用层协议通信
同步管理器仅当帧的FCS校验正确时才接受主站触发的缓冲区变更,因此缓冲区变更将在帧结束后立即生效。
同步管理器的配置寄存器位于0x0800起始的地址空间。

8.1 缓冲模式
存储同步管理器SyncManager 归纳_ethercat sm寄存器-CSDN博客
缓冲模式支持数据的同步读写操作而互不干扰。若数据写入速度快于读取速度,旧数据将被覆盖。该模式亦称为三缓冲模式。
在物理层面,缓冲模式采用三个相同容量的缓冲区。首个缓冲区的起始地址和大小通过同步管理器配置,主站与本地应用需使用该缓冲区的地址进行数据读写。根据同步管理器状态,对首个缓冲区(0)地址范围的访问会被重定向至三个缓冲区之一。用于缓冲区1和2的存储空间不可挪作他用,在配置其他同步管理器时需考虑此因素。
三个缓冲区中:一个分配给生产者(用于写入),一个分配给消费者(用于读取),第三个缓冲区则保存生产者最近一次完整写入的数据。
缓冲区交互机制如图24所示


(2)数据交换原理(状态切换) 以 “主站写数据、从站读数据” 为例,3 个缓存区通过状态切换实现连续数据交换: 状态①:缓存区 1 由主站写入数据,缓存区 2 空闲,缓存区 3 由从站读取数据。 状态②:主站写缓存区 1 完成后,缓存区 1 与缓存区 2 交换,缓存区 2 变为 “待读”,缓存区 1 变为 “空闲”。 状态③:从站读缓存区 3 完成后,缓存区 3 变为 “空闲” 并与缓存区 1 交换,回到可再次读写的初始状态。 中断触发:若 SM 控制寄存器(0x0804+N×8)中使能 ECAT 帧或 PDI 中断,每次成功读写后,SM 状态寄存器(0x0805+N×8)会设置中断事件请求,映射到 ECAT 中断请求寄存器(0x0210~0x0211)
和 AL 事件请求寄存器(0x0220~0x0221),最终由中断屏蔽寄存器决定是否触发中断信号。 原文链接:https://blog.csdn.net/flyflyfly12345/article/details/153479758
同步管理器的状态寄存器反映了当前运行状态。其中会显示最后写入的缓冲区编号(仅作指示用途,实际访问重定向由ESC执行)以及中断状态。若同步管理器缓冲区此前未被写入,最后写入缓冲区将显示为3(初始/空状态)。
8.1.1 8位处理数据宽度ESC的存储器使用
本示例演示了起始地址0x1000、长度0x100的配置方案。其他缓冲区不应进行读写操作。对缓冲区的访问始终被定向至缓冲区0的地址范围(0x1000-0x10FF)。

8.1.2 16/32/64位处理数据宽度ESC的存储器使用
对于内部处理数据宽度超过8位的ESC(例如32位内部数据宽度),在规划同步管理器缓冲区所需存储区域时需要特别注意。
这类ESC将每个32位字视为单个地址,且不允许为同一32位字配置多个同步管理器。
因此,每个同步管理器缓冲区的起始地址必须向下取整至32位字的起始边界,结束地址必须向上取整至32位字的结束边界。每个缓冲区可能因此多占用最多3+3=6字节,这意味着三缓冲同步管理器可能额外占用最多3×6=18字节。在缓冲模式下,这个扩展的存储区域还需要乘以3(因为包含缓冲区1和2)。最终划定的存储区域不可用于其他同步管理器。
请注意,同步管理器的起始地址、结束地址或长度本身没有限制——这些参数均无需保持32位对齐。
本示例演示了起始地址0x1003、长度0xFA的配置方案。其他缓冲区不应进行读写操作。对缓冲区的访问始终被定向至缓冲区0的地址范围(0x1003–0x10FC)。

这句话的本质是:把缓冲区的范围“撑大”到若干个完整的 32 位字。32 位字就是 4 字节,所以“32 位字边界”就是地址能被 4 整除的地址,例如:
0x1000、0x1004、0x1008、0x100C、0x1010 ...
这些地址的低 2 位都是 00。
1. 起始地址向下取整
假设原缓冲区起始地址是 0x1003,它不是 4 字节对齐。
向下取整就是往小的方向找最近的 4 字节边界:
0x1003 -> 0x1000
也就是从 0x1000 开始,虽然 0x1000~0x1002 可能不属于原缓冲区,但为了按 32 位字访问,必须从完整字的开头开始。
2. 结束地址向上取整
假设原缓冲区结束地址是 0x100A。
向上取整就是往大的方向找最近的 4 字节边界:
0x100A -> 0x100C
这样结束边界也落在完整字的边界上。最终同步管理器实际覆盖的范围变成:
0x1000 ~ 0x100C
而原缓冲区可能是:
0x1003 ~ 0x100A
扩展后多包含了 0x1000~0x1002 和 0x100A~0x100B,但保证原数据全部被包含在完整的 32 位字中。
3. 为什么要这样做?
因为同步管理器、DMA 或硬件总线通常按 32 位字访问内存,不能从半个字开始,也不能在半个字结束。如果起始或结束地址没有 4 字节对齐,硬件可能:
-
读写错误;
-
丢掉首尾半个字;
-
产生非对齐访问异常;
-
导致缓存同步、DMA 传输范围不完整。
所以配置同步管理器缓冲区时,需要把起始地址向下对齐,把结束地址向上对齐,使整个范围由完整的 32 位字组成。
4. 公式化理解
如果地址按 4 字节对齐:
对齐起始 = start & ~0x3 对齐结束 = (end + 0x3) & ~0x3
注意这里的 end 通常指“结束地址 + 1”,也就是排他结束地址。
如果 end 表示最后一个有效字节的地址,则应先加 1,再向上取整。
5. 需要注意
这样取整后,实际访问范围只会变大,不会变小。
因此如果缓冲区前后紧挨着其他重要数据,可能会被同步管理器一起读写,造成干扰。最稳妥的做法是:直接分配 4 字节对齐、且长度为 4 字节整数倍的缓冲区,这样就不需要额外取整。
8.2 邮箱模式
邮箱模式仅支持交替读写操作,以此确保生产者产生的所有数据均能送达消费者。该模式仅使用一个具有配置尺寸的缓冲区。
初始化/激活后,缓冲区(邮箱,MBX)首先处于可写状态。一旦数据完全写入,写访问即被阻断,此时另一方可读取缓冲区内容。待数据完全读取后,缓冲区将重新开放写入权限。
读取或写入邮箱所需的时间不影响操作流程。

8.2.1 8位处理数据宽度ESC的存储器使用
本示例演示了起始地址0x1000、长度0x100的配置方案。

8.2.2 16/32/64位处理数据宽度ESC的存储器使用
对于内部处理数据宽度超过8位的ESC(例如采用32位内部数据宽度的设备),在规划同步管理器缓冲区所需存储区域时需要特别关注。
这类ESC将每个32位字视为独立地址单元,且不允许为同一32位字配置多个同步管理器。
因此,每个同步管理器缓冲区的起始地址必须向下取整至32位字起始边界,结束地址则需向上取整至32位字结束边界。每个缓冲区可能因此多占用最多3+3=6字节空间(三缓冲同步管理器最多额外占用3×6=18字节)。最终划定的存储区域不可被其他同步管理器使用。
需特别注意:同步管理器的起始地址、结束地址或长度本身没有对齐限制——这些参数均无需保持32位对齐。
本示例演示了起始地址0x1003、长度0xFA的配置方案。

8.2.3 邮箱通信协议
本节仅对邮箱通信协议进行简要概述。关于邮箱协议的详细说明,请参阅EtherCAT技术组织(ETG)发布的EtherCAT规范ETG.1000.6《应用层协议规范》(http://www.ethercat.org),或国际电工委员会(IEC)发布的IEC 61158 Type 12标准《测量和控制数字数据通信——工业控制系统用现场总线》(http://www.iec.ch)。
EtherCAT以太网透传(EoE)
定义通过EtherCAT交换或隧道传输标准以太网帧的规范方法。
EtherCAT CAN应用层(CoE)
定义访问CAN应用层对象字典的标准方式,以及通过事件驱动路径交换CAN应用层紧急报文和PDO报文的机制。
EtherCAT文件访问(FoE)
定义用于下载和上传固件及其他“文件”的标准传输协议。
EtherCAT伺服协议(SoE)
定义访问IEC 61800-7标识符的标准规范。
EtherCAT供应商特定协议(VoE)
在标识供应商及特定类型的VoE报头之后,遵循供应商自定义的通信协议。
EtherCAT ADS传输(AoE)
定义通过EtherCAT交换自动化设备规范(ADS)报文的标准实现方式。
EtherCAT邮箱协议头的结构内容如图30所示。

8.3 通过写入确认的PDI功能
关于此功能的背景说明请参阅第16.3章,该功能仅当PDI读取缓冲区时影响同步管理器的操作。此可选功能不会影响EtherCAT通信本身的操作。
若启用"通过写入确认的PDI功能",读取同步管理器缓冲区包含以下步骤:
• 读取首字节:此操作将开启缓冲区。误读后续字节不会产生影响,仅通过读取操作不会关闭缓冲区。
• 读取缓冲区任意字节(包括首字节、末字节及中间任意字节):缓冲区保持开启状态,甚至支持多次重复读取。误读末字节不会产生任何影响。
• 向缓冲区末字节执行写入操作:此时将使用字节使能信号,写入数据被忽略(可写入0)。此写入操作将最终关闭缓冲区。
仍有可能误读目标缓冲区后方第二个同步管理器缓冲区的首字节,这将导致第二个缓冲区被意外开启。通过将同步管理器缓冲区起始地址按微控制器数据宽度对齐可有效避免此问题。建议始终将同步管理器缓冲区起始地址按64位(8字节)边界对齐。
8.4 中断与看门狗触发生成及锁存事件生成
当缓冲区被完整成功写入或读取时,可生成中断信号。在缓冲区被完整成功写入后,可生成看门狗触发信号以重置(触发)用于数字I/O的过程数据看门狗。中断与看门狗触发生成功能均支持配置。同步管理器状态寄存器会反映当前缓冲区状态。
为便于调试,部分ESC还支持在缓冲区成功访问时触发分布式时钟锁存事件。
8.5 单字节缓冲区长度/数字输出PDI看门狗触发
若同步管理器配置长度为1字节(甚至0字节),缓冲区机制将被禁用,即对配置地址的读写操作将直接通过同步管理器而不受干预。在缓冲模式下不会使用额外的缓冲区1和2,邮箱模式也无需进行读写访问交替。对于单字节缓冲区,数据一致性不构成问题。
尽管如此,当缓冲区长度为1字节时,看门狗触发(及中断生成)功能仍可正常使用。
注意:对于部分ESC的邮箱模式,看门狗和中断生成仍依赖于读写访问的交替进行,尽管读写操作本身不受干扰。因此,若需通过单字节缓冲区实现看门狗触发,建议采用缓冲模式。
单字节同步管理器的看门狗触发生成功能专用于数字输出场景——只有当过程数据看门狗被触发时,输出数据才会驱动实际输出端口。需要为数字输出寄存器(0x0F00:0x0F03)中每个用于输出的字节单独配置同步管理器,具体配置要求如下:
- 采用缓冲模式(否则部分ESC在第二次及后续写入时将无法重置过程数据看门狗,因为数字I/O PDI不会读取这些地址)
- 设置长度为1字节
- 配置为EtherCAT写入/PDI读取方向
- 使能看门狗触发功能
更多详细信息请参阅本文第三部分的数字I/O PDI说明章节,以及本文中关于看门狗和数字输出的相关章节。
注意:长度为0的同步管理器行为等同于禁用状态,既不会干扰地址访问,也不会生成中断或看门狗触发信号。
8.6 邮箱通信重传机制
邮箱数据帧丢失由应用层处理。通过同步管理器激活寄存器(偏移地址0x06[1])和PDI控制寄存器(偏移地址0x07[1])中的"重复请求/重复确认"位,可在邮箱模式下实现从站到主站的缓冲区重传。若邮箱读取帧在返回主站途中丢失/损坏,主站可通过切换重复请求位触发重传。从站通过轮询该位或接收中断(同步管理器激活寄存器变更,寄存器0x0220[4])后,将最后一次缓冲区数据重新写入同步管理器,随后PDI会切换PDI控制寄存器中的重复确认位。主站读取该位状态后即可重新读取缓冲区内容,通信随之恢复。
图31展示了邮箱写入服务中该机制的工作流程:当从站发往主站的邮箱确认帧丢失时,系统通过上述机制实现数据重传。

8.7 PDI停用同步管理器
PDI可通过停用同步管理器向主站通报本地故障(通常仅用于缓冲模式)。当访问被停用的同步管理器缓冲区时,工作计数器不会递增,主站可通过检测该数值变化来识别同步管理器停用状态。若PDI停用同步管理器(设置PDI控制寄存器0x7[0]=1),同步管理器状态将被重置,中断信号被清除,且重新激活后必须首先对该同步管理器执行写入操作。在PDI停用同步管理器期间,其对应的整个缓冲区区域将实施读写保护。
8.8 同步管理器停用延迟
当EtherCAT主站停用同步管理器时,缓冲区管理功能将立即失效。若此时PDI正在读取缓冲区,可能导致部分字节来自缓冲区1或2,而最后字节来自缓冲区0,造成数据不一致。通常这种情况不会发生:EtherCAT主站会先退出运行状态,再停用同步管理器。本地协议栈检测到该状态后,会在处理前丢弃不一致的读取值。
对于要求数据一致性的特殊应用,上述机制不可行。同步管理器停用延迟功能可解决此问题。该可选功能可通过SII EEPROM或PDI写入同步管理器PDI控制寄存器位(0x0807+y*8)[6]启用。
当为配置为PDI读取的同步管理器启用停用延迟,且主站停用该同步管理器时,同步管理器将进入过渡状态。此状态下PDI端可继续读取最后缓冲区,而主站端则显示为已停用(出于兼容性考虑)。
满足以下所有条件时进入过渡状态(寄存器地址以同步管理器0为例,其他同步管理器行为相同):
• 同步管理器停用延迟已启用(SM PDI控制寄存器0x0807[6]=1)
• 同步管理器被PDI读取
• 同步管理器长度>0
• 缓冲区已被ECAT写入
• 同步管理器被ECAT停用
在过渡状态期间,同步管理器呈现以下特性:
• ECAT读取同步管理器激活寄存器0x0806[0]=0(显示同步管理器已停用)
• PDI读取同步管理器激活寄存器0x0806[0]=0(显示同步管理器已停用,表明主站请求停用)
• 过渡状态显示在同步管理器PDI控制寄存器0x0807[7]=1(ECAT和PDI均可读取)
• ECAT可重新配置并激活同步管理器
• ECAT不可写入缓冲区区域(但可读取)
• PDI端的同步管理器缓冲区状态保持不变,PDI可继续读取最后缓冲区(甚至可开始读取最新缓冲区)
• ECAT读取同步管理器状态寄存器0x0805的默认值(除非启用同步管理器顺序模式——出于兼容性考虑)
• PDI读取同步管理器状态寄存器0x0805的实际值
满足以下任一条件时退出过渡状态:
• ECAT重新激活同步管理器(使用相同或不同配置)
• PDI停用同步管理器(同步管理器PDI控制寄存器0x0807[0]=1)
• PDI禁用同步管理器停用延迟(同步管理器PDI控制寄存器0x0807[6]=0)
• PDI完全读取邮箱内容
尽管过渡状态可无限维持,但ECAT可能随时重新激活同步管理器导致数据不一致。因此PDI应尽快完成最后缓冲区的读取。自主站停用同步管理器起经过6μs后,不应再次读取缓冲区。PDI在读取缓冲区后,应通过停用同步管理器(同步管理器PDI控制寄存器0x0807[0]=1)来结束过渡状态。
为便于调试,主站可通过激活再停用同步管理器来禁用过渡状态。
用于同步管理器停用延迟的寄存器:

8.9 同步管理器顺序模式
同步管理器的基础架构使用缓冲区的首字节和末字节进行缓冲区变更检测。由于EtherCAT帧最大长度为1536字节,当同步管理器缓冲区尺寸超过约3KB时,需要三个或更多帧才能完全写入。
若中间帧无效,ESC将不予处理。若该无效帧包含对同步管理器缓冲区至少一个字节的访问,则该同步管理器缓冲区将被视为无效,且缓冲区状态会被重置。
然而,若中间帧丢失,或同步管理器无法再检测到对缓冲区区域的访问,同步管理器不会被重置。此时当接收到最后一帧时,缓冲区仍会被接管——即使中间帧数据已缺失。这将导致数据不一致。
同步管理器顺序模式通过额外校验主站是否按顺序写入每个字节,确保大尺寸同步管理器缓冲区的数据一致性。
该模式可由EtherCAT主站在同步管理器控制寄存器0x0804[7]中启用(寄存器地址以同步管理器0为例,其他同步管理器行为相同)。
同步管理器顺序模式仅影响同步管理器的EtherCAT写入端。启用后,同步管理器缓冲区的每个字节都必须从首字节开始按顺序写入。
若末字节被写入时存在前置字节未被写入,缓冲区将不被接管,且同步管理器状态寄存器0x0805[2]将设置错误标志。
访问同步管理器缓冲区的无效帧将完全重置缓冲区,要求重新从起始位置开始写入。
用于同步管理器顺序模式的寄存器:

浙公网安备 33010602011771号