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

CAPL—on signal到底该怎么玩?

总结:一个前提,两种形式,一个注意,外加一个很不常用的知识点

1:一个前提:必须是DBC或其他数据库文件中定义的信号,且这个数据库已经添加到工程中去了。

2:使用格式 on signal+(用户添加的signal名),注意on signal全部为小写,中间至少一个空格

用户添加的signal,也有两种命名格式,一种是直接“空格”+信号名,一种是“空格”+signal所在的message名::信号名

3:两种形式

on signal  和  on signal_update

这里就需要提到一种学习惯性的问题,结合我们之前学到的 on message ,我们知道 只要总线上出现一次,就触发一次,并执行 on message 中大括号{}中包含的代码。又因为signal又是组成message的最小个体,包括我自己,一开始都是认为 on signal 也是和 on message一样的使用

看段代码,RRV_PC_Life假如是存在message0x110上的,我们本意是想每次接收到0x110,就触发一次write函数,输出一次。结果实际测试中并不能实现。你们可以自己试一下,只有RRV_PC_Life的值产生变化时,才会触发大括号内的write函数。

那么我们如何才能每次接收到一帧包含RRV_PC_Life信号的0x110,报文时,就触发一次大括号内的函数?

回答:可以使用 on signal_update,修改上述代码,大家可以自己试一试。

小结:on signal XXX 当 “XXX”的值发生变化时,才会触发大括号内的代码执行

           on signal_update XXX 当“XXX”所在的Message每次出现在总线上时,都会执行大括号内的代码

4:一个注意:注意数据类型的匹配

无论是on signal 还是  on signal_update。我们经常需要使用this指针,将Signal赋值给其他变量(其他包括不限于:1、CAPL中定义的各种全局变量,局部变量 。2、系统变量 3、其他信号)

这时非常需要注意的一个问题就是:“数据类型的匹配”

如下面一个简单的例子

int是signal类型,但是RRV_PC_Life是unsignal类型,这种情况就会产生错误,此外数据长度匹配也很重要。如RRC_PC_Life非常大5个Byte,int只有4个Byte,这样也是会出错的。故需要注意。

5:一个不常用的知识点“this.

注意this后的“.”,在on message中常用,可以直接调用Message中的很多属性,on signal中有且只有一种

this.name

查看上图,运行一下,结果如下图

打印了,信号的全称  message名称::信号名称

 


http://www.mrgr.cn/news/35743.html

相关文章:

  • 消息队列与Kafka集群
  • 海信智能电视的使用心得
  • 旺店通ERP集成金蝶KIS(金蝶KIS主供应链)
  • CSS 实现文本溢出省略号显示,含单行与多行文本溢出
  • ComfyUI - 使用 ComfyUI 部署与测试 FLUX.1 图像生成模型 教程
  • 2024年9月24日---关于MyBatis框架(3)
  • 猫头虎分享:Python库 Falcon 的简介、安装、用法详解入门教程
  • 【好书推荐】《架构真意:企业级应用架构设计方法论与实践》
  • 苍穹外卖学习笔记(十三)
  • [51单片机] 简单介绍 (一)
  • 你知道怎么合理设置线程池参数吗?
  • 关于数据中心基础设施绿色建维服务认证的介绍
  • Java序列化、反序列化、反序列化漏洞
  • 内衣洗衣机哪个牌子好用?五款业内口碑爆棚产品汇总
  • 低成本搭建企业专属云电脑 贝锐向日葵推出私有化云电脑服务
  • CentOS下安装Kibana(保姆级教程)
  • 14年408-计算机网络
  • Error: one input ui-file must be specified(问题已解决)
  • Unicode与ANSI字符串的转换(MultiByteToWideChar与WideCharToMultiByte)
  • AI绘画stable diffusion comfyui的api使用教程