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