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