AUTOSAR——MBD应用之NM模块Stateflow实现
目錄
一、前言
二、Autosar NM概括
2.1 術(shù)語
2.2? PDU
2.3 文件結(jié)構(gòu)
2.4 NM結(jié)構(gòu)體
2.5?狀態(tài)機
三、Stateflow實現(xiàn)
3.1 NM接口定義
3.2 NM功能實現(xiàn)
3.3 NM模塊測試
3.4 NM模塊部署
一、前言
? ? ? ? 基于MBD的應(yīng)用開發(fā)已經(jīng)非常常見,在開發(fā)過程中以簡明,高效的優(yōu)點被諸多ECU開發(fā)人員青睞,有的主機廠可能也會直接要求供應(yīng)商采用這種方式開發(fā)。一個功能或者模塊只要設(shè)計好外部接口,也可以獨立開發(fā)然后嵌入工程中。Autosar的nm狀態(tài)機UML與stateflow畫圖如出一轍,做起來快速簡潔。
二、Autosar NM概括
2.1 術(shù)語
?NM (NetWork Management) Message:網(wǎng)絡(luò)激活,發(fā)送本節(jié)點網(wǎng)絡(luò)報文及應(yīng)用報文 一般定義NM ID(0x503)第一個字節(jié)05是網(wǎng)段ID,03表示該節(jié)點在該網(wǎng)段編號
App Message:客戶定義的Rx\Tx報文;收到非網(wǎng)絡(luò)報文一般ECU需保持一定時間后休眠,在該時間內(nèi)收到NMM,網(wǎng)絡(luò)激活正常通信
PN(Partial Network):該功能是必須是該節(jié)點 指定的NM報文才能喚醒節(jié)點網(wǎng)絡(luò)。
Passive Mode:喚醒后只收不外發(fā)NM PDU(SWS_CanNm_00072),對于一個節(jié)點所在的網(wǎng)絡(luò)只能同時使能或禁用PassiveMode
Active Mode:喚醒后外發(fā)NM PDU
Active Wakeup:上層主動調(diào)用CanNm_NetworkRequest()接口喚醒網(wǎng)絡(luò)。常見喚醒源:KL15信號,定時器、傳感器等,主動喚醒一般發(fā)送立即幀報文5幀,然后進(jìn)入RMS狀態(tài)。
Passive Wakeup:收到其他節(jié)點的有效網(wǎng)絡(luò)管理報文被動喚醒,調(diào)用CanNm_PassiveStartup()接口喚醒網(wǎng)絡(luò)
Remote Wakeup:與總線信號相關(guān)的喚醒方式,如收到網(wǎng)絡(luò)報文、指定診斷報文、KL15信號的應(yīng)用報文
Local Wakeup:與硬線相關(guān)的喚醒方式,KL15線,硬件傳感器如腳踢門;注意KL30是蓄電池供電
2.2? PDU
Byte0 表示源節(jié)點地址,一般是 幀ID - 基地址
Byte1表示CBV控制位,具體定義看下圖7-2
其余字節(jié)一般主機廠自定義,若無特殊說明默認(rèn)為0
Bit0: Repeat報文請求, 0表示為請求,1表示請求;當(dāng)收到該位置1,應(yīng)當(dāng)進(jìn)入RMS狀態(tài)
Bit3:NM 控制休眠位,0表示未被NM控制器請求,1表示請求;該功能需要使能CanNmCoordinatorSyncSupport
Bit4: Active Wakeup Bit , 0表示節(jié)點沒有喚醒網(wǎng)絡(luò)(屬于被動喚醒),1表示節(jié)點喚醒網(wǎng)絡(luò)(屬于主動喚醒)
Bit6: partial network information Bit(PNI) 0表示NM PDU包含沒有PN請求信息,1表示包含PN請求信息。
為什么需要PN(Partial Network)功能呢?實質(zhì)還是為了節(jié)能。沒有PN功能時,一個網(wǎng)段內(nèi)的所有ECU同醒同睡。有時,在一個網(wǎng)段內(nèi),可能只需要某些ECU正常工作即可,不相關(guān)的ECU沒必要喚醒(費電)。所以,增加PN功能是節(jié)能的一個優(yōu)選項。
Bit 1 , 2 , 5, 7功能擴展的預(yù)留位,0不使用/保留
2.3 文件結(jié)構(gòu)
?ComStack_Types.h應(yīng)當(dāng)包含Std_Types.h(AUTOSAR 標(biāo)準(zhǔn)類型) Platform_Types.h(平臺特定類型), Compiler.h編譯特定語言的擴展文件;
Nm_Cbk.h一般NM接口的回調(diào)函數(shù)聲明
Det.h默認(rèn)錯誤Tracer定義的接口
NmStack_Types.h 公共的網(wǎng)絡(luò)管理類型
CanIf.h CanIf的接口包括發(fā)送、接收函數(shù)等
PduR_CanNm.h如果用戶數(shù)據(jù)使能包含改頭文件(COM User Data Support)
2.4 NM結(jié)構(gòu)體
NM結(jié)構(gòu)體也叫做配置結(jié)構(gòu)體CanNmGlobalConfig,這種配置類型可以使工程實現(xiàn)根據(jù)不同的客戶可配置化,使用UML一目了然。
具體的結(jié)構(gòu)體成員含義需參考標(biāo)準(zhǔn)。
?在state flow中需要引入改配置頭文件 CanNm_Cfg.h:
#ifndef CANNM_CFG_H #define CANNM_CFG_H 1 #include "StdTypes.h" /*chapter 10.3.4*/ typedef struct {/**********10.3.3 CanNmGlobalConfig *************/u8_t CanNmBusLoadReductionEnabled;u8_t CanNmBusSynchronizationEnabled;u8_t CanNmComControlEnabled;u8_t CanNmComUserDataSupport;u8_t CanNmCoordinatorSyncSupport;u8_t CanNmDevErrorDetect;u8_t CanNmGlobalPnSupport;u8_t CanNmImmediateRestartEnabled;u8_t CanNmImmediateTxconfEnabled;u8_t CanNmMainFunctionPeriod;u8_t CanNmNodeDetectionEnabled;u8_t CanNmNodeIdEnabled;u8_t CanNmPassiveModeEnabled;u8_t CanNmPduRxIndicationEnabled;u8_t CanNmPnEiraCalcEnabled;u8_t CanNmPnResetTime;u8_t CanNmRemoteSleepIndEnabled;u8_t CanNmRepeatMsgIndEnabled;u8_t CanNmStateChangeIndEnabled;u8_t CanNmUserDataEnabled;u8_t CanNmVersionInfoApi;u8_t CanNmPnEiraRxNSduRef;/**********10.3.4 CanNm Channel Configuration Overview********///CanNmTxPduu16_t CanNmTxConfirmationPduId;//CanNmRxPduu16_t CanNmRxPduBeginId;u16_t CanNmRxPduEndId;//CanNmUserDataTxPduu16_t CanNmTxUserDataPduId;u8_t ComMChannel;/**********10.3.5 CanNmChannelConfig *************/u8_t CanNmActiveWakeupBitEnabled;u8_t CanNmAllNmMessagesKeepAwake;u8_t CanNmBusLoadReductionActive;u8_t CanNmCarWakeUpBitPosition;u8_t CanNmCarWakeUpBytePosition;u8_t CanNmCarWakeUpFilterEnabled;u8_t CanNmCarWakeUpFilterNodeId;u8_t CanNmCarWakeUpRxEnabled;u16_t CanNmImmediateNmCycleTime;u8_t CanNmImmediateNmTransmissions;u8_t CanNmMsgCycleOffset;u16_t CanNmMsgCycleTime;u8_t CanNmMsgReducedTime;u8_t CanNmMsgTimeoutTime;u8_t CanNmNodeId;u8_t CanNmPduCbvPosition;u8_t CanNmPduNidPosition;u8_t CanNmPnEnabled;u8_t CanNmPnEraCalcEnabled;u8_t CanNmPnHandleMultipleNetworkRequests;u32_t CanNmRemoteSleepIndTime;u16_t CanNmRepeatMessageTime;u16_t CanNmTimeoutTime;u16_t CanNmWaitBusSleepTime;}CanNm_ConfigType;#endif2.5?狀態(tài)機
NetWorkMode
包含3個子狀態(tài)Repeat Message State(重復(fù)報文狀態(tài),RMS),Normal Operation State(NOS,正常模式狀態(tài)),Ready Sleep State(準(zhǔn)備睡眠狀態(tài),RSS)。
1.網(wǎng)絡(luò)模式從BusSleep進(jìn)入NetWorkMode首先進(jìn)入RMS,條件為主動或被動喚醒
2.進(jìn)入Network Mode,成功接收或成功發(fā)送NM PDU應(yīng)當(dāng)重啟NM-Timeout計時器,應(yīng)當(dāng)開啟APP報文、使能DTC
3.進(jìn)入RMS,應(yīng)當(dāng)重發(fā)NM PDU; 在RMS中如果NM計時器超時,重啟該計時器;如果收到PDU的CBV中RMS位置為1,應(yīng)當(dāng)進(jìn)入RMS狀態(tài)
4.進(jìn)入NOS狀態(tài),應(yīng)當(dāng)啟動PDU周期發(fā)送;當(dāng)網(wǎng)絡(luò)釋放(一般指電源信號OFF)應(yīng)當(dāng)進(jìn)入RSS狀態(tài);RSS狀態(tài)中如果網(wǎng)絡(luò)請求(電源信號ON),應(yīng)當(dāng)進(jìn)入NOS狀態(tài);NOS狀態(tài)如果收到診斷28服務(wù)使能或禁止發(fā)送NM,應(yīng)當(dāng)打開或者關(guān)閉NM PDU
5.在RSS狀態(tài)中禁止發(fā)送NM PDU,發(fā)送APP報文;如果NM-timeOut, 則離開RSS,進(jìn)入PBS狀態(tài);
6.在RBS中開啟CanNmWaitBusSleepTime定時器,如果超時進(jìn)入BSS中休眠;如果主動或被動喚醒則重新進(jìn)入網(wǎng)絡(luò)模式RMS狀態(tài);
三、Stateflow實現(xiàn)
3.1 NM接口定義
根據(jù)NM模塊功能設(shè)計輸入、輸出、API函數(shù)
輸入:NM PDU信息, 診斷28是否使能發(fā)送或接收NM PDU,電源信號
輸出:NM PDU,使能DTC,使能APP,NM狀態(tài)
API:CAN發(fā)送接收,發(fā)送接收確認(rèn),CAN初始化;定時器函數(shù);NetworkRequest,NetworkRelease函數(shù)
3.2 NM功能實現(xiàn)
定義好接口后,根據(jù)2.5小節(jié)狀態(tài)間轉(zhuǎn)換的條件就可以在State flow中實現(xiàn)該功能。
被動模式
?主動模式
3.3 NM模塊測試
首先了解一下在環(huán)測試的概念。MIL(model in the loop)模型在環(huán)是在matlab中純軟件仿真。? SIL(software in the loop)軟件在環(huán) 將模型轉(zhuǎn)換為以C/C++嵌入式軟件形式的軟件,也可以封裝成庫的形式進(jìn)行仿真驗證。?PIL(processer in the loop)處理器在環(huán) 在真實的控制器ECU中進(jìn)行仿真驗證。 HIL(Hardware in the loop)硬件在環(huán) 使用真實被控對象,比如電機進(jìn)行測試驗證。
3.3.1?測試用例
對模型建立testHarness,輸入時序列test sequence
?對test sequence 進(jìn)行編程
?在模型設(shè)置中使能模型覆蓋度:
?建立testManager 管理test file,對每一個 狀態(tài)建立一個test suit, 進(jìn)行設(shè)置覆蓋度,點擊運行即可
test case 測試結(jié)果:
3.4 NM模塊部署
3.4.1 生成C/C++代碼
在配置文件中設(shè)置外部文件頭文件和源文件位置
?
設(shè)置生成C或者C++語言的程序
點擊Build即可生成代碼,存于?ert_rtw中
?3.4.2 嵌入APP工程
剪出主要源文件及其對應(yīng)的各種頭文件,查看mk文件進(jìn)行路徑修改等設(shè)置成單獨可編譯mk文件
?將剪切的代碼文件嵌入工程中,并將mk文件鏈起來,或者在工程mk文件中直接INC_DIR,CSRC_DIR加入相關(guān)文件路徑即可完成部署?
參考:
Autosar網(wǎng)絡(luò)管理:Partial Network基礎(chǔ) - 知乎 (zhihu.com)
為什么需要PN(Partial Network)功能呢?-電子發(fā)燒友網(wǎng) (elecfans.com)
總結(jié)
以上是生活随笔為你收集整理的AUTOSAR——MBD应用之NM模块Stateflow实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oswatch的安装和使用
- 下一篇: 华为hicar 鸿蒙,华为智能座舱的野心