睿遠研究院丨IO-Link主從狀態機解析
前言
書接上文,今天我們就來好好聊聊主從站的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規范解讀