工控网首页
>

应用设计

>

睿远研究院丨IO-Link主从状态机解析

睿远研究院丨IO-Link主从状态机解析

2025/5/21 9:47:24

前言

书接上文,今天我们就来好好聊聊主从站的DL-Mode状态机,还请各位童鞋前排坐好!

01 主站状态机解析

图片

主站的DL-Mode状态机有5个大状态,也是我们很熟悉的建立通信、开始、预操作、操作状态,各个状态之间通过一些命令来切换。

图片

我们看一下每个事件的详细动作:

1 T1

从Idle_0到EstablishComm_1。清除wakeup的重试次数为0

2 T2~T4

从EstablishComm_1到Startup_2。依次以COM3~COM1来传出,一旦传输成功,则激活消息处理程序并配置为COMx

3 T5

从EstablishComm_1到Idle_0。三个速率都未成功,则退回Idle状态,并通知SM模块进入INACTIVE

4 T6

从Startup_2到Preoperate_3。SM模块请求PREOPERATE状态。激活OD、ISDU、Event三个模块进入Active状态,将MSG处理模块切换到PREOPERATE状态

5 T7

从Preoperate_3到Startup_2。 SM模块请求STARTUP状态。将MSG处理模块切换到STARTUP状态,去激活OD、ISDU、Event三个模块,返回STARTUP状态给SM模块

6 T8

从Preoperate_3到Idle_0。去激活所有处理程序,返回INACTIVE状态给系统管理

7 T9

从Preoperate_3到Idle_0。MSG检测到通信中断,则去激活所有处理程序,通知SM模块相关状态

8 T10

从Preoperate_3到Operate_4。 SM模块请求OPERATE状态。激活PD处理程序,将MSG处理模块切换到OPERATE状态;通知SM模块,DL已经进入OPERATE状态

9 T11

从Startup_2到Operate_4。 SM模块请求OPERATE状态。激活OD、ISDU、Event三个模块,将MSG处理模块切换到OPERATE状态

10 T12

从Operate_4到Startup_2SM模块请求STARTUP状态。将MSG处理模块切换到STARTUP状态,去激活OD、ISDU、Event三个模块,返回STARTUP状态给SM模块

11 T13

从Operate_4到Idle_0。SM模块设置SIO模式,去激活相关模块,返回INACTIVE状态

12 T14

从Operate_4到Idle_0。 MSG处理模块通过SM模块,与从站通信中断。去激活所有处理程序,返回COMLOST状态给SM模块

02 从站状态机解析

图片

从站的状态机,看起来是不是和主站的很类似,但从站由于是被动式等待,它不像主站有主动发送3次报文的建立通信过程,它直接等待主站发送某一个速率的报文,一旦匹配就建立连接。其他三个状态和主站基本一致,它的切换主要是主站来发起切换命令。具体的事件如下:

1 T1

从Idle_0到EstablishComm_1,当检测到唤醒电流脉冲时,激活消息处理模块并切换状态;DL_Mode切换到ESTABCOM状态,通知SM模块

2 T2

从EstablishComm_1到Startup_2,当成功建立COM3、COM2或COM1模式中的任意一个传输速率时,切换状态。激活OD和Command模块,DL_Mode切换到COM1、COM2或者COM3,通知SM模块进行Mode的切换

3 T3

从Startup_2到Preoperate_3,当收到MCmd_PREOPERATE命令时,切换状态;当检测到非法的M序列类型时,返回到Startup_2状态

4 T4

从Preoperate_3到Operate_4,当收到MCmd_OPERATE命令时,切换状态;激活PD处理模块,DL_Mode通知SM模块

5 T5

从Startup_2到Operate_4,当收到MCmd_OPERATE命令且设备支持V1.0模式时,切换状态到Operate_4;激活PD处理模块,ISDU处理模块,Event处理模块,DL_Mode通知SM模块

6 T6

从Preoperate_3到Startup_2,当收到MCmd_STARTUP命令时,将状态设置为Startup_2;去使能ISDU、Event模块

7 T7

从Operate_4到Startup_2,当收到MCmd_STARTUP命令时,将状态设置为Startup_2;将模块(PD、ISDU、Event)置为非活动状态

8 T8

从Preoperate_3到Idle_0,当收到MCmd_FALLBACK命令时,等待TFBD的时间,然后将所有模块置为非活动状态,状态设置为Idle_0

9 T9

从Operate_4到Idle_0,当收到MCmd_FALLBACK命令时,等待TFBD的时间,然后将所有模块置为非活动状态,状态设置为Idle_

10 T10

从EstablishComm_1到Idle_0,当唤醒过程失败后,经过一段时间TDSIO后,从站进入SIO模式,将所有模块置为非活动状态,状态设置为Idle_0

11 T11

从Operate_4到Startup_2,当消息处理模块(MessageHandler)检测到非法的M序列类型时,将模块(PD、ISDU、Event)置为非活动状态,状态设置为Startup_2。DL_Mode通知SM模块进入Startup状态

12 T12

从Preoperate_3到Startup_2,当消息处理模块(MessageHandler)检测到非法的M序列类型时,将ISDU和Event handler置为非活动状态,状态设置为Startup_2;DL_Mode通知SM模块进入Startup状态

  写在最后  

如果大家正在使用睿远的从站协议栈,应该会发现其中有两个判断DL-Mode的函数:

图片

第一个是判断当前是否为idle阶段,如果是idle阶段,在收到唤醒报文后,开始尝试建立连接;另一个就是判断当前DL的Mode是在哪个阶段,方便用户判断当前状态。

好了,本篇把主站和从站的DL-Mode状态机详细解析了一遍,相信大家对DL-Mode这个模块应当会更加熟悉了。下一期,我们就开始介绍最最重要的,IO-Link的消息模块。 

审核编辑(
王静
)
投诉建议

提交

查看更多评论
其他资讯

查看更多

睿远研究院丨IO-Link数据链路层解析

睿远研究院丨IO-Link物理层编码解析

【睿远研究院】IO-Link物理层概览

IO-Link通信技术概述

睿远研究院丨IO-Link规范解读