<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于EA代碼生成的車(chē)身網(wǎng)絡(luò )電控系統

基于EA代碼生成的車(chē)身網(wǎng)絡(luò )電控系統

作者: 時(shí)間:2017-10-27 來(lái)源:網(wǎng)絡(luò ) 收藏

  引言

  在車(chē)身電子方面,國內外進(jìn)行了系列的研究。上海理工大學(xué)陳家琪等人利用工控機和相關(guān)數據采集卡以及CAN總線(xiàn)智能接口,構建了一個(gè)集中式的車(chē)身電子試驗臺。哈爾濱工業(yè)大學(xué)焦曉偉等人采用Stateflow圖形化建模工具構建符合AUTOSAR標準的車(chē)身應用層軟件模型,再利用Targetlink代碼生成工具基于模型實(shí)現代碼自動(dòng)生成。而英國Warwick大學(xué)的Yue Guo等人,則比較了基于SysML和基于“Simulink+Stateflo-w”的開(kāi)發(fā)方法在駕駛信息系統開(kāi)發(fā)過(guò)程中的優(yōu)缺點(diǎn)。本文采用基于框架結構和高級語(yǔ)言描述的絡(luò )電控系統開(kāi)發(fā)方法,采用UML建模工具實(shí)現程序代碼的自動(dòng)生成,可進(jìn)一步簡(jiǎn)化絡(luò )的設計與開(kāi)發(fā)過(guò)程,提高軟件可重用度,降低開(kāi)發(fā)成本,減少人為錯誤。

  1 EA及代碼生成功能

  Enterprise Architect(EA)是澳大利亞Sparx Systems公司開(kāi)發(fā)的一套UML建模及設計平臺。EA體積小巧,使用簡(jiǎn)便,對UML標準的支持完整;除支持UML2.0標準的所有13種圖形之外,還支持其他的擴展圖,包括分析圖、自定義圖、需求圖、維護圖、用戶(hù)界面圖、數據庫模式圖、文檔、業(yè)務(wù)建模與業(yè)務(wù)交互圖等。

  為便于擴展、定制以及二次開(kāi)發(fā),EA提供了豐富的SDK。代碼模板框架(Code Template Framework,CTF)是SDK的一部分,EA的代碼生成功能正是通過(guò)基于此框架的代碼生成模板實(shí)現的。代碼生成模板指定了從UML元素到給定編程語(yǔ)言的轉換過(guò)程,其修改通過(guò)代碼模板編輯器實(shí)現。打開(kāi)方法為EA主菜單Settings→Code Generation Template,或使用快捷鍵Ctrl+Shift+P。代碼生成模板以純文本形式編寫(xiě),其語(yǔ)法風(fēng)格兼具標記語(yǔ)言和腳本語(yǔ)言的語(yǔ)法特性。這種語(yǔ)法主要關(guān)注三種基本結構:

  (1)字面文本。在代碼生成模板中,除了空行將被忽略以外,所有不是宏或變量的定義及引用的文本,都將作為字面文本而直接輸出到生成的代碼中。如:

  class % className%

  (2)宏。宏既可用于訪(fǎng)問(wèn)UML模型中的元素值,又可用于對生成的代碼進(jìn)行結構化處理。所有的宏都有兩個(gè)百分號%包含其中。CTF中包含模板替代宏、域替代宏、標記值替代宏、控制宏、函數宏和EASL代碼生成宏6種基本的宏。正是這些豐富的宏定義造就了EA強大的代碼生成功能。仍以上例說(shuō)明, “%className%”就是一個(gè)域替代宏,在生成的代碼中將以當前的類(lèi)名替代,故若當前類(lèi)為Foo,則語(yǔ)句的輸出為“cl-ass Foo”。

  (3)變量。變量的定義和引用為在代碼生成模板中存取數據提供了方便。CTF中的變量采用弱類(lèi)型定義,即變量的數據類(lèi)型可以被忽略且一個(gè)變量可以被賦予不同數據類(lèi)型的值。變量的值可以來(lái)自各種宏、雙引號包含的字面文本和其他變量的引用等。變量的定義和引用使用美元符號加一個(gè)合法標識符,如foo=%class Name%。變量foo將存儲當前類(lèi)的名稱(chēng),需要引用此變量時(shí)直接使用foo即可。

  2 軟硬件設計

  為了方便調試及驗證生成代碼的有效性,本設計搭建以CAN總線(xiàn)為主干、LIN總線(xiàn)為下層網(wǎng)絡(luò )的絡(luò )演示實(shí)驗臺。

  2.1 硬件拓撲

  根據車(chē)身電器的功能和位置,實(shí)驗臺拓撲布局如圖1所示。其中,粗實(shí)線(xiàn)為CAN總線(xiàn)及其節點(diǎn),細實(shí)線(xiàn)為UN總線(xiàn)及其節點(diǎn)。主干CAN總線(xiàn)上共有8個(gè)節點(diǎn),既是下層LIN網(wǎng)絡(luò )上的主機節點(diǎn),又是CAN/LIN網(wǎng)關(guān)。其中,數據采集節點(diǎn)使用USBCAN卡搭建,其余網(wǎng)關(guān)節點(diǎn)使用 Freescale公司16位單片機MC9S12XSl28作為主控芯片。

  


  MC9S12XSl28同時(shí)具有CAN網(wǎng)絡(luò )控制器(MSCAN模塊)和LIN網(wǎng)絡(luò )控制器(SCI模塊),故只需再連接相應的CAN網(wǎng)絡(luò )收發(fā)器 TJAl050和LIN網(wǎng)絡(luò )收發(fā)器TJAl020即可完成CAN/LIN網(wǎng)關(guān)節點(diǎn)的硬件設計。CAN/LIN網(wǎng)關(guān)節點(diǎn)功能框圖如圖2所示。

  

  LIN從機節點(diǎn)使用Freescale公司8位單片機MC9S08DZ60作為主控芯片,使用其SCI模塊連接LIN網(wǎng)絡(luò )收發(fā)器TJAl020,再連接其他外圍執行器組成。LIN從機節點(diǎn)功能框圖如圖3所示。

  

  2.2 軟件建模

  目前,大多數單片機所支持的軟件編譯器均以C語(yǔ)言為主,而在C語(yǔ)言中沒(méi)有類(lèi)及繼承等相關(guān)概念,同時(shí)出于可移植性的考慮,軟件模型采用分層思想。將整個(gè)設計的軟件結構分為4層:第0層為類(lèi)型定義及中斷服務(wù)程序返回值的宏定義,第1層為單片機及其內部功能模塊類(lèi)的抽象,第2層為外圍硬件類(lèi)的抽象,第3層為車(chē)身網(wǎng)絡(luò )各個(gè)節點(diǎn)類(lèi)的抽象。上層的類(lèi)通過(guò)調用下層類(lèi)提供的函數實(shí)現特定功能,各層的依賴(lài)關(guān)系如圖4所示。其中,虛線(xiàn)表示調用關(guān)系。下面具體介紹第1~3層的建模方法。

  

  2.2.1 第1層一單片機及其內部功能模塊類(lèi)的抽象

  第1層的函數功能通過(guò)對單片機寄存器的讀寫(xiě)實(shí)現,故使用類(lèi)的成員函數,將寄存器的讀寫(xiě)代碼直接寫(xiě)在成員函數Behavior屬性的Ini-tial框中。如使能S12中的MSCAN模塊的代碼如下:

  CANCTL1(MSCANx)|=CANCTlLl_CANE_MASK;

  其中的CANCTL1是為了便于對多個(gè)MSCAN模塊做統一處理,以及便于選擇使用某個(gè)特定模塊而手動(dòng)編寫(xiě)的函數宏。在使用時(shí)只需將MSCANx賦值為相應的整數值(對于MC9S12XSl28,可以是O~4)。

  2.2.2 第2層一外圍硬件類(lèi)的抽象

  第2層需要調用第1層類(lèi)的操作,這可以通過(guò)活動(dòng)圖實(shí)現。在活動(dòng)圖中,新建一個(gè)Action,根據需要選擇CallOperation(調用成員函數)或Call Behavior(調用活動(dòng)圖的行為),再指定具體調用哪個(gè)成員函數或行為即可(調用的參數通過(guò)Action的Arguments屬性傳遞)。最后,將各個(gè)Action按照程序流程連接起來(lái)。

  這里,使用CAN協(xié)議(上層協(xié)議使用J1939)發(fā)送一個(gè)數據幀(活動(dòng)圖略——編者注)。為了能夠實(shí)現行為圖(包括活動(dòng)圖)的代碼生成,必須將所有的行為圖及其元素都放在某個(gè)類(lèi)中?;顒?dòng)圖經(jīng)過(guò)轉換后生成的代碼如下所示:

  

  2.2.3 第3層一車(chē)身網(wǎng)絡(luò )各個(gè)節點(diǎn)類(lèi)的抽象

  除了同樣需要調用第1層、第2層類(lèi)的操作之外,第3層還需要對中斷服務(wù)程序(ISR)進(jìn)行建模。ISR的建模涉及兩個(gè)問(wèn)題:ISR的返回值和ISR的定位。

  (1)ISR的返回值問(wèn)題。CodeWarrior支持兩種ISR的聲明方式。一種是使用預編譯指令pragma定義一個(gè)TRAP_PROC符號,TRAP_PROC會(huì )提示編譯器下面的函數是ISR,編譯器會(huì )使用一個(gè)特殊的中斷返回指令來(lái)結束這個(gè)函數(一般是RTI指令)。此方法需要同時(shí)修改 CodeWarrior工程中的PRM文件,將ISR與中斷向量表中的向量聯(lián)系起來(lái),不便于使用UML建模。

  另一種是使用與C51類(lèi)似的interrupt關(guān)鍵字,并指定相應的中斷向量號,這樣就同時(shí)完成了ISR的聲明和與中斷向量表的關(guān)聯(lián)。在EA中修改類(lèi)的代碼生成模板,添加一個(gè)衍型(stereotype)并命名為define,并添加相應的模板代碼。其核心部分代碼如下:

  

  修改完成后,在建模過(guò)程中只需將類(lèi)的衍型設置為define,將類(lèi)名設置為新定義的符號,類(lèi)的父類(lèi)設置為原符號即可。以CANO模塊的接收中斷的返回值為例,可將類(lèi)名設置為ISR_CAN0_RX,將父類(lèi)設置為interrupt 38void(此父類(lèi)并不存在)。最后生成的代碼如下:

  #define ISR_CAN0_RX interrupt 38 void

  然后將ISR的返回值指定為ISR_CANO_RX即可。

  (2)ISR的定位問(wèn)題。中斷服務(wù)程序的聲明和定義都必須定位于non-banked區域,通過(guò)使用“#pragma CODE_SEG NON_BANKED”實(shí)現。同時(shí),中斷服務(wù)程序末尾需要添加“#pragma CODE_SEG DEFAULT”,否則后面的函數也會(huì )被定位在non-banked區域而導致錯誤。因此,中斷服務(wù)程序必須被“#pragma CODE_SEG NON_BANKED”和“#pragma CODE_SEG DEFAULT”包圍起來(lái)。這也可通過(guò)修改代碼生成模板實(shí)現。結合ISR返回值的宏定義,只需在當函數返回值的前3個(gè)字符是“ISR”時(shí),在函數前后輸出上述兩條pragma預編譯指令即可。生成ISR聲明的代碼生成模板的核心部分如下:

  

  仍以上述CAN0模塊的接收中斷為例,最終生成的函數聲明如下;

  

  3 調試與驗證

  本設計除了使用USBCAN卡作為數據采集節點(diǎn)以外,為了驗證兩種總線(xiàn)協(xié)議的實(shí)現是否符合標準,更直觀(guān)地查看總線(xiàn)幀中各個(gè)字段的值以及隨時(shí)檢測總線(xiàn)上是否發(fā)生幀錯誤等,使用PC示波器PicoScope 5203搭配總線(xiàn)協(xié)議分析軟件WaveBPS捕獲兩種總線(xiàn)信號并進(jìn)行協(xié)議分析。Pi-coScope的兩個(gè)通道可同時(shí)捕獲CAN總線(xiàn)及LIN總線(xiàn)上的信號,進(jìn)一步方便了網(wǎng)關(guān)節點(diǎn)的調試。

  圖6為在控制面板節點(diǎn)(源地址為0x26)打開(kāi)左轉向燈時(shí)發(fā)送給車(chē)燈節點(diǎn)(目標地址為0x20)的CAN數據幀。其中,標記為S的位是根據位填充規則自動(dòng)插入的填充位。圖7為車(chē)燈節點(diǎn)收到上述CAN數據幀后,根據網(wǎng)關(guān)路由策略及幀轉換規則,發(fā)送到LIN總線(xiàn)上的數據幀。

  

  

  4 結論

  本設計借助EA的代碼生成功能,通過(guò)修改代碼生成模板以滿(mǎn)足車(chē)身網(wǎng)絡(luò )電控系統開(kāi)發(fā)中C語(yǔ)言及編譯器的要求,進(jìn)行了車(chē)身網(wǎng)絡(luò )系統的開(kāi)發(fā)和初步實(shí)驗驗證。此方法極大地方便了設計開(kāi)發(fā),并可提高系統的可靠性。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>