LDF文件之LDF Explorer工具

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,没问题就不会显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/200887.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++基础 -18-继承中类继承的区别

无论使用公有,保护,私有继承 都无法访问基类私有成员 在多级继承中 使用公有继承 派生的派生可以访问基类的公有,保护成员 在多级继承中 使用保护继承 派生的派生可以访问基类的公有,保护成员 在多级继承中 使用私有继承 派生的派…

浅学指针(3)

系列文章目录 文章目录 系列文章目录前言系列文章目录前言1. 字符指针变量2. 数组指针变量那数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。2.2 数组指针变量怎么初始化总结:函数名就是地址,&函数名和直…

【送书活动二期】Java和MySQL数据库中关于小数的保存问题

之前总结过一篇文章mysql数据库:decimal类型与decimal长度用法详解,主要是个人学习期间遇到的mysql中关于decimal字段的详解,最近在群里遇到一个小伙伴提出的问题,也有部分涉及,今天就再大致总结一下Java和MySQL数据库…

热门话题解析:pytest测试用例顺序问题解决方案!

前言 上一篇文章我们讲了在pytest中测试用例的命名规则,那么在pytest中又是以怎样的顺序执行测试用例的呢? 在unittest框架中,默认按照ACSII码的顺序加载测试用例并执行,顺序为:09、AZ、a~z,测试目录、测…

【软件测试学习】—软件测试的概念与软件测试模型(一)

【软件测试学习】—软件测试的概念与软件测试模型(一) 我 | 在这里 👩‍🦰👩‍🦰 读书 | 长沙 ⭐计算机科学与技术 ⭐ 本科 【2024届】 🎃🎃 爱好 | 旅游、跑步、网易云、美食、摄影…

力扣 41 42.接雨水问题详细讲解,保证看完必会接雨水问题!!!时间复杂度最优解 o(n)

首先来个开胃小菜,41.缺少最小整数(难度:困难)真实感觉像是个简单级别 41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额…

制作心理咨询小程序的详细指南

随着科技的的发展,小程序已经成为了人们日常生活中不可或缺的一部分。特别是在心理咨询这个领域,小程序可以提供一个更为便捷、高效的服务平台。本文将通过乔拓云平台为例,详细介绍如何制作一个心理咨询小程序。 首先,我们需要注册…

销门!销售秘籍都在这了

很多刚进销售行业,或者初入职场的小白,肯定会有这一段迷茫/茫然期:为什么同事每天都有客户打电话/实地拜访呢? 而自己却无所事事,也没有客户找我,也不知道去哪里拜访客户。 这个阶段对于销售小白来说是很…

YOLOv5原创改进:全维动态卷积再改进,GCODConv

目录 一、原理 网络结构 二、代码 三、应用到YOLOv5中 一、原理

Mysql解决随机选取问题

常规的随机选取效率差的原因: 两种解决方法: 总结:

【Redis基础】Redis基本的全局命令

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! Redis基本的全局命令 1,KEYS命令 语法:KEYS pattern KEYS命令用来查询服…

深度学习知识点

深度学习过程 data [] for i,d in enumerate(data):image,label d image,label image.cuda(),label.cuda()img net(image)optimizer.zero_grad()#需要将梯度信息清零,因为梯度计算是按照batch分批次计算的,如果这一批batch没清零,会影响…

深入理解堆排序:建堆、排序与优化

引言 在计算机科学中,堆排序是一种高效的排序算法,利用堆的数据结构特性进行排序。本文将深入探讨堆排序的原理、实现过程,并介绍一种优化方法,以帮助读者更好地理解和运用这一经典算法 目录 堆排序简介 1.1 什么是堆排序&#x…

Vue生命周期

生命周期 Vue.js 组件生命周期: 生命周期函数(钩子)就是给我们提供了一些特定的时刻,让我们可以在这个周期段内加入自己的代码,做一些需要的事情; 生命周期钩子中的this指向是VM 或 组件实例对象 在JS 中,…

JRT实现缓存协议

上一篇介绍的借助ORM的增、删、改和DolerGet方法,ORM可以很精准的知道热点数据做内存缓存。那么就有一个问题存在,即部署了多个站点时候,如果用户在一个Web里修改数据了,那么其他Web的ORM是不知道这个变化的,其他Web还…

局部性原理和伪共享

CPU Cache CPU Cache可以理解为CPU内部的高速缓存。CPU从内存读取数据时,将要读取的数据及其相邻地址的数据,即至少一个Cache Line,写入Cache,以便后续访问时提高读取速度。 CPU存在多级Cache,级别最高的离CPU最近&a…

实现电商平台与营销系统无缝集成:雅座的无代码开发与API连接

无代码开发:营销的新引擎 在数字化转型的浪潮中,无代码开发已成为企业提升效率、减少成本的新引擎。这种开发方式允许非技术人员通过图形界面构建应用程序,无需编写代码即可实现复杂功能。这对于营销、广告推广以及用户运营等业务尤为重要&a…

贪心 53. 最大子序和 122.买卖股票的最佳时机 II

53. 最大子序和 题目: 给定一个数组,有正有负,找出一个连续子序列的总和最大(子数组最少一个) 暴力思路: 双层for循环,记录每一次可能的子序列的总和,初始为整数最小值&#xff…

Go语言实现大模型分词器tokenizer

文章目录 前言核心结构体定义构造函数文本初始处理组词构建词组索引训练数据编码解码打印状态信息运行效果总结 前言 大模型的tokenizer用于将原始文本输入转化为模型可处理的输入形式。tokenizer将文本分割成单词、子词或字符,并将其编码为数字表示。大模型的toke…

ArkTS-取消标题与自定义标题栏

文章目录 取消标头自定义标题栏导入Resources自定义跳转动画关于底部tabBar导航文本输入(TextInput/TextArea)自定义样式添加事件可以是onChange可以是onSubmit List列表组件设置主轴方向 网格布局服务卡片-获取地理位置页面获取地理位置服务卡片获取地理位置 可以先看看&#…