程控电源CANoe上位机面板(CAN\ETH测试、RS232串口通信、编写设计思路)

news/2024/10/31 1:25:18/

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


http://www.ppmy.cn/news/456012.html

相关文章

安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (四)平坦度检测的程控实现

安捷伦or是德信号源频谱仪操作&#xff1a;从程控到自动测试&#xff08;四&#xff09;平坦度检测的程控实现 一、概述 目前&#xff0c;对于射频模块的调试与测试&#xff0c;国内大多数的厂商(特别是中小型企业)均是通过最原始的手工调测方式&#xff0c;需要调试人员手动设…

IIR数字程控滤波器

该作品为2007年全国电子设计大赛D题&#xff0c;题目要求如下&#xff1a; 这个东西的目的就是做一个截止(中心)频率可调&#xff0c;通带类型可调(低通&#xff0c;高通)的程控滤波器&#xff0c;大二上学期用运放搭的状态变量滤波器实现过该功能&#xff0c;这次打算学习一…

python控制程控电源_程控电源原理_程控电源的用途浅谈

程控电源简介 程控电源指通过外部控制来设定输出电压、输出电流的稳压、稳流或稳压/稳流的电源。程控河试电源采用微机控制&#xff0c;技术先进&#xff0c;全程控、全按键操作&#xff0c;体积小、重量轻、携带方便&#xff0c;既可用于实验室&#xff0c;也可以现场使用。 程…

MAX262程控滤波器

一、简介。 MAX262内部有两个独立的程控滤波器&#xff0c;均可设置低通、高通、带通、带阻、全通&#xff0c;中心频率和Q值可调。 中心频率有64个档位可调&#xff0c;Q值有128个档位可调。 中心频率f0由采样频率FCLK和FN决定&#xff0c;最大不超过140KHz。 Q值由QN决定…

c#集成程控电源SCPI 命令( 德国EA)

public class EAPowerControl { #region 常用变量 /// <summary> /// 输出日志接口 /// </summary> private IPrintAction printAction; private static readonly string readError "SYST:ERR?"; // 读取错误…

分级输出四路带保护程控电源设计与实现

目录 中文摘要………………………………………………….………………………………………….…VI 外文摘要………………….…………………………….………………………………………….…VII 1 引言 1 1.1 选题背景 1 2 系统综述 2 2.1文献综述 2 2.1.1稳定电压输出与可调电压技…

ArduPilot开源代码之AP_InertialSensor_Backend

ArduPilot开源代码之AP_InertialSensor_Backend 1. 源由2. 设计3. 实例BMI2703.1 AP_InertialSensor_BMI2703.2 probe3.3 init3.4 start3.5 read_fifo3.6 update 4. 总结5. 参考资料 1. 源由 惯性传感器是飞控关于姿态最重要的一个传感器。从复杂度角度看&#xff0c;除了数据…

python控制程控电源_如何对程控电源进行编程控制

代码解读。以上代码示范了如何使用visa API连接并控制仪器读写。 line 1~3 包含必须的头文件和库文件 line 8~11 定义变量&#xff0c;ViStatus用来检查仪器初始化及读写状态 ViSession 用来定义Visa库资源句柄 ViUint32 用来定义读写字符长度 ViBuf 用来定义读取仪器缓冲区 Li…