睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

科技堆里的狠货 2025-11-28 阅读:3269 评论:0

前言

书接上文,这周我们就开始深入解读下PD与OD模块。PD即周期性数据,每次主从站间通信都会交互的数据类型,它分为PDin与PDout。OD的全称是On-Request Data,即在请求时才会应的报文。OD模块通常分为三个部分,ISDU、Command和Event。

01

主站消息状态机回顾

上回我们讲到消息处理模块最重要的M-Sequence Type以及主从站的消息状态机,主站的消息状态机会稍微复杂一点,我们在开发主站协议栈的时候,也碰到一些无法理解的规则。

在规范中DL_WRITE和DL_READ都是通过Page通道读写通信参数的,应该都是在Startup阶段才能进行,是不允许在PREOP和OP阶段进行的。但是小编在1.1.3版本时就发现一个问题,从PREOP切换到OP时,需要DL_WRITE发送切换模式的命令,同时发送一个masterCycletime的写入指令,这个指令也是DL_Write的命令。

这就造成了一个困惑,虽然在状态机中DL_Write_DeviceMode这个命令属于单独的命令,在PREOP阶段也适用,但是DL_Write(0x01, "MasterCycleTime")可是确确实实的DL_Write,理论上不应该出现在PREOP阶段的它,却出现了,直到目前最新的1.1.4版本尚未给任何说明。

具体如下图,DL_Write(0x01, "MasterCycleTime")这条命令是在从PREOP切换到OP前发出的,也就是其还在PREOP阶段。

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

好了,我们希望下个版本能够解决这个问题,同时各位小伙伴也可以测试一下自家的主站是否会发出DL_Write(0x01, "MasterCycleTime")这个命令。

这条命令仅仅在这个图中出现了一次,在其他地方再无提及,猜测这个命令未必是必须的,因为主站通知从站我的mastercycletime也没有多大作用,毕竟从站都是被动式应答,只有主站询问了,从站才会回答。

02

关于ProcessData

下面来讲讲PD处理模块,在1.0时代,IO-Link规范规定了PD交互的多种方式,要求每次交互就2字节,PD和OD交错运行,PD多余2个字节,就得拆包,多次发送,这个效率可想而知,非常低下,因此1.1版本做了重大改革,废除了这种低下的方式。

1.1版本后,每次最大32字节PD数据,中间还可以夹带OD数据,大大提升发送效率;当然对于像RFID这种上百个字节的,还是需要拆分字节,多次发送,再组包。

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

03

主从站的PD状态机

3.1 主站PD状态机

为了兼容1.0版本,状态机里还把遗留的PDInInterleave放到了里面,从1.1版本来看,PD就两个状态,Inactive状态(即Startup和PREOP所处的装状态)和PDSingle状态(即OP所处的状态)。

3.2从站PD状态机

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

从站的PD状态机也比较简单,从inactive状态被激活后,进入active状态,Handle PD主要是1.0版本的遗留,在多个字节数据挨个处理的时候来回在PD ActiveHandle PD之间交互,而1.1版本,直接进行DL_PDInputUpdate就行了。

3.3总结

综上所述,PD就是简单的收发数据,没有太多的处理,应该算IO-Link协议栈内部最简单的模块了。

那么拿到睿远的IO-Link协议栈怎么处理PD数据呢,虽然简单,但PD也是IO- Link最重要的数据,对于老版本的睿远协议栈,可以直接操作PDE_PDInPDE_PDOut这个指针就行了。

按照大端排序的原则,PDE_PDIn[0]就是上传主站PD数据的最左边的那个字节,因为PDE_PDIn的内存是动态创建的,故要避免指针越界的问题。

在新版本中我们封装了一个函数:

UIntegerT8 CeresStackSetPDInData(UIntegerT8 *pdin_data, UIntegerT8 pdin_len)

通过该函数,可以尽量避免指针越界的问题。

对于SSP的版本,进一步封装了直接给测量值赋值的函数,这个就后续在SmartSensorProfile这个章节再讲了。

04

主站的OD数据处理

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

上图是主站的状态机,主站的On-request处理程序是DL-Mode处理模块中“Startup_2”“PreOperate_3”和“Operate_4”状态下的一个从属状态机。它控制其他三个状态机,即ISDU处理模块、command处理模块和Event处理模块的状态机,默认情况下,它始终在ISDU状态。

1

当收到EventFlag时,状态机将切换到Event处理模块,在完整读取Event信息后,它将返回到ISDU处理状态;

2

当收到DL_Control,则状态机将切换到Command处理模块;完成相关命令后,状态机将返回到之前的状态(ISDU或Event状态)

3

当收到DL_Write_DeviceMode命令,也会切换到Command模块,用于处理DL Mode的状态切换,这是1.1.4版本增加的内容

05

从站的OD数据处理

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

从站对OD的请求重定向4个独立的小模块:

Param读写模块

该模块主要读写DPP部分的数据,专门走了Page通道

Command模块

用于切换从站的状态,保持和主站的同步

ISDU模块

读写ISDU

Event模块

读写Event

06

DPP&ISDU的处理

DPP即Direct Parameter Page,其实属于ISDU部分,DPP1对应ISDU的Index 0x00,DPP2对应ISDU Index 0x01。

规范中明确如果不支持ISDU,就直接采用DPP1和DPP2进行参数的读写,这是为了方便一些简化版本的协议栈进行简单的IO-Link控制。

那么我们看DPP和ISDU在规范中的定义:

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

DPP1和DPP2就是从属于ISDU的,只是协议栈规定了DPP走的PAGE通道,其余ISDU走ISDU通道,个人认为,其把简单的东西复杂化了,如果合二为一岂不是更好。

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

其中0x00:MasterCommand主要用于接收主站的各类命令,进入Command模块进行处理:

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

07

MasterCycleTime&MinCycleTime

MinCycleTime是从站主动上传汇报给主站的循环时间,而MasterCycleTime则是主站最终根据字节大小,从站汇报的循环时间决策出的实际时间,都是采用Timebase|Multiplier的方式,具体如下:

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

08

M-sequence Capability编码格式

这个编码在前面的章节中已经详细介绍,这里就不多说了,直接看一个例子:

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

这是从站回复的一个示例,这回复的0x21这个数据中,表明了自己分别在Preop和OP模式下的OD字节大小

09

ProcessDataIn& ProcessDataOut

PDIn和PDOut的字段,都是采用是否Byte位和Length来组成,把一个字节的作用抠到了极致。

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

睿远研究院丨IO-Link规范解读(九): PD与OD处理模块详解

结语

本期的内容就先到这里,以上就是本期PD处理模块、OD处理模块与DPP主要字节的解析,DPP作为IO-Link的关键参数,包含了IO-Link设备的关键信息。下一期,我们就开始介绍与参数配置相关的ISDU部分,这也是IO-Link技术的核心价值体现。

热门文章
  • 在中超联赛赛场北京成都球迷高呼:北京加油,成都雄起

    在中超联赛赛场北京成都球迷高呼:北京加油,成都雄起
      9月14日晚,中超联赛成都蓉城对北京国安的比赛在成都凤凰山体育场举行。首都文明办工作人员到现场力促两地球迷的友好互动,引导球迷文明观赛。   开赛前,两地球迷早早来到赛场,成都球迷在赛场通道为等待入场的北京球迷拉歌拍照。一边是北京球迷激昂的歌声,一边是身穿“雄起”“成都”等字样球衣的成都球迷,画面和谐温馨。首都文明办给两地球迷代表赠送了“向北京榜样学习”宣传品,呼吁两地球迷在场上是对手,在场下是朋友。合影留念时,成都球迷高喊“北京加油”,北京球迷高喊“成都雄起”。...
  • 防风防寒!北京今天晴朗伴大风寒意十足 周末将迎小幅升温

    防风防寒!北京今天晴朗伴大风寒意十足 周末将迎小幅升温
      中国天气网讯 今天(12月27日),北京天气晴间多云,最高气温2℃,白天北风劲吹,阵风可达六至七级,风寒效应明显。本周末,北京仍以晴为主,风力不大,气温将有小幅上升。   昨天,北京晴冷在线,气温继续下跌,南郊观象台最高气温仅有2.6℃,加上风力较大,体感十分寒冷。   北京市气象台预计,今天白天晴间多云,北风三四级(阵风六七级),最高气温2℃;夜间晴间多云,北风二三级间四级,最低气温零下7℃。   明后两天,北京仍以晴为主,风力不大,最高气温将略升至5℃,最低气温...
  • 新手如何开始跑步?

    新手如何开始跑步?
    大家好,我是小贝~ 有喜欢我的分享的可以给我点个关哟~多多互动吧~🫰 跑步是最简单的运动之一。人类进化30万年,跑步是基因自带的能力。可以说天生人人都会跑,人人都可以跑。 所以,很多平时不跑步的人,想入门跑步,建议从以下4个方面开始 一、跑步一定要穿跑鞋! 10年前我跑步穿平时的休闲鞋跑了2周,跟腱受伤!因为休闲鞋没有缓震效果;对膝盖和跟腱的损害较大。 专业跑鞋鞋底有缓震设计,能减少跑步时对膝盖和脚踝的冲击力。保护膝盖和脚踝不容易受伤。 二、注意跑步频率和强度。 1、频率...
  • 西南地区持续阴雨天气 华北黄淮等地大气扩散条件逐步转差

    西南地区持续阴雨天气 华北黄淮等地大气扩散条件逐步转差
      摘要:   国内方面,昨日,全国降水整体较弱;内蒙古、东北地区等地出现大风降温天气。未来三天,青藏高原及云南、四川、贵州等地多阴雨天气,关注局地强降雨或持续降雨可能引发的次生灾害。   全球方面,昨日,欧洲东部美国东南部等地出现强降雨。未来三天,飓风“米尔顿”继续影响美国东南部等地;强冷空气影响中亚等地;欧洲大部大范围降水降温。   一、国内天气情况   1.实况   全国降水整体较弱 内蒙古东北地区等地出现大风降温天气   昨日8时至今日6时,全国降水整体较...
  • 大雾黄色预警:京津冀等8省市部分地区有大雾 局地强浓雾

    大雾黄色预警:京津冀等8省市部分地区有大雾 局地强浓雾
      据报道10月14日电据中央气象台网站消息,预计10月14日早晨至上午,河北中南部、北京、天津西部、山东西部、山西中东部、陕西北部、河南东北部和南部部分地区、湖北中部等地有大雾天气,其中,河北中南部、北京西部、山西中部、陕西北部、湖北中部等地的部分地区有能见度低于500米的浓雾,局地有不足200米的强浓雾。中央气象台14日6时继续发布大雾黄色预警。   此外,14日,华北中南部、黄淮中西部、汾渭平原等地大气扩散条件较差,有轻至中度霾,其中,北京南部、河北西部沿山部分地区有...