CAPL基础--变量和信号的访问

CAPL中,信号、系统变量和环境变量可以直接被访问和赋值,但赋值方式各不相同。

1 CAPL中访问信号

需要指出的是,signal在CAPL中代表的是总线信号交互层的表示,它不同于message。message是CAPL的数据类型,而signal不是。因此不能再CAPL中定义一个类型为signal的变量。

当用户需要访问信号缓冲区并期望读到最后接收到的信号值时,可以使用$符号。

value=$EngineSpeed;//读取信号EngineSpeed的值
value=$EngineSpeed.raw;//读取信号EngineSpeed的raw数据
$EngineSpeed=550;//将EngineSpeed的值设为550

在一个仿真工程中,信号的定义可能会出现歧义,主要原因是含有多个总线网络,不同数据库中出现相同名称的信号名。为了区别不同的信号,CAPL中需要增加通道(Channel)、网络(Network)、节点(Node)、和报文(Message)的信息。完整版语法格式如下:

[(channel|network)::][node::][message::]signal

注:[]里的内容表示可有可无。

用户可以使用上面的全部或部分的元素,只要能准确的表示出信号的唯一性即可。

$LightSwitch::OnOff     //node+signal
$LightSwitch::LightState::OnOFF    //node+message+signal
$CAN1::Gateway::Status    //channel+node+signal
$PowerTrain::Gateway::Status    //network+node+signal
$CAN1::Status    //channel+signal

2 CAPL中访问系统变量

用户可以在CAPL中直接访问系统变量而不需要通过函数调用,以下是需要采取的语法格式。

@Namespace::Variable

需要注意的是,对于array和struct类的变量,直接访问方式只能访问单个元素,例如:

intValue=@Namespace1::Parameter2;
@Debug::MotorValues::EngineSpeed=$EngineSpeed;
intValue=@Namespace1::ParameterArray[2];   //访问数组变量的单个成员
@XCP::ECU_2::KL2.Curve2[0]=1.3;   //访问结构体中的数组变量的单个成员

比较通用的访问操作方式是使用以sysGetVariable开头和sysSetVariable开头的访问函数。例如:

//字符串修改操作
char demo[20]={'m','u','s','i','c',' ','t','a','g'};
sysSetVariableString(sysvar::IPC::Music_tag,demo);
//long数组类的系统变量读取操作
long lVarArr[10];
sysGetVariableLongArray(sysvar::MyNamespace::LongArrayVar,lVarArr,elcount(lVarArr));

3 CAPL中访问环境变量

与系统变量类似,用户可以不使用函数调用通过同样的格式访问环境变量。语法格式为:

@Variable
intValue=@EnvLightState;
@EnvTurnSignal=$LightState::TurnSignal;

比较通用的访问操作方式是使用函数getValue()和putValue()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值