学习笔记:利用CANOE Panel和CAPL脚本模拟主节点发送LIN通信指令

前一篇文章已经对CANOE如何模拟主节点和从节点进行LIN通信做了简单的记录,修改主节点发送的指令需要修改LIN ISC模块里的Frames帧对应的signal。这样改起来比较麻烦且不直观,幸好CANOE提供了Panel designer这样的工具,我们可以利用它设计自己的上位机控制面板,通过面板不同的操作修改对应的系统变量,再通过CAPL脚本将环境变量赋值给LIN帧对应的signal,从而实现面板控制LIN帧中信号值。

本文简单记录实现创建CANOE面板控制主副驾座椅的通风加热功能。

一、创建系统变量

要实现panel面板的控件和LIN帧信号值进行绑定,需要用到系统变量。创建系统变量过程如下图所示:

 其中NameSpace是命名空间,后续创建的系统变量都归属于该命名空间下。比如我创建了一个SeatType系统变量用来记录当前面板控制的是主驾还是副驾。如下图所示:

SeatType为int数据类型,最大值为1,关联了一个Value Table,点击红线圈的按钮可以看到SeatTypeList如下所示,可以在下图左边列表通过右键单击New创建新的Value Table:

 

为了控制通风加热我又创建了如下的系统变量:

 

其中FanOn用来控制风扇开关,关联的值为0和1;FanLevel用来控制风扇档位分别为高中低三档;加热类似。

二、设计Panel界面

 点击菜单栏的Tools,选择Panel Designer,进入面板设计界面:

(1)首先我们添加一个组合框控件用来选择需要控制的座椅(主/副驾),在1红线圈的位置可以进行Toolbox和组件属性进行切换显示。需要注意的是SeatType这个控件需要关联到SeatType系统变量,在右边的属性Symbol中Filter选择Variable然后Symbol选择前面创建的SeatType系统变量。如下图2,3所示。

 

(2) 分别添加两个Combox组件用来选择通风和加热档位,并且分别绑定FanLevel和HeatLevel系统变量。

 

(3)分别添加两个Switch /Indicator开关控件用来控制通风和加热的开启和加热,并且分别关联FanOn和HeatOn系统变量。

 开关关联的图片可以替换为自己制作的,图片一定要按下图的格式进行制作,每个图片由三个图标组成,第一图标是面板显示时显示的图片,第二和第三个是开关来回切换时显示的图片。

(4)保存设计好的面板为xvp文件。

三、CAPL脚本编写

经过上两步已经完成了面板的设计以及面板控件和系统变量的绑定,但是系统变量值的变化并没有关联到LIN帧信号变化。这部分工作需要在CAPL脚本里完成。CAPL语法就不多赘述了。

首先双击上图中红线圈的Master模拟节点,打开下图的CAPL编辑界面:

/*@!Encoding:936*/
includes
{}variables
{int frame_cnt = 0;
}//通风开关状态发生变化
on sysvar sysvar::SeatEcuCtrl::FanOn
{if(@this) {write("风扇开关ON");  if(@sysvar::SeatEcuCtrl::SeatType == 0) {//通风档位系统变量赋值给IBCM_MSG帧的DriverSeatVentilationControl_Request信号$IBCM_MSG::DriverSeatVentilationControl_Request = @sysvar::SeatEcuCtrl::FanLevel + 0x01;}else {$IBCM_MSG::PassengerSeatVentilationControl_Request = @sysvar::SeatEcuCtrl::FanLevel + 0x01;}}else {write("风扇开关OFF");  if(@sysvar::SeatEcuCtrl::SeatType == 0) {//通风档位系统变量赋值给IBCM_MSG帧的DriverSeatVentilationControl_Request信号$IBCM_MSG::DriverSeatVentilationControl_Request = 0x07;}else {$IBCM_MSG::PassengerSeatVentilationControl_Request = 0x07;}}
}//收到从节点反馈帧DR_Pneumatic_FB_MSG
on linFrame DR_Pneumatic_FB_MSG {frame_cnt++; write("frame cnt = %d", frame_cnt);
}

 上诉代码中当FanOn系统变量发生改变时会触发on sysvar sysvar::SeatEcuCtrl::FanOn函数的调用,也就是当面板的风扇开关按钮点击的时候其关联的FanOn系统变量就会发生改变并触发该函数的调用,函数里面主要实现当ON的时候将风扇档位赋值给相应的帧信号,当为OFF的时候帧信号赋值为0x7。同时上诉代码还实现了监听从机节点反馈帧并进行计数的功能。

选择通风档位,点击风扇切换图标按钮,对应的LIN信号发生变化如下图所示:

 

至此通过CANOE面板来控制LIN信号的功能基本实现,特此记录下。 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组的存储结构、特殊矩阵和稀疏矩阵的压缩存储

数组的存储结构、特殊矩阵和稀疏矩阵的压缩存储 1.数组的存储结构、特殊矩阵、稀疏矩阵的压缩存储1.1 数组的存储结构1.1.1 一维数组的存储结构关系式1.1.2 多维数组的存储结构关系式 1.2 特殊矩阵的压缩存储1.2.1 对称矩阵1.2.2 下三角矩阵1.2.3 上三角矩阵1.2.4 三对角矩阵 1…

Window10安装Docker

文章目录 Window10安装Docker前提条件Hyper -VWSL 2.0 安装包下载执行安装包更新 Window10安装Docker 前提条件 Hyper -V 如何启用 WSL 2.0 安装包下载 官网地址 下载后: 执行安装包 wsl --update等得有点久 重新打开 拉取一个helloworld镜像 说明已经…

大数据学习之一文学会Spark【Spark知识点总结】

文章目录 什么是SparkSpark的特点Spark vs HadoopSparkHadoopSpark集群安装部署Spark集群安装部署StandaloneON YARN Spark的工作原理什么是RDDRDD的特点Spark架构相关进程Spark架构原理 Spark实战:单词统计Scala代码开发java代码开发任务提交 Transformation与Acti…

vscode中 vue3+ts 项目的提示失效,volar插件失效问题解决方案

文章目录 前情提要bug回顾解决方案最后 前情提要 说起来很耻辱,从mac环境换到window环境,vscode的配置都是云端更新过来的,应该是一切正常才对,奇怪的是我的项目环境出现问题了,关于组件的ts和追踪都没有效果&#xff…

【JMeter】定时器分类以及场景介绍

1. 定时器分类 固定定时器 作用:请求之间设置等待时间应用场景:查询商品列表后,去查看列表商品详情页。针对商品列表数据量比较大的,响应时间会比较长,就需要设置等待时间然后去查看商详 2.定时器的作用域&#xff1…

【终端目标检测03】nanodet训练自己的数据集、NCNN部署到Android

nanodet训练自己的数据集、NCNN部署到Android 一、介绍二、训练自己的数据集1. 运行环境2. 数据集3. 配置文件4. 训练5. 训练可视化6. 测试 三、部署到android1. 使用官方权重文件部署1.1 下载权重文件1.2 使用Android Studio部署apk 2. 部署自己的模型【暂时存在问题】2.1 生成…

SpringBoot 整合RabbitMQ 之延迟队列实验

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

快速上手SpringBoot SpringBoot技术由Pivotal团队研发制作,功能的话简单概括就是加速Spring程序初始搭建过程和Spring程序的开发过程的开发 最基本的Spring程序至少有一个配置文件或配置类用来描述Spring的配置信息现在企业级开发使用Spring大部分情况下是做web开…

计算机毕业设计java+springboot+vue的旅游攻略平台

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、用户管理、攻略管理、审核信息管理、积分…

蓝桥杯每日一题2023.11.5

题目描述 方格分割 - 蓝桥云课 (lanqiao.cn) 题目分析 对于每个图我们可以从中间开始搜索,如果到达边界点就说明找到了一种对称的方法,我们可以直接对此进行答案记录每次进行回溯就会找到不同的图像,如果是一样的图像则算一种情况&#xff…

Mac VsCode g++编译报错:不支持C++11语法解决

编译运行时报错: [Running] cd “/Users/yiran/Documents/vs_projects/c/” && g 1116.cpp -o 1116 && "/Users/yiran/Documents/vs_projects/c/"1116 1116.cpp:28:22: warning: range-based for loop is a C11 extension [-Wc11-extensi…

python如何使用gspread读取google在线excel数据?

一、背景 公司使用google在线excel管理测试用例,为了方便把手工测试用到的测试数据用来做自动化用例测试数据,所以就想使用python读取在线excel数据,通过数据驱动方式,完成自动化回归测试,提升手动复制,粘…