技术标签: python怎样控制继电器
这是武散人著《自拍教程》(自动化测试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以下安全电压的设备进行测试,
并请详细阅读继电器编程开关的使用说明书,
由于未遵守安全提醒而导致的人身或财产安全,本网站不承担任何责任。
文章浏览阅读7.5k次。问题现象: select2 下拉选择框,首次切换到“全部”选项不会触发change事件。问题背景: select2 下拉选择框,有设置默认值(非全部),在加载数据时,改动后端返回数据,加了一条“全部”的下拉选择内容:list.unshift({'id':'','text':'全部'}); 问题分析: 首次切换到“全部”选项后,并未触发change事件; 而首次切换到其他..._select2 change
文章浏览阅读867次。给定一个字符串, 输出出现次数最多的前三个字符, 若两字符出现次数相同, 则按字典顺序排列.# 样例输入aabbbccde# 样例输出b 3a 2c 2就是先将第二字段降序排序, 再将第一字段升序排序, 关键就是sorted函数key的指定, 可以用 lambda 或operator.itemgetter开始我是这样做的:from collections import Counterc = Cou..._py 多字段排序先升序再降序
文章浏览阅读3.1k次。红帽 RHEL power8 服务器小端版本,找了很久才找到,官方不提供下载了,放这里给大家对于没有HMC,没有显卡的小机运维,不想搭一堆环境的人来说是福音,SUSE11没有小端版本,12用的引导界面在SMS下全是乱码,只能用吐血两字来形容,centos 7 装上会出现IOA口驱动失败的情况,目前找不到原因,这个是官方支持带驱动的,rhel-server-7.2-ppc64le-dvd.i_rhel-server-7.2-ppc64le-dvd.iso
文章浏览阅读9.9k次,点赞2次,收藏10次。2017年随着google发布了Kotlin作为android的一级语言,与java100%互通。开发者就陆陆续续从java转到Kotlin中了,我现在有学习了Kotlin几天,的确感觉Kotlin写起来非常简洁,下面我介绍一下如何在android studio配置Kotlin环境。步骤1.在android studio中下载插件(windows)点击File->Setting->..._kotlin怎么指定jdk
文章浏览阅读108次。REM 如果不想该程序一次性查杀后就退出,可以注释掉16行的"exit",这样程序就会一直后台监控。_aceguard
文章浏览阅读1.9k次,点赞51次,收藏47次。通过这道题,我们对算法的时间复杂度和空间复杂度有了一定的理解。时间复杂度和空间复杂度并不是完全独立的两个概念,虽然它们衡量的是算法效率的不同方面,但在实际应用中,这两个因素有时会相互制约,形成一种“时间-空间”的平衡。比如:对于某些问题,使用一种时间复杂度较低的算法可能需要更多的空间来存储中间结果或额外的数据结构,而使用一种空间复杂度较低的算法可能会牺牲一些时间效率。然而,时间复杂度和空间复杂度并不是矛盾的。它们分别衡量算法在不同方面的效率,可以同时达到最优。
文章浏览阅读5k次,点赞4次,收藏13次。Servlet--Request生命周期一、Request、Response对象的生命周期1、浏览器像servlet发送请求2、tomcat收到请求后,创建Request和Response两个对象的生命周期,并且将浏览器请求的参数传递给Servlet3、Servlet接收到请求后,调用doget或者dopost方法。处理浏览器的请求信息,然后通过Response返回_tomcat中request的生命周期
文章浏览阅读7.9w次,点赞16次,收藏80次。GitHub页面时而能访问,时而不能。不是慢,而是不能访问。当然,下载它的比如仓库Release下的压缩包比较慢则是另一回事。蛋疼的影响不限于打不开页面,更多的在于不能git pull和git push等操作。范围方面,凡国内不管是家宽、移动网络还是云上的,都受到一致的影响。_github打不开
文章浏览阅读4.5k次,点赞3次,收藏21次。9.24 15:00 电话一面 35min面试官是一个声音巨好听的小哥哥......,迷恋ing,而且也超级温柔,嘻嘻嘻嘻嘻嘻1.自我介绍2.讲项目是不是自己做的 怎么做的 项目分工 担任角色 项目测试(全程死抠测试,单元测试死抠.....) 为什么做这个项目3.对软件测试的理解4.针对我的专业有疑问,主修课程有哪些,5.为什么做测试6.你觉得互..._经纬恒润 面试
文章浏览阅读6.7k次,点赞2次,收藏14次。数据在当今世界意味着金钱。随着向基于app的世界的过渡,数据呈指数增长。然而,大多数数据是非结构化的,因此需要一个过程和方法从数据中提取有用的信息,并将其转换为可理解的和可用的形式。数据挖掘或“数据库中的知识发现”是通过人工智能、机器学习、统计和数据库系统发现大数据集中的模式的过程。免费的数据挖掘工具包括从完整的模型开发环境如Knime和Orange,到各种用Java、c++编写的库,最常..._)好用(19)
文章浏览阅读191次。java-net-php-python-jspm米兰酒店管理系统计算机毕业设计程序。springboot基于B_S模式的后勤管理系统-在线报修系统。springcloud基于微服务架构的乐居租房网的设计与实现。springboot基于springboot的社会公益平台。ssm基于web的考试资料交易系统的设计与实现。ssm基于JEE的人才招聘系统的智能化管理。springboot中国民航酒店分销系统。_米兰酒店管理系统登录
文章浏览阅读7.4k次,点赞2次,收藏2次。成本中心是无法直接和公司代码进行配对的。但是利润中心能够绑定公司代码再通过利润中心的对应公司代码可以进行成本中心对应公司代码的对应_sap 成本中心关联公司