CANoe上位机面板:CAN/ETH测试、RS232串口通信及编写设计思路

程控电源CANoe上位机面板

  • 编写此面板的目的
  • 编写思路
  • 一、通讯方式
  • 1、RS232串口连接
  • 2、CANoe与RS232串口相关的函数
  • 3、帧格式命令字
  • 4、校验码
  • 二、面板设计
  • 1、所需文件说明
  • 2、导入使用
  • 3、功能模块化
  • 3.1 初始化
  • 3.2 端口设置
  • 3.3 控制方式
  • 3.4 脉冲程序
  • 3.5 电压电流状态
  • 3.6 运行设置的步骤电压
  • 3.7 时间检测
  • 3.8 扫描
  • 三、总结
  • 编写此面板的目的

    在对ECU电控单元做CAN或者ETH的通信测试时,有时需要控制电源来对ECU的状态进行更改。故在CANoe上做此程控电源面板,方便为一些需要用到电源的测试用例做自动化。

    编写思路

    首先确定下控制的对象为IT6800系列的程控电源。接着确定通信方式与通信帧格式,这里选择RS232串口通信。然后根据需求设计面板及编写通信逻辑的程序。

    一、通讯方式

    1、RS232串口连接

    下图是IT6800程控电源通讯模块介绍,有RS232串口线连接好电脑后,需要安装IT-E132 USB Driver串口驱动,驱动安装包名一般为PL2303_Prolific_DriverInstaller.exe。

    2、CANoe与RS232串口相关的函数

    连接好后无需配置CANoe,需在脚本里使用接口函数对RS232进行初始化。下面图2是CANoe自带的RS232发送数据的接口函数,参数代表的意思如表。

    /****************初始化串口****************/
    InitSerialPort(int comport,int baudarate)
    {
      Rs232Open(comport)	//打开端口
      Rs232Configure(comport, baudarate, 8, 1, 0)	//设置波特率
      Rs232SetHandshake(comport, kHANDSHAKE_DISABLED, 0, 0, 0, 0)	//设置握手方式
      Rs232Receive(comport, gReceiverCallbackBuffer, size)	//接受成功返回1
    }
    
    /****************发送数据函数****************/
    dword RS232Send( dword port, byte buffer[], dword number )
    
    参数 意义
    port 端口号
    buffer 发送的数据数组
    number 发送的数据数组长度

    发送数据时回调用下面这个回调函数,可在回调函数里做些打印发送数据处理,方便调试。

    /****************发送数据回调函数****************/
    RS232OnSend( dword port, byte buffer[], dword number )
    {
      hextostr(buffer);		//创建了一个数据转字符串的函数
      if(debug)			    //debug打开时进行打印buffer转换成的字符
      {
        write("Transmission of %d bytes from port %d completed !", number, port);
        write("Transmiss content %s",s);
      }
    }
    

    收到数据时将会调用下方函数,添加了对接收数据的一些处理进行打印。

    /****************接受数据回调函数****************/
    RS232OnReceive(dword port, byte buffer[], dword number)
    {
      byte i,j ;
      //byte temp[26];
      while(i < number)
      { 
        if(buffer[i] == 0xAA)	//因为通讯帧的同步头为0xAA,所以通过对0xAA判断是否是帧头
        {
          j = 0;
        }
        receivedata[j++] = buffer[i++];	//存下接收到的一帧数据
      }
      i = 0;
      if(j==26)		//帧长度为固定的26字节,所以从0xAA开始计数26字节后即一帧接收完毕
      {
        hextostr(receivedata);
        if(debug)
        {
          write("Receiver for serial port %d successfully set.",ComPort); 
          write("Receive content %s",s);
        }
      }
    }
    

    如通信错误将会回调下方函数,errorFlags第0位置1为发送错误,第1位置1为接收错误。

    /****************通讯错误回调函数****************/
    RS232OnError(dword port, dword errorFlags)
    {
       if ( errorFlags & 1 )
          writeLineEx(0,3,"send failed");
       if ( errorFlags & 2 )
          writeLineEx(0,3,"receive failed");
    }
    

    3、帧格式命令字

    在上方有提到过通讯帧的同步头为0xAA,占一个字节,总长度为26字节。电源地址占一个字节,命令字占一个字节,命令字不同数据代表不同的命令内容(如设置0x23代表设置电压,0x24代表设置电流),4-25字节为相关内容,如电压或电流的大小,校验码占一个字字节。

    4、校验码

    校验码,是前25 个字节累加和。当校验位超过255,减去256 后的余数转化为16进制,代码如下。

    /****************校验码计算****************/
    byte Checksum_Calcu(byte data[])
    {
      byte i;
      word j;
      for(i=0; i < elcount(data)-1 ; i++)
      {
        j += data[i]; 
      }
      if( j > 0xFF)
      {
         j -= 0x0100;
         j %= 0x0100;
      }
      data[25] = j;
      i = 0;
      j = 0x00;
      return data[25];
    }
    

    二、面板设计

    1、所需文件说明

    文件 用处
    COMConfig.ini 初始化配置文件
    PPS.cfg Canoe工程文件
    PPS.vsysvar 面板使用的相关系统变量
    PPS.xvp 面板设计文件
    PPS.can 控制电源CAPL代码

    2、导入使用

    1、可用PPS.cfg工程,也可在已有工程导入面板、系统变量和CAPL脚本。如在已有工程导入,需先将COMConfig.ini文件复制到当前工程所在目录。

    2、在已有工程添加节点,选择PPS.can

    3、选择PPS.vsysvar导入系统变量


    4、选择PPS.xvp导入面板


    3、功能模块化

    将系统变量、面板、CAPL脚本均以功能模块划分,互相对应,方便大家根据需求进行更改。大致分为8部分功能,下面进行简要的介绍。



    3.1 初始化

    点击运行,面板从COMConfig.ini读取上次数据对面板的端口、波特率、输出电压、输出电流、最大电压进行初始化。点击保留当前数据,会将更改过的输出电压、输出电流、最大电压数据写进COMConfig.ini,覆盖上次数据。CAPL脚本中对应初始化数据、保留当前数据模块。

    3.2 端口设置

    这里选择对应com口和波特率,以IT6832电源为例,默认9600,CAPL脚本对应端口设置部分。

    3.3 控制方式

    PC端控制即远程模式控制电源,面板控制即只能通过电源上按钮控制。
    输出控制选择打开即电源开,关闭即电源关闭。

    3.4 脉冲程序

    先按电压1停留设置时间,再按电压2停留设置时间

    3.5 电压电流状态

    红框部分电压电流会读取当前电源的实际电压电流显示。

    3.6 运行设置的步骤电压

    需先填写步骤,填写好后,点击运行程序的运行,会按步骤的顺序从小到大运行,输出相关电压电流并停留对应时间。如下图,先输出12V保持5s,再输出3V保持4s,再输出5V保持3s。

    3.7 时间检测

    起始电压\起始电流即要开始记录时间的时间点,截止电压\截止电流即要停止记录时间的时间点,点击检测即从起始电压\起始电流开始记录。

    3.8 扫描

    如下图,先以开始值11.5V输出,保持延迟值3s后,以步进值递减或递增,此处是递减,减了步进值后保持延迟值,直到递减等于停止值,完成一个扫描。

    三、总结

    知道在CANoe使用RS232的接口函数,以及将功能分模块进行设计,剩下的部分则是用CAPL语言编写脚本实现各部分功能的逻辑。本文暂时只对程控电源上位机面板框架部分进行描述。

    物联沃分享整理
    物联沃-IOTWORD物联网 » CANoe上位机面板:CAN/ETH测试、RS232串口通信及编写设计思路

    发表回复