工控網首頁
>

應用設計

>

睿遠研究院丨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規范解讀