当前位置: 首页 > news >正文

学习笔记:利用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信号的功能基本实现,特此记录下。 

相关文章:

  • AI:63-基于Xception模型的服装分类
  • 大数据学习之Spark性能优化
  • USB HID在系统下通信的一些总结
  • IP地址修改方法有哪几种
  • C#学习中关于Visual Studio中ctrl+D快捷键(快速复制当前行)失效的解决办法
  • 基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 失物招领小程序 设计与实现
  • 富文本编辑器
  • HDFS系统权限详解
  • source activate my_env 和conda activate my_env 有什么区别
  • AI创作系统ChatGPT商业运营系统源码+支持GPT4/支持ai绘画
  • 死锁的原因及解决方法
  • 【C++】开源:rapidjson数据解析库配置与使用
  • 力扣第300题 最长递增子序列 c++ 动态规划题 附Java代码
  • 【PC电脑windows环境下-[jetson-orin-NX]Linux环境下-下载工具esptool工具使用-相关细节-简单样例-实际操作】
  • 快速解决mfc140u.dll丢失问题,找不到mfc140u.dll修复方法分享
  • css系列之关于字体的事
  • ES6系列(二)变量的解构赋值
  • HTTP--网络协议分层,http历史(二)
  • leetcode388. Longest Absolute File Path
  • Making An Indicator With Pure CSS
  • React-Native - 收藏集 - 掘金
  • SAP云平台里Global Account和Sub Account的关系
  • Sublime text 3 3103 注册码
  • windows下如何用phpstorm同步测试服务器
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 构建二叉树进行数值数组的去重及优化
  • 简单数学运算程序(不定期更新)
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 模型微调
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微服务核心架构梳理
  • 项目管理碎碎念系列之一:干系人管理
  • 源码安装memcached和php memcache扩展
  • 7行Python代码的人脸识别
  • #stm32驱动外设模块总结w5500模块
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (推荐)叮当——中文语音对话机器人
  • (五)Python 垃圾回收机制
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转) Android中ViewStub组件使用
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET 发展历程
  • .NET 设计一套高性能的弱事件机制
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net7 环境安装配置
  • @WebServiceClient注解,wsdlLocation 可配置