CANoe网关如何实时修改信号值

一、概述

上一篇文章提到如何通过CANoe创建CAN网关实现报文转发(包含对部分报文的值修改后再转发,文章链接:https://blog.csdn.net/Richy_Lai/article/details/130529603#comments_26357921),本篇文章将继续讲解如何实时(不中断工程)修改转发报文的信号值。

二、方法

实时修改报文的信号值一般有两种办法:(1)通过键盘快捷键修改(on key+键盘按键);(2)通过面板(Panel)按钮修改。这两种办法都需要对原先的CAPL脚本进行修改才能实现。

(1)通过键盘快捷键修改(on key+键盘按键)

/*@!Encoding:936*/
includes
{
  
}

variables
{
/创建全局变量,用于实时传递报文信号值//
  int flag =0;    // switch
  int msg2_506_INS_Pos=0;
  int msg2_506_INS_Heading=0;
  int msg2_506_INS_Status=0;

}

on message CAN1.*        //将CAN1的报文全部透传给CAN2
{
  message CAN2.* m;
  if(this.DIR==RX)        // if it is a received frame
  {
   if(this.CAN==1)
   {
    m=this;
    output(m);      // send it to the other channel
   }
  }
}

//on message CAN2.*     //将CAN2的报文全部透传给CAN1,此处不考虑      
//{
// message CAN1.* m;
// if(this.DIR==RX)        // if it is a received frame
// {
//  if(this.CAN==2)
//  {
//   m=this;
//   output(m);      // send it to the other channel
//  }
// }
//}

on message CAN1.0x506    //从CAN1传入CANoe的报文
{
  message CAN2.0x506 msg2_506;    //命名CAN2 ID为506的报文
  //this is an example for a message that will be manipulated before it is sent on CAN2
 if (this.DIR==RX)           // if this message is received
   {
    if(this.CAN==1)
      {
        msg2_506=this;
        if (flag == 1) //如果flag=1,则修改信号值
        {
            msg2_506.INS_Pos.phys = msg2_506_INS_Pos;
            msg2_506.INS_Heading.phys = msg2_506_INS_Heading;
            msg2_506.INS_Status.phys = msg2_506_INS_Status;
            
        }

       output(msg2_506);    //输出报文
      }
   }
}

on key 'a'  //按下a,flag值=1,触发修改信号值
{
  flag = 1; 
  msg2_506_INS_Pos=16;
  msg2_506_INS_Heading=50;
  msg2_506_INS_Status=2;
}



on key 'z'  //恢复透传
{
  flag = 0; 
}

(2)通过面板(Panel)按钮修改

在修改CAPL脚本之前,需要先定义系统变量、设计Panel,如下图:

 对应的CAPL脚本:

/*@!Encoding:936*/
includes
{
  
}

variables
{
/创建全局变量,用于实时传递报文信号值//
  int flag =0;    // switch
  int msg2_506_INS_Pos=0;
  int msg2_506_INS_Heading=0;
  int msg2_506_INS_Status=0;

}

on message CAN1.*        //将CAN1的报文全部透传给CAN2
{
  message CAN2.* m;
  if(this.DIR==RX)        // if it is a received frame
  {
   if(this.CAN==1)
   {
    m=this;
    output(m);      // send it to the other channel
   }
  }
}

//on message CAN2.*     //将CAN2的报文全部透传给CAN1,此处不考虑      
//{
// message CAN1.* m;
// if(this.DIR==RX)        // if it is a received frame
// {
//  if(this.CAN==2)
//  {
//   m=this;
//   output(m);      // send it to the other channel
//  }
// }
//}

on message CAN1.0x506    //从CAN1传入CANoe的报文
{
  message CAN2.0x506 msg2_506;    //命名CAN2 ID为506的报文
  //this is an example for a message that will be manipulated before it is sent on CAN2
 if (this.DIR==RX)           // if this message is received
   {
    if(this.CAN==1)
      {
        msg2_506=this;
        if (flag == 1) //如果flag=1,则修改信号值
        {
            msg2_506.INS_Pos.phys = msg2_506_INS_Pos;
            msg2_506.INS_Heading.phys = msg2_506_INS_Heading;
            msg2_506.INS_Status.phys = msg2_506_INS_Status;
            
        }

       output(msg2_506);    //输出报文
      }
   }
}

on sysvar SwitchButton::Switch_Flag //开关按钮系统变量
{
  flag = sysGetVariableInt(sysvar::SwitchButton::Switch_Flag);
  write("Now flag = %d!",flag);
}

on sysvar CAN2_msg506_Signal::CAN2_msg506_Pos //INS_Pos
{
  msg2_506_INS_Pos = sysGetVariableInt(sysvar::CAN2_msg506_Signal::CAN2_msg506_Pos);
}

on sysvar CAN2_msg506_Signal::CAN2_msg506_Heading //INS_Heading
{
  msg2_506_INS_Heading = sysGetVariableInt(sysvar::CAN2_msg506_Signal::CAN2_msg506_Heading);
}

on sysvar CAN2_msg506_Signal::CAN2_msg506_Status  //INS_Status
{
  msg2_506_INS_Status = sysGetVariableInt(sysvar::CAN2_msg506_Signal::CAN2_msg506_Status);
}

 三、结果展示

如果还有其他方法,欢迎一起交流。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Canoe作为一个网关,可以扮演连接不同网络、系统或设备的角色,建立起统一的通信桥梁。Quello是一个支持开放互操作性的Canoe网关,可以通过其灵活的软件定义网络(SDN)和网络函数虚拟化(NFV)能力,在多个网络层面之间进行流量转发和协议转换。 作为一个网关,Canoe可以实现以下功能: 1. 数据转发:Canoe作为一个中介,可以接收来自不同来源的数据,并将其转发到目标网络或设备。这种功能使得不同网络或设备之间的通信变得更加简单和高效。 2. 出入口控制:Canoe网关可以实现安全访问控制,对一些敏感的网络或设备实施权限管理。能够限制特定用户或设备的访问,并实施基于规则的策略,以确保网络安全。 3. 流量监测与管理:Canoe网关可以监测和管理经过网关的数据流量。它可以识别非法或异常流量,并采取相应的措施,如阻止恶意攻击或拒绝服务。 4. 协议转换:Canoe网关可以实现不同协议之间的转换,使得不同网络或设备可以无缝地进行通信。这有助于解决不同系统之间的兼容性问题,提高系统的互操作性。 5. 数据加密与解密:Canoe网关可以提供数据的加密和解密功能,确保在传输过程中数据的安全性和保密性。 总之,Canoe作为一个网关,可以连接不同网络、系统或设备,实现数据转发、出入口控制、流量监测与管理、协议转换和数据加密与解密等功能。这样的网关可以提高网络的可用性、安全性和互操作性,为各种应用场景提供更加稳定和高效的通信环境。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值