Vector - CANoe - VCDL与SomeIP

目录

一、基础介绍

二、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进行简单的介绍,如果需要更进一步了解,大家可以评论区讨论!!!

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载网络测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值