淘先锋技术网

首页 1 2 3 4 5 6 7

编写此面板的目的

在对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.cfgCanoe工程文件
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语言编写脚本实现各部分功能的逻辑。本文暂时只对程控电源上位机面板框架部分进行描述。