2. PROFINET通信原理与Anybus实现
PROFINET并不是单一协议,而是建立在标准以太网之上的工业通信体系。它把“非实时”的工程组态、诊断数据与“强实时”的循环过程数据放在同一根网线上传输,靠的是不同的通信通道和优先级机制。理解这一点,是理解Anybus模块如何工作的前提。
一、三类通信通道:NRT、RT、IRT
PROFINET把通信按实时性要求分成三个层次。最基础的是NRT(Non-Real-Time,非实时),走标准TCP/UDP/IP栈,用于设备参数读写、组态下载、诊断记录上传等,周期通常在几十到几百毫秒,对抖动不敏感。中间层是RT(Real-Time,实时),它绕过TCP/IP,直接在以太网层用专用的以太类型0x8892封装帧,配合VLAN优先级(PCP=6)和交换机上的优先级队列,实现1~10ms量级的循环数据交换,抖动可控制在微秒级。最高层是IRT(Isochronous Real-Time,等时同步实时),在RT基础上增加了时间同步和带宽预留,周期可低至31.25µs,抖动小于1µs,用于运动控制这类多轴同步场景。
三者的关键差别在于:RT靠“优先级”抢带宽,IRT靠“时间片”独占带宽。IRT要求整条链路上的交换机都支持IRT调度,普通交换机无法参与;而RT只要交换机支持优先级队列即可,这也是现场大量使用RT的原因。
二、RT的循环机制:提供者/消费者模型
RT通信采用提供者/消费者(Provider/Consumer)模型。以典型的IO设备为例:控制器(Provider)按设定周期把输出数据推给设备,设备(Provider)同时把输入数据推回控制器,双方都是消费者。每个方向的数据被组织成IO数据对象,由IOPS(I/O Provider Status)和IOCS(I/O Consumer Status)两个状态字节标记数据有效性。IOPS由提供者填写,表示“我这份数据是好的”;IOCS由消费者填写,表示“我收到的数据可用”。当设备掉线或数据无效时,IOPS会变为BAD,控制器据此触发替代值或报警,而不是继续使用旧数据。
循环周期由控制器在组态时设定,例如1ms、2ms、4ms。设备必须在该周期内完成数据准备和发送,否则会触发看门狗超时。Anybus模块内部用独立的实时任务处理这一过程,保证周期抖动可控。
三、IRT的时间同步与带宽预留
IRT在RT基础上引入两个关键机制。第一是时间同步:通过PTCP(Precision Transparent Clock Protocol,精度透明时钟协议)让链路上所有设备共享同一个时间基准,同步精度可达亚微秒级。第二是带宽预留:把通信周期划分为“红色阶段”和“绿色阶段”,红色阶段只允许IRT帧通过,且每个IRT帧在每台交换机上的转发时刻是预先计算好的,绿色阶段才允许RT和NRT帧通行。这样IRT帧的传输路径和时间完全确定,不受其他流量影响。
Anybus的IRT型号模块内部集成了支持PTCP的实时以太网控制器和相应的调度逻辑,能够在硬件层面识别并处理IRT帧,而普通Anybus RT模块只处理RT帧。选型时必须根据控制器是否启用IRT、以及网络中的交换机是否支持IRT来决定。
四、GSD文件:设备的“身份证”与“说明书”
GSD(General Station Description)文件是PROFINET设备接入组态工具的必备文件,通常以XML格式提供,扩展名为.gsdml。它描述的不是程序,而是设备的“能力清单”:设备标识(VendorID、DeviceID)、支持的通信类型(RT/IRT)、模块化结构(插槽、子模块)、每个模块的输入/输出数据长度、参数列表、诊断信息定义、以及设备支持的波特率和协议版本。
组态工具(如西门子TIA Portal、博途或第三方PROFINET组态软件)读取GSD文件后,才能在硬件目录中显示该设备,并允许工程师拖拽组态、分配设备名称和IP地址。没有GSD文件,控制器就无法知道该设备有多少输入输出、参数如何设置,也就无法建立循环通信。
Anybus模块随附对应的GSDML文件,文件中已经按模块型号定义了插槽结构。例如一个支持32字节输入/32字节输出的Anybus CompactCom模块,其GSD文件中会声明一个主模块和若干子模块,每个子模块对应一段IO数据。工程师在组态时选择正确的模块型号,工具会自动生成匹配的IO配置。
五、Anybus模块的协议栈架构
Anybus模块内部采用分层架构,从下到上大致分为四层。最底层是硬件与实时以太网控制器,负责物理层收发、帧过滤、优先级队列和IRT调度。往上是PROFINET协议栈,实现RT/IRT帧的组装与解析、PTCP时间同步、IOPS/IOCS状态管理、报警和诊断处理。再往上是应用接口层,把PROFINET的IO数据映射为模块内部的寄存器或对象,供上层应用读写。最上层是主机接口,Anybus提供并行总线、SPI、UART或以太网等多种主机接口,让用户MCU或PLC通过标准API访问过程数据。
这种分层的好处是:用户不需要实现PROFINET协议栈,只需按Anybus的API读写数据,模块内部自动完成协议封装、周期调度和状态维护。当网络从RT升级到IRT时,只需更换支持IRT的模块型号,主机侧代码基本不变。
六、从组态到通信:一次完整的接入过程
把上述知识串起来,Anybus设备接入PROFINET的典型过程如下。第一步,在组态工具中导入Anybus模块对应的GSDML文件,硬件目录中出现该设备。第二步,将设备拖入网络视图,分配设备名称(如“anybus-io-01”)和IP地址。第三步,根据实际应用选择模块型号和IO数据长度,例如选择“32字节输入/32字节输出”的配置。第四步,控制器生成组态数据并下载到设备,设备根据GSD描述建立循环通信。第五步,控制器按设定周期(如2ms)发送输出数据并接收输入数据,同时监控IOPS/IOCS状态。若设备掉线,IOPS变为BAD,控制器按组态设置触发替代值或报警。
整个过程不需要用户编写PROFINET协议代码,Anybus模块内部已经完成了协议栈、状态管理和实时调度。用户只需要在主机侧通过API读写过程数据,并关注GSD文件中的模块配置是否与实际硬件一致。如果组态时选择的模块型号与设备实际型号不匹配,通信会建立失败或数据长度错误,这是现场最常见的接入问题之一。