Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.89 KB | None | 0 0
  1. .. article:: apps_demo_msp_crossway
  2. :author: Barbora Bložoňová <xblozo00 AT stud.fit.vutbr.cz>
  3. :updated: 20141281
  4. Projekt Řízení provozu na světelné křižovatce
  5.  
  6. ==================================================
  7. Řízení provozu na světelné křižovatce(IMP projekt)
  8. ==================================================
  9.  
  10. .. contents:: Obsah
  11.  
  12. Popis aplikace
  13. ===================
  14.  
  15. Křižovatka ve tvaru +, ve které auta přejíždí/přecházejí silnici ve dvou
  16. směrech provozu: sever-jih, dále "*SJ*" a západ-východ "*ZV*". Každý směr má z
  17. obou jeho konců vlastní semafor pro auta, semafory pro chodce nebyly z
  18. časových důvodů implementovány. Křižovatku ovlivňuje doba jejího chodu, zda-li
  19. je zapnutá/vypnutá a reaktivní režim.
  20.  
  21. .. figure:: init.png
  22. :align: center
  23.  
  24. Návrh
  25. ===================
  26. Samotný detailní návrh aplikace je popsán více v sekci Implementace a v
  27. komentářích ve zdrojovém kódu. Simulace času byla navržena reálně bez
  28. zrychlení, proto jsou časy trvání jednotlivých barev na semaforu úměrně
  29. zrychleny v sekundovém poměru 3:2:5 (barvy R:Y:G).
  30.  
  31. Implementace
  32. ===================
  33. Implementace byla vyhotovena v jazyce C za použití FreeRTOS. Pro simulaci
  34. hodin byly částečně využity některé části z demo aplikace "*Hodiny reálného
  35. času (RTC)*" a pro čtení znaků z klávesnice byla využita potřebná funkce na
  36. tuto operaci z dema "*FreeRTOS*".
  37.  
  38. Srdcem projektu jsou tedy 4 úlohy, tzv. *tasky*. Každý task reprezentuje
  39. kontinuální řešení funkcí aplikace např. čtení z klávesnice, výpis i samotný
  40. konečný automat pro správu křižovatky. Detailní popis implementace všech
  41. proměnných je přiložen ve formě komentářů ve zdrojovém textu.
  42.  
  43. **1.terminalTask**
  44. Tento task spravuje nekonečnou aktualizaci terminálu a počítá s HW zpožděním.
  45. To je důležité především proto, aby se na terminál mohl neustále vypisovat
  46. stav provozu na křižovatce. Dále se zde řeší správa rozhodnutí, zdali je stav
  47. den, nebo noc.
  48.  
  49. **2.crosswayTask**
  50. Hlavní část projektu tvoří nekonečná smyčka ve formě konečného automatu, dále
  51. "*FSM*", který nabývá několika fází alias stavů dle následující tabulky. Tento
  52. *FSM* tedy řeší řízení světel křižovatky.
  53.  
  54. +------------+---------------------------------+
  55. | Stav | Význam |
  56. +==============+===============================+
  57. | INIT | počáteční inicializace |
  58. +--------------+-------------------------------+
  59. | STUJ | svítí červená (v daném směru) |
  60. +--------------+-------------------------------+
  61. | POZOR_VOLNO | svítí červená a žlutá |
  62. +--------------+-------------------------------+
  63. | VOLNO | svítí zelená |
  64. +--------------+-------------------------------+
  65. | POZOR_STUJ | svítí žlutá |
  66. +--------------+-------------------------------+
  67. | NOC | noc |
  68. +--------------+-------------------------------+
  69. | OFF | vypnuto |
  70. +--------------+-------------------------------+
  71.  
  72. Automat začíná ve stavu *INIT*, kde inicializuje všechny potřebné proměnné. Další důležitou součástí automatu je počítadlo cyklů pro ošetření různě dlouhého čekání na daném stavu. Počítadlo cyklů pro urgentní režim je tedy co nejnižší, aby reprezentoval "*okamžitou*" odezvu na změnz stavů na křižovatce.
  73.  
  74. **3.printTask**
  75. Tato úloha řeší samotný výpis na terminál. Výpis je řešen ve dvou řádcích dle
  76. následujícího schématu:
  77. **smer sem (zap/vyp)(faze)(rtype)**
  78. - směr aut; nabývá hodnot SJ/ZV
  79. - semafor pro auta daného směru ve tvaru tří znaků dle aktuálně rozsvícené barvy (*R* pro červenou, *G* pro zelenou, *Y* pro žlutou)
  80. - zapnutí/vypnutí signalizace na křižovatce; nabývá hodnoty *Z/V*
  81. - typ reaktivity *RTYPE*; nabývá hodnot *NORMAL/URGENT*
  82. - doba; nabývá hodnot *DEN/NOC*
  83.  
  84. **4.keyboardTask**
  85. Task pro načítání přijatých znaků z klávesnice FitKitu. Aplikace rozeznává tři
  86. tlačítka:
  87. - '*1*' pro změnu stavu Zapnuto<>Vypnuto
  88. - '*2*' pro změnu stavu RTYPE Normal<>Urgent
  89. - '*3*' pro změnu stavu doby Den<>Noc.
  90. Přijatý signál je dále zpracován pomocí své příslušné proměnné, jež ovlivní
  91. další průběh *FSM*.
  92.  
  93. **Main**
  94. Hlavní program slouží pro inicializaci proměnných potřebných na generování
  95. přerušení a start celé aplikace mj. i z HW hlediska. Dále se zde spouští
  96. *plánovač FreeRtos* a inicializují jednotlivé *FreeRTOS tasky*. V neposlední
  97. řadě se zde také nastavuje počáteční čas celé aplikace (začínáme ve 23:00:30,
  98. aby byl hned vidět přechod z denního na noční režim.).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement