首页 > 编程知识 正文

如何自动化运行capl脚本,如何自动化调用capl脚本

时间:2023-05-06 21:08:00 阅读:261944 作者:582

Value Objects 信号(on signal)环境变量(on envVar)系统变量(on sysVar )
在 CAPL General Event Procedures (一) 中讲解了Ssytem下的几种事件,下面会讲解下 Value Objects下的几种事件:

信号(on signal) on signal signalname 每次信号值有变化的时候,会触发这个事件on signal_update signalname 只要总线上有这个周期信号就会一直触发 /*@!Encoding:ASCII*/On key 'a'{ setSignal(DeactiveTJPReq,1);}on signal DeactiveTJPReq{ write("Value changed will be trigger, value: %f",this.raw); }on signal_update DeactiveTJPReq{ write("Continuous trigger, value: %f",this.raw);}

这里有一个信号 DeactiveTJPReq,周期5ms发送,初始值为0,因为一直触发事件:on signal_update DeactiveTJPReq,所以开始不断打印 0,后来按下按键 a, 因为 信号的值改变了,所以触发事件 on signal DeactiveTJPReq,后面即使再按按键 a,也不再会触发on signal DeactiveTJPReq,因为信号值没有变化

关于关键字:this
Within an event procedure for receiving a CAN object or an environment variable, the data structure of the object is designated by the key word this.
在接收CAN对象或环境变量的事件过程中,对象的数据结构由关键字this指定

on signal ( signalname1 | signalname2 | …)
通过上面语法可以同时对多个信号进行监控 /*@!Encoding:ASCII*/On key 'a'{ write("Now pressed key a:"); setSignal(DeactiveTJPReq_UB, 0); }On key 'b'{ write("Now pressed key b:"); setSignal(DeactiveTJPReq, 1);}on signal ( DeactiveTJPReq_UB |DeactiveTJPReq){ write("*********DeactiveTJPReq_UB**********: %f",getSignal(DeactiveTJPReq_UB)); write("*********DeactiveTJPReq*************: %f",getSignal(DeactiveTJPReq)); }

输出结果:

环境变量(on envVar)

on envVar X 响应环境变量事件
有两个多环境变量操作的API

getValue() 读取变量值 putValue() 设置变量值

首先,我们新建一个新的dbc文件,命名为test.dbc,然后创建三个环境变量,在canoe工程中加入这个dbc文件。

在Value Objects中创建on enVar 事件

/*@!Encoding:ASCII*/On key 'a'{ putValue(test_int,2); putValue(test_float,2.5); putValue(test_string,"good man"); }on envVar test_int{ write("test_int:%d",getValue(this)); }on envVar test_float{ write("test_float:%f",getValue(this)); }on envVar test_string{ char string[20]; getValue(this,string); write("test_string:%s",string); }

输出结果:

"on envVar (envVar1 | envVar2 | …)", 可以同时指定多个环境变量,但是只有这些环境变量的数据类型一样的时候,才可以使用“this”.

/*@!Encoding:ASCII*/On key 'a'{ putValue(test_int,2); }On key 'b'{ putValue(test_float,2.5); }On key 'c'{ putValue(test_string,"good man"); }on envVar (test_int | test_float |test_string){ char string[20]; write("test_int:%d",getValue(test_int)); write("test_float:%f",getValue(test_float)); getValue(test_string,string); write("test_string:%s",string); }

依次按下a,b,c按键之后的输出结果:

系统变量(on sysVar ) 系统定义的系统变量
在你的canoe工程中,调动了不同的dll或者加载了不同的模块,不同的总线结构中,canoe工程会自动适配出 系统的系统变量,如下图,只有statistics和canoe两个命名空间这是因为我这建立的是一个空项目,并没有加入其它模块。
用户定义的系统变量
这里新建了一个test_namespace 命名空间,并创建了三个系统变量
人;这里还可以通过 export 将你定义的系统变量导出到一个 .vsysvar 文件中,这样定义的系统变量就可以在其它工程中复用了。
语法: on sysVar X读取或者设置系统变量的值,用 ‘@’ 或者 sysGetVariable。系统变量要通过 域操作符"::" 在前面加上他的域空间才行 /*@!Encoding:ASCII*/On key 'a'{//设置值 @test_namespace::sys_test_int =2; @test_namespace::sys_test_float =3.5; sysSetVariableString(sysVar::test_namespace::sys_test_string,"good man a"); }on sysvar test_namespace::sys_test_int{ write("sys_test_int:%d",@test_namespace::sys_test_int); }on sysvar test_namespace::sys_test_float{ write("sys_test_float:%f",@test_namespace::sys_test_float);}on sysvar test_namespace::sys_test_string{ char string[20]; sysGetVariableString(sysVar::test_namespace::sys_test_string,string,elCount(string)); write("sys_test_string:%s",string); }

按下键盘 a,输出结果:

系统变量中 this 用法

On key 'a'{ @test_namespace::sys_test_int =random(100);}on sysvar test_namespace::sys_test_int{ write("sys_test_int:%d",@this); write("sys_test_int:%s",this.name); write("sys_test_int:%s",this.`namespace); write("sys_test_int:%ld",this.time_ns); }

输出:

on sysvar 和 on sysvar_update的区别
on sysvar :值变化才会触发
on sysvar_update :只要对系统变量操作了,值不变化也会触发 On key 'a'{ @test_namespace::sys_test_int = 2;}on sysvar test_namespace::sys_test_int{ write("sysvar ---->>sys_test_int:%d",@this); }on sysvar_update test_namespace::sys_test_int{ write("sysvar_update---->>sys_test_int:%d",@test_namespace::sys_test_int); }

sys_test_int默认值是1,连续按了5次 键盘 a 键:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。