本發(fā)明涉及一種基于有限狀態(tài)機(jī)的HMI狀態(tài)遷移方法。
背景技術(shù):
嵌入式產(chǎn)品開發(fā)中,經(jīng)常涉及到HMI狀態(tài)遷移關(guān)系復(fù)雜、設(shè)計困難,代碼編寫工作量大、復(fù)雜的遷移關(guān)系靠人工編寫代碼容易出錯等問題。
現(xiàn)有的嵌入式產(chǎn)品開發(fā)技術(shù)過于底層、工作重復(fù),編輯FSM(有限狀態(tài)機(jī))的邏輯非常底層,而且機(jī)械性十足。我們常常會發(fā)現(xiàn)自己總是在構(gòu)建相似的行為,而且這會花費我們大部分時間。用FSM實現(xiàn)任何設(shè)計都需要做大量工作,且存在編寫代碼容易出錯等問題,進(jìn)而造成生產(chǎn)效率低。
此問題亟需改變。
技術(shù)實現(xiàn)要素:
本發(fā)明為了克服現(xiàn)有技術(shù)的不足,目的旨在提供一種基于有限狀態(tài)機(jī)的HMI狀態(tài)遷移方法,其能夠提高嵌入式產(chǎn)品的開發(fā)效率。
為了解決上述的技術(shù)問題,本發(fā)明提出的基本技術(shù)方案為:
一種基于有限狀態(tài)機(jī)的HMI狀態(tài)遷移方法,尤其地,有限狀態(tài)機(jī)接收和分析判斷觸發(fā)事件,并根據(jù)觸發(fā)事件的類型調(diào)用畫面管理接口或進(jìn)行狀態(tài)轉(zhuǎn)換。
進(jìn)一步,所述有限狀態(tài)機(jī)接收和分析判斷觸發(fā)事件的步驟如下:
S1、啟動有限狀態(tài)機(jī);
S2、有限狀態(tài)機(jī)系統(tǒng)接收觸發(fā)事件;
S3、將觸發(fā)事件插入第一消息隊列;
S4、有限狀態(tài)機(jī)核心從第一消息隊列中取出事件消息并分發(fā)到活動狀態(tài)池中的活動狀態(tài)中;
S5、活動狀態(tài)根據(jù)狀態(tài)矩陣表判斷觸發(fā)事件是否是自身的敏感事件,如果是則調(diào)用功能函數(shù)表的處理函數(shù),并且根據(jù)需要調(diào)用畫面管理接口或進(jìn)行狀態(tài)轉(zhuǎn)換。
進(jìn)一步,所述觸發(fā)事件包括系統(tǒng)事件、硬件按鈕事件、用戶自定義事件。
進(jìn)一步,所述狀態(tài)矩陣表和功能函數(shù)表是通過Excel模板自動生成的。
進(jìn)一步,Excel模板包括所繼承的父狀態(tài)、代碼生成的文件路徑、狀態(tài)繼承關(guān)系、狀態(tài)名稱、初期處理狀態(tài)、狀態(tài)進(jìn)入函數(shù)、狀態(tài)退出函數(shù)、該狀態(tài)所對應(yīng)的所有需響應(yīng)的事件定義、響應(yīng)該事件的處理條件、該響應(yīng)事件的前處理函數(shù)、該響應(yīng)事件的后處理函數(shù)、該響應(yīng)事件的存在的遷移后狀態(tài)。
進(jìn)一步,所述Excel模板設(shè)置四種自定義菜單,所述自定義菜單包括追加子狀態(tài)菜單、狀態(tài)繼承關(guān)系結(jié)構(gòu)樹菜單、檢查狀態(tài)繼承和拼寫邏輯關(guān)系菜單、自動生成狀態(tài)遷移矩陣代碼菜單。
進(jìn)一步,有限狀態(tài)機(jī)啟動時,HMI狀態(tài)遷移主流程步驟如下:
S1、創(chuàng)建HMI有限狀態(tài)機(jī)線程和第二消息隊列;
S2、初始化遷移到HMI根狀態(tài);
S3、從第二消息隊列中讀取觸發(fā)事件消息;
S4、如果未取得觸發(fā)事件消息則返回S3步驟;
S5、如果讀取到觸發(fā)事件消息則分發(fā)觸發(fā)事件;
S6、如果HMI結(jié)束則退出HMI有限狀態(tài)機(jī)線程,否則返回S3步驟。
進(jìn)一步,步驟S5中分發(fā)觸發(fā)事件的處理流程步驟如下:
S1、從活動狀態(tài)池中獲取每個活動狀態(tài);
S2、判斷當(dāng)前觸發(fā)事件是否是該活動狀態(tài)的敏感事件:如果不是該狀態(tài)的敏感事件,則執(zhí)行步驟S6;如果是該狀態(tài)的敏感事件,則執(zhí)行步驟S3;
S3、執(zhí)行前處理函數(shù),則執(zhí)行步驟S4;
S4、如果該狀態(tài)的敏感事件涉及狀態(tài)遷移,則執(zhí)行狀態(tài)遷移處理流程,并接下來執(zhí)行步驟S5;如果該狀態(tài)的敏感事件不涉及狀態(tài)遷移,則執(zhí)行步驟S6;
S5、狀態(tài)遷移處理后,如果存在后處理函數(shù),則執(zhí)行后處理函數(shù);如果不存在后處理函數(shù),則直接跳過S5步驟,執(zhí)行S6步驟;
S6、判斷該狀態(tài)是否是活動狀態(tài)池的最后一個狀態(tài),如果不是,則返回步驟S1活動狀態(tài)池中獲取下一個活動狀態(tài);如果是,則執(zhí)行步驟S7;
S7、結(jié)束處理流程。
進(jìn)一步,所述狀態(tài)遷移處理流程步驟如下:
S1、根據(jù)遷移前狀態(tài)和遷移后狀態(tài)并尋找兩個狀態(tài)的共同父狀態(tài);
S2、執(zhí)行從遷移前狀態(tài)到共通父狀態(tài)路線上所有狀態(tài)的退出處理函數(shù);
S3、從活動狀態(tài)池中刪除遷移前狀態(tài)
S4、執(zhí)行從共同父狀態(tài)到遷移后狀態(tài)路線上所有狀態(tài)的進(jìn)入處理函數(shù);
S5、判斷遷移后狀態(tài)是否存在初始化狀態(tài);
S6、如果存在初始化狀態(tài),則執(zhí)行初始化狀態(tài)的進(jìn)入處理函數(shù),把初始化狀態(tài)作為遷移后狀態(tài),并返回步驟S5;
S7、如果遷移后狀態(tài)不存在初始化狀態(tài),則在活動狀態(tài)池中追加遷移后狀態(tài),結(jié)束處理流程。
本發(fā)明的有益效果是:本發(fā)明把復(fù)雜重復(fù)的狀態(tài)矩陣?yán)^承關(guān)系、狀態(tài)進(jìn)入退出處理、狀態(tài)遷移處理通過填寫Excel模板形式去自動生成狀態(tài)矩陣表代碼及處理功能函數(shù)表,并且為HMI開發(fā)者提供可視直觀的狀態(tài)遷移結(jié)構(gòu)設(shè)計、邏輯關(guān)系自動檢查、自動生成狀態(tài)遷移樹以及根據(jù)狀態(tài)遷移結(jié)構(gòu)設(shè)計自動生成狀態(tài)遷移的代碼框架,進(jìn)而提高了嵌入式產(chǎn)品的開發(fā)效率。并且,采用本發(fā)明生成的代碼具有程序?qū)哟畏置鳌⒔Y(jié)構(gòu)清晰、易讀易懂和可移植性好的特點。
附圖說明
圖1為本實施例有限狀態(tài)機(jī)整體模塊關(guān)系圖。
圖2為本實施例HMI狀態(tài)遷移主流程圖。
圖3為本實施例事件分發(fā)處理流程圖。
圖4為本實施例狀態(tài)遷移處理流程圖。
圖5為本實施例HMI狀態(tài)遷移設(shè)計模板的示意圖。
圖6為本實施例HMI狀態(tài)遷移設(shè)計模板自定義菜單的示意圖。
具體實施方式
以下將結(jié)合附圖1至6對本發(fā)明做進(jìn)一步的說明,但不應(yīng)以此來限制本發(fā)明的保護(hù)范圍。為了方便說明并且理解本發(fā)明的技術(shù)方案,以下說明所使用的方位詞均以附圖所展示的方位為準(zhǔn)。
本實施例的技術(shù)方案重新定義狀態(tài)矩陣的結(jié)構(gòu)元素,把有限狀態(tài)機(jī)處理思想的核心邏輯關(guān)系提煉為共通的核心代碼,把復(fù)雜重復(fù)的狀態(tài)矩陣?yán)^承關(guān)系、狀態(tài)進(jìn)入退出處理、狀態(tài)遷移處理通過填寫Excel模板形式去自動生成狀態(tài)矩陣表代碼及處理功能函數(shù)表。
本實施例的HMI狀態(tài)遷移方法通過有限狀態(tài)機(jī)接收和分析判斷觸發(fā)事件,并根據(jù)觸發(fā)事件的類型調(diào)用畫面管理接口或進(jìn)行狀態(tài)轉(zhuǎn)換。具體地,如圖1所示,有限狀態(tài)機(jī)接收和分析判斷觸發(fā)事件的步驟如下:
S1、啟動有限狀態(tài)機(jī);
S2、有限狀態(tài)機(jī)系統(tǒng)接收觸發(fā)事件;
S3、將觸發(fā)事件插入第一消息隊列;
S4、有限狀態(tài)機(jī)核心從第一消息隊列中取出事件消息并分發(fā)到活動狀態(tài)池中的活動狀態(tài)中;
S5、活動狀態(tài)根據(jù)狀態(tài)矩陣表判斷觸發(fā)事件是否是自身的敏感事件,如果 是則調(diào)用功能函數(shù)表的處理函數(shù),并且根據(jù)需要調(diào)用畫面管理接口或進(jìn)行狀態(tài)轉(zhuǎn)換。
其中,觸發(fā)事件包括系統(tǒng)事件、硬件按鈕事件、用戶自定義事件。狀態(tài)矩陣表和功能函數(shù)表是通過Excel模板自動生成的,如圖5所示,Excel模板包括所繼承的父狀態(tài)、代碼生成的文件路徑、狀態(tài)繼承關(guān)系、狀態(tài)名稱、初期處理狀態(tài)、狀態(tài)進(jìn)入函數(shù)、狀態(tài)退出函數(shù)、該狀態(tài)所對應(yīng)的所有需響應(yīng)的事件定義、響應(yīng)該事件的處理條件、該響應(yīng)事件的前處理函數(shù)、該響應(yīng)事件的后處理函數(shù)、該響應(yīng)事件的存在的遷移后狀態(tài)。如圖6所示,Excel模板設(shè)置四種自定義菜單,所述自定義菜單包括追加子狀態(tài)菜單、狀態(tài)繼承關(guān)系結(jié)構(gòu)樹菜單、檢查狀態(tài)繼承和拼寫邏輯關(guān)系菜單、自動生成狀態(tài)遷移矩陣代碼菜單。用戶創(chuàng)建追加子狀態(tài)菜單時,選擇父狀態(tài)行,點擊“追加子狀態(tài)”菜單,自動增加子狀態(tài)模板。用戶創(chuàng)建狀態(tài)繼承關(guān)系結(jié)構(gòu)樹時,點擊“顯示狀態(tài)關(guān)系樹”菜單,顯示狀態(tài)繼承關(guān)系結(jié)構(gòu)樹。用戶創(chuàng)建檢查狀態(tài)繼承及拼寫邏輯關(guān)系,點擊“檢查狀態(tài)邏輯”菜單,檢查狀態(tài)繼承及拼寫邏輯關(guān)系。用戶創(chuàng)建自動生成狀態(tài)遷移矩陣代碼,點擊“生成代碼框架”菜單,根據(jù)填寫的狀態(tài)遷移矩陣模板自動生成狀態(tài)遷移矩陣代碼。
如圖2所示,當(dāng)有限狀態(tài)機(jī)啟動時,HMI狀態(tài)遷移主流程步驟如下:
S1、創(chuàng)建HMI有限狀態(tài)機(jī)線程和第二消息隊列;
S2、初始化遷移到HMI根狀態(tài);
S3、從第二消息隊列中讀取觸發(fā)事件消息;
S4、如果未取得觸發(fā)事件消息則返回S3步驟;
S5、如果讀取到觸發(fā)事件消息則分發(fā)觸發(fā)事件;
S6、如果HMI結(jié)束則退出HMI有限狀態(tài)機(jī)線程,否則返回S3步驟。
如圖3所示,其中,步驟S5中分發(fā)觸發(fā)事件的處理流程步驟如下:
S1、從活動狀態(tài)池中獲取每個活動狀態(tài);
S2、判斷當(dāng)前觸發(fā)事件是否是該活動狀態(tài)的敏感事件:如果不是該狀態(tài)的敏感事件,則執(zhí)行步驟S6;如果是該狀態(tài)的敏感事件,則執(zhí)行步驟S3;
S3、執(zhí)行前處理函數(shù),則執(zhí)行步驟S4;
S4、如果該狀態(tài)的敏感事件涉及狀態(tài)遷移,則執(zhí)行狀態(tài)遷移處理流程,并接下來執(zhí)行步驟S5;如果該狀態(tài)的敏感事件不涉及狀態(tài)遷移,則執(zhí)行步驟S6;
S5、狀態(tài)遷移處理后,如果存在后處理函數(shù),則執(zhí)行后處理函數(shù);如果不存在后處理函數(shù),則直接跳過S5步驟,執(zhí)行S6步驟;
S6、判斷該狀態(tài)是否是活動狀態(tài)池的最后一個狀態(tài),如果不是,則返回步驟S1活動狀態(tài)池中獲取下一個活動狀態(tài);如果是,則執(zhí)行步驟S7;
S7、結(jié)束處理流程。
如圖4所示,其中,狀態(tài)遷移處理流程步驟如下:
S1、根據(jù)遷移前狀態(tài)和遷移后狀態(tài)并尋找兩個狀態(tài)的共同父狀態(tài);
S2、執(zhí)行從遷移前狀態(tài)到共通父狀態(tài)路線上所有狀態(tài)的退出處理函數(shù);
S3、從活動狀態(tài)池中刪除遷移前狀態(tài)
S4、執(zhí)行從共同父狀態(tài)到遷移后狀態(tài)路線上所有狀態(tài)的進(jìn)入處理函數(shù);
S5、判斷遷移后狀態(tài)是否存在初始化狀態(tài);
S6、如果存在初始化狀態(tài),則執(zhí)行初始化狀態(tài)的進(jìn)入處理函數(shù),把初始化狀態(tài)作為遷移后狀態(tài),并返回步驟S5;
S7、如果遷移后狀態(tài)不存在初始化狀態(tài),則在活動狀態(tài)池中追加遷移后狀態(tài),結(jié)束處理流程。
綜上,本發(fā)明把復(fù)雜重復(fù)的狀態(tài)矩陣?yán)^承關(guān)系、狀態(tài)進(jìn)入退出處理、狀態(tài)遷移處理通過填寫Excel模板形式去自動生成狀態(tài)矩陣表代碼及處理功能函數(shù)表,并且為HMI開發(fā)者提供可視直觀的狀態(tài)遷移結(jié)構(gòu)設(shè)計、邏輯關(guān)系自動檢查、自動生成狀態(tài)遷移樹以及根據(jù)狀態(tài)遷移結(jié)構(gòu)設(shè)計自動生成狀態(tài)遷移的代碼框架,進(jìn)而提高了嵌入式產(chǎn)品的開發(fā)效率。并且,采用本發(fā)明生成的代碼具有 程序?qū)哟畏置?、結(jié)構(gòu)清晰、易讀易懂和可移植性好的特點。
根據(jù)上述說明書的揭示和教導(dǎo),本發(fā)明所屬領(lǐng)域的技術(shù)人員還可以對上述實施方式進(jìn)行變更和修改。因此,本發(fā)明并不局限于上面揭示和描述的具體實施方式,對本發(fā)明的一些修改和變更也應(yīng)當(dāng)落入本發(fā)明的權(quán)利要求的保護(hù)范圍內(nèi)。此外,盡管本說明書中使用了一些特定的術(shù)語,但這些術(shù)語只是為了方便說明,并不對本發(fā)明構(gòu)成任何限制。