PROFINET IO设备协议栈的基本实现思路

发布时间 2023-09-27 09:37:39作者: MichaelChen-99

PROFINET IO协议的难点在于其协议状态机不是一个分层的上下层关系,而是一种复杂的关系,因为各个状态机都有可能有接口调用,耦合度很高,一口气完整实现协议栈难度很大。

PROFINET IO设备通信的一般过程

对于一个PROFINET IO设备来说,其实就是一种协议转换器,将连接的输入模块的数据,如AI、DI等,用PROFINET协议打包成PROFINET IO协议的字节流。将PROFINET IO协议中的字节流转换成输出模块的数据,转成DO、AO等。因此可以考虑从IO设备和IO控制器通信的角度去分解协议栈及其协议机组成。

PROFINET IO设备协议栈实现简化思路

PROFINET IO设备的通信协议主要用于完成与IO控制器的通信,其中通信过程主要包含有:寻址流程、组态流程、数据交互流程和报警流程。如果说以上通信流程的每一个环节对应一种协议机,那么可以考虑用一种循序渐进的实现思路,考虑使用一种基本的代码框架来实现以上的流程,就可以满足大部分PROFINET IO设备的基本应用。

过程 协议 功能 层级
寻址和设置 DCP 地址发现与设置 数据链路层
组态 CMRPC RPC包括参数读写 基于UDP
IO数据 CPM PPM 接收和发送 数据链路层
报警 Alarm 报警 数据链路层

基于LwIP的协议栈设计

设计通信协议栈程序,需要具备内存管理、任务管理、进程间通信、信号量、时钟、定时处理等功能,从头开始难度巨大,而且容易出错。因此在一个已有成熟的代码体系中做升级比较合适,LwIP框架体系就十分满足要求,正所谓站在巨人的肩膀上看得远。

LwIP已经在arp.c中实现了数据链路层数据包的分发,因此只需在该文件中增加PROFIENT实时报文类型和LLDP报文类型的帧处理,保证实时数据优先处理,也就不需要另外设计一层映射协议机(LMPM)。

小结

一个基于嵌入式OS的LwIP协议栈采用分层架构,作为一款轻量级的TCPIP协议栈,不仅包括IP、UDP、ARP等协议,还实现了内存管理、数据包管理、时钟、定时等功能,简直就说居家旅行,开发新协议栈的第一选择。