平常的电路design中,对于反相运算放大器的使用较为频繁,需要根据输入电压和输出电压范围确定阻值,而实际阻值是离散的,需要反复迭代提高精度,基于此目的,开发了一款反相运算放大器的阻值参数计算与自动查询软件。
使用指南
界面如下所示,设定输入电压最小、最大值,输出电压最小最大值以及用于偏置的电压,软件会自动计算缩放比例以及偏置电压的大小。(一开始的登录界面不用理会,没有设定密码,可直接打开,可以根据自己需求设定)
以(1,5,0,3,5)为例,自动计算出缩放比例为0.75,偏置电压2.14V,设定好后,在右上方选择电阻精度,软件变会从库中查询阻值,将所有满足的阻值填充于列表中,并给出每组参数的误差以及功耗,方便选择。

为保证计算可靠性,之后将会加入调动仿真的功能,不断优化该软件。
源代码
主要有5个文件组成
1.主程序 mainV2.py
2.多线程查询 ResEThread.py
3.阻值查找 resSelectFromData.py
4.阻值库 Res.sqlite3
#mainV2.py
import sys
import time
import img
import matplotlib #绘图
import numpy as np
#非商用盈利,使用PyQt5
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QMessageBox, QProgressBar
from ResEThread import * #多线程查找阻值,防止影响主界面ui
matplotlib.use("Qt5Agg") # 声明使用QT5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
#界面类
class OPAShow(QWidget):
def __init__(self):
super(OPAShow, self).__init__()
self.offset = 0
self.scale = 0
self.width = 1280 #固定窗口宽度
self.height = 720 #固定窗口高度
self.setFixedSize(self.width, self.height)
self.setWindowTitle('OPA')#设定窗口标题
self.initlogo()
self.initInout()
self.initRes()
self.initTable()
self.initResSelect()
self.btn_set.clicked.connect(self.getData)
self.Res24.clicked.connect(lambda: self.resE(24))#使用lambda表达式简化
self.Res48.clicked.connect(lambda: self.resE(48))
self.Res96.clicked.connect(lambda: self.resE(96))
self.Res192.clicked.connect(lambda: self.resE(192))
#填表
def fillTable(self, data1, dataNum1, data2, dataNum2): # 接受emit传来的信息data,执行相应操作
if data1[0] == 1 and dataNum1[0] == 0 and data2[0] == 2 and dataNum2[0] == 4:
QMessageBox.critical(self, "Error", "数据查询存在问题,可能不存在", QMessageBox.Reset)
return 1
row = 0
# data, dataNum =
self.tableWidget1.setRowCount(dataNum1) # 行数
for tup in data1:
col = 0
for item in tup:
oneitem = QTableWidgetItem(item)
self.tableWidget1.setItem(row, col, oneitem)
col += 1
row += 1
row = 0
# data, dataNum = result((VCC-self.offset)/self.offset)
# data, dataNum =
self.tableWidget2.setRowCount(dataNum2) # 行数
for tup in data2:
col = 0
for item in tup:
oneitem = QTableWidgetItem(item)
self.tableWidget2.setItem(row, col, oneitem)
col += 1
row += 1
# 接收传递回来的值
#查询完之后,重新显示按键,避免查询时多重触发
def sqlFinish(self):
self.Res24.setVisible(True)
self.Res48.setVisible(True)
self.Res96.setVisible(True)
self.Res192.setVisible(True)
self.state.setVisible(False)
self.btn_set.setEnabled(True)
self.btn_set.setStyleSheet(
"#btn_set{border-radius:10px;background-color:rgba(201,79,79,1);font-size:36px;color:white;font-family:Microsoft YaHei}")
#多线程操作,查询数据库
def resE(self, E):
self.thread = ResEThread(self.inMinValue, self.inMaxValue, self.outMinValue, self.outMaxValue, self.VCCValue,
self.scale, self.offset, str(E)) # 实例化一个线程,参数t设置为100
self.tableWidget1.clearContents() # 清空表格所有内容
self.tableWidget2.clearContents()
# 将线程thread的信号sqlSignal和UI主线程中的槽函数fillTable进行连接
self.thread.sqlSignal.connect(self.fillTable)
self.thread.finished.connect(self.sqlFinish)
# 启动线程,执行线程类中run函数
self.thread.start()
self.Res24.setVisible(False)
self.Res48.setVisible(False)
self.Res96.setVisible(False)
self.Res192.setVisible(False)
self.state.setVisible(True)
self.btn_set.setEnabled(False)
self.btn_set.setStyleSheet(
"#btn_set{border-radius:10px;background-color:rgba(151, 153, 155,1);font-size:36px;color:white;font-family:Microsoft YaHei}")
pass
#校验数据
def CheckFloat(self, data, type):
try:
dataC = float(data)
return dataC
# 是数字就返回,不是就reset
except ValueError:
ret = QMessageBox.critical(self, "Error", "输入不是有效数字,重新输入", QMessageBox.Reset)
if ret == QMessageBox.Reset:
if type == 1:
self.inputMin.setText('')
elif type == 2:
self.inputMax.setText('')
elif type == 3:
self.outputMin.setText('')
elif type == 4:
self.outputMax.setText('')
else:
self.VCC.setText('')
return 123.4
#精度选择按键ui
def initResSelect(self):
self.Res24 = QPushButton(self)
self.Res24.setText("E24(5%)")
self.Res24.setObjectName("RES24")
self.Res24.setGeometry(720, 10, 100, 30)
self.Res24.setStyleSheet("#RES24{border-radius:5px;background-color:rgba(0,220,180,"
"1);font-size:18px;color:white;font-family:Microsoft YaHei}")
self.Res24.setVisible(False)
self.Res48 = QPushButton(self)
self.Res48.setText("E48(2%)")
self.Res48.setObjectName("RES48")
self.Res48.setGeometry(840, 10, 100, 30)
self.Res48.setStyleSheet("#RES48{border-radius:5px;background-color:rgba(0,194,222,"
"1);font-size:18px;color:white;font-family:Microsoft YaHei}")
self.Res48.setVisible(False)
self.Res96 = QPushButton(self)
self.Res96.setText("E96(1%)")
self.Res96.setObjectName("RES96")
self.Res96.setGeometry(960, 10, 100, 30)
self.Res96.setStyleSheet("#RES96{border-radius:5px;background-color:rgba(0,162,240,"
"1);font-size:18px;color:white;font-family:Microsoft YaHei}")
self.Res96.setVisible(False)
self.Res192 = QPushButton(self)
self.Res192.setText("E192(0.1%)")
self.Res192.setObjectName("RES192")
self.Res192.setGeometry(1080, 10, 100, 30)
self.Res192.setStyleSheet("#RES192{border-radius:5px;background-color:rgba(29,122,221,"
"1);font-size:18px;color:white;font-family:Microsoft YaHei}")
self.Res192.setVisible(False)
self.state = QProgressBar(self)
self.state.setGeometry(650, 10, 600, 30)
self.state.setRange(0, 0)
self.state.setObjectName("state")
self.state.setStyleSheet("#state::chunk{background-color: rgba(57,133,94,1);border-radius: 2px;width: "
"20px;margin:0.5px}#state{border: 2px solid rgba(240,240,240,1);background-color: "
"rgba(240,240,240,1);}")
self.state.setVisible(False)
#获取输入数据,并进行数据校验、画图
def getData(self):
self.inMinValue = self.CheckFloat(self.inputMin.text(), 1)
self.inMaxValue = self.CheckFloat(self.inputMax.text(), 2)
self.outMinValue = self.CheckFloat(self.outputMin.text(), 3)
self.outMaxValue = self.CheckFloat(self.outputMax.text(), 4)
self.VCCValue = self.CheckFloat(self.VCC.text(), 5)
# 数据校验
if self.inMinValue == 123.4 or self.inMaxValue == 123.4 or self.outMinValue == 123.4 or self.outMaxValue == 123.4 or self.VCCValue == 123.4:
return 1 # 异常退出,后续程序不再执行
# print(inMinValue, inMaxValue, outMinValue, outMaxValue)
inmid = (self.inMinValue + self.inMaxValue) / 2
indelta = self.inMaxValue - self.inMinValue
outmid = (self.outMinValue + self.outMaxValue) / 2
outdelta = self.outMaxValue - self.outMinValue
if outdelta == 0:
QMessageBox.critical(self, "Error", "输出范围存在问题,请重新输入", QMessageBox.Reset)
self.outputMin.setText('')
self.outputMax.setText('')
return 1
try:
self.scale = round(outdelta / indelta, 2) # R2/R1=scale
except:
QMessageBox.critical(self, "Error", "scale为无穷大,输入数据存在问题,请重新输入", QMessageBox.Reset)
self.inputMin.setText('')
self.inputMax.setText('')
return 1
self.offset = round((outmid + self.scale * inmid) / (1 + self.scale), 2)
# ----画图像---#
self.R1.setText(str(self.scale))
self.R3.setText(str(self.offset) + "V")
plt.clf() # clf() # 清图。cla() # 清坐标轴。close() # 关窗口
t = np.linspace(self.inMinValue, self.inMaxValue, 50)
y = self.offset * (self.scale + 1) - self.scale * t
ax = self.figure.subplots()
ax.plot(t, y)
self.canvas.draw()
self.Res24.setVisible(True)
self.Res48.setVisible(True)
self.Res96.setVisible(True)
self.Res192.setVisible(True)
self.tableWidget1.clearContents() # 清空表格所有内容
self.tableWidget2.clearContents()
#ui
#caps,hicaps Logo
def initlogo(self):
labelCaps = QLabel(self)
labelCaps.setGeometry(QRect(11, 21, 371, 100))
labelCaps.setPixmap(QPixmap(":/res/logo.png"))
labelCaps.setScaledContents(True) # 自适应QLabel大小
labelHCaps = QLabel(self)
labelHCaps.setGeometry(QRect(420, 1, 200, 130))
labelHCaps.setPixmap(QPixmap(":/res/HiCaps.png"))
labelHCaps.setScaledContents(True) # 自适应QLabel大小
labelGif = QLabel(self)
labelGif.setGeometry(QRect(11, 115, 600, 125))
labelGif.setScaledContents(True)
labelGif.setPixmap(QPixmap(":/res/solar.png"))
labelCirc = QLabel(self)
labelCirc.setGeometry(QRect(250, 240, 371, 224))
labelCirc.setPixmap(QPixmap(":/res/circuit.png"))
labelCirc.setScaledContents(True) # 自适应QLabel大小
#ui
#输入输出
def initInout(self):
label_inputMin = QLabel(self)
label_inputMin.setText("InMin")
label_inputMin.setObjectName("label_inputMin")
label_inputMin.setAlignment(Qt.AlignVCenter)
label_inputMin.setGeometry(15, 265, 100, 40)
label_inputMin.setStyleSheet("#label_inputMin{font-size:20px;color:black;font-family:Microsoft YaHei}")
self.inputMin = QLineEdit(self)
self.inputMin.setGeometry(105, 270, 100, 30)
self.inputMin.setAlignment(Qt.AlignHCenter)
self.inputMin.setObjectName("inputMin")
self.inputMin.setStyleSheet("#inputMin{border-radius:5px;"
"font-size:24px;background-color:rgba(220,220,220,1);border:3px solid white;}")
label_inputMax = QLabel(self)
label_inputMax.setText("InMax")
label_inputMax.setObjectName("label_inputMax")
label_inputMax.setAlignment(Qt.AlignVCenter)
label_inputMax.setGeometry(15, 305, 100, 40)
label_inputMax.setStyleSheet("#label_inputMax{font-size:20px;color:black;font-family:Microsoft YaHei}")
self.inputMax = QLineEdit(self)
self.inputMax.setGeometry(105, 310, 100, 30)
self.inputMax.setAlignment(Qt.AlignHCenter)
self.inputMax.setObjectName("inputMax")
self.inputMax.setStyleSheet("#inputMax{border-radius:5px;"
"font-size:24px;background-color:rgba(220,220,220,1);border:3px solid white;}")
label_outputMin = QLabel(self)
label_outputMin.setText("OutMin")
label_outputMin.setObjectName("label_outputMin")
label_outputMin.setAlignment(Qt.AlignVCenter)
label_outputMin.setGeometry(15, 345, 100, 40)
label_outputMin.setStyleSheet("#label_outputMin{font-size:20px;color:black;font-family:Microsoft YaHei}")
self.outputMin = QLineEdit(self)
self.outputMin.setGeometry(105, 350, 100, 30)
self.outputMin.setAlignment(Qt.AlignHCenter)
self.outputMin.setText("0")
self.outputMin.setObjectName("outputMin")
self.outputMin.setStyleSheet("#outputMin{border-radius:5px;"
"font-size:24px;background-color:rgba(220,220,220,1);border:3px solid white;}")
label_outputMax = QLabel(self)
label_outputMax.setText("OutMax")
label_outputMax.setObjectName("label_outputMax")
label_outputMax.setAlignment(Qt.AlignVCenter)
label_outputMax.setGeometry(15, 385, 130, 40)
label_outputMax.setStyleSheet("#label_outputMax{font-size:20px;color:black;font-family:Microsoft YaHei}")
self.outputMax = QLineEdit(self)
self.outputMax.setGeometry(105, 390, 100, 30)
self.outputMax.setText("3")
self.outputMax.setAlignment(Qt.AlignHCenter)
self.outputMax.setObjectName("outputMax")
self.outputMax.setStyleSheet("#outputMax{border-radius:5px;"
"font-size:24px;background-color:rgba(220,220,220,1);border:3px solid white;}")
label_VCC = QLabel(self)
label_VCC.setText("VCC")
label_VCC.setObjectName("label_VCC")
label_VCC.setAlignment(Qt.AlignVCenter)
label_VCC.setGeometry(15, 425, 130, 40)
label_VCC.setStyleSheet("#label_VCC{font-size:20px;color:black;font-family:Microsoft YaHei}")
self.VCC = QLineEdit(self)
self.VCC.setGeometry(105, 430, 100, 30)
self.VCC.setAlignment(Qt.AlignHCenter)
self.VCC.setObjectName("VCC")
self.VCC.setText("5") # 默认值
self.VCC.setStyleSheet("#VCC{border-radius:5px;"
"font-size:24px;background-color:rgba(220,220,220,1);border:3px solid white;}")
self.btn_set = QPushButton(self)
self.btn_set.setObjectName("btn_set")
self.btn_set.setText("SET")
self.btn_set.setGeometry(15, 470, 250, 65)
self.btn_set.setStyleSheet(
"#btn_set{border-radius:10px;background-color:rgba(201,79,79,1);font-size:36px;color:white;font-family:Microsoft YaHei}")
#公式、scale、偏置电压
def initRes(self):
self.Mathjx = QLabel(self)
self.Mathjx.setGeometry(15, 540, 260, 60)
self.Mathjx.setAlignment(Qt.AlignHCenter)
self.Mathjx.setObjectName("Mathjx")
self.Mathjx.setPixmap(QPixmap(":/res/math.png"))
self.Mathjx.setScaledContents(True) # 自适应QLabel大小
label_R1 = QLabel(self)
label_R1.setText("缩放R2/R1:")
label_R1.setObjectName("label_R1")
label_R1.setAlignment(Qt.AlignVCenter)
label_R1.setGeometry(25, 600, 140, 40)
label_R1.setStyleSheet("#label_R1{font-size:20px;color:black;font-family:Microsoft YaHei}")
self.R1 = QLabel(self)
self.R1.setGeometry(160, 605, 80, 30)
self.R1.setAlignment(Qt.AlignHCenter)
self.R1.setObjectName("R1")
self.R1.setStyleSheet("#R1{border-radius:5px;"
"font-size:24px;background-color:rgba(220,220,220,1);}")
label_R3 = QLabel(self)
label_R3.setText("偏置电压(+):")
label_R3.setObjectName("label_R3")
label_R3.setAlignment(Qt.AlignVCenter)
label_R3.setGeometry(15, 660, 150, 40)
label_R3.setStyleSheet("#label_R3{font-size:20px;color:black;font-family:Microsoft YaHei}")
self.R3 = QLabel(self)
self.R3.setGeometry(160, 665, 80, 30)
self.R3.setAlignment(Qt.AlignHCenter)
self.R3.setObjectName("R3")
self.R3.setStyleSheet("#R3{border-radius:5px;"
"font-size:24px;background-color:rgba(220,220,220,1);}")
self.TableP = QLabel(self)
self.TableP.setObjectName("TableP")
self.TableP.setGeometry(300, 470, 320, 240)
self.TableP.setStyleSheet("#TableP{border-radius:5px;"
"font-size:24px;background-color:rgba(255,255,255,1);border:3px solid white;}")
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.canvas)
self.TableP.setLayout(layout)
#表格初始化ui
def initTable(self):
self.TableRes = QLabel(self)
self.TableRes.setObjectName("TableRes")
self.TableRes.setGeometry(650, 50, 600, 660)
self.TableRes.setStyleSheet("#TableRes{border-radius:5px;"
"font-size:24px;background-color:rgba(255,255,255,1);border:3px solid white;}")
self.tableWidget1 = QtWidgets.QTableWidget(self.TableRes)
self.tableWidget1.setGeometry(QtCore.QRect(10, 10, 500, 200))
self.tableWidget1.setColumnCount(5) # 列数
self.tableWidget1.setHorizontalHeaderLabels(["R1", "R2", "误差%", "损耗R1", "损耗R2"])
self.tableWidget1.setObjectName("tableWidget1")
self.tableWidget1.horizontalHeader().setSortIndicatorShown(False)
self.tableWidget1.setAlternatingRowColors(True)
self.tableWidget1.setStyleSheet("#tableWidget1{font-size:16px;border:1px solid black;}")
self.tableWidget2 = QtWidgets.QTableWidget(self.TableRes)
self.tableWidget2.setGeometry(QtCore.QRect(10, 230, 500, 200))
self.tableWidget2.setColumnCount(5) # 列数
self.tableWidget2.setHorizontalHeaderLabels(["R3", "R4", "误差%", "损耗R3", "损耗R4"])
self.tableWidget2.setObjectName("tableWidget2")
self.tableWidget2.horizontalHeader().setSortIndicatorShown(False)
self.tableWidget2.setAlternatingRowColors(True)
self.tableWidget2.setStyleSheet("#tableWidget2{font-size:16px;border:1px solid black;}")
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.tableWidget1)
layout.addWidget(self.tableWidget2)
self.TableRes.setLayout(layout)
#登录界面
class login(QWidget):
def __init__(self):
super(login, self).__init__()
self.initUI()
self.btnlogin.clicked.connect(self.checkpw)
def checkpw(self):
user = self.user.text()
pw = self.pw.text()
# if user == 'ccc' and pw == str((time.localtime().tm_hour+time.localtime().tm_min)):
# if user == 'ccc' and pw == str(123):
self.close()
self.main = OPAShow()
self.main.show()
def initUI(self):
self.width = 960
self.height = 540
self.setFixedSize(self.width, self.height)
self.setWindowTitle('登录')
# self.setWindowFlags(Qt.CustomizeWindowHint)
Logo = QLabel(self)
Logo.setObjectName("Logo")
Logo.setGeometry(QRect(0, 0, 960, 540))
Logo.setPixmap(QPixmap(":/res/Login.jpg"))
Logo.setScaledContents(True) # 自适应QLabel大小
grey = QLabel(self)
grey.setObjectName("grey")
grey.setGeometry(QRect(300, 180, 360, 220))
grey.setStyleSheet("#grey{background-color:rgba(220,220,220,0.7);border-radius:10px}")
LogoCaps = QLabel(self)
LogoCaps.setGeometry(QRect(350, 60, 266, 93))
LogoCaps.setPixmap(QPixmap(":/res/HiCapszi.png"))
LogoCaps.setScaledContents(True) # 自适应QLabel大小
label_user = QLabel(self)
label_user.setObjectName("labeluser")
label_user.setGeometry(QRect(350, 200, 50, 30))
label_user.setText("账号")
label_user.setStyleSheet("#labeluser{font-size:24px;color:black;font-family:Microsoft YaHei}")
self.user = QLineEdit(self)
self.user.setObjectName("user")
self.user.setGeometry(QRect(420, 200, 200, 30))
self.user.setStyleSheet(
"#user{border:1px black;font-size:20px;background-color:rgba(240, 240, 240,0.7);border-radius:5px}")
label_pw = QLabel(self)
label_pw.setObjectName("labelpw")
label_pw.setGeometry(QRect(350, 250, 50, 30))
label_pw.setText("密码")
label_pw.setStyleSheet("#labelpw{font-size:24px;color:black;font-family:Microsoft YaHei;}")
self.pw = QLineEdit(self)
self.pw.setObjectName("pw")
self.pw.setEchoMode(QLineEdit.Password)
self.pw.setGeometry(QRect(420, 250, 200, 30))
self.pw.setStyleSheet(
"#pw{border:1px black;font-size:20px;background-color:rgba(240, 240, 240,0.7);border-radius:5px}")
self.btnlogin = QPushButton(self)
self.btnlogin.setObjectName("btnlogin")
self.btnlogin.setText("Sign In")
self.btnlogin.setGeometry(380, 320, 220, 65)
self.btnlogin.setStyleSheet(
"#btnlogin{border-radius:10px;background-color:rgba(0, 114, 206,1);font-size:36px;color:white;font-family:Microsoft YaHei}")
if __name__ == '__main__':
app = QApplication(sys.argv)
data = []
w = login()
w.show()
sys.exit(app.exec())
#ResEThread.py
from PyQt5.QtCore import QThread, pyqtSignal
from resSelectFromData import result
class ResEThread(QThread):
# 自定义一个sql查询信号
sqlSignal = pyqtSignal(list, int, list, int)
# 带一个参数t
def __init__(self, inMinValue, inMaxValue, outMinValue, outMaxValue, VCC, scale, offset, E, parent=None):
super(ResEThread, self).__init__(parent)
self.E = E
self.inMinValue = inMinValue
self.inMaxValue = inMaxValue
self.outMinValue = outMinValue
self.outMaxValue = outMaxValue
self.VCC = VCC
self.scale = scale
self.offset = offset
# run函数是子线程中的操作,线程启动后开始执行
def run(self):
try:
#根据scale查询的结果,scale=R2/R1
data12, dataNum12 = result(self.inMinValue, self.inMaxValue, self.outMinValue, self.outMaxValue, self.VCC,
self.scale, self.offset, 1, self.E)
# 根据offset查询的结果,变比=offset/(vcc-offset)
data34, dataNum34 = result(self.inMinValue, self.inMaxValue, self.outMinValue, self.outMaxValue, self.VCC,
self.scale, self.offset, 2, self.E)
self.sqlSignal.emit(data12, dataNum12, data34, dataNum34) # 注意这里与_signal = pyqtSignal(str)中的类型相同
except:
self.sqlSignal.emit([1], [0], [2], [4])
#resSelectFromData.py
import sqlite3 as pymysql
def result(inMinValue, inMaxValue, outMinValue, outMaxValue, VCC, scale, offset, type, E):
res = []
db = pymysql.connect('Res.sqlite3')
cursor = db.cursor()
sql = 'select count(*) from Res' + E + ''
cursor.execute(sql)
COUNT = cursor.fetchone()[0]
#type = 1 查找比例电阻
if type == 1:
for i in range(1, COUNT):
sql = "select value from Res" + E + " where id='{}'".format(i)
cursor.execute(sql)
base = cursor.fetchone()[0]
for j in range(1, COUNT):
if scale >= 1:
if j <= i:
continue
elif scale < 1:
if j > i:
continue
sql = "select * from Res" + E + " where id='{}'".format(j)
cursor.execute(sql)
dest = cursor.fetchone()
err = abs(dest[1] - scale * base)
if err <= base * 0.1:
# key = dest[0]
loss1 = pow((inMinValue - offset), 2) / base
loss2 = pow((inMaxValue - offset), 2) / base
lossBase = loss1 if loss1 > loss2 else loss2
loss3 = pow((outMinValue - offset), 2) / dest[1]
loss4 = pow((outMaxValue - offset), 2) / dest[1]
lossdest = loss3 if loss3 > loss4 else loss4
tup = (
str(base), str(dest[1]), str(round(err/base, 2) * 100), str(round(lossBase, 2)), str(round(lossdest, 2)))
res.append(tup)
break
cursor.close()
db.close()
resNum = len(res)
return res, resNum
else:
for i in range(1, COUNT):
sql = "select value from Res" + E + " where id='{}'".format(i)
cursor.execute(sql)
base = cursor.fetchone()[0]
scaleOffset =1/( VCC/offset-1 )#R3/R4
for j in range(1, COUNT):
if scaleOffset >= 1:
if j <= i:
continue
elif scaleOffset < 1:
if j > i:
continue
sql = "select * from Res" + E + " where id='{}'".format(j)
cursor.execute(sql)
dest = cursor.fetchone()
err = abs(dest[1] - scaleOffset * base)
if err <= base * 0.1:
# key = dest[0]
loss3 = pow((VCC - offset), 2) / dest[1]
loss4 = pow(offset, 2) / base
tup = (str(base), str(dest[1]), str(round(err/base, 2) * 100), str(round(loss3, 2)), str(round(loss4, 2)))
res.append(tup)
break
cursor.close()
db.close()
resNum = len(res)
return res, resNum
if __name__ == '__main__':
res = result(0.5,2.1,0,3,5,1.88,1.37,1,'24')
print(res)
2826

被折叠的 条评论
为什么被折叠?



