文章目录
- 前言
- 一、环境搭建
- 二、使用步骤
- 三、执行结果
- 总结
前言
本文章主要是记录汽车电子或嵌入式设备自动化测试中,部分场景需要控制被测设备的供电电源,以下就以常见的艾德克斯程控电源为例,分享如何通过Python来控制程控电源。
一、环境搭建
1.Python安装
安装python3.8版本
安装串口通信库:pip install pyserial==3.5
serial模块简介
串口(serial),全称串行通信接口或串行通讯接口,是一种常用于电子设备间通讯的全双工扩展接口
串行通信:串口通讯的技术基础,指一位一位地按顺序传送数据。其特点是线路简单,只需一对传输线,即可实现双向通信,大大降低成本。适用于远距离通信,但速度较慢;
pyserial为python中处理串口通讯的一个模块名
pyserial官方介绍文档
常用方法:
ser.isOpen() 查看端口是否被打开
ser.open() 打开端口
ser.close() 关闭端口
ser.read() 从端口读字节数据。默认1个字节。
ser.read_all() 从端口接收全部数据。
ser.write(“hello”) 向端口写数据。
ser.readline() 读一行数据。
ser.readlines() 读多行数据。
in_waiting() 返回接收缓存中的字节数。
flush() 等待所有数据写出。
flushInput() 丢弃接收缓存中的所有数据。
flushOutput() 终止当前写操作,并丢弃发送缓存中的数据。
2.安装程控电源串口调试工具
二、使用步骤
1.通过串口调试工具获得程控电源操作指令
设置远程模式:AA 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CB
设置电源ON:AA 00 21 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC
设置电源OFF:AA 00 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CB
设置输出电压为12V:AA 00 23 E0 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DB
设置输出电流为5A:AA 00 24 88 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 69
读取电源的电流、电压、和电源状态:AA 00 26 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D1
2.Python代码
# -*- coding: utf-8 -*-
import serial.tools.list_ports
def str_turn_16(str):
"""字符串转16进制"""
m = [str[i - 2:i] for i in range(len(str), 0, -2)]
n = ''
for i in m:
n += i
odata = 0
for i in n:
tmp = ord(i)
if tmp <= ord('9'):
odata = odata << 4
odata += tmp - ord('0')
elif ord('A') <= tmp <= ord('F'):
odata = odata << 4
odata += tmp - ord('A') + 10
return odata
def write_recv(send):
"发送指令并返回结果"
ser.write(send) # 项串口发送数据
return ser.read(26) # 获取串口数据
if __name__ == '__main__':
send_data1 = bytes.fromhex('AA 00 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CB') # 设置远程模式
send_data2 = bytes.fromhex('AA 00 21 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC') # 设置电源ON
send_data3 = bytes.fromhex('AA 00 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CB') # 设置电源OFF
send_data4 = bytes.fromhex('AA 00 23 E0 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DB') # 设置输出电压为12V
send_data5 = bytes.fromhex('AA 00 24 88 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 69') # 设置输出电流为5A
send_data6 = bytes.fromhex('AA 00 26 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D1') # 读取电源的电流、电压、和电源状态
ser = serial.Serial("com2", 9600) # 设置串口号、波特率
if ser.is_open:
write_recv(send_data1) # 开启远程模式
write_recv(send_data2) # 电源ON
write_recv(send_data4) # 设置电源电压为12V
write_recv(send_data5) # 设置电源电流为5A
for i in range(1): # 设置读取次数
return_data = write_recv(send_data6) # 读取电源的电流、电压、和电源状态
str_return_data = str(return_data.hex()).upper() # bytes转16进制
print("实际输出电流:%.2f A" % float(str_turn_16(str_return_data[6:10]) / 1000))
print("实际输出电压:%.2f V" % float(str_turn_16(str_return_data[10:18]) / 1000))
power_status = bin(int(str_turn_16(str_return_data[18:20])))
print("电源输出状态(0为关闭,1为开启):%s" % power_status[9])
print("电源过热状态(0为关闭,1为开启):%s" % power_status[8])
print("电源输出模式(1为CV模式,2为CC模式,3为Unreg模式):%s" % power_status[6:8])
print("风扇转速(0时风扇不转,5时转速最大):%s" % power_status[3:6])
print("操作状态(0为面板操作模式,1为PC操作模式):%s" % power_status[2])
print("设定电流值:%.2f A" % float(str_turn_16(str_return_data[20:24]) / 1000))
print("最大电压设定值:%.2f V" % float(str_turn_16(str_return_data[24:32]) / 1000))
print("设定电压值:%.2f V" % float(str_turn_16(str_return_data[32:40]) / 1000))
ser.close()
三、执行结果
总结
嵌入式设备自动化测试过程中都会涉及到程控电源的控制,以上只是总结了电源控制的基础用法,在实际项目中可根据项目情况加以封装,后续再分享CAPL语言控制程控电源的方法。