文章目录
- 前言
 - 一、环境搭建
 - 二、使用步骤
 - 三、执行结果
 - 总结
 
前言
本文章主要是记录汽车电子或嵌入式设备自动化测试中,部分场景需要控制被测设备的供电电源,以下就以常见的艾德克斯程控电源为例,分享如何通过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语言控制程控电源的方法。


![[Spring Boot 5]安全管理](https://img-blog.csdnimg.cn/b5117085acbb4d6d811e4de48fa44d78.png)





![[Flask]Flask零基础项目---登录demo](https://img-blog.csdnimg.cn/7c054f28a5b343a7a091126b6288d278.png)










