文章目录
- 实验目的
- 温度控制器需求文档及测试要求
- 环境搭建
- 实验内容
- 温度采集处理功能测试
- 加热棒输出电压测试
- 散热风扇
- 温度传感器输入接口(Senser_JK)
- 控制加热棒输出接口(Heater_JK)
- 控制散热风扇输出接口(Fan_JK)
- 温控稳定时间性能需求(Control_XN)
- 最终测试结果
实验目的
本次测试对象是温度控制器。
温度控制器需求文档及测试要求
环境搭建
解压 vspd.rar 文件,打开 vspdxp_install 进行安装
实验内容
点击“打开项目”,打开esi文件
打开 vspdconfig
根据需求文档,使用vspd绑定对应的串口
创建3对串口,5和6一对,7和8一对,9和 10一对
打开待测件
然后点确定
打开ETest,点环境设置然后点确定(环境设置时直接确定,不需要手动更改)
成功后如图
温度采集处理功能测试
温度采集处理的示例代码已经给出了,点击ETest右侧的“项目->测试目录->功能测试->温度采集处理”进入代码
# coding:utf-8
def Test(arg,exp):CH_232_温度传感器.Clear()Protocol_温度传感器.温度值.Value = arg[1]bool=Protocol_温度传感器.Write()print '第%d次期望显示温度值%d'%(arg[0], exp[0])API.Common.Timer.Normal.Sleep(1000)Standard_Test(Test)
先点击运行
再点击开始
可以看到数据了
下面给出具体的测试方法
- 首先看功能需求
- 点击ETest右侧的“项目->测试目录->功能测试->温度采集处理”,再点击“测试数据”,向里面输入自己的测试数据
- 点击“测试任务”,编写自己的测试脚本
# coding:utf-8
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
import Manu
def Test(arg,exp):# 给字段复制Protocol_温度传感器.温度值.Value = arg[1]# 协议写bool=Protocol_温度传感器.Write()show = []str0 = "序号: " + str(arg[0])str1 = "设定温度:" + str(arg[1])str2 = "预期温度:" + str(exp[0])# str0, str1, str2分别会被显示在菜单的第一、二、三行show.append(str0)show.append(str1)show.append(str2)# 弹出对话框# 点击确定,返回值为true# 点击否定,返回值为falseManu.Check(show)### 入口
Standard_Test(Test)
- 打开测试文件中提供的SensorControl.exe
直接点击“确定”,然后点“开始”
- 回到ETest,点击上方的“运行”(如果运行是灰色的,就需要先点击旁边的“环境设置”,等待一会,然后就能点运行了)
这时候弹出了对话框,就可以将对话框中的“设定温度”、“预期温度”和温度控制器的“采集温度”进行对比,从而得到测试结果,找到问题
加热棒输出电压测试
- 首先看功能需求
- 右键“功能测试”,点击“新建测试用例->TCPython”,输入测试名称“加热棒”,然后写好测试代码,下面的代码是不读取“测试数据”的写法
# coding:utf-8
import math
import Manudef Volt(j, arr):Dp = 0.05Di = 0.1Dd = 0.1Td = 20 # 设定温度ek = Td - arr[j]if j == 0:ek1 = Td - 15ek2 = Td - 15elif j == 1:ek1 = Td - arr[j - 1]ek2 = Td - 15else:ek1 = Td - arr[j - 1]ek2 = Td - arr[j - 2]print "ek = %d, ek1 = %d , ek2 = %d" % (ek, ek1, ek2)# 电压变化量result = Dp * (ek - ek1) + Di * ek + Dd * (ek - 2 * ek1 + ek2)print "result = %f" % result return resultdef init(): # 初始化待测件加热棒输出为已知状态Protocol_温度传感器.温度值.Value = 15bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(200)Protocol_温度传感器.温度值.Value = 15bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(1000)def Test():print 'Test start'# 初始化电压输出为已知状态init() # 清理通道seekresult=CH_232_加热棒.Clear()# 等待新的数据包Protocol_加热棒.BlockRead()# 获取当前的电压v = Protocol_加热棒.加热棒输出电压.Value# 设定温度Td = 20# 预期采集电压列表T = [15, 15, 15 , 15, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23]for i in range(len(T)):print "------------------------------"print "第%d次,当前采集温度值: %f" % (i, T[i])# 写入新一次的温感数据Protocol_温度传感器.温度值.Value = T[i]bool=Protocol_温度传感器.Write()# 清理加热棒输出通道seekresult=CH_232_加热棒.Clear()Protocol_加热棒.BlockRead()v = v + Volt(i, T)# 负值截断处理if v < 0:v = 0print "第%d次期望输出电压值为: %f, 实际输出电压值为: %f, 误差为: %.3f" % (i + 1, v, Protocol_加热棒.加热棒输出电压.Value, v - Protocol_加热棒.加热棒输出电压.Value)print "------------------------------"API.Common.Timer.Normal.Sleep(2000)Test()
如果是读取测试数据,那么代码如下
import math
import Manudef VK(t, td, e1, e2):# t -> 当前温度# td -> 设定温度Dp = 0.05Di = 0.1Dd = 0.1e = td - tresult = Dp * (e - e1) + Di * e + Dd * (e - 2e1 + e2)return resultdef Test(arg,exp):global e1 # 上一次的温差, 设定温度-当前温度global e2 # 上上次的温差,global V1 # 当前时刻的输出电压值# 通道清理,防止上一次的运行结果在通道中阻塞,影响本次效果seekresult=CH_232_加热棒.Clear()seekresult=CH_232_温度传感器.Clear()# 给温度采集器赋值,当前温度Protocol_温度传感器.温度值.Value = arg[2]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(1000)# arg[0] -->序号# arg[1] -->设定温度# arg[2] -->当前温度# 第一次改变温度if arg[0] == 1:e1 = arg[1] - arg[2]# 第二次改变温度if arg[0] == 2:e2 = arg[1] - arg[2]Protocol_加热棒.BlockRead()V1 = Protocol_加热棒.加热棒输出电压.Value# 三次以上 if arg[0] > 2:V = VK(arg[2], arg[1], e1, e2) + V1print Vshow = []str = "设定温度为:%d, 室温为:%f" % (arg[1], arg[2])show.append(str)str = "预期电压为: %f" % (V)show.append(str)show.append("界面电压显示是否正确?")passed = Manu.Check(show)e2 = e1e1 = arg[1] - arg[2]# 协议读,读取输出给加热棒的数据包Protocol_加热棒.BlockRead()# 获取字段,当前电压,作为下一次的V(k-1)V1 = Protocol_加热棒.加热棒输出电压.ValueStandard_Test(Test)
- 如果是读取“测试数据”的写法,那么就需要添加数据。点击“测试数据”,在“输入参数”下方的空白行处右键,点击“添加输入参数”
比如要新建名称为“序号”的一列,那么就这样填
同样的方法,在输入参数处添加“设定温度”、“采集温度”,然后点击“添加行”,就可以添加数据了
散热风扇
- 首先看功能需求
- 新建项目,写测试代码
# coding:utf-8
############标准测试模板#######################
## Test:测试数据执行函数体,【测试数据】每一行数据调用一次Test
## arg:输入参数
## exp:预期输出
import Manudef Test(arg,exp):# 写入数据前,先清理通道seekresult=CH_232_温度传感器.Clear()seekresult=CH_232_散热风扇.Clear()# 写入第一次温度Protocol_温度传感器.温度值.Value = arg[1]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(500)# 写入第二次温度Protocol_温度传感器.温度值.Value = arg[2]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(500)CH_232_散热风扇.Clear()# 写入第三次温度Protocol_温度传感器.温度值.Value = arg[3]bool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(500)# 确保控制散热风扇的指令能够正常发出去Protocol_散热风扇.BlockRead()show = []str = '第%d次期望散热风扇输出值:%s,实际输出值:%d' % (arg[0], exp[0], Protocol_散热风扇.操作指令.Value)show.append(str)Manu.Check(show)## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)
- 构建测试数据
- 先启动SensorControl.exe,再运行测试程序
对比两个程序的输出即可
温度传感器输入接口(Senser_JK)
- 首先看接口需求
- 构建测试数据
- 代码
# coding:utf-8
import Manudef Test(arg,exp):# 先清理温感通道seekresult=CH_232_温度传感器.Clear()# 分割字符串为列表,按照空格str = arg[0].split(' ')data = []for i in str:# 将16进制整型的字符串转化为整型表示# 将16进制字符串转化为10进制整型表示data.append(int(i, 16))# 通道写入数据包bool=CH_232_温度传感器.Write(data)show = []show.append(exp[0])Manu.Check(show)## Standard_Test:标准测试的方法入口,使用【测试数据】表循环调用Test方法
Standard_Test(Test)
控制加热棒输出接口(Heater_JK)
- 首先看接口需求
- 测试代码
#设定温度10℃
def Main():print 'Hello world'seekresult=CH_232_加热棒.Clear()seekresult=CH_232_温度传感器.Clear()Protocol_温度传感器.温度值.Value = 20 #不加热bool=Protocol_温度传感器.Write()Protocol_加热棒.BlockRead()if Protocol_加热棒.包头.Value != 0xFFFA:print '包头错误,错误的包头为%x'%Protocol_加热棒.包头.Valueif Protocol_加热棒.数据类型1.Value != 0x02:print '执行数据错误,错误的数据类型1为%d'%Protocol_加热棒.数据类型1.Valueif Protocol_加热棒.数据类型2.Value != 0x11:print '工作电机组错误,错误的数据类型2数据为%x'%Protocol_加热棒.数据类型2.Valueif Protocol_加热棒.数据长度.Value != 4:print '数据长度错误,错误的长度值为%d'%Protocol_加热棒.数据长度.Valueif Protocol_加热棒.检验.Checked != True:print '检验值错误,错误的校验值为%x'%Protocol_加热棒.检验.Valueif Protocol_加热棒.包尾.Value !=0x0F:print '包尾错误,错误的包尾为%x'%Protocol_加热棒.包尾.ValueProtocol_温度传感器.温度值.Value = 5 #加热bool=Protocol_温度传感器.Write()Protocol_加热棒.BlockRead()if Protocol_加热棒.包头.Value != 0xFFFA:print '包头错误,错误的包头为%x'%Protocol_加热棒.包头.Valueif Protocol_加热棒.数据类型1.Value != 0x02:print '执行数据错误,错误的数据类型1为%d'%Protocol_加热棒.数据类型1.Valueif Protocol_加热棒.数据类型2.Value != 0x11:print '工作电机组错误,错误的数据类型2数据为%x'%Protocol_加热棒.数据类型2.Valueif Protocol_加热棒.数据长度.Value != 4:print '数据长度错误,错误的长度值为%d'%Protocol_加热棒.数据长度.Valueif Protocol_加热棒.检验.Checked != True:print '检验值错误,错误的校验值为%x'%Protocol_加热棒.检验.Valueif Protocol_加热棒.包尾.Value !=0x0F:print '包尾错误,错误的包尾为%x'%Protocol_加热棒.包尾.ValueMain()
控制散热风扇输出接口(Fan_JK)
- 首先看接口需求
- 测试代码
# 设定温度为10
def Main():seekresult=CH_232_温度传感器.Clear()seekresult=CH_232_散热风扇.Clear()# 写入初始状态,保证风扇不转动for i in [8, 8, 8]:Protocol_温度传感器.温度值.Value = ibool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(100)# 散热风扇阻塞获取数据包Protocol_散热风扇.BlockRead()if Protocol_散热风扇.包头.Value != 0xFFFA:print "包头错误,错误的包头为: %x" % Protocol_温度传感器.包头.Valueif Protocol_散热风扇.数据类型1.Value != 0x02:print "数据类型1错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型1.Valueif Protocol_散热风扇.数据类型2.Value != 0x22:print "数据类型2错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型2.Valueif Protocol_散热风扇.数据长度.Value != 1:print "数据长度错误,错误的数据长度为: %d" % Protocol_散热风扇.数据长度.Valueif Protocol_散热风扇.检验.Checked != True:print "检验和错误,错误的检验值为: %x" % Protocol_散热风扇.检验.Valueif Protocol_温度传感器.包尾.Value != 0x0F:print "包尾错误,错误的包尾为: %x" % Protocol_散热风扇.包尾.Valueprint "---------------------------------------------------------------------------------"# 写入初始状态,保证散热风扇工作,来判断数据包是否正确seekresult=CH_232_散热风扇.Clear()for i in [15, 15, 15]:Protocol_温度传感器.温度值.Value = ibool=Protocol_温度传感器.Write()API.Common.Timer.Normal.Sleep(100)Protocol_散热风扇.BlockRead()if Protocol_散热风扇.包头.Value != 0xFFFA:print "包头错误,错误的包头为: %x" % Protocol_温度传感器.包头.Valueif Protocol_散热风扇.数据类型1.Value != 0x02:print "数据类型1错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型1.Valueif Protocol_散热风扇.数据类型2.Value != 0x22:print "数据类型2错误,错误的数据类型为: %x" % Protocol_散热风扇.数据类型2.Valueif Protocol_散热风扇.数据长度.Value != 1:print "数据长度错误,错误的数据长度为: %d" % Protocol_散热风扇.数据长度.Valueif Protocol_散热风扇.检验.Checked != True:print "检验和错误,错误的检验值为: %x" % Protocol_散热风扇.检验.Valueif Protocol_温度传感器.包尾.Value != 0x0F:print "包尾错误,错误的包尾为: %x" % Protocol_散热风扇.包尾.ValueMain()
温控稳定时间性能需求(Control_XN)
- 首先看性能需求
- 测试代码
# coding:utf-8
#设定温度为10℃,初始恒温箱外部温度值为3℃
def Main():print 'Hello world'import timeTc = 10 #设定温度T0 = 0 #初始恒温箱外部温度值T = T0n = 0Fs = 0Va = 0 #上一次的输出电压time0 = time.time()while 1:seekresult=CH_232_温度传感器.Clear()seekresult=CH_232_加热棒.Clear()seekresult=CH_232_散热风扇.Clear() Protocol_温度传感器.温度值.Value = Tbool=Protocol_温度传感器.Write()Protocol_加热棒.BlockRead()Protocol_散热风扇.BlockRead()V = Protocol_加热棒.加热棒输出电压.Valueif V<0:V=0# 计算加热棒的加热量Qi = V*V *0.2if Protocol_散热风扇.操作指令.Value == 1: #风扇打开Fs =2elif Protocol_散热风扇.操作指令.Value == 0: #风扇关闭Fs = 0# 计算散热风扇的散热量Qo = 0.1*(T - T0) + Fs#Qo = Fs# 温度的变化量T = T+(Qi-Qo) #下次输出温度值if abs(T - Tc) < 0.5:n=n+1else:n=0# 当超过10次时if n >=10:time1 = time.time()print '稳定时间为%d'%(time1-time0)if time1-time0 <=60:print '温控稳定时间性能测试合格'break# 当始终不能达到十次time2 = time.time()# 超时if time2-time0>60:print '温控稳定时间性能测试不合格'breakAPI.Common.Timer.Normal.Sleep(1000)Main()