LDF Explorer工具
LDF文件比较像DBC文件,也是用来解析报文的,DBC文件是用在CAN通讯上的,LDF文件是用在LIN通讯上的。
我们可以用vector自带的工具LDF Explorer打开LDF文件,这个工具是最标准的,有些同学自己做了一个LDF文件,看着能导入一些其他工具,但只要用LDF Explorer打不开或者提示有错误,那就是LDF文件没做好。一般而言,只要不是很熟悉LDF文件,都不太建议直接用记事本来改,因为LDF文件不像DBC文件,DBC对字符格式没什么要求,但是LDF文件却是及其敏感,但凡有一点不一样都会报错。
界面介绍
对于整个LDF文件,有两种结构,一种是按照报文查看,另一种是按照节点查看。报文里面有四种:无条件报文、诊断报文、事件触发报文、零星报文。
新建节点
Edit ->Creat Slave Node给从节点起个名字就行
就可以按照节点查看的选项卡里面,看到新建出来个节点,里面没有关联到报文或者信号。
每个节点下面都有4种关联:公共信号,私有信号,公共报文,私有报文。
新建报文
选择发送节点,接收节点不需要选择,在信号里面会有给你选的地方,选中对应节点Edit ->Creat Fream ->选择无条件报文、事件触发报文或者零星报文,这里用无条件帧举例。
新建完报文之后,根据需要决定是否拖动到调度表里面。
新建信号
点击报文对话框里面的Creat and Map Signal
在弹出来的对话框里面起名字和初始值
Signal里面选择的是数据类型,有scalar和bytearray可以选择,scalar就是长度16位或以下的数据,bytearray长度必须是8位的倍数。
Subscribers需要选择一个接收该信号所在报文的节点
最后选择起始位和字节序
Create是高级用法,一般用不到,可以选择自己想要的编码类型,或者新增编码类型,每个编码类型都有自己关于信号的设定。
编码类型可以设定最大最小值
要注意的是:一旦决定了用编码类型,一定要把单位给设置了,哪怕打个空格都好,不然你生成NCF文件之后,别人导入会报错。NCF文件下面会有介绍。
数据物理意义
factor和offset,单位,最后的ASCII/BCD只是个检查的,不用管。
创建完成之后就可以在报文的layout界面里面看到信号所处的位置
NCF节点配置文件
Edit->Export NCF ->选择节点
就可以导出特定节点的信息,用记事本打开就可以知道,NCF文件只是LDF文件里面关于节点的部分。
node_capability_file;
LIN_language_version = "2.1";
node Motor1 {
general {
LIN_protocol_version = "2.1" ;
supplier = 0x1E ;
function = 0x1 ;
variant = 0 ;
bitrate = 19.2 kbps;
sends_wake_up_signal = "no" ;
}
diagnostic {
NAD = 0xA ;
diagnostic_class = 1 ;
P2_min = 100 ms ;
ST_min = 20 ms ;
N_As_timeout = 1000 ms;
N_Cr_timeout = 1000 ms;
support_sid { 0xb2, 0xb7 } ;
}
frames {
subscribe Motor1Control {
length = 1 ;
signals {
Motor1Selection {
init_value = 0 ;
size = 2 ;
offset = 0 ;
}
}
}
publish Motor1State_Cycl {
length = 6 ;
signals {
Motor1Temp {
init_value = 5 ;
size = 8 ;
offset = 0 ;
}
Motor1Position {
init_value = {0, 0, 0, 0} ;
size = 32 ;
offset = 8 ;
}
Motor1LinError {
init_value = 0 ;
size = 1 ;
offset = 40 ;
}
}
}
publish Motor1State_Event {
length = 3 ;
signals {
Motor1ErrorCode {
init_value = 5 ;
size = 8 ;
offset = 8 ;
}
Motor1ErrorValue {
init_value = 1 ;
size = 8 ;
offset = 16 ;
}
}
}
subscribe MotorsControl {
length = 8 ;
signals {
MotorDirection {
init_value = 0 ;
size = 2 ;
offset = 0 ;
}
MotorSpeed {
init_value = 0 ;
size = 10 ;
offset = 2 ;
}
}
}
subscribe New_Frame {
length = 8 ;
signals {
New_Frame_NewSignal {
init_value = {0, 0, 0, 0} ;
size = 32 ;
offset = 28 ;
New_Frame_NewSignal_Encoding_1 ;
}
}
}
}
encoding {
New_Frame_NewSignal_Encoding_1 {
logical_value, 7 , "off" ;
logical_value, 8 , "on" ;
physical_value, 6, 15, 0.01, 0 ;
}
}
status_management {
response_error = Motor1LinError ;
}
}
Edit->Import NCF就能够导入特定节点,此处不再赘述。
小技巧
查看节点主从性质
有时候我们不知道自己的节点是主节点还是从节点,这个时候就可以在节点方式查看选项卡里面选中节点。
这种就是主节点
这种是从节点
验证配置正确性
工具栏里面有个LIN Consistency Checker
打开之后Run Checks就能开始检测,里面只要没有红色叉就是校验通过,不要有强迫症想把所有感叹号都消除了,它vector自己的模板都做不到。
其实LDF Explorer在打开LDF文件的时候也会运行一次LIN Consistency Checker,如果打开的文件有问题,就会显示LIN Consistency Checker,没问题就不会显示。