这是武散人著《自拍教程》(自动化测试Python教程)系列第60篇文章。
重要提醒:
本案例涉及220v危险电压上电下电测试,存在安全风险,请切勿随意尝试!!!
案例故事 很多移动终端都不带电池,都是直接电源插头供电,
比如Android电视机(220v),小米小爱同学智能音箱(220v转5v的电源转换器),智能后视镜(12v)等智能终端设备,Android家庭信息机平板(5v),
还有电饭煲,微波炉,空调,台式电脑主机等220v的家用电器也是如此。
这些电子电器设备,肯定需要涉及异常断电测试,
如果手工模拟上电下电测试,人工拔插电源插头费时费力,
其实Python + 可编程继电器,可实现“电源开关”的上电下电功能。
可编程继电器开关介绍
其实是一台支持串口通讯的继电器开关设备,
其可编程,主要是支持串口命令输入。
可考虑用这款聚英 DAM1600C继电器控制,淘宝链接,
建议选“USB口+USB线+外壳” 248元,“电源”15元,
因为以上USB接口是RS485的继电器,其也是串口的一种,不容易烧掉,稳定性高很多,
RS232的串口,很容易烧掉,在给继电器异常断电过程中,就很容易烧掉。
其支持16路(即16个开关,即可同时控制16台电子电气设备一起进行上电下电操作),
另外继电器本身是需要供电的,产品上写的需要供7-30v的电即可,
一般建议用12v 2A的充电头(即电源)给继电器供电即可,
根据产品介绍,是最高支持250V 10A上电下电操作的,
比如Android智能电视机,普通家用电器等,用的都是是220v的电压。
但是...这毕竟是上电下电220v的电压,非必要请切勿尝试220v的上下电,
如实在是测试任务需要,请各位测试的同学务必注意自身安全!
我更建议在低于24V的以下研发设备上做上电下电测试:
测试设备名称
电压
车载设备,车载电信号
(比如acc on,CAN-High信号等)
大部分车是12V
少数车辆是24V
笔记本电脑(已用电源转换器)
20V
手机设备,智能音响笔记本电脑
(已用电源转换器)
5V
准备阶段
可编程继电器是串口设备,需要pip install pyserial安装该模块
可编程继电器需要供电,及USB数据控制,及在PIN1开关口进行接线操作。
可编程继电器串口设备,需要先安装windows驱动,可以去本素材下载。
驱动成功后,可以在我的电脑设备管理器里边看到如下COM口:
可编程继电器DAM1600C的配套的调试,可以查看操作系的具体的串口信号输入输出,可以去本素材下载。
Python批处理脚本形式
记住批处理脚本的精髓:批量顺序执行语句,
由于是16进制,在Python这边0x表示16进制数,是数字,所以未加双引号。
# coding=utf-8
import os
import time
import serial
# 第一步:定义本模块(本.py文件)需要用到的变量
com_id = "COM24"
pin1_on = [0xFE, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x98, 0x35]
pin1_off = [0xFE, 0x05, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xC5]
# 第二步:New一个串口开关设备对象,绑定指定COM口
switch_obj = serial.Serial(com_id, baudrate=9600)
# 第三步:反复进行串口开关设备打开和关闭100次
for i in range(100):
print("正在进行第%s次设备异常上电/断电测试" % i)
switch_obj.write(pin1_on)
switch_obj.read()
time.sleep(1)
switch_obj.write(pin1_off)
switch_obj.read()
time.sleep(1)
# 第四步:关闭窗口开关设备对象
switch_obj.close()
os.system("pause")
Python面向过程函数形式
面向过程函数的编程思维应该是这样的:
你需要多少个功能(函数),才能做成这个事。
最好把功能(函数)都尽量封装好,只暴露一些的参数接口即可。
# coding=utf-8
import os
import time
import serial
def switch_pin1_on(switch):
switch.write([0xFE, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x98, 0x35])
switch.read()
def switch_pin1_off(switch):
switch.write([0xFE, 0x05, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xC5])
switch.read()
# 第一步:定义本模块(本.py文件)需要用到的变量
com_id = "COM24"
# 第二步:New一个串口开关设备对象,绑定指定COM口
switch_obj = serial.Serial(com_id, baudrate=9600)
# 第三步:反复进行串口开关设备打开和关闭100次
for i in range(100):
print("正在进行第%s次设备异常上电/断电测试" % i)
switch_pin1_on(switch_obj)
time.sleep(1)
switch_pin1_off(switch_obj)
time.sleep(1)
# 第四步:关闭窗口开关设备对象
switch_obj.close()
os.system("pause")
Python面向对象类形式
面向对象类的编程思维应该是这样的:
如果给你一个空白的世界,在这个世界里你需要哪些种类的事物,
这些种类的事物都具备哪些共有的属性与方法,
这些种类(类)的事物(对象),和其他种类(其他类)的事物(其他对象)有什么关系。
尽量把这些类封装好,只暴露对外的属性(变量)和方法(函数)即可。
# coding=utf-8
import serial
import time
# 定义本模块(本.py文件)需要用到的变量
com_id = "COM24"
class SerialSwitch(object):
def __init__(self, com_id):
self.s_obj = serial.Serial(com_id, baudrate=9600)
def switch_pin1_on(self):
self.s_obj.write([0xFE, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x98, 0x35])
self.s_obj.read()
def switch_pin1_off(self):
self.s_obj.write([0xFE, 0x05, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xC5])
self.s_obj.read()
def switch_pin2_on(self):
pass
def switch_pin2_off(self):
pass
def close(self):
self.s_obj.close()
if __name__ == '__main__':
switch_obj = SerialSwitch(com_id)
for i in range(100):
print("正在进行第%s次设备异常上电/断电测试" % i)
switch_obj.switch_pin1_on()
time.sleep(1)
switch_obj.switch_pin1_off()
time.sleep(1)
os.system("pause")
本案例素材下载
包括:1600C可编程继电器调试控制软件.exe, 可编程继电器串口驱动包,
运行方式与效果
以上代码的3种实现形式都可以直接运行,比如保存为switch_onoff_100.py并放在桌面,
建议switch_onoff_100.py运行,当然也可以双击运行。
用220v的灯泡做的示例,每1秒开关一次灯泡,视频效果如下:
【视频上传失败,点我进入官网查看视频】
用5v的小米小爱智能音箱示例,每5秒重启一次设备,视频效果如下:
更建议用此类安全电压的测试设备做测试。
重要提醒:
由于存在安全风险,再次提醒请切勿随意尝试220v的上下电测试;
如需测试,尽量选择带电源转换器的低于24v以下安全电压的设备进行测试,
并请详细阅读继电器编程开关的使用说明书,
由于未遵守安全提醒而导致的人身或财产安全,本网站不承担任何责任。