RT Class 1 周期帧说明(0x8892)
本文档为简化级说明:描述本产品数据面(周期帧处理)的最小字段集,用于 SDK 用户理解周期数据行为。完整规范以 IEC 61158 / PROFINET 标准为准。
1. 实时等级
| 项 | 值 |
|---|---|
| 协议族 | PROFINET IO(RT Class 1) |
| 以太网类型 | 0x8892(PROFINET RT 帧) |
| 帧环 | 0x8892(RT 周期/非周期)+ 0x88CC(LLDP,可选) |
| 实时性 | 常规周期报文(RT Class 1),非 IRT / RTC3,无硬实时保障 |
| 周期 | 1 ms 起(可配,普通线程 + DPC 定时器) |
2. 以太网帧头
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination MAC(组播/单播) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source MAC(从站 MAC) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| EtherType = 0x8892 | FrameID(2 字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PROFINET 负载(见下) |
FrameID 决定 PDU 类型(常用值,简化级):
| FrameID 范围 | 用途 |
|---|---|
0x0000 | 保留 |
0x0100 | 实时周期数据(RTC,PPM) |
0x0200 | 实时周期数据(RTC,CPM) |
0x8000-0xFFFF(部分) | 非周期 / 报警(Alarm 高优先级等) |
驱动按已建立的 IOCR 匹配 FrameID 与方向(GSDML 标准口径):PPM(Provider)发输入数据(GSDML
<Input>,从站 → 控制器),CPM(Consumer)收输出数据(GSDML<Output>,控制器 → 从站)。本产品实现内部区名为应用视角反转命名,见 §4 口径归一说明。
3. RTC 周期帧(简化结构)
周期数据帧在以太网头之后依次为:
+- PROFINET 报文头(FrameID 已含在以太网头中) -+
| DataStatus(1 字节) | CycleCounter(2 字节) |
+------------------------------------------------+
| IO 数据区(N 字节) |
| PPM: 输入数据(GSDML <Input>,应用生产) |
| + 各块 IOPS 状态字节 |
| CPM: 输出数据(GSDML <Output>,控制器下发) |
| + 各块 IOCS 状态字节 |
+------------------------------------------------+
| Padding(对齐) |
+------------------------------------------------+
| 字段 | 长度 | 说明 |
|---|---|---|
DataStatus | 1 B | 数据状态:Primary / Redundancy / DataValid / ProviderState 等位 |
CycleCounter | 2 B | 周期计数器,从站侧单调递增,可用于丢帧/乱序检测 |
| IO 数据区 | N B | 按组态布局排列的过程数据块 |
| IOPS/IOCS | 各 1 B/块 | 数据一致性状态(见概念说明) |
4. 驱动数据面处理(从站视角)
★ 口径归一(audit-2026-08-14 P0 跨层方向反转修复):全文档以 GSDML 标准语义为准 —
<Input>= 从站 → 控制器(设备发送,PPM 0x0100);<Output>= 控制器 → 从站(设备接收, CPM 0x0200)。实现内部(驱动共享内存区名 / 服务 PnetProcessImage 区名 //api/io字段名)采用应用视角反转命名:内部“输入区” = 应用从 PDI 收(控制器 → 设备,即 GSDML 输出方向,区尺寸 = ΣOutputLength);内部“输出区” = 应用给 PDI 发(设备 → 控制器,即 GSDML 输入方向,区尺寸 = ΣInputLength)。SDK 按标准命名做补偿映射: SDK I 区 ↔ 服务 Output 区(PPM),SDK Q/DB 区 ↔ 服务 Input 区(CPM)。 不对称工程(Input ≠ Output)下,各区尺寸与 GSDML 声明严格对应。
驱动接收路径(CPM,控制器→从站):
0x8892 帧 → 按 FrameID 匹配 IOCR → 解包 GSDML <Output> 数据(ΣOutputLength)+ IOCS
→ 写入共享内存“输入区”(驱动命名) → 服务 PnetProcessImage.Input 区
→ SDK 地址化 Read*(Q/DB 区,补偿映射)
驱动发送路径(PPM,从站→控制器):
应用经 SDK 地址化 Write*(I 区,补偿映射到服务 Output 区)
→ 服务 PnetProcessImage.Output 区 → 驱动共享内存“输出区”(驱动命名)
→ 驱动周期定时器封包 0x8892 帧(GSDML <Input> 数据,ΣInputLength)
→ 从绑定网卡发出
- 热路径不分配内存:TX NBL / MDL / 帧缓冲在初始化时预分配,周期路径零分配。
- 看门狗:驱动维护周期看门狗,控制器连续丢帧/超时后按组态行为上报(不主动断链,见下)。
5. 状态与看门狗(简化)
| 事件 | 驱动行为 |
|---|---|
| 收到 CPM 输出帧 | 更新 IOCS,刷新看门狗 |
| 看门狗超时(未收到控制器周期帧) | 记录丢帧计数 + 诊断条目;不主动关闭连接(由 P-Net 栈按协议超时释放) |
| 应用未写输入区 | 输入区 IOPS 标 Bad 发出(数据无效如实上报,不伪造 Good) |
6. 与 0x88CC(LLDP)的关系
0x88CC帧用于链路层发现协议(LLDP),服务侧控制面周期发送/接收,用于邻居信息与工程诊断。- 驱动仅透传或旁路 LLDP 帧到服务;周期数据走
0x8892主路径。
7. 不支持的(R81 真规格口径)
| 能力 | 状态 |
|---|---|
| IRT(RT Class 3 / RTC3) | 不支持 |
| 精确时间同步(PTP 全同步) | 不支持(RT Class 1 无此要求) |
| 硬实时隔离保障 | 不做(普通线程 + DPC,无核隔离 / TSC 校准 / soak 承诺) |