Vector-常用CAN工具 - CANoe入门到精通_04

news2025/1/11 23:53:57

        前面已经介绍了Network Node节点的创建和配置,我想大家如果仔细研究下这块基本没什么问题,但是针对相应的CAPL编程该如何去做呢?今天这篇文章就是我们专门介绍在Network Node节点中常用的一些操作函数和使用技巧。

五、 Network Node相关CAPL编程

1、on message

        on message作为一个功能异常强大的CAPL专有的的姑且叫它函数吧,它伴随很多人从初入测试行业到熟练与开发battle三小时不会累,可想而知的强大。首先我们来介绍它的第一种用法。

on message 0x101
{
  this.BRS = 
  this.FDF =
  this.TYPE = 
  this.dlc = 
  this.byte(0) = 
    .
    .
    .
  this.byte(n) =    
}

        从上面我们能看到使用起来是相当的简单,而且Vector CAPL Browser自带联想功能,是你能够快捷、方便的进行编程,在on message 0x101中,其中on message你可以把它当成一个函数,0x101作为一个触发开关,一旦总线上出现0x101报文,就会进入到{}的内部(并且实时更新),就会执行内部的CAPL代码,我们可以在里面编写任意我们需要的功能。这里大家会注意到有一个特殊的单词this那他是什么意思呢?

        this在这里其实相当于一个message类型,这样说的话大家应该就很好理解,它就是总线上实时的一个message,内部包含了大量的信息,这里我就不再一一列举,在上面的代码中我列举了几个常用的参数,基本能够满足我们大部分时候的使用,实际这些参数都可以在CAN报文中找到,大家如果有兴趣也可以学习一下CAN报文的结构,是跟这里一一对应。下面我也列举一下。

       

 

 这里顺便再提下Rx和Tx:

Rx

Message was received (DIR == Rx)

Tx

Message was transmitted (DIR == Tx)

TXREQUEST

Transmission request was set for message (DIR == TXREQUEST)

下面我们说另外一种用法,就是将CAN1的报文全部转发到CAN2上,源码如下:(简单归类为通道识别,只要是某一CAN通道就会触发)

//The gateway should transmit all messages between Bus 1 and Bus 2 in both directions:
on message CAN1.*
{
   message CAN2.* msg;
   if(this.dir != rx) return; //important!
   msg = this;
 output(msg);
}

on message CAN2.*
{
   message CAN1.* msg;
   if(this.dir != rx) return; //important!
   msg = this;
 output(msg);
}

第三种使用方法就是任意触发:

//将所有接收到得报文发送出去
on message * 
{
   output(this);
};

        上面基本囊括了on message的大部分使用场景,至于内部填充和想要做什么大家可以自由发挥想象,实现你能想到的所有功能吧。

2、数据类型介绍

Scalar Data Types

  • Integers in form of
    byte (unsigned, 1 Byte)
    word (unsigned, 2 Byte)
    dword (unsigned, 4 Byte)
    int (signed, 2 Byte)
    long (signed, 4 Byte)
    int64(signed, 8 Byte)
    qword(unsigned, 8 Byte)
  • Individual character
    char (1 Byte)
  • Floating point numbers
    float (8 Byte)
    double (8 Byte)

常见变量定义之struct:

//struct 常见定义
//one
struct Data {
int type;
long l;
char name[50];
};

//two
struct Point
  {
    int x;
    int y;
  };
  struct Point myPoint;

struct { int first; int second; } pair;

//three
variables
{
  struct { int first; int second; } pair;
}

on start
{
  pair.first = 1;
  pair.second = 2;
}

//four
struct Point
  {
    int x;
    int y;
  };
  struct Point myPoint;
  struct Point allPoints[50];

常见变量定义之enum:

//Enumeration types are defined in CAPL in exactly the same way as in C:

enum Colors { Red, Green, Blue };

//
enum State { State_Off = -1, State_On = 1 };


//If necessary, an enumeration type is implicitly converted to an integer type

int i; enum State state;
state = State_Off;
i = state + 1;   // i == 0

//Enumeration types can be used especially in switch-case-statement:

switch (state) {
  case State_On: write("On"); break;
  case State_Off: write("Off"); break;
  default: write("Undefined"); break;
}

/*For a conversion from an integer type to an enumeration type or between two different enumeration types a cast is necessary:*/

enum State state; enum Colors color;
state = (enum State) 1;       // state == State_On
color = (enum Color) state;   // color == Green




        数组类型的我们就不在这里介绍了,都是跟C语言一样的,如果有需要度娘随便一搜都是一大把,我就不在这卖弄了。

这一块太多了,如果后续催更的人比较多的话,我就继续写吧!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Canvas 上实现图形拾取?

大家好,我是前端西瓜哥,今天来和大家说说 canvas 怎么做图形拾取。 图形拾取,指的是用户通过鼠标或手指在图形界面上能选中图形的能力。图形拾取技术是之后的高亮图形、拖拽图形、点击触发事件的基础。 canvas 作为一个过于朴实无华的绘制工…

【软件测试】老板:你测试,我放心。测试人的成功就是不做测试?

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试没价值&#xf…

[附源码]计算机毕业设计的党务管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Arco Pro最佳实践,路由与菜单

Arco Pro最佳实践,路由与菜单1.路由2.菜单3.测试1.路由 路由通常都和菜单绑定在一起,为了减少维护的量,Arco直接通过路由表生成了菜单。 首先,需要先了解一下路由表的配置 现在我们来解析一下仪表盘的路由代码(dash…

Ranger集成Solr

前言 对已经在正常使用的Ranger开启Solr存储审计日志。 可以手动安装或者使用ranger admin自带的solr安装程序来安装。当然官网也说了,用户可以选择手动安装然后集成,只要你足够勇敢 :) 我们这里选择使用Ranger自带的安装程序来…

深度学习之:强化学习 Reinforcement Learning

文章目录认识强化学习Sparse RewardSupervised Learning v.s. RLRL 玩游戏Policy-based & Value-basedPolicy-based训练模型的三步骤定义目标函数衡量目标函数的好坏RL 的目标函数的好坏(reward 总和的期望)如何求得 Rθˉ\bar{R_{\theta}}Rθ​ˉ​…

win10系统+3060显卡驱动+cuda11.5+cudnn8.3安装

显卡驱动和一些cuda库安装教程 目的 本教程为了让大家能更好的了解和能更快的对显卡进行环境配置。 需注意,本教程的配置仅仅针对显卡NVIDA RTX 3060。 其他显卡对应的配置的流程雷同,仅仅是环境版本的不同。 显卡需要牢固的插装在PCI/PCI-E&#xff0…

如何发现循环中的规律?动作分解

第五章循环结构程序设计 计算机最擅长的就是重复 重复再重复 循环 就是重复 使用循环结构的条件:2个: 1 需要三个或以上的 同样的操作 多个 三就是多,事不过三,三人成虎,三人行必有我师焉 也就是多个操作 2. 必…

如何在 Python 和 Pandas 中使用正则表达式

什么是正则表达式 Regex 代表Regular Expression,是一种用于在文本中搜索模式的表达式。简而言之,它将匹配与模式对应的每个单词或单词组。在 Python 中,您可以使用正则表达式来搜索单词、替换单词、匹配一个单词或一组单词。基本上所有事情…

C语言每日亿题(三)

文章目录一.二分查找二.第一个错误的版本三.搜索插入位置一.二分查找 原题传送门:力扣 题目: 在有序序列中查找,用二分的方法是非常有效的,但仅限于有序,如果是无序,二分查找是用不了的。 现在我直接来…

Spring cloud Ribbon负载均衡实战

Spring cloud Ribbon负载均衡一、简介二、负载均衡不同方案的区别1、集中式负载均衡(服务器负载均衡)2、进程内负载均衡(客户端负载均衡)三、负载均衡策略1、轮询策略(默认)2、权重轮询策略3、随机策略4、最…

导入vue+springboot前后端分离项目

1、环境 1、前端 nodejs 12.1.0vscode或者webstorm 2、后端 jdk1.8maven3.6.3(3以上即可)sqlyogidea 1、导入数据库 点击右键创建同名的数据库 将sql文件导入到数据库中 右键编辑文件,ctrla选中全部语句,ctrlc进行复制&…

Go 实现选择排序算法及优化

Go 实现选择排序算法及优化选择排序图片演示普通算法优化算法小结耐心和持久胜过激烈和狂热。 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现选择排序算法。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者&#xf…

一只脚踏入数据结构的大门,如何用C语言实现一个单链表(超超超详解,我的灵魂受到了升华)

目录 0.前言 1.什么是链表 1.1链表简介 1.2链表的分类 1.3为什么要有链表(vs顺序表) 1.3.1顺序表的缺点 1.3.2 链表的优点 1.3.3 顺序表的优点是链表的缺点 1.4.为什么选择实现结构最简单的单链表 2* 什么是单链表(两种理解逻辑&…

window10+TensorRT-8.2.5.1+yolov5 v6.2 c++部署

一、准备工具 1.1、visual studio下载安装 参考:vs2019社区版下载教程(详细)_Redamancy_06的博客-CSDN博客_vs2019社区版 1.2、显卡驱动cudacudnn安装 参考:win10系统3060显卡驱动cuda11.5cudnn8.3安装_Bubble_water的博客-CS…

手写Spring3(Bean构造函数的类实例化策略)

文章目录目标项目结构一、代码实现1、新增getBean接口2、定义实例化策略接口3、JDK 实例化4、Cglib 实例化5、创建策略调用二、测试1、准备2、测试用例3、测试结果目标 上一篇文章,我们实例化对象,是通过无参的构造方式生成 所以今天是解决包含参数的构…

docker镜像的导入导出,并发布到服务器上

比如我本地的vue项目,先打包编译为一个镜像: docker build -t cvport . 不会编译的可以看我这篇文章:使用docker构建vue项目并成功运行在本地和线上_1024小神的博客-CSDN博客 开始将镜像保存为一个tar文件: docker save -o cvp…

基于java+springmvc+mybatis+jsp+mysql的高校学术交流平台

项目介绍 高校学术交流平台是基于java编程语言,mysql数据库,ssm框架,idea开发工具开发,本系统有管理员和用户两个角色,其中用户可以注册登陆系统,查看校园资讯,学术交流帖子,发布帖…

Akka 学习(五)消息传递的方式

目录一 消息传递方式1.1 消息不可变1.2 ASK消息模式1.3 Tell消息模式1.4 Forward消息模式1.4 Pipe消息模式有4种核心的Actor消息模式:Tell、Ask、Forward和Pipe。一 消息传递方式 在这里,将从Actor之间发送消息的角度来介绍所有关于消息传递的概念。 ● …

【多线程(六)】并发工具类的基本使用、ConcurrentHashMap1.7版本及1.8版本底层原理分析

文章目录6.并发工具类6.1 并发工具类-Hashtable6.2 并发工具类-ConcurrentHashMap基本使用6.3 并发工具类-ConcurrentHashMap1.7原理6.4 并发工具类-ConcurrentHashMap1.8原理6.5 并发工具类-CountDownLatch6.6并发工具类-Semaphore总结6.并发工具类 6.1 并发工具类-Hashtable…