睿遠(yuǎn)研究院丨IO-Link M序列解析
前言
上回咱們分解到IO-Link的消息處理模塊,消息處理模塊就是對(duì)每個(gè)字節(jié)進(jìn)行初步分析,按照不同的通道交給不同的處理模塊來處理,可以認(rèn)為他是初步的消息分揀機(jī)制,合格的消息交給后續(xù)處理,不合格的消息直接丟棄,減少后端工作量。
那么今天我們就來深入研究下,消息處理模塊中提到的各類M-Sequence,以及主從站的消息處理狀態(tài)機(jī)!
01 M-Sequence Type
上回講到主站發(fā)出來的MC和CKT兩個(gè)報(bào)文,其中CKT 前的2bit是指M-Sequence Type,那么這個(gè)M-Sequence type到底有啥用,我們看規(guī)范里M-Sequence有好多種,到底怎么區(qū)分,今天就來好好講講。
在規(guī)范的A.2.6部分,就詳細(xì)介紹了關(guān)于STARTUP、PREOPERATE、OPERATE三種模式下的M-Sequence Type。
01 / STARTUP下的M-Sequence Type
上圖就是STARTUP模式下的M-Sequence Type,規(guī)范就定了一種即TYPE_0,1字節(jié),同時(shí)規(guī)定了其最小recovery time是100TBit。
這個(gè)最小的recovery time簡(jiǎn)單理解為循環(huán)時(shí)間就行,也就是主站每隔100TBit主動(dòng)發(fā)起數(shù)據(jù),這個(gè)時(shí)間和通訊速率有關(guān)系,如果是COM3,則是400多us的時(shí)間;如果低于這個(gè)時(shí)間在規(guī)范看來是不合理的。
02 / PREOPERATE下的M-Sequence Type
PREOPERATE模式下,M-Sequence Type 可以有TYPE_0和TYPE_1,TYPE_1又分解為TYPE_1_2和TYPE_1_V,也就是OD字節(jié)長(zhǎng)度不一樣而已;
一般市面上的從站,都是TYPE_1_V類型,字節(jié)長(zhǎng)度在8字節(jié)左右,也有部分是2字節(jié),比如巴魯夫的某些產(chǎn)品就是2字節(jié)。
M-Sequence code就是對(duì)他的編碼,用于在IO-Link報(bào)文中進(jìn)行傳輸,可以看到PREOPERATE模式下有4個(gè)code可以用。
03 / OPERATE下的M-Sequence Type
再來看看OPERATE下的M-Sequence Type,其一下子增加了好多code,有21個(gè)之多,但大部分都是重復(fù)的0,而且沒有2和3這兩個(gè)code,很是奇怪。
那么這么多code怎么來區(qū)分呢,它是根據(jù)OD的字節(jié)和PD字節(jié)來區(qū)分的。
??1~4行:
這里很好辨認(rèn),就是OD字節(jié)不同,其code也不同,OD的字節(jié)只有1,2,8,32四種,沒有其他字節(jié)選項(xiàng);
??5~13行:
OD都是1個(gè)字節(jié)(除了兼容1.0版本OD是2個(gè)字節(jié)外),然后根據(jù)PD的字節(jié)數(shù),拆分為多個(gè)類型,覆蓋TYPE_2_1~TYPE_2_V;
??14~21行:
根據(jù)不同的OD字節(jié),確定不同的code,但都是TYPE_2_V類型。
02 主站消息處理狀態(tài)機(jī)
03 從站消息處理狀態(tài)機(jī)
T1
從Inactive_0到Idle_1,通過消息模塊的初始化實(shí)現(xiàn)。
T2
從Idle_1到GetMessage_2,當(dāng)物理層有中斷,接收到一個(gè)報(bào)文后,觸發(fā)PL_Transfer事件,在OPERATE狀態(tài)下動(dòng)"MaxUARTframeTime"和"MaxCycleTime"定時(shí)器。
T3
持續(xù)接收?qǐng)?bào)文,每次接到報(bào)文需要重新啟動(dòng)"MaxUARTframeTime"計(jì)時(shí)器,用于判斷下一個(gè)消息是否會(huì)超時(shí)。
T4
判斷報(bào)文接收完畢后,觸發(fā)”Completed”事件,進(jìn)入CheckMessage_3狀態(tài),重置"MaxUARTframeTime"定時(shí)器,直到下次收?qǐng)?bào)文的循環(huán)再開啟。
T5
檢查接收的報(bào)文是否有錯(cuò)誤,如果沒有錯(cuò)誤則開始發(fā)送相關(guān)回應(yīng)的報(bào)文,需要調(diào)用OD.ind和PD.ind服務(wù)。
T6
編譯并調(diào)用PL_Transfer.rsp服務(wù)回應(yīng)報(bào)文,此時(shí)設(shè)備發(fā)送響應(yīng)消息。
T7
檢查主站發(fā)送的報(bào)文,如果是Checksum Error,則直接回到Idel狀態(tài)。
T8
檢查主站發(fā)送的報(bào)文,如果不是checksun error ,而是M-Sequence的Type錯(cuò)誤,則通過MHInfo(ILLEGAL_MESSAGETYPE)將錯(cuò)誤指示給DL-mode處理程序。
T9
在GetMessage_2狀態(tài)下,如果超過了最大MaxUARTframeTime,則返回Idle狀態(tài),并重置"MaxUARTframeTime"和"MaxCycleTime"兩個(gè)計(jì)時(shí)器。
T10
超過MaxCycleTime時(shí)間,則通知傳感器或者執(zhí)行器采取相關(guān)措施。
T11
從站收到MH_Conf_INACTIVE事件,將狀態(tài)更改為Inactive_0。
結(jié)語
本篇內(nèi)容就先介紹到這里,下期我們開始分解PD和OD處理模塊,還請(qǐng)各位關(guān)注微信公眾號(hào):Rasight,第一時(shí)間獲取內(nèi)容更新!

提交
睿遠(yuǎn)研究院丨IO-Link消息處理模塊
睿遠(yuǎn)研究院丨IO-Link主從狀態(tài)機(jī)解析
睿遠(yuǎn)研究院丨IO-Link數(shù)據(jù)鏈路層解析
睿遠(yuǎn)研究院丨IO-Link物理層編碼解析
【睿遠(yuǎn)研究院】IO-Link物理層概覽