SAG1000功能
正如“概述”中所述,SAG1000连接两个EtherCAT从站(主侧和副侧)。其中每个从站均可视为一个I/O模块,其接收的数据即为另一个对应I/O模块的输出数据。

“ECAT1”与“ECAT2”是两个独立的EtherCAT网段,彼此间可进行数据交换。
原则上这种数据交换只需规定输入输出数据的大小即可。SAG1000仅负责将数据复制到对应的另一侧。数据大小并非直接输入,而是由两侧输入输出变量的定义决定。
性能
SAG1000内部复制操作的时长主要取决于数据量:通常预计每字节耗时约1µs。
例如,当两侧各有100字节的输入输出数据时,SAG1000在接收到含有新输出数据的EtherCAT帧后,约100µs后,即可将这些数据作为输入数据在另一侧生效。(另见 6.3.2.3,CoE对象0x2010.09“部署时间”)
需注意两侧具有同等权限,即一侧的复制操作会阻塞另一方。因此,上述示例的最坏情况是200µs。
桥接变量定义
输入数据指定使用PDO 0x1A00,输出数据使用PDO 0x1600。
对应变量的定义及过程数据的大小取决于映射到这些PDO中的对象。
将对象0x6000的条目作为输入变量,对象0x7000的条目作为输出变量使用。
输入和输出变量的总长度最大不得超过1024字节。
示例(对应于6.1 /图7中主侧的示例)
• 一个输入变量,32位
• 两个输出变量,分别为8位和32位
以下PDO内容结果:
| PDO | 子索引 | 数据 | 描述 |
| 0x1A00 | 0x00 | 0x01 | 子索引/输入最大数量 |
| 0x1A00 | 0x01 | 0x60000120 | 对象0x6000子索引1,32位 |
| 0x1600 | 0x00 | 0x02 | 子索引/条目最大数量 |
| 0x1600 | 0x01 | 0x70000108 | 对象0x7000子索引1,8位 |
| 0x1600 | 0x02 | 0x70000220 | 对象0x7000子索引2,32位 |
所用变量的子索引(0x6000/0x7000)均会随每个变量递增。若映射其他输入变量,则应为0x6000子索引2,后续输出变量0x7000子索引3,依此类推。
(为对齐需要,对象0x0000子索引0x00可额外映射至这两个PDO中的任意一个。SAG1000无需此操作)
一侧的输入变量必须与另一侧的输出变量完全匹配,否则SAG1000从站将不允许切换至"安全操作/运行"状态。
例如,另一侧PDO的内容为:
| PDO | 子索引 | 数据 | 描述 |
| 0x1A00 | 0x00 | 0x02 | 子索引/条目最大数量 |
| 0x1A00 | 0x01 | 0x60000108 | 对象0x6000子索引1,8位 |
| 0x1A00 | 0x02 | 0x60000220 | 对象0x6000子索引2,32位 |
| 0x1600 | 0x00 | 0x01 | 子索引/条目最大数量 |
| 0x1600 | 0x01 | 0x70000120 | 对象0x7000子索引1,32位 |
分布式时钟
本质上,SAG1000的每侧均可作为普通DC从站运行——其时间可作为参考,分发给后续从站,若存在其他参考,其时间也可简单调整。(因此,至/来自另一侧的数据传输独立于SYNC信号)
SAG1000的独特之处在于,其两侧DC时间差可被高精度测定。为此,使用了两个EtherCAT从站控制器的“锁存单元”:在固定时间间隔内,双方的时间戳均被记录并提供在过程数据中(对象0x10F4,参见6.3.1.6)。
通过这两个时间戳的差值,可为控制回路提供反馈。例如,在图24中,第二个主站将自身时间调整为与第一个EtherCAT网段的时间一致,并将其分发给第二个网段的从站,而图22显示自动同步。
自动同步
在“DC自动同步”模式下,SAG1000控制器自行管理DC时间,并定期将主侧时间调整为与次侧时间一致。
它已在对象0x2000.05中激活,请参见6.3.2.1。适应过程发生在对象0x10F5.11设定的区间内(见6.3.1.7),在此模式下应始终设置为1毫秒。
通过对象0x2000.06,还可以设置目标差值,用于处理出现或需要恒定偏移的情况。

在冗余EtherCAT网络中使用时,此模式仅在冗余情况实际发生时启用。(在主站同时更新冗余段从站的DC延迟(寄存器0x0928)等操作完成后)
正常运行状态:

冗余:
冗余情况下的DC自动同步
关于DC自动同步的重要说明:
- 主侧和次侧不可互换,始终由主侧调整时间以匹配次侧时间。
- 主侧必须作为其EtherCAT网段的DC参考从站
- EtherCAT主站必须直接接受主侧的时间:通常情况下主站会通过DC偏移寄存器(0x0920)调整每个从站的时间——此时自动同步将无法实现。
- 若主站无法进行相应配置,应用程序必须处理自动同步问题,例如,仅当主站写入DC偏移寄存器后,才启用同步功能(这通常意味着需要同时重启从站的DC同步单元等)
- 不应擅自更改次侧的时间——时间戳及其在进程数据中的“无效”位(对象0x10F4,参见6.3.1.6)应该用于应对失去同步的情况。
- 通常可达到约100ns的精度
标准同步
在标准DC同步中,SAG1000仅用于测量两个以EtherCAT网段DC时间之间的差异,校准操作由EtherCAT主站完成。
PDOs
所需的时间戳包含在对象0x10F4 – “外部同步状态”(参见6.3.1.6)中,对于PDO 0x1A02 –同步从站(64位)(6.2.5.5)已映射。
如果仅使用32位时间戳,则PDO 0x1A03适用(参见6.2.5.6)。另一侧可以选择使用PDO 0x1A04 – SYNC主站来获取状态信息。
两个EtherCAT网段的同步
通常情况下,EtherCAT网段内的时间分配,是由一个从站完成,该从站的时间会分配给所有后续从站。
在两个网段同步时,仍采用此方法。
此外,SAG1000次侧主站会调整从站发送的时间,使其与另一侧的时间相匹配(“校正”,见图24)。
这种校正是通过写入从站的DC系统时间(寄存器0x0910)来完成的,这样可以相应地调整时钟频率。当时间戳显示时钟运行过慢时,会写入一个更高的值,反之亦然。
冗余情况下的DC
正常运行状态:

冗余:

在此示例的正常运行中,首位从站的时间会分配给所有后续从站,其他任何DC从站同样适用此机制。
冗余配置下仅存在两个网段,主网段的末位从站将成为新网段的首位从站——此时其时间可分配给其他从站。
其原理与所述相同,但是,在这种情况下,主站还须重新计算冗余段中从站的DC延迟(寄存器0x0928),以避免精度损失。
示例(两个EtherCAT网段的同步)
该示例的基准应为图24所示的结构。
SAG1000主侧
该侧为“同步主站”,即该时间为给定标准:因此无需特殊步骤,可按常规方式配置此EtherCAT网段
→ 使用EtherCAT配置工具,为从站选择DC模式,并为主站导出ENI。
SAG1000次侧
该侧为“同步从站”,即该段的时间被调整:
创建CoE初始化0x10F5.01和0x10F5.11的命令(0 → “同步从站”,“1” → 为了简化控制回路算法,请参见6.3.1.7)
激活输入PDO 0x1A02(其中包含所需的时间戳,请参见6.2.5.5 →为从站选择从DC模式,为主站导出ENI。
主站应用现在可以从PDO 0x1A02使用这些过程变量:
“时间戳更新切换”、“时间戳无效”、“内部时间戳”和“外部时间戳”
当“无效”位被置位时,会一直观察到该位,此时无法进行循环控制,必须假定各段未同步。
首先,确定目标差值,即“内部时间戳”和“外部时间戳”之间的差值,这将是我们环路控制的目标:在本示例中称为TargetDiff。例如,可采用时间戳首次生效时的差值(该差值越大,补偿耗时越长——因此以“0”作为目标差值并不合适,因为两侧设备启动时时间差值可能会相差极大)
然后,随着切换位的每次变化,计算当前差值:CurrentDiff = ExternalTS - InternalTS。
由此可得设定点:InternalTSSP = ExternalTS - TargetDiff。当内部时间戳InternalTS高于其设定值InternalTSSP时,频率必须降低,反之亦然。
时钟频率调整是每个支持此功能的EtherCAT从站控制器的一部分。
DC:当DC系统时间寄存器(0x0910)写入的值高于其当前时间时,频率会增加;如果低于当前时间,频率则会相应降低,详见 [4]
此时只需确定合适的时间值并将其写入从站设备:一方面可采用传统的环路控制技术,但另一方面,通常只需写入InternalTS来降低频率,写入 InternalTSSP +几毫秒来提高频率即可。
若实际内部时间戳数值与其设定点之间的偏差,在特定容限范围内持续一段时间,则视为两个EtherCAT网段已完成同步。(这些数值自然是根据您的需求定义的)
UDP网关
这是SAG1000的一种特殊工作模式,该模式下未使用EtherCAT备用接口(EC-B)。取而代之的是,UDP远程站(ETH)作为主用接口运行,即主用接口(EC-A)的输入数据通过UDP协议被SAG1000接收,输出数据也相应通过UDP协议传输。
变量的定义和过程映像的执行方式见 6.2.3中所述,即,这些变量是由EtherCAT侧写入的PDO定义的。
配置
基本上,只需在CoE对象0x2030.01中激活UDP网关模式即可:SAG1000会立即开始使用默认设置发送和接收过程数据。
UDP网关模式下,不支持EoE及除0x1600(输出)和0x1A00(输入)之外的所有PDO。
至少需要定义过程数据传输的周期时间。在默认设置下,每次传输时间少于10毫秒(对象0x2030.0b)。此外,还提供了许多用于诊断目的的对象。
配置对象0x2030“UDP网关”及其默认设置。
关于UDP网关模式的重要说明
在UDP网关模式下,由于未连接两个EtherCAT网段,前述SAG1000基本功能会存在一些限制。
- 仅支持0x1600(输出)和0x1a00(输入)两种PDO。
- 不再支持与EtherCAT分布式时钟相关的所有功能(包括对象0x2000 – “其他设置”中的所有条目)。
- 不支持EoE
- 不支持两侧变量身份的自动检查。该检查由用户自行负责。
此外,LED B显示屏的含义已更改:
| 指示灯状态 | 说明 | ||
| 运行 | 绿色 | 开启 | UDP远程站已连接(见对象0x2030.0d) |
| 关闭 | UDP远程站未连接 | ||
| 闪烁 | 接收来自UDP远程站的过程数据 | ||
| 错误 | 红色 | 开启 | UDP远程站未连接 |
| 关闭 | UDP远程站已连接 | ||
采用UDDC(通用设备描述组合器)进行配置
为了快速配置,可以使用Sinsegye软件UDDC(“通用设备描述组合器”)生成一个完整的EtherCAT ESI文件,该文件已经包含相关变量。UDDC还会生成一个C语言头文件,该文件可能有助于UDP远程站的配置工作。
这样最大限度地减少了在EtherCAT侧将文件导入EtherCAT配置工具时所需的配置工作量,同时(如适用)还能为CoE对象0x2030——“UDP网关”生成CoE初始化命令。
使用UDDC快速启动UDP网关:
1.为“EtherCAT UDP网关”创建新的UDDC项目。
2.为两侧分别创建所需的输出变量。(输出变量是可写入的变量)
3.将对应的输出变量复制到对应的输入侧(例如,通过点击两侧之间的箭头)
4.导出设备描述文件。
→ 此时,可获得匹配的“.xml”ESI文件和“.h”文件
5.将.xml格式的ESI文件导入EtherCAT主站/配置器,并作为EEPROM ESI(主站点)将其写入SAG1000中。
6.为使SAG1000进入"运行"状态,需启动搭载SAG1000的EtherCAT主站。
→ 此时,UDP网关已激活,可传输UDP数据帧并准备处理接收到的UDP帧。
7.该".h"文件已适配Windows示例UDP远程站使用——对于其他系统,则需根据协议说明开发专用的UDP远程站。
协议概述
双向通信均通过所谓的“指令”完成,这些指令封装在带有固定报头的UDP数据帧中。更多详情,请参见6.2.6.4。
每当EtherCAT SAG1000主站点接收到新的输出数据时,只要不违反配置的最小间隔时间,系统就会通过UDP发送包含这些输出数据的指令。每个包含过程数据的接收指令均会立即将数据复制到从站的过程映像中。
若SAG1000未处于EtherCAT运行状态(即未接收到主站数据),将返回包含EtherCAT状态信息的指令。
作为UDP的典型特征,丢失的帧不会被重传。此外,没有认证机制,实际上每个到达对应端口的UDP帧都会被评估。不过,4字节的“魔数”有助于避免意外评估其他UDP协议。帧头中的计数器用于识别丢失的帧。
UDP协议详情
UDP数据结构
| 8 | 16 | 24 | 32位 |
| 索引 | 最后接收的索引 | ||
| 保留位 | ID | 最后接收的ID | |
| 1..n 条指令 | |||
- 魔数:
-
- 固定值——必须忽略魔数偏差的帧(默认设置中该值为0x50445545,)
- 索引:
- 每传输完一帧后,索引必须递增
- 最后接收的索引:
- 最后接收帧的字段索引值
- 保留位:
- 当前为0x0000 - 该值不为0的帧必须被忽略。
- ID:
-
- 任意值,当该值不等于0时必须由接收方存储。
- 最后接收的ID:
- 存储的ID值,即最后一个接收到的帧中ID不为0的值。
- 指令:
- 必须包含至少一条指令,结构如下:
帧索引用于检测丢失的帧或接收顺序错误的帧。此外,可对“ID”字段进行接收确认评估(即ID值非0的帧将重复发送,直到在“最后接收ID”字段收到该值
指令体系结构
| 8 | 16 | 24 | 32位 |
| 类型 | 长度 | ||
| 0..n个命令数据字节 | |||
指令
| 名称(UDPGW_CMD_...) | 数值 | 数据 | 描述 |
|
PROCESSDATA |
0x4450 |
8字节时间戳+ 0至n字节过程数据 |
按照所述方式进行周期性传输。 所有时间戳均以纳秒为单位 (但未定义参考基准,即仅进行相对时间测量。 SAG1000不评估接收的时间戳。) |
|
ECATSTATEINFO |
0x4953 |
1字节EtherCAT状态+ 2字节EtherCAT错误代码 |
如果SAG1000 未处于“运行”状态,则按照后续所述方式进行周期性传输。 状态/错误代码参见(ESC寄存器0x0130或0x0134)。 |
|
ECATSTATECHANGE |
0x4353 |
1字节EtherCAT状态+ 2字节EtherCAT错误代码 |
指示SAG1000因错误而更改其EtherCAT状态。 只能切换到更低的状态 (通常,2对应“预运行”状态或4对应“安全运行”状态 状态/错误代码参见[4](ESC寄存器0x0130或0x0134)。 |
|
PING |
0x4950 |
8字节时间戳 |
指示SAG1000发送PONG命令。 |
|
PONG |
0x4f50 |
8字节时间戳+ 根据PING生成的8字节时间戳 |
作为 PING 响应报文传输,——可用于估算网络延迟 |
|
SENDLOSTCNT |
0x4c53 |
无 |
指示SAG1000发送LOSTCNT命令 |
|
LOSTCNT |
0x434c |
4字节丢失计数器+ 4字节丢失计数器变更次数 4字节OoO帧数量 |
作为响应报文传输至 SENDLOSTCNT – 可用于 确定UDP帧丢失数量及频率 |
|
RESETCOUNTER |
0x4352 |
无 |
指示,SAG1000重置对象0x2030中的计数器(子索引0x10至0x30)。 (此操作同时包含待传输的 下一帧的索引——确定丢失帧时,必须予以考虑。 自身发送计数器无需复位:复位后接收的首个帧由SAG1000单独处理——这未必会导致“接收丢包事件”。) |