1、北京恒润科技有限公司 1 Vector 产品培训 CAPL 编程北京恒润科技有限公司 2 CAPL 浏览器概述 创建、修改、编译 CAPL 程序 以结构形式显示变量、 事件程序和函数 CAPL 浏览器可同时打 开多个CAPL 程序窗口 快速编译 错误自动定位 通过 通过CANoe CANoe 工具条按钮 工具条按钮 打开 打开CAPL CAPL 浏 浏 览器。鼠标双击 览器。鼠标双击CAPL CAPL 节点也可打开。 节点也可打开。北京恒润科技有限公司 3 CAPL 浏览器的窗口 标题栏 菜单条 工具条 浏览树窗格 编译信息窗格 状态条 全局变量编辑窗格 CAPL 程序编辑窗格北京恒润科
2、技有限公司 4 CAPL 程序的编译 CAPL 程序必须通过编 译才可执行 CAPL 的可执行文件扩 展名为*.cbf 编译可通过菜单命令、 工具条按钮、或快捷键 来激活 信息窗格显示编译信息 通过错误信息定位错误北京恒润科技有限公司 5 搜索运行时错误 测量过程中自动检测CAPL程序: 被0 除 超出数组的上限或下限 超出消息数据域的上偏移或下偏移 在CAPL 子程序调用时堆栈溢出 使用浏览器菜单命令Compiler Find run- time errors通过错误索引号查找 使用runError()函数自定义运行时错误北京恒润科技有限公司 6 数据库的访问 直接从CANoe 的测量
3、设置或仿真设置窗口打 开CAPL浏览器,自动关联数据库 通过浏览器菜单命令关联数据库 在浏览器的编辑窗格中,通过交互菜单选项 插入信号或消息名到CAPL程序中北京恒润科技有限公司 7 导入/导出ASCII 文件 File Import导入纯ASCII 文件到CAPL 浏览器中 File Export 导出CAPL 程序为ASCII 文件 导出的 导出的 ASCII ASCII 格式的 格式的CAPL CAPL 程序 程序 浏览器格式的 浏览器格式的CAPL CAPL 程序 程序 浏览器格 式结构信息北京恒润科技有限公司 8 CAPL 编程概述 CAPL是CAN总线访问编程 语言( CAN
4、Access Programming Language ) 类C语言 应用于Vector CAN工具节 点编程 基于事件建模的语言 总线事件 属性事件 时间事件 CAPL CAPL 程序 程序 并口 串口 启动/ 停止 键盘输入 环境变量 定时 CAN 总线 CAN 总线 北京恒润科技有限公司 9 CAPL 程序的应用 节点仿真 网络仿真 仿真控制系统的环境 节点测试 网关北京恒润科技有限公司 10 CAPL 程序对于事件的响应 CAPL 程序能够检测事件,并执行和事件相关 的程序。检测的事件类型包括: 程序开始执行事件 程序停止执行事件 键盘输入事件 CAN 消息的接收事件 定时器超时事
5、件 图形面板输入事件(该项只在CANoe 中应用) CAPL 程序是基于事件程序的组合北京恒润科技有限公司 11 CAPL 的事件类型 事件类型 事件类型 事件名 事件名 程序执行条件 程序执行条件 事件过程语法结构 事件过程语法结构 * * PreStart CANoe 初始化时执行 on preStart Start 测量开始时执行 on start StopMeasuremet 测量结束时执行 on stopMeasurement BusOff 硬件检测到BusOff 时执行 on busOff ErrorActive 硬件检测到ErrorActive 时执行 on errorActi
6、ve ErrorPassive 硬件检测到ErrorPassive 时执行 on errorPassive WarningLimit 硬件检测到WarningLimit 时执行 on warningLimit CAN 消息事件 自定义 接收到指定的消息时执行 on message Message 时间事件 自定义 定时时间朝过时执行 on timer Timer 键盘事件 自定义键值 指定的键被下时执行 on key Key 错误帧事件 ErrorFrame 硬件每次检测到错误帧时执行 on errorFrame 环境变量事件 自定义 指定的环境变量值改变时执行 on envVarEnvVar
7、 CAN 控制器 事件 系统事件 * “ 事件过程语法结构” 列中兰色字体表示该程序的关键字;深 红色字体表示用户自定义的名称; “ ” 内是CAPL 程序体,用户可根据需要使用CAPL 语言编写。北京恒润科技有限公司 12 CAPL 基本语法 CAPL 语言的语法与C语言基本相同: 注释 / 放置在需要注释的语句之前,注释单行 /* 注释起始符,其后的内容被注释 */ 注释结束符,结束由/* 开始的注释 事件过程 分号 语句结束符 大括号北京恒润科技有限公司 13 消息过程 on message 123 / 对消息123(dec) 反应 on message 0x123 /对消息123(
8、hex) 反应 on message MotorData /对消息MotorData( 符号 /名字) 反应 on message CAN1.123 /* 对CAN 通道1 收到消息 123 反应*/ on message * /对所有消息反应 on message 100-200 /对100-200 间消息反应北京恒润科技有限公司 14 键盘过程 on key a /按a 键反应 on key /按空格键反应 on key 0x20 /按空格键反应 on key F1 /按F1键反应 on key Ctrl-F12 /按Ctrl + F12 键反应 on key PageUP /按Page
9、Up 键反应 on key Home /按Home 键反应 on key * /按所有键反应北京恒润科技有限公司 15 时间过程 时间过程表示法: on timer myTimer /对myTimer 设定的时间到反应 定时器的申明 msTimer myTimer; /将myTimer 申明ms 为单位的变量 timer myTimer; /将myTimer 申明s 为单位的变量 定时器的设置 setTimer(myTimer,20); /将定时值设定为20ms ,并启动 cancelTimer(myTimer); /停止定时器myTimer 每次使用 每次使用setTimer setTim
10、er 的设置,只能触发一次时间过程 的设置,只能触发一次时间过程北京恒润科技有限公司 16 环境变量过程 环境变量过程on envVar 对环境变量值的改 变产生反应 测量设置中的CAPL 节点不会阻止环境变量在 数据流图中的传输 环境变量过程常用的函数: getValue() /获取环境变量的值 putValue() /设置环境变量的值 可使用this 在过程内部访问环境变量的值北京恒润科技有限公司 17 CAPL 中的数据类型 无符号整数 byte (1字节) word (2字节) dword (4字节) 有符号整数 int (2字节) long (4字节) 浮点数 float (8字
11、节) double (8字节) CAN 消息类型 message 定时器类型 timer (秒为单位) msTimer(毫秒为单位) 单个字符 char (1 字节)北京恒润科技有限公司 18 消息的申明 消息申明的格式 Message 0xA my_msg1; Message 100 my_msg2; Message EngineData my_msg3; 消息数据的索引 my_msg1.byte(0) /数据字节0 my_msg2.word(2) /从第2 字节开始的一个字 my_msg3.EngSpeed /* 如果使用了符号数据库, 可使用信号符号名来索引 消息中的信号*/北京恒润科
12、技有限公司 19 CAPL 程序的组成 一个完整的CAPL程序 由三个部分组成: 申明与定义全局变量 各种事件过程 申明与定义自己的函数 variables /申明全局变量 on start /过程指令块 on message xxx /过程指令块 on key 1 /过程指令块 My_function_1(Para_1, Para_2, ) /函数体 My_function_n(Para_1, Para_2, ) /函数体 北京恒润科技有限公司 20 CAPL 程序执行顺序 事件过程之间无关联,执行顺序由运行时间事件决定 事件过程通过全局变量和子程序决定 事件过程为一整体,不能被其它事件
13、中断 variables int counter; on message 0x1a1 counter=counter+1; on key a write(“%d”,counter); write read北京恒润科技有限公司 21 针对消息的一些常用语句 常进行读写 if (this.id=100) /消息ID 常写的 msg.can=2; /消息所使用的CAN控制器编号 msg.dlc=8; /消息中包含的数据字节长度 常读的 dword t ; t=this.time; /消息的时标,单位是10us if(this.dir!=RX) return; /消息的收发特性 注意: 注意: th
14、is this 是关键字,在事件过程中代表所定义的触发事件名 是关键字,在事件过程中代表所定义的触发事件名北京恒润科技有限公司 22 关键字 this 在事件过程中,关键字this 指定事件对象的数 据结构 this 可作为参数使用 对于this 值的改变仅在过程内部有效 on message 100 byte byte_0; byte_0 = this.byte(0); . on envVar Switch int val; val = getvalue(this); . 北京恒润科技有限公司 23 CAPL 指令块 Counter = counter+1; if (counter=25
15、6) counter=0; stop(); 北京恒润科技有限公司 24 CAPL 中输出文本 int h=100; char ch=a; char s1008=“hundred”; write(“Hundred as a number:%d,%x”,h,h); write(“Hundred as a string:%s”,s100); write(“The square root of two is %6.4g”,sqrt(2.0);北京恒润科技有限公司 25 处理信号 on message 0x64 if(this.byte(2)=0xFF) write(“Third byte of t
16、he message is invalid”); on message MotorData if(this.temperature.phys=150) write(“Warning: critical temperature”); 北京恒润科技有限公司 26 传输信号 on key a message MotorData mMoDa; mMoDa.temperature.phys=60; mMoDa.speed.phys=4300; output(mMoDa); on key b message 100 m100= dlc=1; m100.byte(0)=0x0B; output(m100)
17、; 北京恒润科技有限公司 27 周期性消息发送的CAPL 示例 Variables / 定义全局变量 message 0x555 msg1 = dlc=1; / 定义消息变量 msg1,并初始化数据字节代码为1 msTimer timer1; / 定义定时器变量 timer1 on start / 系统过程 setTimer(timer1,100); / 初始化定时器变量timer1的值为 100 msec ,并启 动 on timer timer1 / 时间过程 (对于定时器变量timer1 ) setTimer(timer1,100); / 重新设置timer1 ,并启动 msg1.by
18、te(0)=msg1.byte(0)+1; / 改变消息数据字节 output(msg1); / 输出消息 北京恒润科技有限公司 28 环境变量过程的示例 Variables / Reaction to change of environment var. evSwitch on envVar evSwitch / Declare a CAN message to be transmitted message Msg1 msg; / Read out the value of the light switch, Assign to the bus signal bsSwitch msg.bs
19、Switch = getValue(this); / Output message on bus (spontaneous transmission) output(msg); 北京恒润科技有限公司 29 小结 本章主要介绍了三个独立应用的编辑工具: CANdb+ 编辑器 按照创建CAN 数据库的步骤介绍了CANdb+ 编辑器的 使用方法,从而学习其最主要的一些功能 面板编辑器 主要介绍了编辑器的启动、控件的布置与配置、位图元 件的处理、以及面板的测试与控制 CAPL 浏览器及CAPL 编程基础 介绍了CAPL浏览器的窗口、编译及编译错误处理、数 据库访问、以及CAPL 程序ASCII 文件
20、的导入/ 导出 同时还介绍CAPL 语言的特点与应用、CAPL 事件过程、 数据类型、程序结构、以及实例演示了常用函数的使用北京恒润科技有限公司 30 练习1 : 创建一个完整的CANoe 配置: 两个节点 与外部交互 I/O 接口 应用程序 总线接口 I/O 接口 应用程序 总线接口 evSwitch evLight Msg1.bsSwitch 影响北京恒润科技有限公司 31 创建分布式系统模型的步骤 在CANoe 中创建一个分布式系统模型,分为 三个步骤: 创建一个具有消息、信号和环境变量的数据库 创建网络节点的外部界面。比如,控制面板 使用CAPL 程序创建网络节点模型北京恒润科技有
21、限公司 32 创建数据库 打开CANdb+ 编辑器 点击按钮 打开编辑器 用菜单命令 打开编辑器北京恒润科技有限公司 33 创建数据库(续) 创建消息Msg1 输入消息名 输入消息ID 指定数据字 节长度北京恒润科技有限公司 34 创建数据库(续) 创建信号bsSwitch (开关状态) 信号定义 与消息关联 添加关联消息北京恒润科技有限公司 35 创建数据库(续) 创建环境变量 evLight 与 evSwitch北京恒润科技有限公司 36 创建面板 创建面板作为节点的外部设备 单击 开关元件 指定面板 标题 添加文字 标签 双击修改北京恒润科技有限公司 37 创建面板(续) 将
22、面板文件集成到CANoe 配置中 面板集成 菜单命令北京恒润科技有限公司 38 创建网络节点模型 2008. HiRain Technologies. All rights reserved. CANoe CANoe 快速建模 快速建模 CAPL Generator CAPL Generator 2008. HiRain Technologies. All rights reserved. Slide: 目录 概述 数据库准备 生成CAPL 模型 建立CANoe 仿真 集成应用 2 2008. HiRain Technologies. All rights reserved. Slide:
23、概述 3 两种CANoe 模型 2008. HiRain Technologies. All rights reserved. Slide: 概述 4 阶段、流程、文件 2008. HiRain Technologies. All rights reserved. Slide: 概述 工程框架 根据数据库生成 与各个节点关联 5 CANoe Simulation Setup CAPL Generation 2008. HiRain Technologies. All rights reserved. Slide: 数据库准备 模板 CAPL Generator 交互层 CAPLgen_IL_A
24、LL_Template.dbc 所有CAPL Generator 交互层属性 CAPLgen_IL_Basic_Template.dbc 发送报文的基本属性 Vector 交互层 扩展层 6 2008. HiRain Technologies. All rights reserved. Slide: 数据库准备 模板 CAPL Generator 交互层 Vector 交互层 Vector_IL_Basic_Template.dbc 发送报文的基本属性 扩展层 7 2008. HiRain Technologies. All rights reserved. Slide: 数据库准备 两个交互
25、层接口区别 8 2008. HiRain Technologies. All rights reserved. Slide: 数据库准备 模板 CAPL Generator 交互层 Vector 交互层 扩展层 IL_Extended_Template.dbc 附加属性:条件发送和调用用户自定义函数 IL_NM_Template.dbc 网络管理属性 9 2008. HiRain Technologies. All rights reserved. Slide: 数据库准备 发送类型 CAPL Generator IL :GenMsgSendType Vector IL :GenSigSend
26、Type 10 2008. HiRain Technologies. All rights reserved. Slide: 数据库准备 11 GenMsgSendType 报文发送类型 相关属性 行为描述 cyclic cyclic GenMsgCycleTime 周期发送 spontaneous spontaneous - 信号值改变时发送 cyclickIfActive cyclickIfActive GenMsgCycleTime; GenSigInactiveValue 信号激活发送 spontaneousWithDelay spontaneousWithDelay GenMsgDe
27、layTime 带延迟的值改变发送,指定该 报文的最小发送间隔 cyclicAndSpontaneous cyclicAndSpontaneous GenMsgCycleTiem 周期和值改变混合发送方式。 要求GenMsgDelayTime=0 cyclicAndSpontaneousWD cyclicAndSpontaneousWD GenMsgCycleTiem; GenMsgDelayTime 在周期点发送值改变信号。 spontaneousWithRepetition spontaneousWithRepetition GenMsgNrOfRepetitions; GenMsgCyc
28、leTime 信号值改变后,立即周期发送 若干次数 cyclicIfActiveAndSpontaneo cyclicIfActiveAndSpontaneo usWD usWD GenMsgCycleTime; GenMsgDelayTime 值激活后周期发送,并在值改 变时也发送,且报文满足最小 延迟时间要求 cyclicIfActiveFast cyclicIfActiveFast GenMsgCycleTime; GenMsgCycleTimeActive 无激活信号时以基本周期发送 ,有信号激活时快速周期发送 cyclicWithRepeatOnDeman cyclicWithRep
29、eatOnDeman d d GenMsgNrOfRepetition; GenMsgCycleTime 信号值改变后,在周期点发送 若干次数 2008. HiRain Technologies. All rights reserved. Slide: GenSigSendType 数据库准备 12 信号发送类型 相关属性 行为描述 cyclic cyclic cyclic cyclic GenMsgCycleTime 周期发送 OnWrite OnWrite - 写信号后发送 OnChange OnChange - 信号值改变后发送 OnWriteWithRepetition OnWrite
30、WithRepetition GenMsgNrOfRepetition 写信号后重复发送 OnEvent OnEvent OnChangeWithRepetition OnChangeWithRepetition GenMsgNrOfRepetition 信号值改变后重复发 送 IfActive IfActive IfActive IfActive IfActiveWithRepetition IfActiveWithRepetition GenMsgCycleTimeFast; GenSigInactiveValue 信号激活后,以快速 周期发送报文,否则 不发送。 2008. HiRain
31、 Technologies. All rights reserved. Slide: 工程生成 启动 Exe32CAPLgenerator.exe 导入 File-Assin database Ctrl-A 13 2008. HiRain Technologies. All rights reserved. Slide: 工程生成 生成 Part Send:信号发送 Display :报文、信号显示 Receive :报文接收 Range Database :整个数据库(所有节点) Node :部分节点 Message :部分 14 2008. HiRain Technologies. All
32、 rights reserved. Slide: 路径 生成文件存放路径 文件 .can :CAPL脚本 .log:记录文件 记录 caplgen.log 生成过程中错误及提示信息 15 2008. HiRain Technologies. All rights reserved. Slide: 工程生成 CAPL 示例 Send: 16 2008. HiRain Technologies. All rights reserved. Slide: 工程生成 CAPL 示例 Display: 17 2008. HiRain Technologies. All rights reserved. S
33、lide: 网络仿真 加载数据库 File-Database Usage 加载CAPL 脚本 节点右键-Configuration- Program Files 编译仿真运行 F9 18 2008. HiRain Technologies. All rights reserved. Slide: 网络仿真 加载数据库 File-Database Usage Node Synchro 19 2008. HiRain Technologies. All rights reserved. Slide: 网络仿真 加载CAPL 脚本 节点右键-Configuration- Program Files
34、20 2008. HiRain Technologies. All rights reserved. Slide: 网络仿真 编译仿真运行 F9 21 2008. HiRain Technologies. All rights reserved. Slide: 集成应用 代码详解 IL 接口 信号环境变量:报文和信号发送 该环境变量根据数据库属性在生成过程中自动添加 发送行为 脚本自动完成 发送周期、重复次数、最小发送间隔、激活发送 使用示例 发送信号: putvalue(EnvMsgHi01SigHi01_, 100); 22 2008. HiRain Technologies. All r
35、ights reserved. Slide: 命名规则 putvalue(EnvMsgHi01SigHi01_ , 100); 宏命名 Nodename:取节点名字符串 Msgname :取报文名字符串 Signame :取信号名字符串 例如:MsgnameSigname 集成应用 23 Network:GenEnvVarPrefix GenEnvVarPrefix Signal:GenSigEVName GenSigEVName Network:GenEnvVarEndingSnd GenEnvVarEndingSnd 信号物理值 信号物理值 2008. HiRain Technologies. All rights reserved. Slide: 24 Q&A