跳到主要内容

PROFINET 从站概念

本文档按「简化级」口径说明从站产品涉及的 PROFINET 核心概念,理解这些概念后即可正确使用 SDK 与 GUI。

1. PROFINET IO 角色

PROFINET IO 网络中有三类角色:

角色说明本产品
IO Controller(IO 控制器)通常是 PLC,发起组态与周期通信对方(西门子 PLC / TIA 组态)
IO Device(IO 设备)现场设备,执行控制器下发的组态本产品(从站)
IO Supervisor(IO 监视器)工程组态 / 诊断站点可选,TIA 在线诊断

IO 数据方向(PROFINET 标准口径):

  • Input(输入):从站 → 控制器。从站把现场数据(传感器等)放入输入区,控制器周期读取。
  • Output(输出):控制器 → 从站。控制器周期写入输出区,从站执行(驱动执行器等)。

注意:此处的 Input/Output 以 IO 控制器视角命名,与 SDK 地址语义一一对应:I 区I0.0 / IB0 / IW2 / ID4,输入面,设备 → 控制器,Write* 发送)、Q 区Q0.0 / QB0 / QW2 / QD4,输出面,控制器 → 设备,Read* 读取)。

2. 槽位(Slot)与子模块(Submodule)

PROFINET 设备模型是「设备 → 槽位 → 子模块」三层:

IO Device
├── Slot 0 # 固定:DAP(Device Access Point,设备访问点)
├── Slot 1 ─ Submodule 0x01 # 模块 1(如 8 DI)
│ └── Submodule 0x8001 # 诊断子模块(可选)
├── Slot 2 ─ Submodule 0x01 # 模块 2(如 8 DO)
└── ...
概念说明在 SDK / GUI 中
Slot(槽位)模块安装位置,编号从 0 开始运行配置 XML SlotLayout(SDK 不暴露配置)
Module(模块)逻辑功能单元(DI / DO / AI / AO / 混合)GUI SlotView 添加模块
Submodule(子模块)模块内可插拔单元,有子槽号与标识SubslotNumber / SubmoduleIdent(运行配置 XML)
DAP(Slot 0)设备访问点,承载设备级诊断与参数GUI 固定存在,不可删除

GSDML 中每个模块/子模块都有 ModuleIdentNumber / SubmoduleIdentNumber,TIA 组态时据此识别。

3. 过程映像(Process Image)

过程映像 = 输入/输出数据区在从站侧的内存副本,由 PnetProcessImage 维护,是过程数据的唯一数据源:

★ 口径归一(audit-2026-08-14 P0 跨层方向反转修复):全文档以 GSDML 标准语义为准 — <Input> = 从站 → 控制器(设备发送,PPM 0x0100);<Output> = 控制器 → 从站(设备接收, CPM 0x0200)。实现内部PnetProcessImage 区名 / /api/io 字段名 / 驱动共享内存区名) 采用应用视角反转命名:内部“Input 区” = 应用从 PDI 收(控制器 → 设备,GSDML 输出方向, 区尺寸 = ΣOutputLength);内部“Output 区” = 应用给 PDI 发(设备 → 控制器,GSDML 输入方向, 区尺寸 = ΣInputLength)。SDK 按标准命名做补偿映射:SDK I 区 ↔ 服务 Output 区(PPM), SDK Q/DB 区 ↔ 服务 Input 区(CPM)。

控制器 ──周期帧(0x8892)──▶ 驱动数据面

PPM/CPM 帧解包/封包
│ 共享内存
PnetProcessImage(服务,唯一数据源)
├── Input 区(内部命名):控制器 → 从站 数据(GSDML <Output>,驱动从 CPM 解包后落盘,
│ SDK 地址化 Read*(Q 区)经补偿映射读取)
└── Output 区(内部命名):从站 → 控制器 数据(GSDML <Input>,SDK 地址化
Write*(I 区)经补偿映射写入,由驱动封装进 PPM)
  • 应用(SDK / 上位机)只与 PnetProcessImage 交互,不直接碰网卡。
  • 输入数据(GSDML <Input>,从站 → 控制器)由应用生产(地址化 WriteBool / WriteInt16 等 I 区写入),驱动按周期自动发出。
  • 输出数据(GSDML <Output>,控制器 → 从站)由驱动按周期接收落盘,应用通过地址化 ReadBool / ReadInt16 等(Q 区)消费。

4. 数据一致性(IOPS / IOCS)

PROFINET 用两套状态标志保证周期数据可信:

标志全称含义
IOPSIO Provider Status数据生产者侧状态:Good / Bad。数据无效时必须标 Bad(如输入区尚无有效数据)
IOCSIO Consumer Status数据消费者侧状态:Good / Bad。消费方检查后回写

周期帧中每个数据块都带状态字节(PPM/CPM 的 Data Status 与 IOPS/IOCS 字段):

  • 发送输入区数据(从站是 Provider)→ 驱动写入 IOPS=Good(数据有效)或 IOPS=Bad(数据无效)。
  • 接收输出区数据(从站是 Consumer)→ 驱动记录 IOCS 供应用查询;应用可主动上报输出区 IOCS。

实际影响:若应用长期不写输入区,控制器侧会看到 IOPS=Bad,可能触发控制器诊断「数据无效」。正确做法是启动后持续周期写输入区(可复用上次数据),保证 IOPS=Good。

5. IOCR(IO Connection Resource)

IOCR 描述一条周期通信连接的资源与方向:

IOCR 类型方向数据内容(GSDML 标准口径;内部区名见 §3 注)周期
PPM(Provider)从站 → 控制器GSDML <Input> 数据(ΣInputLength)+ IOPSRT Class 1 常规周期(1 ms 起)
CPM(Consumer)控制器 → 从站GSDML <Output> 数据(ΣOutputLength)+ IOCS同上

IOCR 生命周期由 P-Net 栈管理(P-Net 栈内部实现),驱动侧维护已建立的 IOCR 收发状态;未建立 IOCR 时周期帧不处理。

6. 通信流程(简化)

1. DCP 发现/配置   控制器经 DCP 发现从站、写 IP/设备名
2. LLDP 邻居发现 从站上报链路邻居(可选)
3. PNIO-CM 连接 控制器发起 AR(Application Relation),协商 IOCR
4. 数据交换 PPM/CPM 周期帧持续收发(含 IOPS/IOCS)
5. 报警/诊断 Alarm 报文(拉模式/推模式)、诊断条目
6. 断开 控制器释放 AR,从站回到待连接状态

运行态语义(服务模式,GET /api/status):state 为设备运行态字符串(Stopped / Initialized / Connecting / Parameterized / Ready / DataExchange / Aborted),connected 表示是否已与 IO 控制器建立周期数据交换(进入 DataExchange 即 true),errorCode 为最近一次 pnet 栈错误码(0 = 无错误;非零语义见各语言 SDK 的 PnetRuntimeErrorCode 枚举:-1 初始化失败 / -2 配置无效 / -3 周期线程失败 / -4 状态非法 / -5 PDI 交换失败)。6 语言 SDK 的服务模式状态查询均透出 connected / errorCode(用户裁定 2026-08-10:错误码是调用契约的一部分,SDK 必须透出服务端 errorCode)。

7. 实时等级边界(R81 真规格口径)

能力本产品对比
RT Class 1 常规周期✅ 支持(1 ms 起,可配)大多数标准从站
IRT / RTC3❌ 不支持运动控制级从站才有
抖动保障普通线程,常规 DPC 定时器,无硬实时承诺区别于 DarraRT 硬实时线(核隔离 + TSC + soak)

相关