3、Profinet协议基础:RT与IRT通信机制、GSDML文件结构、设备模型

好,咱们进入Profinet的世界。说实话,搞工业通信这么多年,Profinet和EtherCAT是我打交道最多的两个协议。今天这节,我带你把Profinet的底裤扒干净——RT、IRT、GSDML、设备模型,这四个东西搞明白了,后面做互转方案你心里就有底了。

3.1 RT与IRT通信机制:实时性到底差在哪?

很多人一上来就问:“Profinet到底实时不实时?” 这个问题其实问得不够精准。Profinet分两种实时通道:RT(实时)和IRT(等时实时)。说白了,RT是“尽力快”,IRT是“必须准时”。

3.1.1 RT(实时)通道

RT走的是标准以太网帧,但做了优先级标记(VLAN优先级)。它不需要专用硬件,普通交换机就能跑。我在项目中遇到过一条产线,用的就是RT模式,周期时间大概在1ms左右。对于大多数IO控制、阀门岛、变频器来说,这个速度完全够用。

RT的通信流程是这样的:

  • 控制器发送数据帧,带上优先级标签
  • 交换机根据优先级转发,普通数据帧靠边站
  • 设备收到后立即处理,不等待同步时钟

嗯,这里要注意:RT虽然快,但它不保证每个周期的时间抖动。如果你做的是运动控制,尤其是多轴同步,RT就不太行了。

3.1.2 IRT(等时实时)通道

IRT才是Profinet的杀手锏。它需要专用ASIC芯片(比如瑞萨的EC-1、英特尔的ERTEC系列),走的是时间分片机制。我曾经调试过一个六轴机器人项目,用的就是IRT,周期时间做到了250μs,抖动控制在1μs以内。

IRT的核心机制是“时间槽”:

  • 每个周期分成几个时间片:IRT时间片、RT时间片、TCP/IP时间片
  • IRT时间片内,只有IRT设备能发数据,其他设备闭嘴
  • 时间片由同步时钟(Sync Master)统一调度

关键区别一句话总结:

RT = 优先级插队,IRT = 专车专用通道。

你想想看,如果产线上既有普通以太网设备,又有Profinet设备,IRT怎么保证不冲突?答案就是——IRT设备必须用交换机,而且交换机要支持IRT的“切割”功能。普通交换机做不到这一点。

3.2 GSDML文件结构:设备的“身份证”

做Profinet项目,你绕不开GSDML文件。它全称是“General Station Description Markup Language”,说白了就是一个XML文件,描述了设备的所有能力。

我记得刚入行时,第一次打开GSDML文件,看到密密麻麻的XML标签,头都大了。后来摸清了套路,发现其实就几个核心部分:

3.2.1 文件头部

<?xml version="1.0" encoding="utf-8"?>
<ISO15739Profile>
  <ProfileHeader>
    <ProfileIdentification>PROFINET_IO</ProfileIdentification>
    <ProfileRevision>2.4</ProfileRevision>
    <ProfileName>PROFINET IO Device</ProfileName>
  </ProfileHeader>

这部分定义了协议版本。我个人习惯先看ProfileRevision,如果是2.3以下,很多新功能不支持,比如IRT、系统冗余。

3.2.2 设备模型描述

这是GSDML的核心。它定义了设备有哪些槽位、子槽位、通道。举个例子:

<DeviceAccessPointItem ID="DAP1">
  <SystemDefinedSubmoduleList>
    <SubmoduleItem ID="Sub1">
      <IOData>
        <Input>
          <DataItem ID="DI1" DataType="Bool" Length="1"/>
        </Input>
        <Output>
          <DataItem ID="DO1" DataType="Bool" Length="1"/>
        </Output>
      </IOData>
    </SubmoduleItem>
  </SystemDefinedSubmoduleList>
</DeviceAccessPointItem>

你看,一个数字量输入点(DI1)和一个数字量输出点(DO1),就这么定义出来了。实际项目中,一个设备可能有几十上百个这样的通道。

3.2.3 通信参数

这部分定义了设备支持哪些实时等级、最小周期时间、支持的连接数等。我曾经踩过一个坑:某款第三方IO模块,GSDML里写的是支持IRT,但实际调试时死活同步不上。后来发现是它的“MinDeviceInterval”参数写的是1ms,但IRT要求至少250μs。嗯,这就是GSDML和实际硬件不匹配的典型案例。

避坑指南:

我曾经因为GSDML文件版本不对,导致整个项目组加班三天。后来养成了习惯:拿到设备后,第一件事就是去官网下载最新版GSDML,不要用光盘里附带的。

3.3 设备模型:从DAP到Submodule

Profinet的设备模型是分层的,我习惯把它理解成“俄罗斯套娃”:

  • 设备(Device):最外层,比如一个远程IO站
  • DAP(Device Access Point):设备接入点,相当于设备的“大脑”,负责通信管理
  • 槽位(Slot):物理插槽,比如插了8通道DI模块的槽位1
  • 子模块(Submodule):槽位里的逻辑功能单元,比如一个DI通道
  • 数据项(DataItem):最底层的数据点,比如一个布尔量

举个例子,一个16通道数字量输入模块,它的设备模型可能是这样的:

层级 名称 说明
设备 ET200SP 西门子分布式IO站
DAP DAP_1 接口模块,负责Profinet通信
Slot 1 DI_16x24VDC 16通道数字量输入模块
Submodule 1 DI_Channel_1 第1个输入通道
DataItem Input_1 布尔量,0或1

为什么要把模型搞得这么复杂?你想想看,如果是一个带诊断功能的模拟量模块,它除了数据通道,还有诊断通道、参数通道。没有这套分层模型,工程师配置起来会疯掉。

我的小技巧:

做互转方案时,我习惯先把Profinet侧的设备模型画成树状图。每个DAP下面挂哪些Slot,每个Slot下面有哪些Submodule,一目了然。然后对照EtherCAT的从站设备描述(ESI文件),找到对应的映射关系。这一步做扎实了,后面写代码就是体力活了。

好了,Profinet的基础就讲到这里。RT和IRT的区别你记住了吗?GSDML文件知道怎么看了吗?设备模型能画出来了吗?下一节我们讲EtherCAT协议基础,到时候你会发现,两个协议虽然长得不一样,但核心思想是相通的。