网站制作合同模板,做一个网站能挣多少钱,门户网站兴化建设局,国内wordpress大神对于想进入车载行业或者已经在车载行业工作的朋友对于CAPL这个词都会相当的熟悉#xff0c;都知道他是做车载网络测试脚本的语言#xff0c;并且跟C有点类似#xff0c;但是它到底是什么呢#xff1f;CAPL全称#xff08;Communication Access Programming Language#…对于想进入车载行业或者已经在车载行业工作的朋友对于CAPL这个词都会相当的熟悉都知道他是做车载网络测试脚本的语言并且跟C有点类似但是它到底是什么呢CAPL全称Communication Access Programming Language它可以对CANoe中的网络节点、测试节点、模拟节点以及vector工具链下各种硬件进行软件控制常用软件开发工具有Vector CAPL Brower和vTESTstudio两种工具我们可以通过这两种工具进行各种相关软件的开发。Vector CAPL Brower优点免费这个是在CANoe软件下的一个模块可供大家免费试用开发简单可以直接开发完成后可直接在CANoe中运行简单功能无需其他配置当然如果实现复杂功能还是需要配置资源占用少这个编辑工具非常的轻巧无需电脑过高的配置缺点a. 很难实现大规模的自动化脚本开发平台本身决定的有兴趣的话我们可以细说b. 对于复杂的脚本编辑较为困难这里的苦难并非开发困难而是维护困难就算是在开发之处进行代码架构设计依然很难实现大型平台化基本以单个模块的脚本形式作为一个工程实现c. 后期维护困难由于现在各家公司项目基本都是十几个、几十个不等这就导致需要不同的测试功能区匹配也需要同时去维护这就极大的增加了工程师的工作量增加工作负担。vTESTstudio优点对于脚本的整体性管理我们可以将所有需要的脚本放在一个底层下进行管理例如常用的功能报文的发送当我们封装好后可以在网络管理、CAN通信、诊断等多种测试模块中调用极大的避免重复造轮子。代码分层设计基础函数作为底层进行封装不断的积累软件财富生成应用函数进行分门别类保证各个项目所需最终实现的代码架构清晰明了。降低开发人员开发难度封装好底层函数对于后期新增用例无需开发底层函数只需要对已有的应用函数进行拖拽编辑即可完成脚本开发。高覆盖度vTESTstudio可以使用与当前vector工具链所有需要编程的自动化开发。图形化编辑vTESTstudio包含图形化编辑用例和脚本更加清晰的给工程师提供编程思路和方向缺点非免费这个跟CANoe软件一样也是一个付费软件需要license才能够使用不过如果想要高度平台化脚本可以只购买vTESTstudio无需购买图形化编辑工具这样能省20%价格。好吧处理不免费相对于Vector CAPL Brower我好想找不出其他的缺点。数据结构类型整数类型浮点型字符型整型 (byte, word, dword, int, long, qword, int64)例如: long 1浮点型 (float, double)例如: double d字符型 (char)例如: char ch数据类型跟C语言极其想象其中int、long、int64、float、double以及char类型跟C完全一样的用法不过在这个基础上为了更加方便编程他还增加了byte、word、dword、qword等类型更加方便脚本开发。其中byte对应C中int8word、dword、qword分别代表整数单字节、双字节和四字节变量的定义。这些变量在我们的车载网络脚本开发过程非常的方便极大减少我们错误出现的概率。枚举类型例如enum Colors c在CAPL中定义枚举类型的方式与在C中完全相同元素名称必须是唯一的。如果制定了值就按照指定值来使用如果为使用指定值所有后续元素的值均为上一个值加1。常用于脚本开发中switch-case-statement、状态名称等地方使用如果Enum类型作为返回值则必须带上关键字enum。结构体类型例如: struct TCPMessage m. 可对整数、浮点数、单个字符和枚举的引用但结构化类型可以用类似于C的方式在CAPL中声明不过与C中的使用还是有一定的区别大家使用的时候可以参考下帮助文档。定时器Timers (timer, mstimer)例如: timer tCAPL中定时有两种一种是毫秒定时器msTimer一种是秒定时器Timer这块特别是对于我们周期性检测或者周期报文类发送非常好用报文类型信号类型Messages (message, pdu, pg, linFrame, frFrame, frPDU, mostMessage, mostAMSmessage, mostrawmessage, gmlanMessage, j1587Param); either an actual message or *.例如: message 100 can_msg, linFrame * lin_msgSignals, only with *例如: signal * s or serviceSignalString * s这个可以说是CAPL中独有的类型无论是CAN、LIN还是MOST等其他我们所有使用的车载协议类型均有对应的报文类型结构在脚本开发中我们可以很好用的使用这些类型进行编程对于代码的整洁性、阅读性都有极大的提高。如示例无论是我们想要定义个固定ID的报文还是非固定ID的皆可后续即可通过can_msg.dlc/byte()/fdf等对应的名称进行赋值使用。信号与报文使用方法类似不过信号类型依赖于dbc文件相较于message来说使用范围略小系统变量类型例如envvarInt * ev系统变量带类型和*指示。可能的类型Data、Int、Long、Float、String、IntArray和FloatArray。诊断请求应答 例如diagRequest * dr例如diagResponse * dr这部分主要适用于诊断类型的定义使用范围也主要是诊断相关的函数。on diagRequest FaultMemory_ReadAllIdentified
{diagResponse this resp;// Set the number of bytes needed to transfer the response with 2 DTCs (in this example: overall 11 bytes)
diagResize( resp, 11); // 3 Bytes Header (SID, Subfunction, AvailabilityMask) 2 * 4 Bytes for DTCs 11 bytes// Set the value of the DTCsdiagSetComplexParameter ( resp, ListOfDTC, 0, DTC, 0x000001 );diagSetComplexParameter ( resp, ListOfDTC, 0, DtcStatusbyte, 0xF1 );diagSetComplexParameter ( resp, ListOfDTC, 1, DTC, 0x000002 );diagSetComplexParameter ( resp, ListOfDTC, 1, DtcStatusbyte, 0xF3 );diagSendResponse ( resp );
}// Indicate all requests in the write window
diagRequest *
{char objectPath[200];char currentEcu[100];this.GetObjectPath(objectPath, elcount(objectPath));DiagGetCurrentEcu(currentEcu, elcount(currentEcu));write( Request %s to ECU %s, objectPath, currentEcu);output(this); // forward down the measurment branch
}以上是CAPL函数中常见的变量类型不过我介绍的这块主要是适用于CAN、LIN相关的对于Flexrex或者MOST相关的并没有进行介绍使用范围太窄如果有需要欢迎评论区沟通。