Python 控制220V ??? 老闆,你沒看錯!

来源:https://www.cnblogs.com/zipython/archive/2020/04/23/12763850.html
-Advertisement-
Play Games

這是武散人著《自拍教程》(自動化測試Python教程)系列第60篇文章。 重要提醒: 本案例涉及220v危險電壓上電下電測試,存在安全風險,請切勿隨意嘗試!!! 案例故事 很多移動終端都不帶電池,都是直接電源插頭供電, 比如Android電視機(220v),小米小愛同學智能音箱(220v轉5v的電源 ...


這是武散人著《自拍教程》(自動化測試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
也可關註“武散人”微信訂閱號,隨時接受文章推送。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • A - Buggy Sorting 題意:這個題意就是給你一個錯誤的排序方式,要求你在它的這個排序方式下判斷是否存在正確的運行結果。若存在正確的結果,則輸出-1,否則輸出一個例子說明是錯誤的。題目的輸入是元素的個數n。 題解:這一題比較有意思,很容易判斷出只有當n=1 or n=2時運行結果是正確的 ...
  • PHP 中上手 Laravel 框架,除了要會增刪改查,也應該瞭解瞭解文件上傳。 ...
  • 學習Java的第一次總結 1.Java程式的編譯和執行 通過上圖,我們輕易得出java執行過程:由javac編譯為位元組碼文件,通過JVM轉換為底層操作系統可識別的命令操作。 註意:①Java跨平臺的始終是Java源文件,而不是JVM ②JVM在其間是充當中間層,是溝通java文件和不同操作系統(如L ...
  • python中的列表 # 列表# list 類,列表# 中括弧括起來 ,逗號分隔每個元素,列表中的元素可以是數字,字元串,列表,布爾值等等。# 列表還可以嵌套列表 列表的基本操作 (1)列表的常用操作 list1 = [11,22,33,44,55] # len 查看列表的元素的個數 print(l ...
  • 前言 現在版本官方已經有了自動御魂、覺醒和探索的腳本了。 既然是這樣那不如就搞一個抽卡的腳本好了,這樣大佬(土豪,歐皇)們 幾百連抽就不用畫符,和點SSR點到手軟了XD。 不簡單的具體實現 1、通過adb截圖判斷是否在抽卡界面 2、在的話,使用matchTemplate()函數識別開始召喚的按鈕 3 ...
  • Python 內置函數最全彙總: 1 abs() 絕對值或複數的模 2 all() 接受一個迭代器,如果迭代器的所有元素都為真,那麼返回True,否則返回False 3 any() 接受一個迭代器,如果迭代器里有一個元素為真,那麼返回True,否則返回False 4 ascii() 調用對象的rep ...
  • @2020.4.23 基於隊列實現生產者消費者模型: ...
  • //遞歸枚舉值實例 enum Expression{ //單個數值 case num(param:Int) //表示加法運算 將Expression作為相關值參數類型 indirect case add(param:Expression,param2:Expression) //表示減法運算 將Ex ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...