• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于有限狀態(tài)機的人機交互界面軟件設(shè)計方法

      2011-01-23 09:57:58
      中國新技術(shù)新產(chǎn)品 2011年3期
      關(guān)鍵詞:調(diào)零鍵值狀態(tài)機

      任 娜 郭 鍇

      (江蘇省交通技師學(xué)院信息系,江蘇 鎮(zhèn)江 212006)

      基于有限狀態(tài)機的人機交互界面軟件設(shè)計方法

      任 娜 郭 鍇

      (江蘇省交通技師學(xué)院信息系,江蘇 鎮(zhèn)江 212006)

      本文基于嵌入式系統(tǒng)并運用模塊化思想,設(shè)計了一種相對獨立的通用化的工業(yè)分析儀表人機交互界面系統(tǒng)。程序設(shè)計基于事件目標驅(qū)動模型,以有限狀態(tài)機的方式,在實時操作系統(tǒng)μC/OS-II中,用狀態(tài)機把目標和事件聯(lián)系起來,實現(xiàn)OA(Object-Action)行為模式完成人機交互的過程,開發(fā)出符合工業(yè)分析儀表應(yīng)用要求的人機交互界面軟件系統(tǒng),并實現(xiàn)軟件與硬件的低耦合性,提高代碼的重用率,降低開發(fā)周期并提高軟件設(shè)計的可靠性。

      有限狀態(tài)機;人機交互界面;uC/OS-Ⅱ

      1 引言

      隨著國民經(jīng)濟的高速發(fā)展,工業(yè)過程分析儀表的應(yīng)用越來越重要及廣泛,對工業(yè)分析儀表的性能的要求也越來越高。作為工業(yè)分析儀表的重要組成部分的人機交互界面,對工業(yè)分析儀表的性能有著重要的影響,由于目前CPU的處理能力已不是制約工業(yè)分析儀表系統(tǒng)應(yīng)用和發(fā)展的主要障礙,所以人機交互界面的設(shè)計水平已經(jīng)成為決定整個儀表系統(tǒng)性能的主要制約因素。

      工業(yè)儀表軟件開發(fā)的一個重要問題是與硬件的耦合過強。本文針對前工業(yè)分析儀表人機界面設(shè)計現(xiàn)狀和問題,提出了一種“基于小型化實時操作系統(tǒng)(μC/OS-II)+狀態(tài)機的人機界面設(shè)計方法”;能夠較好地降低工業(yè)儀表設(shè)計過程中人機交互界面軟硬件過度耦合的問題,提高代碼的重用效率,降低開發(fā)周期并提高軟件設(shè)計的可靠性。

      2 有限狀態(tài)機的形式化描述

      2.1 有限狀態(tài)機。有限狀態(tài)機(Finite State Machine,簡稱FSM)是一種具有離散輸入輸出系統(tǒng)的數(shù)學(xué)模型,它以一種“事件驅(qū)動”的方式工作,可以通過事件驅(qū)動下系統(tǒng)狀態(tài)間的轉(zhuǎn)移,來表達一個控制系統(tǒng)的控制流程[1]。

      2.2 層次式有限狀態(tài)機。對于像工業(yè)分析儀表HMI系統(tǒng)這樣較為復(fù)雜的系統(tǒng)而言,傳統(tǒng)的有限狀態(tài)機是無法對系統(tǒng)進行清晰的建模,因此在這里采用一種層次式的FSM表達方法。層次式FSM類似于軟件工程中結(jié)構(gòu)化分析方法中的數(shù)據(jù)流圖,如圖1所示,其組織原則是:建模對象是一個復(fù)雜的系統(tǒng),將控制系統(tǒng)劃分為多個相互協(xié)作的超狀態(tài)機(S1,S2,包含有子狀態(tài)機),每個超狀態(tài)機根據(jù)要求又被劃分為多個相互協(xié)作的子狀態(tài)機(S11,S12,S21,S22),不能被細分的子狀態(tài)機被稱為基狀態(tài)機(S11,S12,S21,S22)。

      圖1 層次式FSM示意圖

      在層次式FSM中,每個基狀態(tài)機都對應(yīng)著一個父級的狀態(tài)機,多個基狀態(tài)機的相互協(xié)作的狀態(tài)機子群構(gòu)成一個低層次的FSM。這樣子群內(nèi)狀態(tài)機間的層次和邏輯關(guān)系構(gòu)成了相應(yīng)FSM間的層次和邏輯關(guān)系。復(fù)雜系統(tǒng)的控制流程就可以由這樣一組FSM來表達:{一個頂層FSM,若干個一層FSM,若干個二層FSM,…}。

      超狀態(tài)機至少包含了一個子狀態(tài)機,父狀態(tài)機對子狀態(tài)機的包含關(guān)系實質(zhì)上體現(xiàn)了子狀態(tài)機對父狀態(tài)機控制行為的繼承。這種繼承類似于面向?qū)ο蟪绦蛟O(shè)計模式的類繼承特性,有了這種繼承特性,在編程的時候可以按差異性進行,只需要定義子狀態(tài)機和父狀態(tài)機行為的不同之處,而其它的則可以重用在父狀態(tài)中的定義,這便極大地優(yōu)化程序的結(jié)構(gòu)和提高了程序的可維護性。

      2.3 界面化的FSM。有限狀態(tài)機FSM(Finite State Machine)由狀態(tài)、事件、轉(zhuǎn)換和活動組成。每個狀態(tài)有1個狀態(tài)進入動作(entryaction)和1個狀態(tài)退出動作(exit action),每個轉(zhuǎn)換有1個源狀態(tài)和目標狀態(tài)并且與1個事件相關(guān)聯(lián)。另外當(dāng)初始化時,我們定義了一個初始化信號量;以及界面的刷新,我們定義了一個復(fù)位信號量。當(dāng)在源狀態(tài)時,該事件發(fā)生且觸發(fā)轉(zhuǎn)換的監(jiān)護條件為真,則順序執(zhí)行下列一些動作:①源狀態(tài)的退出動作;②轉(zhuǎn)換動作;③目標狀態(tài)的進入動作。

      對狀態(tài)定義的信號量如下:

      用軟件實現(xiàn)有限狀態(tài)機有兩種方法:表格法和過程驅(qū)動法。表格驅(qū)動法利用一個二維數(shù)組[2],該數(shù)組中的短一行與一個狀態(tài)相對應(yīng),每一列與一個輸入事件相對應(yīng),每一項則與某一狀態(tài)下對事件的處理相對應(yīng)。表格驅(qū)動法適用于具有結(jié)構(gòu)規(guī)則、操作簡單的有限狀態(tài)機。

      過程驅(qū)動法為每一個狀態(tài)都定義一個處理過程,處理過程實現(xiàn)在此狀態(tài)時對事件的響應(yīng),包括輸出處理及對當(dāng)前狀態(tài)值的轉(zhuǎn)換。這個過程可以用case語句區(qū)分事件,并采用相應(yīng)的處理。無論采用何種方法實現(xiàn)FSM,當(dāng)FSM收到一條消息時必須知道當(dāng)前的狀態(tài)。為此,對應(yīng)每一個狀態(tài)機必須能夠保存當(dāng)前所處的狀態(tài)。過程法適用于實現(xiàn)一個具有幾種轉(zhuǎn)換和復(fù)雜操作的有限狀態(tài)機。

      基于消息驅(qū)動的程序設(shè)計思想,為了保證系統(tǒng)的實時性,在中斷中只負責(zé)發(fā)送消息到相應(yīng)的任務(wù)的消息隊列,由應(yīng)用級的任務(wù)來處理,保證各個處理的時間是可確定的。主程序在消息循環(huán)中不斷地判斷各個任務(wù)的狀態(tài),執(zhí)行進入就緒態(tài)的任務(wù)。這就允許采用異步方式處理各種中斷及任務(wù)。

      3 軟件設(shè)計

      3.1 狀態(tài)機的軟件實現(xiàn)。本系統(tǒng)程序中采用了兩組有限狀態(tài)機,運用消息驅(qū)動的方式來驅(qū)動狀態(tài)的變更。一組是通信任務(wù)中以串口接收數(shù)據(jù)驅(qū)動為事件對象的有限狀態(tài)機,另一組是以用戶按鍵和命令碼驅(qū)動為事件對象的有限狀態(tài)機。

      3.1.1 通訊的有限狀態(tài)機。為了保證通信的可靠,系統(tǒng)中采用停止等待協(xié)議。在發(fā)送數(shù)據(jù)前要對數(shù)據(jù)打包,接收到數(shù)據(jù)要先解包,處理器在接收主系統(tǒng)發(fā)過來數(shù)據(jù)包的后需要去掉通信協(xié)議字段,然后對有效數(shù)據(jù)進行正確的處理。為此,定義了一個Frame-FSM類型的數(shù)據(jù)結(jié)構(gòu),用來對接收到的數(shù)據(jù)進行處理。

      利用主機發(fā)送過來的消息驅(qū)動有限狀態(tài)機,串口接收數(shù)據(jù)驅(qū)動的有限狀態(tài)機包括以下幾種狀態(tài);(1)任意狀態(tài)。(2)任意狀態(tài)(除了INIT_STATE之外)。(3)INIT_STATE,初始狀態(tài)。(4)AA_SYN_STATE,收到同步字符狀態(tài)。(5)SRC_ADDR_STATE,收到源地址狀態(tài)。(6)DEST_ADDR_STATE,收到目的地址狀態(tài)。(7)DATA_LEN_STATE,接收數(shù)據(jù)長度狀態(tài)。(8)DATA_STATE,接收正常數(shù)據(jù)狀態(tài)。(9)CHECKSUM_STATE,接收校驗和狀態(tài)。

      對應(yīng)的狀態(tài)轉(zhuǎn)換圖(state transition diagram)如下圖所示。

      圖2 狀態(tài)轉(zhuǎn)換圖

      3.1.2 鍵值和命令碼驅(qū)動的有限狀態(tài)機

      這組有限狀態(tài)機主要依靠用戶對菜單的操作進行狀態(tài)轉(zhuǎn)換,即把鍵值和命令碼作為FSM的激勵源,其中鍵盤消息是最主要的激勵源。應(yīng)用層的FSM具有多種主狀態(tài),用戶未按鍵或者是沒有接收到新的數(shù)據(jù)幀時,狀態(tài)處于IDLE_STATE;接收到消息后,轉(zhuǎn)入對應(yīng)的主狀態(tài)。然后,根據(jù)按鍵的不同或者是接收命令碼的不同,轉(zhuǎn)入對應(yīng)的子狀態(tài)進行處理。任務(wù)處理完畢,再將狀態(tài)置為IDLE_STATE,按取消鍵,可回到上一級狀態(tài)。

      以用戶控制儀表調(diào)零,系統(tǒng)開始處于IDLE_STATE(選中調(diào)零菜單選項)。若用戶按確認,則進入調(diào)零參數(shù)設(shè)置頁面,并顯示當(dāng)前設(shè)置的調(diào)零參數(shù).選擇確認鍵,進入確認當(dāng)前調(diào)零狀態(tài);選擇確認件后儀表進入調(diào)零狀態(tài),在該狀態(tài)執(zhí)行向上命令操作后,狀態(tài)重新轉(zhuǎn)入IDLE_STATE,并伴隨著輸出菜單的相應(yīng)變化,按取消鍵可回到上一級選擇狀態(tài)。對于其他按鍵,系統(tǒng)全部過濾掉不作響應(yīng),狀態(tài)也不進行轉(zhuǎn)換。儀表調(diào)零設(shè)置的狀態(tài)轉(zhuǎn)換圖如下圖所示。

      圖3 儀表調(diào)零設(shè)置的狀態(tài)轉(zhuǎn)換

      3.2 基于μC/OS-II的模塊化設(shè)計

      在實時操作系統(tǒng)μC/OS-II下,整個HMI分為四個模塊,三個任務(wù)來實現(xiàn),分別是鍵值處理模塊、與主機通信模塊和時鐘模塊以及界面顯示模塊。(為了結(jié)構(gòu)的清晰,我們把鍵值的處理單獨成立一個任務(wù),實際為了方便和實時性的處理,把鍵盤的處理放在TICK中處理也是很好的一種處理方法)。

      3.2.1 鍵值處理模塊

      OSTaskCreate(KEYTaskStart,(void*)0,&TaskKey-Stk[],5);

      先初始化所有的模塊,然后在循環(huán)中接收并處理鍵盤的輸入,Key-Process(char Key Value)根據(jù)相應(yīng)的輸入鍵值和系統(tǒng)所處的狀態(tài),對菜單進行相應(yīng)的操作。

      State_Trans(char RxData)根據(jù)鍵值輸入事件負責(zé)調(diào)度系統(tǒng)的狀態(tài),并在相應(yīng)的狀態(tài)下,根據(jù)從主系統(tǒng)收到的信息顯示菜單。

      3.2.2 主機通信模塊

      OSTaskCreate(UARTTaskskStart,(void *)0,& TaskU-artStk[],4);

      OSTaskCreate(CANTaskskStart,(void*)0,&TaskU-artStk[],3);

      通過消息隊列OSQPend(OS_EVENT*pevent,INTl6U timeout,INT8U*err),接受串口或者CAN中斷發(fā)來的消息隊列,對其中的數(shù)據(jù)進行處理。在人機交互的過程中,需要大量的與主系統(tǒng)的交互,單獨用一個任務(wù)負責(zé)與主系統(tǒng)的通信,實現(xiàn)串口和CAN接收數(shù)據(jù)驅(qū)動的有限狀態(tài)機。

      3.2.3 時鐘模塊

      OSTaskCreate(TimcTCk,(void*)0,&TimeTickStk[],2);

      時鐘任務(wù),使用處理器的時鐘中斷,可以設(shè)置各個任務(wù)需要的定時器,通過消息隊列發(fā)給需要定時的任務(wù)。

      3.2.4 界面顯示模塊

      OSTaskCreate(Task_HMIRun,(void*)'9',&Task_HMI_Stk[TASK_HMI_STK_SIZE-1],6);

      界面顯示任務(wù),初始化狀態(tài)機,以及父狀態(tài)界面,通過獲取實時狀態(tài),實現(xiàn)界面的切換和事件的處理。

      4 測試

      HMI系統(tǒng)的測試采用μC/OS-II V2.52較以前的版本,該版本增加了兩個系統(tǒng)任務(wù):CPU負荷監(jiān)測任務(wù)與堆棧容量檢查任務(wù)。這兩個任務(wù)給程序的調(diào)試帶來很大的方便[3]。

      將系統(tǒng)配置常數(shù)OS_TASK_STAT_EN設(shè)為l,統(tǒng)計任務(wù)OSTaskStat()就會建立。它每秒鐘運行1次,計算出當(dāng)前CPU的利用率,放在一個有符號的8位整數(shù)0SCPUUsage中,精確度是l%。μC/OS-II內(nèi)存是固定分配的,通過0STaskStkChk()可確定每個任務(wù)實際需要的最大堆??臻g,根據(jù)測得結(jié)果合理地分配內(nèi)存空間。表l是用以上函數(shù)測出的系統(tǒng)參數(shù)。使用MC9S12XDT512單片機系統(tǒng)相應(yīng)的調(diào)試工具CodeWarrior,可跟蹤程序的運行。通過運行在PC機上CodeWarrior能夠追蹤程序中各種參數(shù)的變化,查看處理器內(nèi)存的使用情況。

      表1 系統(tǒng)參數(shù)的測量結(jié)果

      在實際測試中,采用μC/OS-II系統(tǒng)及有限狀態(tài)機的HMI系統(tǒng),比普通前后臺系統(tǒng)的實時性提高35.2%,測試時間縮短14.3天,MTBF≥1440hour,代碼重用率≥75%,整體性能得到了很大的提高

      結(jié)論。經(jīng)測試證明,使用實時操作系統(tǒng)前。運用前后臺的程序設(shè)計方式。在需要顯示較多數(shù)據(jù)在屏幕上,同時又需要接收數(shù)據(jù)時,處理器處理不及時,可以通過調(diào)試工具CodeWarrior看到接收緩存接收的數(shù)據(jù)幀不完整,而不能正確地在屏幕上顯示數(shù)據(jù)。移植μC/OS-II操作系統(tǒng)之后,工作可靠,同時系統(tǒng)的反應(yīng)速度,即實時性有了很大提高。本章介紹的HMI系統(tǒng)與嵌入式主系統(tǒng)是獨立的模塊,可以靈活地在處理器上加載控制模塊,適合應(yīng)用于各種嵌入式系統(tǒng)中。

      [1]梁偉晟,李磊.基于與或邏輯的界面關(guān)系模型表示方法.計算機科學(xué),2008,35(4):203-204.

      [2]劉成玉,李明,陳潔.淺談狀態(tài)機的設(shè)計方法及應(yīng)用[J].集成電路通訊,2007,25(1):20-24.

      [3]趙楠,王軍政,沈偉.基于uC/OS-Ⅱ的齒輪流量計二次儀表的設(shè)計[J].微計算機信息,2006(7):52~54.

      TP29

      B

      猜你喜歡
      調(diào)零鍵值狀態(tài)機
      自適應(yīng)調(diào)零天線對抗技術(shù)仿真研究
      非請勿進 為注冊表的重要鍵值上把“鎖”
      基于有限狀態(tài)機的交會對接飛行任務(wù)規(guī)劃方法
      初中生音樂想象能力的“凋零化”現(xiàn)象探析
      一鍵直達 Windows 10注冊表編輯高招
      電腦愛好者(2017年9期)2017-06-01 21:38:08
      差分放大電路的研究
      電子世界(2013年4期)2013-12-10 14:07:04
      延邊地震臺VS型垂直擺傾斜儀曲線形態(tài)分析與討論
      科技傳播(2011年16期)2011-09-22 02:41:40
      FPGA設(shè)計中狀態(tài)機安全性研究
      基于反熔絲FPGA的有限狀態(tài)機加固設(shè)計
      注冊表值被刪除導(dǎo)致文件夾選項成空白
      桃源县| 塘沽区| 舟山市| 辽宁省| 海兴县| 徐闻县| 渝中区| 乌审旗| 麻阳| 依兰县| 香港| 黄梅县| 襄樊市| 霸州市| 金湖县| 青州市| 南雄市| 库尔勒市| 平罗县| 沭阳县| 正定县| 万盛区| 桐梓县| 广安市| 宣武区| 保山市| 措勤县| 德清县| 灵武市| 双辽市| 永吉县| 岳阳市| 丹巴县| 曲阳县| 宜昌市| 闽侯县| 阿巴嘎旗| 六盘水市| 南郑县| 响水县| 林芝县|