CAPL编程实例(如何实现固定ID范围报文的循环发送,以达到期待的总线负载率)

此代码实现以下功能

1:实现固定ID报文如0x100-0x200的报文发送,并可以设置一个期望达到的总线负载率。

2:检测总线负载率的检测,并可以调节总线负载率。

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

variables
{
  message 0x601 Msg_0x601=    //注意,代码自定义Message可以与NetWork(网络)绑定。 如使用以                         //            下格式message CAN1.0x601 Msg_0x601.CAN1就是NetWork(网络)名称
  {
    FDF=1,
    BRS=1,
    DLC=8,
    Byte(0)=0,
    Byte(1)=0,
    Byte(2)=0,
    Byte(3)=0,
    Byte(4)=0,
    Byte(5)=0,
    Byte(6)=0,
    Byte(7)=0
      
   };
 
msTimer CycleTime_LRSRR_Load;           /*定义一个计时器,用来循环发送*/

float  CheckBusLoad;                    //用来获取总线负载率
const float   SetBusLoad=60;            //预先设定一个总线负载率,如60
const float   loadMistake =2;           //预先设定一个总线负载率误差,如2
word TimePar_1=60;                      //定义一个初值,用于计时器的定时初值
int LoopVar_1_0x601=0;
const byte AppChnel=3;  

on  sysvar LRSRR_SYSVAR::RLSRR_CAN_BusLoad_Begin_Flag      //设置一个系统变量用来开启定时器
{ 
  if(@sysvar::LRSRR_SYSVAR::RLSRR_CAN_BusLoad_Begin_Flag)  //如果判断条件!=1,则计时器不会开启,计时器不开启,报文就不会循环发送
  {
  setTimer(CycleTime_LRSRR_Load,TimePar);   //初始化,计时器
  }  
}
on timer CycleTime_LRSRR_Load          //计时开始

{ 
   if(@sysvar::LRSRR_SYSVAR::RLSRR_CAN_BusLoad_Begin_Flag)
  {
  setTimer(CycleTime_LRSRR_Load,TimePar);  //重置计时器
 
  
  
  while((Msg_0x601.id)<0x632)
    {
    output(Msg_0x601);
    
    Msg_0x601.id+=1;
    output(Msg_0x601);
    CheckBusLoad=canGetBusLoad(3);    //canGetBusLoad()是检测函数,3代表ApplicationChannel:can3
    write("LookLRSRR_BusLoad%f",BusLoad);
if(CheckBusLoad<=(SetBusLoad-loadMistake))      //如果总线负载率小于设置,定时参数减小,增大负载率
    TimePar_1-=1;
    else if(CheckBusLoad>=(SetBusLoad-loadMistake))      //如果总线负载率大于设置,定时参数增大,减小负载率
    TimePar_1+=1;



    }
  }
  //Count_Trans=0;
  Msg_0x602.id=0x602;
  
}

/*整个过程中,实现错误帧检测*/
on errorFrame
{
  @sysvar::LRSRR_SYSVAR::ErrFlag=1;  //检测周期内,实时检测,当出现错误帧则将系统变量错误标志位置1
  write("LRSRR_SYSVAR::ErrFlag Value:%d",@sysvar::LRSRR_SYSVAR::ErrFlag);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值