目标
在设备频繁启动测试中,设计一个能够自定义定时控制电源的GUI程序,实现自动化测试。
实施
1.GUI框架
使用python+pyqt5实现基本框架,界面如图
2.自定义的定时序列记录与遍历
使用Qt中的ListView控件保存当前所自定义的定时序列,并且实现任意位置插入/删除操作。
当点击运行时,通过遍历该列表,实现自动化电源控制,并且显示相关的时间信息。
3.电源控制模块
实现对特定电源的初始化+电源设置功能。
代码
#该项目实现定时控制直流电源,实现自动化电源测试功能;
# 实现内容:
# 1.通过listview显示当前制定的计划,包括电压值+时间;
# 2.对该list进行任意位置的删减和增加
# 3.执行时,通过读取该list执行相关动作并加以延时,实现遍历的目的;
# 4.显示时间信息
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QMessageBox
import MyGuiAppUI
import threading
import time
import datetime
from threading import Timer
import sys
import os
from PyQt5.QtGui import QStandardItem
from PyQt5.QtGui import QStandardItemModel
from _overlapped import NULL
from matplotlib.dates import seconds
class MyApp(QtWidgets.QMainWindow, MyGuiAppUI.Ui_MainWindow):
def __init__(self, parent=None):
super(MyApp, self).__init__(parent)
self.setupUi(self)
self.setWindowTitle("AutoPower(V1.0)")
self.pushButton_add.clicked.connect(self.AddList)
self.pushButton_delete.clicked.connect(self.DeleteList)
self.pushButton_empty.clicked.connect(self.EmptyList)
self.pushButton_run.clicked.connect(self.RunList)
self.pushButton_stop.clicked.connect(self.StopList)
self.listModel = QStandardItemModel(self.listView)
self.listView.clicked.connect(self.listClicked) #listview 的点击事件
self.insertIndex = 0
self.runIndex = 0
self.voltage = 0
self.timeDuration = 0
self.actionTimer = None
self.startTime = 0
self.endTime = 0
self.cycCnt = 0
def StopList(self):
if self.actionTimer != None:
self.actionTimer.cancel()
print("stop")
def RunList(self):
rowCount = self.listModel.rowCount(QtCore.QModelIndex())
item = QStandardItem()
if self.runIndex >= rowCount :
self.runIndex = 0
self.cycCnt= self.cycCnt + 1
item = self.listModel.item(self.runIndex)
print('Running:{}/{}'.format(self.runIndex+1,rowCount))
self.runIndex = self.runIndex + 1
t = item.text().split('\t')
self.voltage = t[0].split(':')[1]
self.timeDuration = t[1].split(':')[1]
now = datetime.datetime.now()
if 0 == self.startTime:
self.startTime = now
self.lineEdit_time_start.setText(self.startTime.strftime("%y-%m-%d %H:%M:%S"))
self.lineEdit_stat.setText('Set Voltage {}V for {}Min'.format(self.voltage,self.timeDuration))
print('[{}]Set Voltage {}V with {}Min'.format(now.strftime("%y-%m-%d %H:%M:%S"),self.voltage,self.timeDuration))
#添加实际电压控制代码
#添加实际电压控制代码
self.lineEdit_time_runing.setText(now.strftime("%y-%m-%d %H:%M:%S"))
end= now+datetime.timedelta(seconds = int(self.timeDuration)*60)
self.lineEdit_time_left.setText(end.strftime("%y-%m-%d %H:%M:%S"))
self.lineEdit_time_cyc.setText(str(self.cycCnt))
self.actionTimer =Timer(int(self.timeDuration)*60, self.RunList,())
self.actionTimer.start()
def EmptyList(self):
print('RowCount:{}'.format(self.listModel.rowCount(QtCore.QModelIndex())))
self.listModel.clear()
self.insertIndex = 0
def listClicked(self,qModelIndex):
print('insertIndex:{}'.format(self.insertIndex))
self.insertIndex = qModelIndex.row()+1
def DeleteList(self):
self.listModel.takeRow(self.insertIndex -1)
self.insertIndex= self.insertIndex-1
self.listView.setModel(self.listModel)
def AddList(self):
print("AddList")
if (self.lineEdit_voltage.text().isdigit() == False) or(self.lineEdit_time.text().isdigit() == False):
QMessageBox.warning(self,'错误','你愁啥?', QMessageBox.Ok )
return
newItem = QStandardItem()
newItem.setText('Vol:{}\tTim:{}'.format(self.lineEdit_voltage.text(),self.lineEdit_time.text()))
self.listModel.insertRow(self.insertIndex, newItem)
self.listView.setModel(self.listModel)
self.insertIndex =self.insertIndex+1
print('insertIndex:{}'.format(self.insertIndex))
pass
try:
if __name__ == '__main__':
app = QApplication(sys.argv)
form = MyApp()
form.show()
app.exec_()
except Exception as e:
print('ERROR:{}'.format(e))