目录
1、EoE简介
2、EtherCAT协议结构
3、从站节点参考模型
4、EoE编码
4.1 Initiate EoE请求
(1)Initiate EoE请求的数据类型
(2)Initiate EoE 请求的编码
4.2 Initiate EoE响应
(1) Initiate EoE 响应的属性类型
(2) Initiate EoE 响应的编码
4.3 EoE Fragment 请求
(1) EoE Fragment 请求的属性类型
(2) EoE Fragment 请求的编码
4.4 EoE 数据元素
(1) EoE 数据的编码
4.5 Set IP Parameter 请求
(1) Set IP Parameter 请求的属性类型
(2) Set IP Parameter 请求的编码
4.6 Set IP Parameter 响应
(1) Set IP Parameter 响应的属性类型
(2) Set IP Parameter 响应的编码
4.7 Set Address Filter 请求
(1) Set Address Filter 请求的属性类型
(2) Set Address Filter 请求的编码
4.8 Set Address Filter 响应
(1) Set Address Filter 响应的属性类型
(2) Set Address Filter 请求的编码
1、EoE简介
EoE :Ethernet tunneled over EtherCAT services, 基于EtherCAT服务的以太网隧道。从站需要移植自己的TCP/IP协议栈(如lwip),底层还是通过EtherCAT的邮箱通信。
2、EtherCAT协议结构

3、从站节点参考模型

4、EoE 编码
4.1 Initiate EoE请求
(1)Initiate EoE请求的数据类型
typedef struct
{
unsigned FrameType : 4;
unsigned Port : 4;
unsigned LastFragment : 1;
unsigned TimeAppended : 1;
unsigned TimeRequested : 1;
unsigned Reserved : 5;
unsigned FragmentNumber : 6;
unsigned CompleteSize : 6;
unsigned FrameNumber : 4;
} TEOEHEADER;
typedef struct
{
TMBXHEADER MbxHeader;
TEOEHEADER EoeHeader;
BYTE Data[MAX_EOE_DATA_SIZE];
} TINIEOEREQ;
(2)Initiate EoE 请求的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Mailbox Header | Length | WORD | N = 0x24+ y*0x20:邮箱服务数据的长度( y=0~0x2F) |
| Address | WORD | 如果主站是客户机,则为源站地址;如果从站是客户机,则为目的站地址 |
| Channel | Unsigned6 | 0x00 (为将来使用保留) |
| Priority | Unsigned2 | 0x00: 最低优先级…0x03: 最高优先级 |
| Type | Unsigned4 | 0x02: EoE |
| Cnt | Unsigned3 | 邮箱服务计数器( 0 保留, 1 是起始值, 7 以后的下一个值为 1) |
| Reserved | Unsigned1 | 0x00 |
EoE Header | FrameType | Unsigned4 | 0x02 |
| Port | Unsigned4 | 0x00: 发送到非特定端口0x01-0x0F: 选择特定端口 |
| Last Fragment | Unsigned1 | 0x00: 后面至少还有一个 EoE Fragment 服务0x01: 整个以太网帧都位于数据部分 |
| Time Appended | Unsigned1 | 0x00: 最后一个分段中的 EoE 数据之后不添加时间戳0x01: 最后一个分段中的 EoE 数据之后添加时间戳 |
| Time Request | Unsigned1 | 0x00: 不要求发送时间的时间戳0x01: 要求有发送时间的时间戳 |
| Reserved | Unsigned5 | |
| FragmentNumber | Unsigned6 | 0x00 |
| Complete Size | Unsigned6 | (以太网数据帧的完整大小+ 31)/32 |
| Frame Number | Unsigned4 | 以太网帧的编号 |
| EoE Data | BYTE[N-4] | 以太网帧(不包括前导码、 SFD、 FCS)第一部分,长度为( N-4)个八位位组(如果包含时间戳,则再减去4 个八位位组) |
(optional) | TimeStamp | Unsigned32 | 以 ns 为单位,从 DA 开始的帧接收时间 |
4.2 Initiate EoE响应
(1) Initiate EoE 响应的属性类型
typedef struct
{
TMBXHEADER MbxHeader;
TEOEHEADER EoeHeader;
TimeStamp Unsigned32;
} TINIEOERES;
(2) Initiate EoE 响应的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Mailbox Header | Length | WORD | N = 0x08: 邮箱服务数据的长度 |
| Address | WORD | 如果主站是客户机,则为源地址;如果从站是客户机,则为目的地址 |
| Channel | Unsigned6 | 0x00 (为将来使用保留) |
| Priority | Unsigned2 | 0x00: 最低优先级…0x03: 最高优先级 |
| Type | Unsigned4 | 0x02: EoE |
| Cnt | Unsigned3 | 邮箱服务计数器( 0 保留, 1 是起始值, 7 以后的下一个值为 1) |
| Reserved | Unsigned1 | 0x00 |
EoE Header | FrameType | Unsigned4 | 0x03 |
| Port | Unsigned4 | 0x00: 发送到非特定端口0x01-0x0F: 选择指定的端口 |
| Last Fragment | Unsigned1 | 0x00 |
| Time Appended | Unsigned1 | 0x01: 添加时间戳 |
| Time Request | Unsigned1 | 0x00: 不要求发送时间的时间戳 |
| Reserved | Unsigned5 | |
| FragmentNumber | Unsigned6 | 0x00 |
| Complete Size | Unsigned6 | 0x00 |
| Frame Number | Unsigned4 | 以太网帧的编号 |
| TimeStamp | Unsigned32 | 以 ns 为单位, 从 DA 开始的数据帧发送时间 |
4.3 EoE Fragment 请求
(1) EoE Fragment 请求的属性类型
typedef struct
{
TMBXHEADER MbxHeader;
TEOEHEADER EoeHeader;
BYTE Data[MAX_EOE_DATA_SIZE];
} TEOEFRAGREQ;
(2) EoE Fragment 请求的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Mailbox Header | Length | WORD | N > 0x04: 邮箱服务数据的长度 |
| Address | WORD | 如果主站是客户机,则为源地址;如果从站是客户机,则为目的地址 |
| Channel | Unsigned6 | 0x00 (为将来使用保留) |
| Priority | Unsigned2 | 0x00: 最低优先级…0x03: 最高优先级 |
| Type | Unsigned4 | 0x02: EoE |
| Cnt | Unsigned3 | 邮箱服务计数器( 0 保留, 1 是起始值, 7 以后的下一个值为 1) |
| Reserved | Unsigned1 | 0x00 |
EoE Header | FrameType | Unsigned4 | 0x00 |
| Port | Unsigned4 | 0x00: 发送到非特定端口0x01-0x0F: 选择特定端口 |
| Last Fragment | Unsigned1 | 0x00:至少还有一个 EoE Fragment 服务0x01:当前以太网数据帧的最后的数据部分(包括时间戳) |
| Time Appended | Unsigned1 | 0x00: 最后一个分段中的 EoE 数据后不添加时间戳0x01: 最后一个分段中的 EoE 数据后添加时间戳 |
| Time Request | Unsigned1 | 0x00: 不请求发送时间的时间戳0x01: 请求有发送时间的时间戳 |
| Reserved | Unsigned5 | |
| FragmentNumber | Unsigned6 | 0x01-0x2F: 以太网帧分段的个数 |
| Offset | Unsigned6 | 以太网帧分段的偏移量 |
| Frame Number | Unsigned4 | 以太网帧的编号 |
| EoE Data | BYTE[N-4] | 以太网帧(不包含前导码、 SFD、 FCS)的第一部分,长度为( N-4)个八位位组(如果包含时间戳还要减去4 个八位位组) |
(optional) | TimeStamp | Unsigned32 | 以 ns 为单位, 从 DA 开始的数据帧接收时间 |
4.4 EoE 数据元素
(1) EoE 数据的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Ethernet | Dest MAC | BYTE[6] | 符合 ISO/IEC 8802-3 的目标 MAC 地址 |
| Src MAC | BYTE[6] | 符合 ISO/IEC 8802-3 的源 MAC 地址 |
(optional) | VLAN Tag | BYTE[4] | 0x81、 0x00 与由 IEEE 802.1Q 规定的两个八位位组 |
| Ether Type | BYTE[2] | 由 IEEE 分配 |
User Frame | Data | | 用户数据( 八位位组串)或者 EoE 参数 |
| Padding | BYTE[n] | 根据 ISO/IEC 8802-3 的规定,如果 DLPDU 长度少于 |
4.5 Set IP Parameter 请求
(1) Set IP Parameter 请求的属性类型
typedef struct
{
TMBXHEADER MbxHeader;
TEOEHEADER EoeHeader;
BYTE Data[MAX_EOE_DATA_SIZE];
} TEOEFRAGREQ;
(2) Set IP Parameter 请求的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Mailbox Header | Length | WORD | N > 0x08: 邮箱服务数据长度 |
| Address | WORD | 如果主站是客户机,则为源地址;如果从站是客户机,则为目的地址 |
| Channel | Unsigned6 | 0x00 (为将来使用保留) |
| Priority | Unsigned2 | 0x00: 最低优先级…0x03: 最高优先级 |
| Type | Unsigned4 | 0x02: EoE |
| Cnt | Unsigned3 | 邮箱服务计数器( 0 保留, 1 是起始值, 7 以后的下一个值为 1) |
| Reserved | Unsigned1 | 0x00 |
EoE Header | FrameType | Unsigned4 | 0x02 |
| Port | Unsigned4 | 0x00: 发送到非特定端口0x01-0x0F: 选择特定的端口 |
| Last Fragment | Unsigned1 | 0x01: 最后的数据部分 |
| Time Appended | Unsigned1 | 0x00: 不添加时间戳 |
| Time Request | Unsigned1 | 0x00: 不请求发送时间的时间戳 |
| Reserved | Unsigned5 | |
| Fragment Number | Unsigned6 | 0x00 |
| Offset | Unsigned6 | 0x00 |
| Frame Number | Unsigned4 | 0x00 |
EoE Parameter | MAC included | Unsigned1 | 符合 ISO/IEC 8802-3 的 MAC 地址 |
| IP address included | Unsigned1 | 符合 IETF RFC 791 的 IP 地址 |
| Subnet Mask included | Unsigned1 | 符合 IETF RFC 791 的子网掩码 |
| Default Gateway included | Unsigned1 | 符合 IETF RFC 791 的默认网关地址 |
| DNS Server IP Address included | Unsigned1 | 符合 IETF RFC 791 的 DNS 服务器的 IP 地址 |
| DNS Name included | Unsigned1 | 符合 IETF RFC 791 的 DNS 名称 |
| reserved | Unsigned26 | |
(conditional) | MAC | BYTE[6] | 符合 ISO/IEC 8802-3 的 MAC 地址 |
(conditional) | IP address | BYTE[4] | 符合 IETF RFC 791 的 IP 地址 |
(conditional) | Subnet Mask | BYTE[4] | 符合 IETF RFC 791 和 IETF RFC 826 的子网掩码 |
(conditional) | Default Gateway | BYTE[4] | 符合 IETF RFC 791 的默认网关地址 |
(conditional) | DNS Server IP Address | BYTE[4] | 符合 IETF RFC 791 的 DNS 服务器的 IP 地址 |
(conditional) | DNS Name | char[32] | 符合 IETF RFC 791 的 DNS 名称 |
4.6 Set IP Parameter 响应
(1) Set IP Parameter 响应的属性类型
typedef struct
{
unsigned FrameType : 4;
unsigned Port : 4;
unsigned LastFragment : 1;
unsigned TimeAppended : 1;
unsigned TimeRequested : 1;
unsigned Reserved : 5;
unsigned Result : 16;
} TEOEPARAHEADER;
typedef struct
{
TMBXHEADER MbxHeader;
TEOEPARAHEADER EoeHeader;
} TEOEFRAGREQ;
(2) Set IP Parameter 响应的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Mailbox Header | Length | WORD | N=0X04: 邮箱服务数据长度 |
| Address | WORD | 如果主站是客户机,则为源地址;如果从站是客户机,则为目的地址 |
| Channel | Unsigned6 | 0x00 (为将来使用保留) |
| Priority | Unsigned2 | 0x00: 最低优先级…0x03: 最高优先级 |
| Type | Unsigned4 | 0x02: EoE |
| Cnt | Unsigned3 | 邮箱服务计数器( 0 保留, 1 是起始值, 7 以后的下一个值为 1) |
| Reserved | Unsigned1 | 0x00 |
EoE Header | FrameType | Unsigned4 | 0x03 |
| Port | Unsigned4 | 0x00: 发送到非特定端口0x01-0x0F: 选择特定的端口 |
| Last Fragment | Unsigned1 | 0x01: 最后的数据部分 |
| Time Appended | Unsigned1 | 0x00: 不添加时间戳 |
| Time Request | Unsigned1 | 0x00: 不要求发送时间的时间戳 |
| Reserved | Unsigned5 | |
| Result | Unsigned16 | 见表 84 |
表 84 – EoE Result 参数
结果代码 | 含义 |
0x0000 | 成功 |
0x0001 | 未定义的错误 |
0x0002 | 不支持的帧类型 |
0x0201 | 无 IP 支持 |
0x0401 | 无过滤器支持 |
4.7 Set Address Filter 请求
(1) Set Address Filter 请求的属性类型
typedef struct
{
TMBXHEADER MbxHeader;
TEOEHEADER EoeHeader;
BYTE Data[MAX_EOE_DATA_SIZE];
} TEOEFRAGREQ;
(2) Set Address Filter 请求的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Mailbox Header | Length | WORD | N > 0x06: 邮箱服务数据的长度 |
| Address | WORD | 如果主站是客户机,则为源地址;如果从站是客户机,则为目的地址 |
| Channel | Unsigned6 | 0x00 (为将来使用保留) |
| Priority | Unsigned2 | 0x00: 最低优先级…0x03: 最高优先级 |
| Type | Unsigned4 | 0x02: EoE |
| Cnt | Unsigned3 | 邮箱服务计数器( 0 保留, 1 是起始值, 7 以后的下一个值为 1) |
| Reserved | Unsigned1 | 0x00 |
EoE Header | FrameType | Unsigned4 | 0x04 |
| Port | Unsigned4 | 0x00: 发送到非特定端口0x01-0x0F: 选择特定的端口 |
| Last Fragment | Unsigned1 | 0x01: 最后的数据部分 |
| Time Appended | Unsigned1 | 0x00: 不添加时间戳 |
| Time Request | Unsigned1 | 0x00: 不要求发送时间的时间戳 |
| Reserved | Unsigned5 | |
| Fragment Number | Unsigned6 | 0x00 |
| Offset | Unsigned6 | 0x00 |
| Frame Number | Unsigned4 | 0x00 |
EoE Parameter | MAC filter count | Unsigned4 | 计数当前从站上以太网端口接受的 MAC 地址, MAC 地址须符合 ISO/IEC 8802-3。 |
| MAC filter mask | Unsigned2 | 计数当前从站上以太网端口接受的 MAC 地址掩码, MAC 地址须符合 ISO/IEC 8802-3。 |
| Reserved | Unsigned1 | 符合 IETF RFC 791 的子网掩码 |
| Inhibit Broadcast | Unsigned1 | 过滤广播报文 |
| Reserved | Unsigned8 | |
(conditional) | List of MAC Address | List of BYTE[6] | 符合 ISO/IEC 8802-3 的 MAC 地址。 |
(conditional) | List of MAC Address Filter | List of BYTE[6] | 符合 ISO/IEC 8802-3 的 MAC 地址。比特被置位意味着目标 MAC 地址的该地址位与 MAC地址列表中的相应条目进行比较 |
4.8 Set Address Filter 响应
(1) Set Address Filter 响应的属性类型
typedef struct
{
unsigned FrameType : 4;
unsigned Port : 4;
unsigned LastFragment : 1;
unsigned TimeAppended : 1;
unsigned TimeRequested : 1;
unsigned Reserved : 5;
unsigned Result : 16;
} TEOEPARAHEADER;
typedef struct
{
TMBXHEADER MbxHeader;
TEOEPARAHEADER EoeHeader;
} TEOEFRAGREQ;
(2) Set Address Filter 请求的编码
帧部分 | 数据字段 | 数据类型 | 值/描述 |
Mailbox Header | Length | WORD | N = 0x08: 邮箱服务数据的长度 |
| Address | WORD | 如果主站是客户机,则为源地址;如果从站是客户机, 则为目的地址 |
| Channel | Unsigned6 | 0x00 (为将来使用保留) |
| Priority | Unsigned2 | 0x00: 最低优先级…0x03: 最高优先级 |
| Type | Unsigned4 | 0x02: EoE |
| Cnt | Unsigned3 | 邮箱服务计数器( 0 保留, 1 是起始值, 7 以后的下一个值为 1) |
| Reserved | Unsigned1 | 0x00 |
EoE Header | FrameType | Unsigned4 | 0x05 |
| Port | Unsigned4 | 0x00: 发送到非特定端口0x01-0x0F: 选择特定的端口 |
| Last Fragment | Unsigned1 | 0x01: 最后的数据部分 |
| Time Appended | Unsigned1 | 0x00: 不添加时间戳 |
| Time Request | Unsigned1 | 0x00: 不要求发送时间的时间戳 |
| Reserved | Unsigned5 | |
| Result | Unsigned16 | 见表 84 |