LDF文件步骤及内容详解
LDF文件第一部分——ldf文件配置
LIN_description_file; //LIN描述文件 LIN_protocol_version = 2.1;//LIN協(xié)議版本 LIN_language_version = 2.1; //LIN語言版本 LIN_speed = 19.2 kbps; //LIN的通信速度第一部分是必不可少的,屬于全局定義。我們可以把等號左邊的看作固定值,右邊的看作變量或者參數(shù)進行理解,比如version可以為2.0、2.1、2.2,版本要一致,不然版本不兼容,生成的ldf文件就報錯
LIN的通信速度是以kbps(每秒千比特率)為單位的,范圍是1.0-20.0ksps,一般由19.2和9.6這兩個參數(shù)
LDF文件第二部分——節(jié)點定義
Nodes {Master: BCM,,5 ms, 0.1 ms; //主機節(jié)點,名稱:ECC,時基:5ms,抖動:0.1msSlaves: RLS, IP; // 從機節(jié)點名稱:RLS,IP }抖動(Jitter)為幀的同步間隔段的下降沿與幀時隙起始時刻相差的時間。時基(Time Base)為LIN子網(wǎng)的最小計時單位,通常設(shè)定為5ms或10ms。
幀時隙必須為時基的整倍數(shù),并且起始于時基的開始時刻(稱為時基的節(jié)拍(Tick)),切換到另一個進度表時一定要等到當前幀時隙的結(jié)束
從機節(jié)點注意不要主機節(jié)點設(shè)置進去,如果自己寫腳本或者程序,注意判斷從機節(jié)點這一列是否打了X或者被調(diào)用,如果沒有被調(diào)用就不要加。加了應(yīng)該也沒事(狗頭)
LDF文件第三部分——信號定義
Signals {KeyInSts: 1, 0, BCM, IP; //信號名稱:KeyInSts,size_bit=1,初始默認值=0 ,發(fā)送節(jié)點=BCM,接收節(jié)點IPAmbientTemperature: 8, 100, BCM, RLS,IP; //信號名稱:AmbientTemperature,size_bit=8,初始值=100,發(fā)送節(jié)點=BCM,接收節(jié)點=RLS,IPLowBeamReq: 24, {0,0,0}, RLS, BCM;//信號名稱:LowBeamReq,size_bit=24,初始值={0,0,0},以數(shù)組形式呈現(xiàn),發(fā)送節(jié)點=RLS,接收節(jié)點=BCM }size_bit小于等于16時,信號的類型是Scalar,初始默認值為16進制,需要進行轉(zhuǎn)換,如果為空默認為0,大于16時就是Byte Array(字節(jié)數(shù)組)
size_bit后的第一個值為發(fā)送節(jié)點,發(fā)送節(jié)點只能有一個
發(fā)送節(jié)點之后的全部都是接收節(jié)點,接收節(jié)點可以有多個
LDF文件第四部分——設(shè)置默認的診斷數(shù)據(jù)
Diagnostic_signals {MasterReqB0: 8, 0 ; 主節(jié)點名稱:8bit ,默認為0MasterReqB1: 8, 0 ;MasterReqB2: 8, 0 ;MasterReqB3: 8, 0 ;MasterReqB4: 8, 0 ;MasterReqB5: 8, 0 ;MasterReqB6: 8, 0 ;MasterReqB7: 8, 0 ;SlaveRespB0: 8, 0 ; 從節(jié)點名稱:8bit ,默認為0SlaveRespB1: 8, 0 ;SlaveRespB2: 8, 0 ;SlaveRespB3: 8, 0 ;SlaveRespB4: 8, 0 ;SlaveRespB5: 8, 0 ;SlaveRespB6: 8, 0 ;SlaveRespB7: 8, 0 ; }默認設(shè)置無需更改
LDF文件第五部分——數(shù)據(jù)幀定義
Frames { //幀定義BCMSts1: 0x2, BCM, 3 { //幀名稱:BCMSts1,幀ID:0x2,幀的發(fā)布節(jié)點:BCM,幀數(shù)據(jù)段字節(jié)KeyInSts, 0; //幀的信號名稱:KeyInSts,對應(yīng)列Messagename 幀中的偏移量:0,對應(yīng)列LSBHighBeamCmdSts, 1;LeftTurnLampSts, 2;RightTurnLampSts, 3; LeftPositionlLampSts, 4; RightPositionlLampSts, 5; LeftPosLampFailSts, 6;RightPosLampFailSts, 7; LHFDoorSts, 8;LHRDoorSts, 9;RHFDoorSts, 10;RHRDoorSts, 11;RearLidSts, 12;DashboardBrightness, 13;KeySts, 16; }BCMSts2: 3, BCM, 3 { //十進制幀IDWiperSwitchSts, 0; //幀的信號名稱,幀中的偏移量RLSSensitivityReq, 3;VehicleSpeed, 8; RearLidSts, 12;DashboardBrightness, 13;AmbientTemperature, 16; RearLis, 12;DashboardBrig, 13;} }一個幀的幀ID可以是十六進制的也可以是十進制的
幀中信號的偏移量只能越來越高,從底到高順序,最小值0,最大值為63,如果有其他幀信號,可以繼續(xù)添加
LDF文件第六部分——診斷幀
Diagnostic_frames { //診斷幀MasterReq: 0x3c { // 主節(jié)點診斷發(fā)送幀:MasterReq,幀ID:0x3c或者十進值60MasterReqB0, 0 ;MasterReqB1, 8 ;MasterReqB2, 16 ;MasterReqB3, 24 ;MasterReqB4, 32 ;MasterReqB5, 40 ;MasterReqB6, 48 ;MasterReqB7, 56 ;}SlaveResp: 0x3d { // 從節(jié)點診斷接收幀:SlaveResp,幀ID:0x3D或者十進值61SlaveRespB0, 0 ;SlaveRespB1, 8 ;SlaveRespB2, 16 ;SlaveRespB3, 24 ;SlaveRespB4, 32 ;SlaveRespB5, 40 ;SlaveRespB6, 48 ;SlaveRespB7, 56 ;} } 診斷幀的值和數(shù)據(jù)為固定的,不需要更改LDF文件第七部分——從節(jié)點屬性定義
Node_attributes { //從節(jié)點屬性定義,與第二部分節(jié)點定義映射IP {// 從節(jié)點名稱LIN_protocol = "2.1"; //與第一部分ldf文件配置映射configured_NAD = 0x68; // NAD值范圍為1-255,可以使用十六進制值,也可使用十進制product_id = 0x2, // supplier_id (0-0x7FFE) 供應(yīng)商id0x1, // function_id (0-0xFFFE) 功能id0x1; // variant (0-0xFF) 可變idresponse_error = IPErrorSts; // 1比特錯誤信號 可不加P2_min = 50 ms; // 最小間隔ST_min = 0 ms; // 最小準本時間N_As_timeout = 500 ms; // 非必要 診斷幀傳輸時間N_Cr_timeout = 1000 ms; // 非必要 上一幀到下一個連續(xù)幀的發(fā)完的時間configurable_frames{BCMSts1 ; //message name 或 message id 消息名稱或消息id,與上文第五部分數(shù)據(jù)幀定義映射IPSts;}} }P2_min: 從 LIN 子網(wǎng)接收到主機請求幀到 LIN 的從機節(jié)點準備好數(shù)據(jù)發(fā)送應(yīng)答之間的最小時間間隔。
ST_min: 從機節(jié)點準備接收下一個幀(主機請求幀)或準備發(fā)送下一個幀(從機應(yīng)答幀)的應(yīng)答部分所需要的最小準備時間。
LDF第八部分——調(diào)度表信息
Schedule_tables {LIN2NormalTable_IGNON { // 調(diào)度表BCMSts2 delay 30 ms ; // 幀的延時RLSSts delay 30 ms ;}LIN2NormalTable_IGNOFF {BCMSts1 delay 15 ms ;BCMSts2 delay 15 ms ;IPSts delay 15 ms ;RLSSts delay 15 ms ;} }除了幀延時lin2.1版本默認Max.Frame Time[ms]為9.05,Min.Frame Time[6.46]
一個調(diào)度表會將所有幀延時加起來
調(diào)度表可以有多個,比如進度表、診斷發(fā)送表、診斷應(yīng)答表等
LDF第九部分——信號編碼定義
Signal_encoding_types{KeyInSts_Encoding{//信號名稱加上_Encodingphysical_value, 0, 254, 1.417, 0, "VehicleSpeed"; //類型,計算機最小值,計算機最大值,精度(factor),偏差(offset),單位(Unit),沒有可以不加logical_value, 0, "Close"; //表示類型是coding:logical_value,序號0,對應(yīng)的是矩陣十六進制數(shù)字,coding值=Closelogical_value, 1, "Open"; //表示類型是coding:logical_value,序號1,對應(yīng)的是矩陣十六進制數(shù)字,coding值=Open} HighBeamCmdSts_Encoding{physical_value, 0, 254, 0.5, -40,"AmbientTemperature"; //類型,計算機最小值,計算機最大值,精度(factor),偏差(offset),單位(Unit):AmbientTemperature,沒有可以不加logical_value, 0, "No"; logical_value, 1, "Yes"; }LeftTurnLampSts_Encoding{physical_value, 0, 4, 1, 0, "DashboardBrightness";logical_value, 0, "Sensitivity 1"; logical_value, 1, "Sensitivity 2";logical_value, 2, "Sensitivity 3"; logical_value, 3, "Sensitivity 4";logical_value, 4, "Sensitivity 5"; logical_value, 5, "Not Used"; logical_value, 6, "Not Used"; logical_value, 7, "Not Used"; 如果數(shù)值太多,可以這樣寫logical_value, 5, "0x5~0x7,Not Used"; } }獲取計算機最大值最小值,需要進行計算,步驟如下:
如果偏移量大于等于0
計算機最大值(計算機最小值) = (物理最大值(物理最小值) - 偏移量)/ 精度(factor)
如果偏移量大于0
計算機最大值(計算機最小值) = (物理最大值(物理最小值) + 偏移量)/ 精度(factor)
LDF第十部分——信號coding和信號名稱映射
Signal_representation {KeyInSts_Encoding: KeyInSts // 信號coding和信號名稱映射HighBeamCmdSts_Encoding: HighBeamCmdStsLeftTurnLampSts_Encoding: LeftTurnLampSts}本質(zhì)上就是將物理值(physical_value)和coding值添加到對應(yīng)的信號中去如果寫的腳本僅供自己使用的話,能讀取Excel數(shù)據(jù)的語言都可以,優(yōu)先選擇有LDF API的語言。但是如果想做成工具、程序(exe)我推薦java,但我用的是python,因為python的數(shù)據(jù)轉(zhuǎn)換比較麻煩,而且靈活度不如java。如果做成小工具的話java可以使用javafx,里面有圖形化工具,非常方便,python生成的小工具我用的是圖形化界面是PySimpleGUI比較難調(diào)整
生成dbc文件的話,推薦使用python,因為python內(nèi)置的有dbc核心API,可以調(diào)用dbc核心api進行轉(zhuǎn)換非常方便
原文:(10條消息) LIN ldf文件配置_allen_nmk的博客-CSDN博客_ldf中的jitter如何設(shè)置對其補充說明
總結(jié)
以上是生活随笔為你收集整理的LDF文件步骤及内容详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua 连接redis集群
- 下一篇: XenAPP 6.5 登陆APPcent