精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于狀態機實現公交車智能IC卡收費機的應用系統設計

電子設計 ? 來源:單片機與嵌入式系統應用 ? 作者:楊瑞霞 ? 2020-09-08 17:47 ? 次閱讀

有限狀態機是根據當前狀態以及觸發條件進行狀態轉換的一種機制,包含一組狀態集(state)、一個起始狀態(start state)、一組輸入符號集(alphabet)、一個映射輸入符號和當前狀態到下一狀態的轉換函數(transition function)的計算模型。當輸入符號串時,模型隨即進入起始狀態。要讓狀態機改變到新的狀態,依賴于系統的轉換函數。有限狀態機中有許多變量,例如,與動作(actions)轉換(Mealy機)或狀態(摩爾機)關聯的動作,多重起始狀態,基于沒有輸入符號的轉換或指定符號和狀態(非定有限狀態機)的多個轉換、指派給接收狀態(識別者)的一個或多個狀態。有限狀態機多應用于硬件時序電路設計。

有限狀態機也可以應用到嵌入式軟件設計中。在進行嵌入式軟件設計時,通常的做法是按照信息流程進行順序編程。例如對串行數據的處理,一般是等待接收數據,分析數據,進行數據處理,然后發送處理結果。使用這種軟件設計方法,最突出的一點就是在任務的處理過程中,任務基本上獨占了MCU的資源,即在處理串口數據的過程中,不會再去處理其他消息(中斷除外)。采用這種方式,MCU會在相當長的一段時間內只處理一個任務。如果合理運用狀態機機制開發系統軟件,就可以讓MCU進行多任務的分時處理。

1 建立有限狀態機的模型

其實在平時的程序設計中,開發人員已經不知不覺地使用了狀態機,如按鍵狀態轉換、菜單顯示狀態的轉換等。但是,很少有系統會使用狀態機進行多任務處理。在單片機系統中,通過對系統各功能模塊的分析,可以建立有限狀態機的模型,繼而在系統的軟件設計中利用狀態機的特點,開發出結構清晰的高效率嵌入式軟件。

1.1 系統功能分析

具有GPS、GPRS功能的公交車智能IC卡收費機,其功能包括對乘客使用的非接觸式IC卡進行刷卡消費,使用GPS進行自動報站[2],以及使用GPRS進行實時調度[3]等。按照獨占式處理模式,智能收費機的軟件系統會把多個任務按照信息流程進行排隊,處理完一個任務后,再進行下一個任務的處理。使用狀態機進行軟件編程,可以把每一個任務分解為多個狀態,在某個狀態處理時,同時檢查其他任務是否需要進行信息處理,并進行狀態的轉換。這樣就可以讓MCU在等待的空閑時間內進行多個消息的處理。

1.2 IC卡功能的狀態機建模

目前公交車乘客使用的公交卡,一般都是非接觸式IC卡,需要使用一個接口芯片對卡片進行讀寫操作。因此要對IC卡進行操作,就需要先對接口芯片進行初始化,包括對相關I/O引腳的設置、訪問地址的設定等操作。當非接觸式IC卡進入無線操作范圍后,需要使用Request命令喚醒卡片,再對喚醒的卡片(一張或多張)進行防沖突處理,得到卡片的唯一標識碼,然后通過Select命令選擇要進行操作的卡片。非接觸式IC卡內的數據是用密碼進行保護的,而且每個區的密碼都不一樣。因此在對某個區進行讀寫前,還需要進行密碼的驗證。只有密碼正確了,才可以進行讀寫操作。如果卡片的防沖突處理、選擇卡片操作扇區、授權驗證這幾個步驟出錯,則需要使用Request命令對卡片重新喚醒,然后再進行其他操作。在完成對卡片某一區域的讀寫后,可以直接對其他區域進行操作(需要重新驗證密碼),或者使用Request命令對其他卡片進行操作。

對IC卡的操作可以分為以下幾個部分:接口芯片的初始化、查詢卡片、防沖突處理、選擇卡片、對操作扇區授權驗證、讀卡、寫卡。根據對IC卡的操作,可以建立IC卡操作的相應狀態作為狀態機。建立狀態機的模型如圖1所示。類似地,對于GPRS、GPS等功能模塊,也可以進行相應的狀態機建模。

基于狀態機實現公交車智能IC卡收費機的應用系統設計

圖1 非接觸IC卡操作的狀態機

2 利用狀態機進行軟件設計

利用前面所建立的狀態機模型,可以方便地進行相應的程序設計。軟件的主要工作是進行正確的狀態切換和在每個狀態下執行相應的動作。對單個狀態機處理的程序設計,可以使用“橫式”或“豎式”兩種設計方法?!皺M式”設計是把每個狀態的功能作為一個子函數處理,在子函數外部進行狀態的切換。“豎式”設計是在單個switch語句中對所有的狀態進行判斷,執行相應動作并進行狀態切換。

下面以非接觸式IC卡操作為例,對兩種軟件設計方式進行討論。假設變量如下:當前狀態為cur_state,下一狀態為next_state;狀態分別為RC500Config、RC500Request、RC500Anticoll、RC500Select、RC500Auth、 RC500LoadMk、RC500Read、RC500Write。[5]“豎式”程序設計如下:

switch(cur_state){//在當前狀態中判斷事件

case RC500Config://進行RC500Config初始化狀態

執行初始化動作

if(SUCCESS){

next_state = RC500Request;//成功則進行卡片查詢

}

else{

斷電重新初始化

}

break;

case RC500Request://在RC500Request狀態

射頻范圍內的卡片進行查詢

if(SUCCESS){ //將狀態轉移到RC500Anticoll態

next_state = RC500Anticoll;

}

else{

繼續查詢

}

break;

case RC500Anticoll://在RC500Anticoll狀態

進行抗沖突處理

if(SUCCESS){

獲取卡片識別碼,轉到選擇卡片狀態

next_state = RC500Select;

}

case …

}

“橫式”設計是把每個狀態及所要執行的動作單獨放到一個子函數中處理,有RC500Config()、RC500Request()、 RC500Anticoll()等。工作狀態的確定可以通過查詢狀態表獲得,找到相應的狀態后運行相應的子函數。在每個子函數中,既有該狀態下應該執行的動作,也有狀態的轉換。然后在主程序中判斷狀態是否發生了轉換,再轉到相應的狀態子程序中執行。

橫豎兩種寫法,實現的功能完全相同,但是“豎式”隱含了優先級排序,破壞了事件間原有的關系。同時,由于處在每個狀態的事件數目不一致,而且事件發生的時間是隨機的,“豎式”設計為順序查詢方式,因此大量時間被浪費?!皺M式”設計,在某個時間點狀態是唯一確定的,延遲時間可以預先準確估算。而且在事件發生時,系統會調用相應的事件函數,在函數里查找唯一確定的狀態,并根據其狀態執行動作和狀態轉移。使用這種方式設計的軟件思路清晰簡潔,效率高,故使用“橫式”方法設計程序更好。

類似地,對于GPRS、GPS等功能模塊也可以運用狀態機機制進行程序設計,從而在整個智能收費機的軟件設計中,對所有任務的處理都可以運用狀態機機制進行相應的程序設計。

3 使用狀態機的效能分析

在很多嵌入式系統軟件設計中都可以用到類似狀態機的設計思想,比較常用的地方就是各種液晶界面的設計。使用狀態機機制設計軟件,可以使設計思路清晰、靈活,軟件的可讀性強,便于以后的維護。如果合理地使用狀態機,還可以較大幅度地提高MCU的運行效率。下面以非接觸式IC卡的軟件設計流程為例討論。

圖2 嵌入式軟件設計方法比較

圖2(a)是傳統的嵌入式軟件設計流程,使用這種流程設計的系統軟件按部就班地先執行RC500Config(),再執行 RC500Request(),然后是RC500Anticoll(),直到對IC卡操作完成,再轉到其他任務(如GPS)。這樣IC卡的操作任務占用了整個MCU資源。圖2(b)是使用狀態機設計系統軟件的流程。在使用狀態機的同時設定一個軟件時鐘,用來為系統的各個任務進行計時,并進行任務的調度。軟件時鐘使用一個長整型變量進行計時,利用MCU定時器1 ms或10 ms的中斷來實現,從而使時鐘不受任務執行過程的影響。當某個任務執行過程需要等待延時,執行子函數返回main()函數,讓其他任務使用MCU資源。這樣實現的軟件,在處理某個任務的空隙可以同時處理其他任務的操作,有效地提高了MCU處理事件的能力。具體實現方法如下:

RC500Request(){

time_mark = mS_mark;//若需要延時,更新計時的軟件時間

……

if(!past_200mS())break;//如果延時不足200 ms,//返回調用函數,MCU運行其他任務

……

}

當延時不夠200 ms時,函數RC500Request()直接返回而沒有改變IC卡操作的狀態,因此MCU下一次進行IC卡操作時,繼續執行函數 RC500Request(),直到IC卡操作狀態改變。同時,函數RC500Request()返回后,main()函數會檢查GPS、GPRS等工作模塊,執行其中的某些動作。也就是說,在執行IC卡操作的同時,可以執行其他任務的操作;同理,在執行其他任務的操作時,也可以執行IC卡的一些操作。這樣就可以充分利用MCU的資源,提高MCU對多任務的處理效率。

結語

使用上述狀態機機制設計的智能公交車IC卡收費機的系統軟件,能夠及時處理IC卡信息、GPS定位信息、GPRS通信等多個任務的操作,運行穩定,完全滿足實際應用的要求。該機制非常適合功能較多的嵌入式軟件系統設計。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    16991

    瀏覽量

    350309
  • 嵌入式
    +關注

    關注

    5068

    文章

    19017

    瀏覽量

    303255
收藏 人收藏

    評論

    相關推薦

    基于單片公交車報站控制系統

    哪位大神有基于單片公交車報站控制系統的設計資料???求幫助?急!!!
    發表于 11-21 23:00

    基于單片控制的公交車報站系統

    一直有個想法,想設計一個基于單片控制的公交車報站系統,就是不知道需要從哪塊入手。哪位有過類似的想法嗎,求一起探討!
    發表于 07-23 10:09

    基于單片公交車自動報站系統的設計

    跪求基于單片公交車自動報站的系統原理圖。我設計所用的器件是STC89C52單片,語音模塊是IDS4004,顯示模塊是LCD1602,功放模塊是LM368,求大家知道。
    發表于 03-12 11:50

    路邊停車收費機是什么?

    人工干預行為,數據精準,費用清晰。跟蹤統計停車場所有車位狀態,實時發布空余車位數量,為停車場放行引導提供可靠的參考依據。無需取或取票,操作簡單便捷。綜上,我們可以看出,路邊停車收費機的功能有:一、車牌
    發表于 08-31 17:40

    高速公交車的可靠狀態測量

    高速公交車的可靠狀態測量
    發表于 04-01 12:08

    公交車信息管理系統的設計原理是什么?

    結合微處理器設計tSO/IEC15693瀆器.TJ公司的Tag—itHF-I作為電子標簽。通過軟件部分和數據庫的設計對公交車信息進行管理。該系統成本低.效率高。
    發表于 10-15 07:52

    關于基于單片公交車報站系統的設計

    前一段時間,做了一個關于基于單片公交車報站系統的設計
    發表于 11-10 07:19

    公交車IC電路圖-原理圖

    公交車IC電路圖-原理圖
    發表于 01-16 12:53 ?151次下載
    <b class='flag-5'>公交車</b><b class='flag-5'>IC</b><b class='flag-5'>卡</b>電路圖-原理圖

    公交車IC原理圖

    screen.width-333)this.width=screen.width-333" border=0 twffan="done"> 公交車IC原理圖
    發表于 11-22 22:33 ?3026次閱讀

    考勤/收費機的時鐘功能

    考勤/收費機的時鐘功能              也就是考勤/收費機所具有的時鐘功能。對現有的考勤/收費機廠商來說時鐘功能
    發表于 12-30 15:07 ?819次閱讀

    考勤/收費機的接口類型

    考勤/收費機的接口類型              接口是針對刷卡式考勤/收費機而言的。主要是針對考勤/收費機和電腦相聯的
    發表于 12-30 15:14 ?1165次閱讀

    使用單片實現公交車報站系統的程序免費下載

    本文檔的主要內容詳細介紹的是使用單片實現公交車報站系統的程序免費下載。
    發表于 03-16 16:57 ?56次下載

    公交收費機如何集成(選配)二維碼模塊

    公交收費機的使用場景分析
    的頭像 發表于 08-01 16:13 ?745次閱讀

    公交收費機如何集成二維碼模塊

    公交收費機,通過實際的場景測試檢驗,選出集成適用的二維模塊。
    發表于 08-08 15:44 ?3次下載

    基于STM32的公交車非接觸式IC自動收費系統

    方案介紹? ? ? ? ?本設計是基于STM32的公交車非接觸式IC自動收費系統。根據乘客上站信息,
    發表于 12-28 15:32 ?3次下載