这是武散人著《自拍教程》(自动化测试Python教程)系列第60篇文章。

重要提醒:
本案例涉及220v危险电压上电下电测试,存在安全风险,请切勿随意尝试!!!

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

案例故事 很多移动终端都不带电池,都是直接电源插头供电,
比如Android电视机(220v),小米小爱同学智能音箱(220v转5v的电源转换器),智能后视镜(12v)等智能终端设备,Android家庭信息机平板(5v),
还有电饭煲,微波炉,空调,台式电脑主机等220v的家用电器也是如此。
这些电子电器设备,肯定需要涉及异常断电测试,
如果手工模拟上电下电测试,人工拔插电源插头费时费力,
其实Python + 可编程继电器,可实现“电源开关”的上电下电功能。


可编程继电器开关介绍

其实是一台支持串口通讯的继电器开关设备,
其可编程,主要是支持串口命令输入。
可考虑用这款聚英 DAM1600C继电器控制,淘宝链接
Python 控制220V ??? 老板,你没看错! Python 第1张
建议选“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

准备阶段
  1. 可编程继电器是串口设备,需要pip install pyserial安装该模块
  2. 可编程继电器需要供电,及USB数据控制,及在PIN1开关口进行接线操作。
    Python 控制220V ??? 老板,你没看错! Python 第2张
  3. 可编程继电器串口设备,需要先安装windows驱动,可以去本素材下载。
    驱动成功后,可以在我的电脑设备管理器里边看到如下COM口:
    Python 控制220V ??? 老板,你没看错! Python 第3张
  4. 可编程继电器DAM1600C的配套的调试,可以查看操作系的具体的串口信号输入输出,可以去本素材下载。
    Python 控制220V ??? 老板,你没看错! Python 第4张

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以下安全电压的设备进行测试,
并请详细阅读继电器编程开关的使用说明书,
由于未遵守安全提醒而导致的人身或财产安全,本网站不承担任何责任。


更多更好的原创文章,请访问官方网站:www.zipython.com
自拍教程(自动化测试Python教程,武散人编著)
原文链接:https://www.zipython.com/#/detail?id=a97bdfe6dd5f453fa455b8409a468f47
也可关注“武散人”微信订阅号,随时接受文章推送。
Python 控制220V ??? 老板,你没看错! Python 第5张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄