在前面我们创建了MotorSpeed工程,现在我们来讲如何给它添加CAPL程序。
1. 创建节点
按照前面讲的添加节点的方法给该工程添加三个节点:Motor、Door、Display。如图1所示效果。
图1 添加网络节点完成效果图
2. 创建*.can文件
鼠标右键单击需要添加CAPL程序的节点,选择Edit,会创建一个新的CAPL程序。在弹出窗口中选择要保存的路径并命名文件名称,CAPL程序文件的后缀名为.can。过程如图2。使用该方法,分别为节点Motor、Door、Display创建三个CAPL程序Motor.can、Door.can、Display.can并保存在文件夹nodes中。
图2 编辑节点的CAPL程序
3. 创建CAPL程序
(1)创建节点Motor的CAPL程序
节点Motor的主要功能:马达开关动作时,将对应的报文MotorState中信号OnOff更新;同时处理马达开关与马达速度的逻辑关系。马达运行时,马达速度允许更新,马达关闭时,马达速度自动设置为0。以下为完成该功能的程序代码。
includes
{
}
variables
{
}
on sysvar sysvar::Motor::MotorStateSwitch
{
$MotorState::OnOff=@this;
if(@this)
$MotorState::MotorSpeed=@sysvar::Motor::MotorSpeedEntry;
else
$MotorState::MotorSpeed=0;
}
on sysvar sysvar::Motor::MotorSpeedEntry
{
if(@sysvar::Motor::MotorStateSwitch)
{
$MotorState::MotorSpeed=@this;
}
}
(2)创建节点Door的CAPL程序
节点Door主要功能是发送周期报文DoorState,本例子中面板的车门开关控件已与报文的信号(Door_L和Door_R)关联,因此信号的更新会由CANoe自行处理,不需要在CAPL程序中添加任何代码。
(3)创建节点Display的CAPL程序
节点Display主要功能是对接收过来的报文MotorState和DoorState进行处理,并显示在Display面板上。因此,节点Display只需处理 on message MotorState和on message DoorState事件。
以下为节点Display完整的CAPL代码(display.can)
includes
{
}
variables
{
}
on message MotorState
{
if(this.dir==RX)
{
@sysvar::Motor::MotorspeedDspMeter=this.MotorSpeed/1000;
}
}
on message DoorState
{
{
if (this.dir==RX)
@EnvDoorState=this.Door_L+this.Door_R*2;
}
}
通过上面的创建节点及添加CAPL程序过程,你学会了吗?