tag 标签: 汽车总线工具链软件

相关博文
  • 热度 3
    2022-9-20 10:40
    1544 次阅读|
    0 个评论
    新功能发布—TSMaster的MATLAB自动化控制模块
    前言 今天我们继续来介绍TSMaster新功能—MATLAB自动化控制模块。该模块提供了大量用于MBD开发的小工具。还包含了这个可以将c代码自动转化为stateflow代码的程序。 一、MATLAB的自动化对象 首先点击连接,连接到matlab的自动化对象,需要启动matlab的主程序,一旦连上之后,matlab程序就可以实时被TSMaster软件来控制。那么我们点击之后可以看到连接按钮变灰,然后断开连接按钮变成高亮,那么这个时候就可以通过我们的软件来控制matlab程序了。 然后我们可以点击这个c代码转stateflow,点击解析,会实现一个逻辑树,然后再点击生成代码。这个时候我们就可以看到,我们的示例代码就可以自动转换成stateflow代码,该功能可以迅速的将已有的C代码的逻辑一键转换成完全等价的stateflow的逻辑,从而提高MBD的开发效率。那么转化完成的效果就是这样,双击chart1展开之后就可以看到跟刚才的c脚本完全对应的stateflow的逻辑。 二、SIL和HIL环境的自动构建 只要我们拥有可以生成代码的Simulink的仿真模型,就可以通过此模块来实现该模型在TSMaster环境中的实时运行。从而让我们的算法可以在软件设计的前期就可以参与到HIL和SIL的实时仿真中来,同时有了小程序的加持,我们还可以对算法进行细致入微的调试、监控,甚至将二进制文件发布给其他的用户,进行联合仿真,那么具体如何实现呢? 我们还是从0开始,举一个例子来说明:首先我们切换到第一个页面,SIL and HIL页面,可以看到这个页面有4个步骤,按照这4个步骤顺序执行,就可以迅速搭建一个HIL环境。那么第一步是算法模型的配置,他给了两个输入,一个是我们的小程序的名称,第二个是Simulink模型文件。对于第一个输入,只要给我们的新构建的小程序起个名字就可以了,比如说这个默认的Model1,我们输入之后点击最右边的绿色的勾,它的作用就是判断Model1是否存在。如果不存在就创建一个,如果存在就使用这个Model1。 这样可以将我们新的算法集成到我们现有的小程序中,在这里就需要填入现有的小程序的模型名称,也就是从中可以选择我们的小程序名称。那么这一步成功之后,就来到了Simulink模型文件的设置过程。在此我们需要找一个Simulink的实例程序进行讲解,我们首先打开Simulink,在Simulink的启动页会有很多的实例。我们找一个比如展开这个stateflow,里面有空白图、简单图分层图等等。我们选择这个分层图,就打开了一个名为untitled的模型,我们看到这个模型,包含了一个run和一个cooldown。这两个大的状态run了30秒之后,会冷却 5秒,然后5秒之后继续run,从此循环往复,而在这个run的过程中,是每隔1秒就让输出在10和1之间切换,这就是当前stateflow的简单逻辑。 我们按esc返回到顶层,可以看到这个模型只有一个输出,我们加一个示波器来看看波形。按F5运行,当然这个运行需要将当前的工作目录切换掉,我们可以选择随便一个目录比如说新建个文件夹,然后我们回到刚才的模型按F5运行成功,那么打开示波器我们可以看到输出和我们之前的推断是完全吻合的。也就是运行了30秒之后休息5秒,然后继续运行。我们将这个模型另存为simple,接下来将这个示波器删除,并且添加一个out接口,将这个模型配置成可以代码生成的模型,随后我们就要配置一下代码生成的细节。 我们进入模型的设置,点击代码生成,首先要将这个grt改为ert.tlc。因为目标的环境是嵌入式环境,同时勾选仅生成代码,然后展开代码生成,进入到模板中,将“生成示例主程序”的勾去掉,这样就不会自动生成main函数。因为这个main函数的文件往往是不会用的。至此配置完成。我们点击保存并且关闭这个模型。 三、MATLAB控制模块 接下来就回到matlab控制模块中,选择Simulink模型文件,点击绿色的箭头按钮,选中我们刚才的simple.slx,那么可以看到前两步过了之后步骤1就算执行完成。接下来就到了cache文件夹和codegen文件夹的设定,那么留空就表示生成到默认的位置。我们可以将这两个位置改掉,还是点击绿色的按钮,然后可以选择我们的cache文件夹,我们可以新建一个cache,并且选择这个文件夹,那么cache文件夹就已经设置成功。接下来就是codegen,还是一样,我们可以在cache旁边建一个codegen,点击选择,那么这两个文件夹也就设置完毕。 然后就到了代码生成的环节。我们只要点击启动Simulink代码生成,等待代码生成完毕就可以了。那么生成的代码就会存放到刚才设定的codegen这个文件夹中。第一次生成会耗费一点时间,我们需要耐心的等待。那么Simulink的执行过程是同步的,而且比较慢,所以TSMaster可能会报警。现在我们可以看到代码生成已经完成。 那么接下去就是自动复制已生成的代码到我们的小程序的代码库里面,点击之后可以显示已copy6个文件,那么接下去第二步就已经完成。也就是代码生成的过程已经成功实现,再往下就是代码集成。代码集成目的就是将算法给调用起来,我们点击编辑小程序的源码按钮,打开Model1这个小程序,我们首先看一下属性,然后点击代码库的路径,可以看到simple.c和.h文件以及其他的一些用到的头文件。打开这两个文件,首先我们看一下simple.h文件,那么这个文件是一个接口文件,可以看到这里面有三个函数,初始化step和terminate函数,我们需要分别将这三个函数的调用拷贝到Model1小程序里面。首先就是要用这个simple.h头文件。 我们回到小程序,点击全局定义#include,"simple.h"。那么接下来就是COPY。我们双击这个simple初始化,然后到小程序的初始化事件中,粘贴然后再copy step到我们的小程序的step函数中,粘贴然后就是terminate,回到我们小程序的停止事件,同样粘贴,这样就实现了函数调用。那么需要注意的就是step函数的周期了,默认周期是5毫秒,但模型中肯定不是。我们首先还是打开这个simple.slx,然后我们到模型的属性看一下这个模型的相关的求解器的属性。它是定步长,并且步长是0.1秒,那么0.1秒在TSMaster里面就是100毫秒,双击step函数,将周期改为100,那么接下来我们需要观测一下out1这个信号。 我们可以直接在变量点右键,添加变量,输入我们这个out1,那么就新建了一个out1的变量,然后我们就需要在代码里找到这个变量,那么可以看到这个extern,这里写的是outports,那就是simple y这个变量,它有一个成员叫out1,就是我们需要用到的变量,我们可以在这里写下out1.set,把刚才这个out1拷贝过来,这样就实现了变量的赋值。那么小程序就算编写完毕。 四、执行SIL和HIL的仿真 在此我们可以直接点击运行仿真,那么我们的算法模型其实就已经实时的在运行,这个时候如果需要观测信号,首先要启动我们的TSMaster的仿真,然后我们可以打开一个观测窗口,比如说图形,打开之后我们可以点右键添加系统变量,通过内部变量,找到model 1的out 1这个变量,然后我们可以修改他的范围,比如说改成1—15 -1—15,那么就可以看到这个图形的显示跟我们刚才看到的Simulink示波器画面是完全一样的。 这个信号是可以设成竖线显示,这样就更符合这个信号代表的逻辑含义,那么这个out1的信号是实时刷新的,这就意味着我们可以通过总线接口将此算法模型接入到整车网络,可以与实际的控制器进行互动,那么以上就是matlab控制模块进行HIL的简单的方法。
  • 热度 6
    2022-9-14 17:39
    1815 次阅读|
    0 个评论
    新功能发布—TSMaster如何实现checksum和rolling counter的本地化支持
    前言: TSMaster近日更新了五大模块的新功能,主要包含网络仿真中的checksum和rolling counter的本地化支持、J1939多帧报文收发、MATLAB自动化控制模块等等。小编接下来将在之后推文中给大家以图文教程的形式一一讲解。 今天介绍TSMaster的新功能—网络仿真中的checksum和rolling counter的本地化支持,该功能可以轻松做到不写一行代码就可以实现带checksum和rc的网络仿真。 一、旧版本VS新版本 旧版本: 首先回顾一下旧的方法,也就是使用小程序对每个信号进行模拟,打开这个示例随后按F5启动仿真,就可以看到不断递增的rolling counter,也就是蓝色的这个三角波。 我们展开trace,从中把这个checksum拖到图形窗口中,就可以观察checksum的实时曲线。再看我们的小程序代码,在pretx的回调函数中,需要写程序来直接控制checksum和rolling counter的信号,倘若涉及到大型的网络仿真,那么就需要花费大量的时间,每个信号进行逐个处理容易出错,同时也会带来效率的问题。 新版本: 新功能则不需要手动处理每个信号,我们来新建一个工程试一试。打开工程-工程目录,找到TSMaster的安装包自带的示例数据库。例如powertrain,我们将它拖入,可以看到数据库已经载入。 我们选择一帧报文,以ABS data为例,可以看到这个报文并没有checksum和rc,我们需要修改数据库给他加上这两个信号,点击编辑按钮,打开数据库编辑器,我们新建两个信号,分别命名为ABS checksum。checksum一般是8位的无符号,然后还有一个是ABS。rc一般是4位无符号,再将这两个信号拖入ABS data这个报文里面,随后我们打开这个报文的配置窗口,将dlc改为8,切换到layout。 我们可以将我们新建的rc拖动到合适的位置,接下去是设定checksum的位置,这是我们新增的checksum信号,由于checksum是保护报文的数据内容的,一般位于报文的第一个字节或者是最后一个字节。在这里我们把这个信号拖到最后一个字节,这意味着保护的范围是从0到6字节,点击确定,再点击保存,再点击关闭。可以看到TSMaster会自动刷新所编辑的数据库。 这时候我们展开报文,选择abs data,切换到布局窗口,我们就可以看到我们新增的两个信号,一个是rolling counter,在52-55位之间;另外一个是checksum,在56-63之间。新增的checksum和rc已经按照我们的要求设置成功了。 二、checksum和rc的本地化支持 关闭数据库编辑器,切换到仿真,打开rbs窗口,双击激活engine节点,设置为自启动仿真, 随后按下F5启动仿真,这就可以让rbs来仿真engine这个节点的所有报文。 切换到分析,打开trace窗口,展开abs data报文,可以看到我们新增的rc和checksum都是默认的0,这时候就需要进行配置,回到rbs窗口,在rc信号上点击右键,设置它为rolling counter信号,设置将会立即生效,可以看到rolling counter在变化。 接着打开一个图形窗口,把rc拖入图形就可以看到锯齿波,说明rc已经生效,接下来就要配置checksum。由于checksum涉及到crc算法库的安装和编辑,这个信号是不能够实时的去配置它的,所以我们先按F6停止仿真,再在checksum信号上右击选择设为checksum信号,那么第一次设置会看到系统会安装默认的crc的算法库,并且在安装成功后会弹出crc算法列表。 我们可以随便选一个算法比如说crc 8。这个时候我们就已经成功的将crc 8的算法和这个checksum信号产生了关联。此时还有一个配置项需要确认,那就是这个checksum信号的保护范围,默认是从0字节开始,保护后面7个字节,那么这是可以随时更改。我们可以点击右键,选择编辑crc算法参数,就可以看到已经配置过的crc信号表。 那么双击这个表里面任何一个信号,还可以继续修改他关联的crc算法,这个时候我们先不修改算法,我们只需要知道这个窗口是可以更改保护的字节起始以及保护的字节数就可以了。那么我们现在先点击确认,然后我们再次按下F5启动仿真,展开abs data报文,我们就可以看到checksum已经在刷新了。 我们把这个信号拖到图形窗口中,就可以看到了checksum的实时曲线,而一般情况下,checksum的算法都是公司自定义的,我们完全可以改写默认的crc的算法库来做到这一点。 点击仿真-小程序库,可以看到默认的crc的算法库也不过就是一个小程序库而已,他提供了21个默认的算法。 我们可以在c代码编辑器中找到这个算法库的源代码,注意的是这个小程序是以库文件的方式提供的,是没有独立的启动和停止按钮的,我们在此制定一个crc算法。点右键添加自定义函数取名为mycrc,参数表可以随便选一个copy,然后我们可以把现有的算法的内容抄进来。比如说这个crc8,然后在这个基础上进行修改,我们可以随意的改,比如说将这个poly = 0x17,如果要想把我们新的这个函数安装到系统中,只需要编译这个算法库就可以,当然编译的过程需要保证。 首先要停止仿真,因为当前的这个算法库依然在被rbs引擎使用,此时我们再点击编译 就可以看到编译成功,并且已经自动安装到我们的系统中。 三、如何实现实时曲线 我们打开总线仿真,在这个信号上点右键,重新选择一下crc算法,选择我们的mycrc,就可以关联成功。然后我们按F5启动仿真切换到图形窗口,就可以看到不一样的checksum的实时曲线,这是因为这个整个报文里面就只有rolling counter的一个信号在变化,所以这个checksum的信号的曲线具有一定的规律,那么同时我们也可以让其他的信号也动起来,这该怎么做呢? 1、手动设置方法 最快的一种是使用发送窗口的信号生成器。我们可以首先在rbs窗口中 将这个报文的周期改为0,那这样的话rbs就不会自动发送这个报文,然后我们切换到发送窗口,点击添加来自数据库的报文,选择我们的abs data,我们点击发送,然后切换到图形窗口,就可以看到跟之前一样的曲线。这是新功能的强大之处,也就是不管该报文在系统的哪个模块被发出,只要rbs是激活状态,报文的checksum和rolling counter就能够被正确配置。 接下来我们可以激励其中的其他信号,比如说carspeed这个信号,我们可以将生成器选择为正弦波,配置偏移量为150,因为它的范围是0到300,然后点击应用关闭,点击启动生成,这个时候就可以看到checksum发生了变化,这时候我们把carspeed拖进来,就可以看到所有信号的实时曲线。这时候的checksum就显示出了无规则的变化,这是因为同时有了两个信号在变化,那么以上就是checksum和rolling counter的手动设置方法。 2、自动设置方法 我们还可以通过小程序API来做到自动设置,首先可以清空这两个信号的配置,只要在上面点击右键,选择设为普通信号,那这两个信号就不再具有功能,可以看到这两个信号就变成了默认的值,然后我们可以打开自动化模块,新增一个函数调用,搜rc可以从中找到跟rolling counter有关的就是这个can rbs set rc Signal。他只有一个传入参数,就是信号的数据库地址。接着我们到总线仿真里面,把这个rc信号顶右键的数据库地址拷贝过来,这样就实现了这个信号的设置。 那么我们可以再增加一个函数调用,按回车新建一个新的动作,然后我们选择crc相关的函数,那么可以看到这个函数名叫set crc Signal,他有4个参数。第一个也是信号地址,我们就如法炮制,选择checksum的数据库地址,填入后第二个就是算法的名称,那这个名称其实就是刚才我们所选的mycrc,那么在这个前面需要加上小程序的前缀,所以是crc.mycrc。那么小程序可以看到他的名称是crc,所以只需要把这个这个名称加上点,再加上函数名抄过来就可以了,然后他所保护的字节起始是从第0个字节开始,往后保护7个字节,那么这样就算设置完毕。
  • 热度 4
    2022-8-30 15:32
    823 次阅读|
    0 个评论
    应用笔记 | TSMaster如何同步回放视频与报文信息
    一、视频回放窗口 TSMaster 视频回放窗口可播放主流视频格式,用户可以打开一个或多个视频回放窗口: 1、直接回放视频 点击打开按钮选择视频文件,确认“关联总线回放引擎”的下拉框选中 的是“无”,则视频可自由播放、暂停和停止。 点击播放按钮即可自由播放视频文件(快捷键 F9)。播放启动后可点击暂 停按钮以暂停视频播放(快捷键 F10),再次点击播放按钮(F9)可继续播放。 点击停止播放按钮可停止视频文件的播放(快捷键 F11)。 点击拉伸按钮可使图像最大化拉伸显示于窗口中(快捷键 F4): 2、关联总线回放引擎回放视频 1)配置总线在线回放引擎 打开“总线回放”窗口,并选择在线回放配置: 在列表空白处点击右键,添加 blf 文件到列表中。 从列表中选择某个回放引擎,配置其参数,例如是否自动启动回放,往哪个 总线通道回放等等: 2)将视频回放界面关联至某个总线回放引擎 打开“视频回放”窗口,在“关联总线回放引擎”下拉框中,勾选所需要关联的在线回放引擎: 关联回放引擎后,手动播放控制按钮将不起作用,此时视频回放的启动、暂 停和停止功能将完全受控于总线回放引擎: 3)运行在线回放,视频回放将同步触发 连接 TSMaster 的通道后,启动在线回放引擎,可以看到视频回放与总线回放同步进行: 在总线回放引擎上点击暂停后,视频回放也会随之暂停: 4)应用时间偏移 若视频的起始时间相对总线时间的起始有个偏差(例如 10秒),则需要在视频回放界面中设置这个相对偏差时间: 此时启动总线回放,视频的起始时间将从 10秒开始。 二、视频分析 1、单帧分析 使用工具栏菜单中的步进按钮实现单帧步进等功能: 由于视频播放的单方向特性,TSMaster 支持视频在时间正向流逝的方向上步进调试,支持步进调试的按钮颜色不同于其他按钮。四个按钮中的三个绿色的按钮表示单纯移动视频到指定帧,而蓝色的步进按钮则是同时步进视频和报文(若关联了在线回放引擎)。 移动到第一帧(快捷键 F3); 移动到上一帧(快捷键 F7); 移动到下一帧(快捷键 F8),同时回放当前帧到下一帧时间之内的所有报文; 移动到最后一帧(快捷键 F12); 单帧步进后,下方的状态栏将同步显示当前所处的帧和时间信息: 2、视频定位 使用下方的拖动条可在视频中定位到指定的帧,在拖动过程中,光标旁边和下方的状态栏将实时显示视频的定位信息: 当拖动视频到指定位置后,可基于此位置继续播放视频(快捷键 F9),或单帧分析视频(快捷键 F8)。
  • 热度 4
    2022-8-30 14:57
    1106 次阅读|
    0 个评论
    TSMaster诊断功能之常见问题汇总
    一、 擦除地址配置 【1】 固定地址和长度 如果擦除地址是固定的地址,处理方法最简单。直接配置一个 Normal 内容的服务,里面直接填入原始数据即可。如果擦除地址为 0x 00801234 ,擦除长度为 0x 0000C000 。则填入的固定值如下所示: 也就是把需要发送的值和期望的应答值直接填入到服务队列中。 【2】 可变地址和长度 地址根据载入的不同 Hex 文件,对应的数据地址和长度是可变的。对于这种情况,则需要用到系统变量。则需要用到系统变量。以示例 h ex 文件为例。诊断模块每次载入 Hex 文件的时候,会自动提取 Hex 一些特征信息作为系统变量注册到系统中(目前只注册了地址 + 长度,如有其他需求请直接反馈到同星进行评估)。如下图所示: 然后在 BasicConfig 中配置如下: 最后在自动化流程中,引用该配置即可,如下所示: 自动运行过程中,系统会自动读取当前系统变量的值,并填入到发送服务中,这样就实现了动态参数的载入。 二、 Seed & Key 的值 如果 Seed & Key 值是固定值,直接采用选择 Normal 模式,填入固定的值即可。本章节主要讲解基于 Seed&Key 动态计算 Key 值。主要包含如下步骤: 【1】 首先是在配置传输层参数的时候,载入相应的算法 DLL ,这个 DLL 是本诊断模块所有涉及到 Seed&Key 算法的时候公用的 dll 。因此,用户需要把各种 level 等级的 Key 计算方法都放到此函数库中。 【2】 方式 1 :在自动流程步骤中,添加 Seed & Key 类型的运行步骤,然后选择 GetSeed 的 Level ,如下所示: 【3】 方式 2 :在 BasicConfig 中,添加 0x 27 GetSeed 和 SendKey 服务(注意,这两个服务必须要成对配置),如下所示: 在自动测试流程中,添加 SelectConfig 步骤,并从中选择前面配置的 0x 27 服务。如下所示: 三、为什么读取上来的字符串是反的 用户期望读取的字符串是 ReadDemo ,但是读取上来的字符串是 omeDdeaR ,完全是反的,如下所示: 这是因为配置的字符串解析顺序跟实际的字符存储顺序不匹配,所以解析出来的字符串也跟着是反的。 解决方法: 调整字符串的解析顺序,比如之前为 Motorola ,现在修改为 Intel ,修改过后,读取的字符串就和期望的字符串匹配了。