CAN:CANape使用Function处理数据

1 功能介绍

      CANape与INCA类似,可用于车辆VCU的标定和数据采集。这里介绍辅助功能function and script,习惯称之为脚本(实际为函数和脚本)。先介绍function,可以实现简单信号a和信号b乘法,例如做能量流分析时计算功率(转速与扭矩乘)。该功能前期有专业人员做支援,当时问其编制方法,其回答看帮助文件,现在没有支援则自己动手。

      功能描述:电压信号阶梯增加,每次保持1.5s,测量后0.5s位移平均值(假设信号步长10ms,需要取样50个点,但该脚本中点的数目为10个)。图示如下:

功能示意图

2 初版程序

      刚开始看CANape中Function definition→Library function,自带function MovingAverage,没理解其思路,遂自编一个,能正常编译和运行(未用Canape实测,其语法结构类似C语言):

	//名称:  Signal_Average.cne
    //作者:  Morven_Xie
    //版本:  1.0
    //时间:  2020/8/19 23:11
    //功能:  求取MDF文件中信号平均值
    //简介:  对信号的10个点求取平均值
    //Email:  morven_xie@163.com

function Signal_Average_Last100ms(var signal)
{
  unsigned int data=1;
  double sum=0;
  float average;
  if (data)
  {
    data=0;
    long i;
    Print("Take action,Script starts/n");
    for (i=sizeof(signal)-1;i>sizeof(signal)-11;i--)
    sum=sum+signal[i];

    Write("i= %d ,signal[i]= %f ,sum= %0.2f ",i,signal[i],sum);

    }
average=sum/10;
Write("Average = %f ",average);

  return average;
}

      数据使用CANape帮助文件中的MDF,运行Function后write窗口内容如下:

CANape案例文件

      运行结果:

            8-19-2020 23:29:29.661766 File ‘CANape.MDF’: Data for display of envelope curve in temporary file created, original file has not been replaced according to global option.
            8-19-2020 23:29:34.922925 Due to the version of the currently installed Windows 64 bit operating system there can be problems when creating error report files (dump files *.dmp) in case of an application crash (-> dump file probably not created). To fix this problem, please install the Microsoft hotfix KB976038 (web link: http://support.microsoft.com/kb/976038/en-us) or install a current Windows service pack.
            8-19-2020 23:30:36.757768 Take action,Script starts/n
            8-19-2020 23:30:36.757999 i= 3586 ,signal[i]= -9.984415 ,sum= -99.20
            8-19-2020 23:30:36.758034 Average = -9.919868
            8-19-2020 23:30:36.758097 Average = -9.919868
            8-19-2020 23:30:36.758129 Average = -9.919868
            8-19-2020 23:30:36.758157 Average = -9.919868
            8-19-2020 23:30:36.758185 Average = -9.919868
            8-19-2020 23:30:36.758211 Average = -9.919868
            8-19-2020 23:30:36.75824 Average = -9.919868
            8-19-2020 23:30:36.758269 Average = -9.919868
            8-19-2020 23:30:36.758314 Average = -9.919868
            8-19-2020 23:30:36.758347 Average = -9.919868
            8-19-2020 23:30:36.758376 Average = -9.919868
            8-19-2020 23:30:36.758408 Average = -9.919868
            8-19-2020 23:30:36.758441 Average = -9.919868
            8-19-2020 23:30:36.758474 Average = -9.919868
            8-19-2020 23:30:36.758507 Average = -9.919868
            8-19-2020 23:30:36.75854 Average = -9.919868
            8-19-2020 23:30:36.758573 Average = -9.919868
            ……

3 更新程序

      后对CANape自带脚本梳理,其方法更好,为方便理解,增加打印按钮。其优势是可以计算线段上所有的点。原理是每次计算10个数值,计算第11个时,加上第11个,减去第一个。

function FunctAverage_System(var signal)
{
  //! number of last measure values to be used for the calculation
  int smoothFactor = 10;  

  // local variables
  unsigned int first = 1;
  double lastValues[100];
  double sum;
  unsigned int i;
  unsigned int index;

  // initialize array with last values on start
  if (first) {
    first = 0;

    if (smoothFactor > 100) {
      write("Error: Maximum avarage window size is 100!\n");
      smoothFactor = 100;
    }

    sum = smoothFactor * signal;
    for (i = 0; i < smoothFactor; i++) {
      lastValues[i] = signal;
      Write("i= %d,data= %f",i,lastValues[i]);
    } 
    index = 0;
    return signal;
  }

  sum -= lastValues[index];
  Write("Signal= %f,lasrValue[index]= %f",signal,lastValues[index]);
  sum += signal;
  lastValues[index] = signal;
  if (++index >= smoothFactor) {
    index = 0;
  }
  return sum / smoothFactor;
}

      运行结果:

         8-19-2020 23:36:10.579441 i= 0,data= -4.811083
            8-19-2020 23:36:10.579481 i= 1,data= -4.811083
            8-19-2020 23:36:10.579497 i= 2,data= -4.811083
            8-19-2020 23:36:10.579508 i= 3,data= -4.811083
            8-19-2020 23:36:10.57952 i= 4,data= -4.811083
            8-19-2020 23:36:10.579531 i= 5,data= -4.811083
            8-19-2020 23:36:10.579543 i= 6,data= -4.811083
            8-19-2020 23:36:10.579554 i= 7,data= -4.811083
            8-19-2020 23:36:10.579565 i= 8,data= -4.811083
            8-19-2020 23:36:10.579576 i= 9,data= -4.811083
            8-19-2020 23:36:10.579604 Signal= -4.920971,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.57963 Signal= -4.920971,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579654 Signal= -5.138395,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579677 Signal= -5.138395,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579699 Signal= -5.352568,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579722 Signal= -5.458392,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579745 Signal= -5.563353,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579767 Signal= -5.563353,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579789 Signal= -5.770617,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579818 Signal= -5.872887,lasrValue[index]= -4.811083
            8-19-2020 23:36:10.579852 Signal= -5.974228,lasrValue[index]= -4.920971
            8-19-2020 23:36:10.579886 Signal= -6.074625,lasrValue[index]= -4.920971
            8-19-2020 23:36:10.579918 Signal= -6.174060,lasrValue[index]= -5.138395
            8-19-2020 23:36:10.579943 Signal= -6.174060,lasrValue[index]= -5.138395
            8-19-2020 23:36:10.579973 Signal= -6.369984,lasrValue[index]= -5.352568
            8-19-2020 23:36:10.579998 Signal= -6.466442,lasrValue[index]= -5.458392
            8-19-2020 23:36:10.580021 Signal= -6.561876,lasrValue[index]= -5.563353
            8-19-2020 23:36:10.580045 Signal= -6.561876,lasrValue[index]= -5.563353
            8-19-2020 23:36:10.580069 Signal= -6.749616,lasrValue[index]= -5.770617
            8-19-2020 23:36:10.580093 Signal= -6.749616,lasrValue[index]= -5.872887
            8-19-2020 23:36:10.580116 Signal= -6.933084,lasrValue[index]= -5.974228
            8-19-2020 23:36:10.58014 Signal= -7.023180,lasrValue[index]= -6.074625
……

      两种方法都能实现目标(average= -9.919868),运行结果示意图:

在这里插入图片描述

4 软件下载

      附:官网最新版本17附加诸多限制条件。习惯使用12版本,Vector官网历史版本下载网址:
      https://www.vector.com/int/en/products/products-a-z/software/canape/canape-history/?tx_vectorproducts_productdownload%5B%40widget_0%5D%5BcurrentPage%5D=6&cHash=d2639bf3a0011afdd64126b483913b27#c9976

>> 更多相关内容,点击Morven_Xie博客概览

  • 11
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值