• Python 控制220V ??? 老板,你没看错!


    这是武散人著《自拍教程》(自动化测试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

    准备阶段
    1. 可编程继电器是串口设备,需要pip install pyserial安装该模块
    2. 可编程继电器需要供电,及USB数据控制,及在PIN1开关口进行接线操作。
    3. 可编程继电器串口设备,需要先安装windows驱动,可以去本素材下载。
      驱动成功后,可以在我的电脑设备管理器里边看到如下COM口:
    4. 可编程继电器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以下安全电压的设备进行测试,
    并请详细阅读继电器编程开关的使用说明书,
    由于未遵守安全提醒而导致的人身或财产安全,本网站不承担任何责任。


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

  • 相关阅读:
    [Spring Unit Testing] Spring Unit Testing with a Java Context
    [Docker] Benefits of Multi-stage Builds
    [Mockito] Mock List interface
    Android自定义垂直滚动自动选择日期控件
    关于 MVC 字段 默认值
    Qt Creator编译时:cannot open file 'debugQtGuiEx.exe' File not found
    ListView开发笔记
    C/C++误区四:char c = getchar();
    ORACLE 中写入txt文本与从Txt文件中读入数据 修改表结构
    wikioi 1214 线段覆盖
  • 原文地址:https://www.cnblogs.com/zipython/p/12763850.html
Copyright © 2020-2023  润新知