Vector - CANoe - VCDL与SomeIP

news2024/10/6 2:23:06

目录

一、基础介绍

二、vCDL介绍

1、vCDL工程创建

2、 vCDL编辑器关键字介绍

3、创建命名空间Datatype

接口示例

4、创建命名空间ICalculate

5、创建命名空间Participants


一、基础介绍

        SomeIP作为车载以太网一个重要的组成部分,因为它的测试也是我们作为总线测试工程师一定要攻克的一个重要知识点;CANoe中主要在simulation setup和communication setup中实现SomeIP通信的方式;并且支持多种格式的数据导入,例如:arxml、vCDL、vCODM等多种数据格式,本篇文章主要介绍VCDL实现SomeIP数据格式。

        vCDL 是 Vector Communication Description Language 的首字母缩写,用于描述 CANoe 中的通信对象,是 Vector 推荐使用的一种语言。
        vCODM 是 Vector Communication Data Model 的首字母缩写, 该类型文件伴随着 CANoe工程一起自动生成,可以使用 Model Editor 编辑。

二、vCDL介绍

1、vCDL工程创建

        Tools -> vCDL Editor -> Vector Tools Environment

        作为一个测试工程师基本都是使用Vector自带的这个vCDL编辑工具,不过据说也是有其他的vCDL文件编辑工具,大家可以根据自己的需求选择编辑工具。

2、 vCDL编辑器关键字介绍

ElementFontExample
KeywordBlue monospaceservice
Data TypeDark blue monospaceuint16
String LiteralDark red monospace"string"
Numeric LiteralOrange monospace2.0e-10
CommentGreen monospace//comment
Attribute KeyGray monospace,italicsunit
Binding NamespaceGray monospace,italicsAbstract
Encoding Formula VariableBrown monospace,italicsx
SeparatorsBlack monospace.:
OperatorsBlack monospace+-*/
BracketsBlack monospace{}()<>
IdentifiersBlack monospaceEngine

3、创建命名空间Datatype

        1)使用namespace关键字声明一个命名空间

        2)复用结构体StateType和接口ServiceInterface归属在同一命名空间Datatype

        3)声明结构体采用关键字struct,定义4个变量基础数据

接口示例

//DataTypes下包含结构体 (struct) 和接口 (terface)
namespace DataTypes
{
  //关键字struct声明结构体stateType
  struct stateType
  {
    //结构体stateType由4个int32的数据组成
    dword AddCount;
    int64 SubstractCount;
    int32 MultiplyCount;
    int32 DivideCount;
  }
  //关键字interface接口,定义服务接口
  interface ServiceInterface
  {
    //关键字event声明事件,事件env的数据类型是结构体stateType
    event StateType env;
    //关键字field声明字段,字段F1d的数据类型是uint32
    field uint32 Fld:
    //定义method方法,采用定义函数的方式声明了Add,Substract,Multiply,Divide
    //函数内in表示输入参数,out表示输出,不指定in/out则默认是in
    void Add(int32 operand1, int32 operand2, out float result);
    void Substract(int32 operand1, int32 operand2, out float result);
    void Multiply(int32 operand1, int32 operand2, out float result);
    void Divide(int32 operand1, int32 operand2, out float result);
  }
}

4、创建命名空间ICalculate

        1)使用namespace关键字声明一个命名空间,用于指定服务的命名空间

        2)服务 Calculate 采用 service 关键字声明,必由服务接口实现,并指向 Datatypes 中的接口ServiceInterface。

        3)服务中需要提供通信端点的信息,通信端点采用关键字 provider 和 consumer 声明,即服务的提供者和消费者。 此示例中, 服务 Calculate 的提供者和消费者分别为 server 和 client。

        4)服务 Calculate 使用 refine 关键字引用接口 ServiceInterface 中的事件、字段和方法,事件组采用关键字 eventgroup 定义, 此处定义 env 和 fld 为同一事件组。

//ICalculate下包含服务
namespace ICalculate
{
  //[]的内容用于定义属性,此处声明了服务的属性version为0.1和serviceID为1666
  [version=0.1, serviceId=1666]
  //关键字service声明服务Calculate,Calculate使用冒号指向使用的服务接口
  service Calculate:DataTypes::ServiceInterface
  {
    //关键字provider声明服务的提供者 (名为server),并以[]声明server的IP端口信息
    [simulated=true,udpEndpoint="192.168.1.1:40000",multicastEndpoint="224.0.0,22:40000",
    sdMulticastEndooint="239,0.0,1:30490", mac="20:00:00:00:00:00", instanceId=1]
    provider server;
    //关键字consumer声明服务的消费者 (名为client),其订阅的事件组名为envGrp1, clientid=1
    [simulated=true subscribedEventGroups=envGrpl, udpEndpoint="192,168,1,10:40001",multicastEndpoint="224.0.0.22:40001", 
    mac="20:00:00:00:00:01", sdMulticastEndpoint="239.0.0.1:30490",clientId=1]
    consumer client;
    
    //关键字refine可以引用对象或者端点,此处引用函数原型,并赋予methodId的属性
    
    refine Add[methodId = 201]:
    refine Substract[methodid = 202]:
    refine Multiply[methodid = 203];
    refine Divide[methodId = 204];
    //引|用事件env,设置属性eventID为101,引用字段Fld,设置对应的ID属性
    refine env [eventId=101];
    refine Fld [getterId =301,setterId=302,eventId=303];
    
    //关键字binding将通信对象绑定到SOME/IP
    binding SOMEIP
    {
      //关键字eventgroup用于定义事件组,此处定义groupId厘性为17的envGrp1事件组,包含env和Fld
      [groupId=17,multicastThreshold=5]
      eventgroup envGrp1 = env,Fld;
    }
  }
}

5、创建命名空间Participants

        1)使用namespace关键字声明一个命名空间,关键字participant 声明, 包含一个或多个通信端点。

        2)示例创建名为 Consumer 和 Provider 的参与者, 分别引用来自 ICalculate 下服务 Calculate 的通信端点 client 和 server。

//Participants (namespace) 组下包含Consumer和Provider (participant) 的参与者
namespace Participants
{
  //关键字participant参与者,用于声明参与者,对ECU或SWC的通信端点进行分组
  //此处声明名为Consumer和Provider的参与者
  participant Consumer
  {
    //Consumer包含端点client
    ICalculate::Calculate.client
  }
  participant Provider
  {
    //Provider包含端点server
    ICalculate::Calculate.server
  }
}

        以上对于vCDL进行简单的介绍,如果需要更进一步了解,大家可以评论区讨论!!!

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

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

相关文章

windows PE 指南(基础部分)(二)

windows PE 指南&#xff08;基础部分&#xff09;&#xff08;二&#xff09; PE文件头IMAGE_OPTIONAL_HEADER.AddressOfEntryPointSectionAlignmentFileAlignment PE文件布局和装入后内存布局节表内容你想在PE文件&#xff08;PE内存映像&#xff09;里面找一个数据该怎么找&…

iOS-Block

Blocks的学习 Block的分类 Block根据其类型可以分为三类&#xff1a; 全局Block&#xff08;NSGlobalBlock&#xff09;栈Block&#xff08;NSMallocBlock&#xff09;堆Block&#xff08;NSStackBlock&#xff09; 而其区分的规则为&#xff1a; 如果没有引用局部变量&…

PHP特性之CTF中常见的PHP绕过

目录 一、关于md5()和sha1()的常见绕过 1、使用数组绕过 2、 使用特殊字符串绕过 二、strcmp绕过 三、switch绕过 四、intval绕过 一、关于md5()和sha1()的常见绕过 知识介绍&#xff1a; 1、对于php强比较和弱比较&#xff1a;md5()&#xff0c;sha1()函数无法处理数组…

【数据挖掘】如何为可视化准备数据

一、说明 想要开始您的下一个数据可视化项目吗&#xff1f;首先与数据清理友好。数据清理是任何数据管道中的重要步骤&#xff0c;可将原始的“脏”数据输入转换为更可靠、相关和简洁的数据输入。诸如Tableau Prep或Alteryx之类的数据准备工具就是为此目的而创建的&#xff0c;…

【ACM】—蓝桥杯大一暑期集训Day4

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前正在学习C/C、Java、算法等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&#xff…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第一、二章优化拓展:Wifi、服务器连接验证以及UASRT串口区分】

第一、二章优化拓展开发环境&#xff1a; 主控STM32F103C8T6WIFI模块ESP01S开发语言C开发编译器 KEIL 组网方式WIFI服务器协议MQTT 硬件连接 STM32ESP01S3.3V3.3V GND GND GPIO2 (USRAT2-TX) RXGPIO3 (USART3-RX)TX 本章要点&#xff1a; 对ESP01S的AT指令的反馈指令进…

集合面试题--HashMap

目录 HashMap实现原理 HashMap的jdk1.7和jdk1.8有什么区别 总结 HashMap的put方法的具体流程 常见属性 添加数据的流程图 ​编辑 具体实现源码 总结 HashMap的扩容机制 总结 hashMap的寻址算法 总结 hashmap在1.7情况下的多线程死循环问题 HashMap实现原理 HashMap的…

MyBatis的多表操作

1 MyBatis的多表操作 1.1 多表模型介绍 我们之前学习的都是基于单表操作的&#xff0c;而实际开发中&#xff0c;随着业务难度的加深&#xff0c;肯定需要多表操作的。 多表模型分类 一对一&#xff1a;在任意一方建立外键&#xff0c;关联对方的主键。 一对多&#xff1a;在…

IDEA 工具- Java - Tomcat 9.x - 无法使用外部 tomcat 服务器的断点测试功能

问题&#xff1a;使用外部 Tomcat 运行项目&#xff0c;却无法使用断点功能测试 Java 项目 解决方法&#xff1a; 在 IDEA 工具的tomcat Edit configurations&#xff0c;进行修改 具体配置位置&#xff1a; Environment Variables 配置选项添加内容&#xff1a; NameValueJ…

Unity游戏源码分享-线条圆圈游戏Line and Circle Game Template

Unity游戏源码分享-线条圆圈游戏Line and Circle Game Template 圆圈穿过线条就通关 工程地址&#xff1a; https://download.csdn.net/download/Highning0007/88061484

java学习路程之篇十、知识点、数组介绍、二维数组介绍、静态初始化、访问元素、遍历元素、动态初始化、内存图、数组常见问题

文章目录 01、数组介绍02、数组静态初始化03、数组元素访问04、数组遍历操作05、数组动态初始化06、数组内存图07、数组常见问题08、二维数组介绍09、二维数组静态初始化10、二维数组遍历11、二维数组动态初始化12、二维数组内存图 01、数组介绍 02、数组静态初始化 03、数组元…

封装 视频以及监控组件

1.引入插件。 文件Git 地址&#xff1a; https://gitee.com/wang-xiaowang123/liveplayer.html 文件中 <script src"/assets/js/liveplayer-lib.min.js" exclude></script> // liveplayer-lib.min.js 文件在Git仓库中2.封装组件 LivePlayerDemo.vue …

php做网页版剪刀石头布的功能

实例讲述了php实现的网页版剪刀石头布攻略在玩游网上的设计。分享给大家供大家参考&#xff0c;具体如下&#xff1a; <?php /* * Created on 2016-11-25 * */ if (isset($_POST[sub])) { $what $_POST[what]; //需要输入的数组 $my_array array("剪刀","…

算法通关村第一关-链表青铜挑战笔记

文章目录 前言一、Java的链表是怎么构造的&#xff1f;单链表的构造简介&#xff1a; 构造链表&#xff1a; 链表增加元素&#xff0c;首部&#xff0c;中间和尾部分别会有什么问题&#xff0c;需要怎么处理&#xff1f;链表的新增在头部添加元素&#xff1a;在中间添加元素&am…

IP库新增多种颜色转换空间IP

颜色空间转换是图像及视频中常用的解决方案&#xff0c;涉及hsv-rgb、rgb-ycrcb等一些常见的颜色空间互相转换&#xff0c;今天带来几种常见的颜色空间转换IP&#xff0c;主要如下&#xff1a; IP库简介 一直想做一个可以供大家学习、使用的开源IP库&#xff0c;类似OpenCores&…

美化图表——LiveCharts中的时序图的制作,相对问题的解决

美化图表——LiveCharts中的时序图的制作&#xff0c;相应问题的解决 前言一、效果展示二、基本的一些实现的代码1.X,Y坐标的相关设置2.新增波形对象3.实时更新数据 三、修改的点总结 前言 在项目中&#xff0c;需要用到图表来展示波形的实时变化&#xff0c;故找到了这个Live…

优维低代码实践:统计视图

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

35.Vue自定义指令-总结

目录 1.自定义指令容易踩的坑 1.1 指令名如果是多个单词&#xff0c;要使用kebab-case命名方式&#xff0c;不要用camelCase命名 1.2 指令回调函数中的this问题 1.3 局部指令与全局指令 2.自定义指令总结 2.1 定义语法&#xff1a; (1).局部指令 (2).全局指令 2.2 配置…

3.14 Bootstrap 缩略图

文章目录 Bootstrap 缩略图添加自定义的内容 Bootstrap 缩略图 本章将讲解 Bootstrap 缩略图。大多数站点都需要在网格中布局图像、视频、文本等。Bootstrap 通过缩略图为此提供了一种简便的方式。使用 Bootstrap 创建缩略图的步骤如下&#xff1a; 在图像周围添加带有 class …

ChatGPT | 修改RetrievalQA推荐答案的数量

知识库经常遇到一个问题会在一个文件的多处或者多个文件出现&#xff0c;这时候如果只回答一个结果就欠佳&#xff0c;最理想的做法是模仿推荐功能&#xff0c;把合适的多个答案及其出处汇总给用户。 如图&#xff0c;一个接口文档里面提到多处“http请求URL”&#xff1a; 使…