CANoe中的AutoSequence
简单介绍:
AutoSequence是一种简单的,快速的类似脚本的一个可视化自动脚本插件。使用起来非常方便,甚至在很多时候能够代替一些简单的脚本。
1:Automation工程的创建
(1.1)打开Automation插件,双击这个插件按键
(1.2)出现以下界面:
可以看到,出现了三种类型的AutoSequnences:
(1)Visual Sequences? 可视化自动序列
?? (2) Macros? 宏编程序列
(3).NET Snippet .Net代码段
1.2.1 VisualSequence
首先看最简单和最容易上手的VisualSequence
框1内的从左到右依次是,
* NewSequence(新建Sequeence),
* ImportSequenceFromFile(从文件中导入新的Sequeence)
* RemoveSelectSequence(出去选中的Sequence)
* EditSelectSequences(编辑选中的Sequence)
框2上图没有截图截全,我又截图了全部
序号 | 条目 | 图标 | 说明 | 补充说明 |
1 | State(Sequence的状态) | 此选项其实可以分为两个部分,第一个部分可以理解为序列 执行的状态,running stopped paused。这里是指示序列的运行状态 incorrectFile。。。则是指示序列存在错误 | ||
2 | Active 实际上就是 使能框选 | 对号表示Active | 使用鼠标单击,可选择使能或者关闭这个Sequences。这是 序列运行时,Active勾选是序列能够执行的必要条件 | |
3 | Name | Sequences的名称 | 双击该处,可以自定义名称(建议根据功能,取名,且最好 是全英文名称,最好执行驼峰命名法,即首字母大写) | |
4 | 控制按键 | 一共三个按键: | 这里的三个状态图标很好理解,需要理解的是。pause(暂停) start开始时,sequence stop就会停止,再次start时, 就会从序列头部开始, 重新开始执行 | 关于pause和Stop的区别 可以用单片机中的程序计数器来理解,pause按下,程序计数器会记住程序运行到的位置,而stop则会将程序计数器清零。 |
5 | AutoStart | 是指,在主界面打开start时, 序列会自动开始执行 | ||
6 | Repetion | 有两个选项,1:once只发送一次 |
目前 了解的这些,并不能让我们立即写sequence,并应用到实际的工程中,于是下一节,我们需要详细了解sequence编写过程中的语法规则
(2)sequence编写过程中的语法规则(重点)
2.1 进入Edit界面
选择右键单击,出现选择界面,单击Edit
2.2编辑界面介绍
出现如下界面:
我把菜单栏,分为三个部分,
2.2.1是控制sequence运行控件
**第1部分,是控制sequence运行,暂停,停止。和上一节说的差不多。需要注意的是,从左往右数,第二个带个小脉冲的图标。系统自带解释(stepwise execution of seauence only avaliable in debug Mode),即该图标只能在Debug模式下使用。
2.2.2sequence循环控制及特殊控件
**第2部分,依次是设置sequence是否自动循环,是否在Measurement开始时,自动开启运行,?? 也可理解为是否和工程开关绑定。
第三个图标,类似于放平的8字型。这个功能比较奇特:他是针对几个特定的命令的。下面会介绍,大家留意这个即可。
2.2.3编译及循环控制控件
**第3部分,从左往右,
第一个图标非常重要,它类似于编译器中的编译,我们写完脚本后,点击一下这个图标,他就会检查脚本写的有没有问题。如果有错误会给出相对应的提示。
第二个图标,是开启Debug模式,开启时注意会有一个蓝色边框。注意一般情况下,3部分第一个图标,就能满足大部分检查要求。因为sequence一般情况下不会太复杂,行数不会太多,也应该不会有很复杂的逻辑。但是如果很复杂的情况下,如果不能解决问题,就需要开启Debug模式,并结合stepwise(分步运行),且必要是还可以打断点(insertBreakPoint)。
第三个图标是配置界面:
1:execution(执行模式),有两种执行模式
1:Standard标准运行模式。该序列将在模拟环境中执行,这里有一个注意点,本人暂时也没有搞明白,如果在配置项选择Standard标准格式,在主界面把总线类型设置为RealBus也是可以执行的
2:OnBoard :车载,机载模式,是指该序列将在Vector硬件(VN1630/VN7600)上执行。也就是我们工程师经常使用CANoe或其他设备,放在汽车上,执行脱离计算机使用VN1630/VN7600单独接在汽车上运行的情况。在这种模式下,定义的等待和循环时间非常精确。
但是注意也有缺点:
**1)因为脱离了计算机,很多Command(命令)都只能部分支持或不支持。
**2)不能支持signalLayer(不能使用信号交互层),通俗的理解就是不能再使用,关于对信号执行直接操作的命令,如设置信号值,在直接发送信号值等操作。
**3)commandConfiguration配置
其实这个配置比较多余,他对应的是一个wait for key命令行,如下图
点击红星处的...,就可以直接设置按键。这个命令行是一个相当于一个中断,当Command 执行到此处时,就进入“暂停”状态。直到指定的按键被按下。才继续执行。
注意点,如果一个sequence中存在多个wait for key那么,最后一次配置的按键会覆盖,前一个
如上图中的两命令,第一个配置为按键“1”,第二个配置成“2”,实际运行sequence时,需要按两次“2”,而不是按一次“1”,再按一次“2”。需注意!!!
2.2.4sequence文件的导入和导出
分别对应3部分的第4和第5个按键,单击此处按键。看看输出和输入文件的格式如何
支持VisualSequences(.vsq)
Generator block send list(gen)
两种格式支持直接导入。
注意:导出时只支持vsq格式。
2.2.5显示和关闭comment
也就是这个按键,管理者comment是否显示。很简单
3具体语法的介绍和格式说明
3.1 格式说明
先看下图:一共分为6个部分
语法和格式的核心是comment,每条语句都被划分为6个部分,不是每个语句都需要设置这6个部分。分别为Command(命令),Object(对象),Operate(操作符),Operand(操作数),wait【单位:ms】 Comment(注释)
3.2语法说明
我将所有的命令分为8类;
3.2.1Send类
其中Send类,共有4种Command
**1)SendCANErrorFrame:输出CAN错误帧
先选择发送错误帧格式。然后选择通道。如果需要等待,则设置等待时间
**2)sendCANMessage发送
此选项需要DBC文件支持,发送DBC文件中定义的报文。而DBC文件中定义的报文早已经设定好其所在通道,和周期,长度等,不需要在语句中额外设定。
**3)SendRawFrame 发送原始值帧
这句话的意思是发送任意帧,这个帧的格式都需要在这个语句中定义
从图中可以看出,这个报文从ID到帧类型,发送通道,到数据都是可以我们自己定义的。
注意3位置处:只能选择=。如果不选择,那么默认数据段全部为0。
4位置处:如果选择CANfd则最大支持64Byte,如果选择传统CAN最大只能发送8Byte。
另外注意,发送的RawFrame的帧长度会自动根据所发送字长自动调节。
**4)SendGMLANFrame
发送GMLAN帧,这个暂时不需要做过多了解,因为从下图中可以看出,此发送命令,需要在DBC文件中定义GMLAN帧,不然会报错。
3.2.2 wait类型指令
**1)wait等待指令,后面带一个时间参数,wait+时间参数(ms为单位),该语句实现等待
需要注意的是,这个参数必须是>0的整数。且最大数值为2,147,483,647。
注意wait命令1后,2处也设置参数,也会起作用,上图语句等待时间为2000ms。
**2)wait For
此命令后的object(对象)限定为系统变量,该系统变量+操作符operator+操作数(operand)构成了一个真值表达式,如果此表达式为1(真True),则语句通过,不然则会一直等待。
WaitFor命令,支持的大多是关系运算符,一共是6个常规(此处常规指的是一般编程语言都支持的关系运算符)关系运算符,另外两个为sequence特有的运算符 in range outside range运算符。
in range 后的operand格式如 :1;2这种格式。且数字格式要与Object函数保持一致。
**3)wait for CanFrame
先看结构
wait for'CanFreme+DBC中已经定义的帧。完整语句的作用是只要该帧出现,就满足条件,下一步,立即执行下一步操作。
**4)wait for Can raw Frame 结构和wait for'CanFreme语句结构一样,只不过Object是可以用户自己定义的。
**5)wait for Can GMLAM Frame 需要在DBC文件里,定义GMLAN文件,暂时不怎么了解。
3.2.3 条件判断类
if else 以及elseif 和endif,一共4个为条件判断类。
**1)if 对象为signal和sysvar
operator基本为关系运算符,+in range +outside range
基本格式如下,需要注意的是在sequence中,每一个if必须有一个Endif,与之匹配,elseif则不需要
else 也总是最近的if配对。
3.2.4 循环控制类指令
repeat和repeatEnd,break
**1)repeat,如图所示repeat和repeatEnd共同构成了一个循环体object为循环次数,用户可自定义。
这里循环有一个问题,就是只能固定循环次数,需要额外的操作。
**2)break一般是配合if判断语句,一起使用在循环体内部,用来跳出循环。如下图所示
3.2.5 BlockReplay函数
回放模块
3.2.6map信号映射
将系统变量或环境变量或signal映射到其他系统变量、环境变量。需要注意的是,operand只能是系统变量或环境变量。
映射之后,注意需要取消映射。
3.2.7Exit离开
此命令是终止sequences运转。无视自动循环是否开启
无任何参数
3.2.8set类命令
set、setCanCyclicFrame、setCanCyclicFrame
**1)首先看set命令
Object可以是Signal和Variable。
Operator有如下符号
** = 赋值表达式
**inc 自增,相当于++
**dec 自减 相当于 --
**2)首先看set CAN CyclicFrame,对象只能是DBC文件中定义的帧
Operator 有下图几种,CycleTime(ms)设置循环时间、和stop停止按键
当Operator是cycle time时 ,Operator是设置循环发送的时间。需要停止时则使用stop函数。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!