Compare commits
7 Commits
da8b60f3db
...
ad51e65228
Author | SHA1 | Date | |
---|---|---|---|
ad51e65228 | |||
46b5845387 | |||
d6f8f6f13f | |||
6cc5097b1d | |||
0f836cf5fa | |||
ac8ff99e85 | |||
8cf80919ed |
13
PycharmProjects/3.5.1 auto/fitting.py
Normal file
13
PycharmProjects/3.5.1 auto/fitting.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from scipy.optimize import curve_fit
|
||||||
|
from numpy import tanh
|
||||||
|
|
||||||
|
|
||||||
|
# Обсчет значений на данный момент недоступен, но может быть вызван в другом файле
|
||||||
|
# с использованием функции fit()
|
||||||
|
def probe(x, I_0, k_0, A):
|
||||||
|
return I_0 * tanh(k_0 / I_0 * x) + A * x
|
||||||
|
|
||||||
|
|
||||||
|
def fit(x, y):
|
||||||
|
params = curve_fit(probe, x, y, [50, 10, 1])[0]
|
||||||
|
return params
|
12
PycharmProjects/3.5.1 auto/main.py
Normal file
12
PycharmProjects/3.5.1 auto/main.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import visual
|
||||||
|
import sys
|
||||||
|
from PySide6 import QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = QtWidgets.QApplication([])
|
||||||
|
|
||||||
|
widget = visual.TitleScreen()
|
||||||
|
widget.showFullScreen()
|
||||||
|
|
||||||
|
sys.exit(app.exec())
|
100
PycharmProjects/3.5.1 auto/plots.py
Normal file
100
PycharmProjects/3.5.1 auto/plots.py
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import random
|
||||||
|
|
||||||
|
from numpy import tanh
|
||||||
|
|
||||||
|
|
||||||
|
# Значения part = 1, 2 соответствуют режимам считывания с первой и второй пары приборов соответственно
|
||||||
|
# (currently not available), режимы 3 и 4 являются тестовыми и генерируют значения самостоятельно
|
||||||
|
def get_point(part, num):
|
||||||
|
if part == 1:
|
||||||
|
v1 = open('voltmeter1.txt')
|
||||||
|
i1 = open('ampere-meter1.txt')
|
||||||
|
vol[0].append(float(v1.readline()))
|
||||||
|
cur[0].append(float(i1.readline()))
|
||||||
|
newv1 = v1.read().replace(str(vol[0][-1]) + '\n', '')
|
||||||
|
newi1 = i1.read().replace(str(cur[0][-1]) + '\n', '')
|
||||||
|
v1.close()
|
||||||
|
i1.close()
|
||||||
|
v1 = open('voltmeter1.txt', 'w')
|
||||||
|
v1.write(newv1)
|
||||||
|
i1 = open('ampere-meter1.txt', 'w')
|
||||||
|
i1.write(newi1)
|
||||||
|
v1.close()
|
||||||
|
i1.close()
|
||||||
|
|
||||||
|
elif part == 2:
|
||||||
|
v2 = open('voltmeter2.txt')
|
||||||
|
i2 = open('ampere-meter2.txt')
|
||||||
|
vol[1].append(float(v2.readline()))
|
||||||
|
cur[1].append(float(i2.readline()))
|
||||||
|
newv2 = v2.read().replace(str(vol[1][-1]) + '\n', '')
|
||||||
|
newi2 = i2.read().replace(str(cur[1][-1]) + '\n', '')
|
||||||
|
v2.close()
|
||||||
|
i2.close()
|
||||||
|
v2 = open('voltmeter2.txt', 'w')
|
||||||
|
v2.write(newv2)
|
||||||
|
i2 = open('ampere-meter2.txt', 'w')
|
||||||
|
i2.write(newi2)
|
||||||
|
v2.close()
|
||||||
|
i2.close()
|
||||||
|
elif part == 3:
|
||||||
|
vol[2][num].append(random.random() * 100)
|
||||||
|
cur[2][num].append(random.random() * 100)
|
||||||
|
elif part == 4:
|
||||||
|
vol[3][num].append(random.random() * 50 - 25)
|
||||||
|
if experiment % 3 == 0:
|
||||||
|
cur[3][num].append(
|
||||||
|
(83 * tanh(15.5 / 83 * vol[3][num][-1]) + 1.7 * vol[3][num][-1]) * (0.98 + random.random() / 25))
|
||||||
|
elif experiment % 3 == 1:
|
||||||
|
cur[3][num].append(
|
||||||
|
(44 * tanh(8.7 / 44 * vol[3][num][-1]) + 0.9 * vol[3][num][-1]) * (0.98 + random.random() / 25))
|
||||||
|
else:
|
||||||
|
cur[3][num].append(
|
||||||
|
(22 * tanh(4.4 / 22 * vol[3][num][-1]) + 0.5 * vol[3][num][-1]) * (0.98 + random.random() / 25))
|
||||||
|
|
||||||
|
|
||||||
|
def update_plot(part, num):
|
||||||
|
for i in range(10):
|
||||||
|
get_point(part, num)
|
||||||
|
|
||||||
|
|
||||||
|
def saveplot(part):
|
||||||
|
plt.figure(figsize=(8, 6))
|
||||||
|
for i in range(len(vol[part - 1])):
|
||||||
|
plt.scatter(vol[part - 1][i], cur[part - 1][i], marker='o')
|
||||||
|
plt.grid()
|
||||||
|
plt.xlabel('Напряжение, В')
|
||||||
|
plt.ylabel('Ток, мкА')
|
||||||
|
plt.savefig('tmpplots/tmpplot' + str(part) + '.jpg', dpi=200)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
def empty_plot(part):
|
||||||
|
vol[part - 1] = [[]]
|
||||||
|
cur[part - 1] = [[]]
|
||||||
|
plt.figure(figsize=(8, 6))
|
||||||
|
plt.scatter(cur[part - 1], vol[part - 1], marker='o')
|
||||||
|
plt.grid()
|
||||||
|
plt.savefig('tmpplots/tmpplot' + str(part) + '.jpg', dpi=200)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
def plus_plot(part):
|
||||||
|
global experiment
|
||||||
|
vol[part - 1].append([])
|
||||||
|
cur[part - 1].append([])
|
||||||
|
experiment += 1
|
||||||
|
|
||||||
|
|
||||||
|
def minus_plot(part):
|
||||||
|
vol[part - 1].pop()
|
||||||
|
cur[part - 1].pop()
|
||||||
|
if len(vol[part - 1]) == 0:
|
||||||
|
vol[part - 1].append([])
|
||||||
|
cur[part - 1].append([])
|
||||||
|
|
||||||
|
|
||||||
|
vol = [[], [], [[]], [[]]]
|
||||||
|
cur = [[], [], [[]], [[]]]
|
||||||
|
experiment = 0
|
BIN
PycharmProjects/3.5.1 auto/tmpplots/tmpplot1.jpg
Normal file
BIN
PycharmProjects/3.5.1 auto/tmpplots/tmpplot1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 68 KiB |
BIN
PycharmProjects/3.5.1 auto/tmpplots/tmpplot3.jpg
Normal file
BIN
PycharmProjects/3.5.1 auto/tmpplots/tmpplot3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 68 KiB |
BIN
PycharmProjects/3.5.1 auto/tmpplots/tmpplot4.jpg
Normal file
BIN
PycharmProjects/3.5.1 auto/tmpplots/tmpplot4.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 68 KiB |
394
PycharmProjects/3.5.1 auto/visual.py
Normal file
394
PycharmProjects/3.5.1 auto/visual.py
Normal file
@ -0,0 +1,394 @@
|
|||||||
|
from PySide6 import QtCore, QtWidgets, QtGui
|
||||||
|
import plots
|
||||||
|
import PIL
|
||||||
|
|
||||||
|
|
||||||
|
# Значения парметра part при построении графиков установлены на тестовый режим
|
||||||
|
class TitleScreen(QtWidgets.QWidget):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.q = QtGui.QScreen.availableGeometry(QtWidgets.QApplication.primaryScreen())
|
||||||
|
self.part1 = Part1()
|
||||||
|
self.part2 = Part2()
|
||||||
|
|
||||||
|
self.button = QtWidgets.QPushButton(self)
|
||||||
|
self.button.setGeometry(QtCore.QRect(20, 20, 40, 40))
|
||||||
|
self.button.setText("Esc")
|
||||||
|
self.text = QtWidgets.QLabel(self)
|
||||||
|
self.text.setText(
|
||||||
|
"<html><head/><body><p align=\"center\"><span style=\" font-size:20pt; font-weight:600;\">Лабораторная "
|
||||||
|
"работа 3.5.1</span></p><p align=\"center\"><span style=\" font-size:16pt;\">Исследование плазмы газового "
|
||||||
|
"разряда</span></p></body></html>")
|
||||||
|
self.text.setGeometry(QtCore.QRect(self.q.width() // 3 - 250, self.q.height() // 2 - 50, 500, 100))
|
||||||
|
self.vline = QtWidgets.QFrame(self)
|
||||||
|
self.vline.setFrameShape(QtWidgets.QFrame.VLine)
|
||||||
|
self.vline.setGeometry(QtCore.QRect(2 * self.q.width() // 3, 0, 10, self.q.height() + 40))
|
||||||
|
self.hline = QtWidgets.QFrame(self)
|
||||||
|
self.hline.setFrameShape(QtWidgets.QFrame.HLine)
|
||||||
|
self.hline.setGeometry(QtCore.QRect(2 * self.q.width() // 3 + 5, self.q.height() // 2, self.q.width() // 3, 40))
|
||||||
|
self.label1 = QtWidgets.QLabel(self)
|
||||||
|
self.label1.setText(
|
||||||
|
"<html><head/><body><p align=\"center\"><span style=\" font-size:10pt; font-weight:600;\">ЧАСТЬ "
|
||||||
|
"I</span></p><p align=\"center\"><span style=\" font-size:10pt;\">Вольт-амперная характеристика газового "
|
||||||
|
"разряда</span></p></body></html>")
|
||||||
|
self.label1.setGeometry(QtCore.QRect(5 * self.q.width() // 6 - 150, self.q.height() // 4 - 40, 300, 80))
|
||||||
|
self.label2 = QtWidgets.QLabel(self)
|
||||||
|
self.label2.setText(
|
||||||
|
"<html><head/><body><p align=\"center\"><span style=\" font-size:10pt; font-weight:600;\"> ЧАСТЬ "
|
||||||
|
"II</span></p><p align=\"center\"><span style=\" font-size:10pt;\">Зондовые характеристики "
|
||||||
|
"плазмы</span></p></body></html>")
|
||||||
|
self.label2.setGeometry(QtCore.QRect(5 * self.q.width() // 6 - 150, 3 * self.q.height() // 4 - 40, 300, 80))
|
||||||
|
self.button1 = QtWidgets.QPushButton(self)
|
||||||
|
self.button1.setGeometry(QtCore.QRect(5 * self.q.width() // 6 - 40, self.q.height() // 4 + 80, 80, 40))
|
||||||
|
self.button1.setText("Начать")
|
||||||
|
self.button2 = QtWidgets.QPushButton(self)
|
||||||
|
self.button2.setGeometry(QtCore.QRect(5 * self.q.width() // 6 - 40, 3 * self.q.height() // 4 + 80, 80, 40))
|
||||||
|
self.button2.setText("Начать")
|
||||||
|
|
||||||
|
self.button.clicked.connect(self.esc)
|
||||||
|
self.button1.clicked.connect(self.open_part1)
|
||||||
|
self.button2.clicked.connect(self.open_part2)
|
||||||
|
|
||||||
|
@QtCore.Slot()
|
||||||
|
def esc(self):
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def open_part1(self):
|
||||||
|
self.part1.showFullScreen()
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def open_part2(self):
|
||||||
|
self.part2.showFullScreen()
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
|
||||||
|
class Part1(QtWidgets.QWidget):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.n = 0
|
||||||
|
self.hint_open = False
|
||||||
|
self.started = False
|
||||||
|
self.q = QtGui.QScreen.availableGeometry(QtWidgets.QApplication.primaryScreen())
|
||||||
|
h = self.q.height() * 0.2
|
||||||
|
plots.empty_plot(3)
|
||||||
|
|
||||||
|
self.points = QtWidgets.QLabel(self)
|
||||||
|
self.points.setGeometry(QtCore.QRect(7.5 * h - 60, 3 * h - 80, 140, 20))
|
||||||
|
self.points.setText('Измеренных точек: ' + str(self.n))
|
||||||
|
|
||||||
|
self.disclaimer = QtWidgets.QLabel(self)
|
||||||
|
self.disclaimer.setText('<html><p align=\"left\"><span style=\" font-size:10pt; font-weight:600;\">Не '
|
||||||
|
'забудьте прочитать методику<\p><p align=\"left\"><span style=\" font-size:10pt; '
|
||||||
|
'font-weight:600;\">и подсказку выше перед началом работы!<\p><\html>')
|
||||||
|
self.disclaimer.setGeometry(7.5 * h - 150, h, 400, 100)
|
||||||
|
|
||||||
|
self.button = QtWidgets.QPushButton(self)
|
||||||
|
self.button.setGeometry(QtCore.QRect(20, 20, 40, 40))
|
||||||
|
self.button.setText("Esc")
|
||||||
|
|
||||||
|
self.start_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.start_btn.setText("Начать измерения")
|
||||||
|
self.start_btn.setGeometry(QtCore.QRect(7.5 * h - 150, 3 * h - 50, 120, 30))
|
||||||
|
|
||||||
|
self.reset_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.reset_btn.setText("Сбросить")
|
||||||
|
self.reset_btn.setGeometry(QtCore.QRect(7.5 * h + 30, 3 * h - 50, 120, 30))
|
||||||
|
|
||||||
|
self.save_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.save_btn.setText("Сохранить")
|
||||||
|
self.save_btn.setGeometry(QtCore.QRect(7.5 * h - 60, 3 * h, 120, 30))
|
||||||
|
self.save_btn.hide()
|
||||||
|
|
||||||
|
self.title = QtWidgets.QLabel(self)
|
||||||
|
self.title.setText(
|
||||||
|
"<html><head/><body><p align=\"center\"><span style=\" font-size:16pt; font-weight:600;\">ЧАСТЬ "
|
||||||
|
"I</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Вольт-амперная характеристика газового "
|
||||||
|
"разряда</span></p></body></html>")
|
||||||
|
self.title.setGeometry(QtCore.QRect(self.q.width() // 2 - 200, 20, 400, 80))
|
||||||
|
|
||||||
|
self.back_button = QtWidgets.QPushButton(self)
|
||||||
|
self.back_button.setGeometry(QtCore.QRect(20, self.q.height() - 20, 80, 40))
|
||||||
|
self.back_button.setText("Назад")
|
||||||
|
|
||||||
|
self.pixmap0 = QtGui.QPixmap('tmpplots/tmpplot1.jpg')
|
||||||
|
self.pixmap = self.pixmap0.scaledToHeight(3 * h)
|
||||||
|
self.plot1 = QtWidgets.QLabel(self)
|
||||||
|
self.plot1.setPixmap(self.pixmap)
|
||||||
|
self.plot1.setGeometry(QtCore.QRect(h, h + 20, 4 * h, 3 * h))
|
||||||
|
|
||||||
|
self.text = QtWidgets.QLabel(self)
|
||||||
|
self.text.setText("<html><p align=\"left\"><span style=\" font-size:10pt;\">Перед проведением измерений ВАХ "
|
||||||
|
"газового разряда</p><p align=\"left\"><span style=\" font-size:10pt;\">проверьте "
|
||||||
|
"подключение вольтметра V<sub>1</sub> и амперметра A<sub>1</sub>,"
|
||||||
|
"</p><p align=\"left\"><span style=\" font-size:10pt;\">а также убедитесь, "
|
||||||
|
"что переключатель П<sub>1</sub> находится в положении I.</p><p align=\"left\"><span "
|
||||||
|
"style=\" font-size:10pt;\">При проведении измерений медленно увеличивайте выходное"
|
||||||
|
"</p><p align=\"left\"><span style=\" font-size:10pt;\">напряжение ВИП до достижения "
|
||||||
|
"максимального значения тока"
|
||||||
|
"</p><p align=\"left\"><span style=\" font-size:10pt;\">через амперметр "
|
||||||
|
"А<sub>1 </sub>(не более 5 мА), затем проведите измерения "
|
||||||
|
"</p><p align=\"left\"><span style=\" font-size:10pt;\">в обратную сторону.</p><p "
|
||||||
|
"align=\"left\"><span style=\" font-size:10pt;\">График "
|
||||||
|
"I<sub>р</sub>(U<sub>р</sub>) будет строиться автоматически,</p><p align=\"left\"><span "
|
||||||
|
"style=\" font-size:10pt;\">после завершения измерений можно сохранить полученные</p><p "
|
||||||
|
"align=\"left\"><span style=\" font-size:10pt;\">значения "
|
||||||
|
"и график.</p></html>")
|
||||||
|
self.text.setGeometry(QtCore.QRect(6 * h, h + 20, 3 * h, 2 * h + 20))
|
||||||
|
self.text.setStyleSheet("border: 1px solid black; background-color: white;")
|
||||||
|
self.text.hide()
|
||||||
|
|
||||||
|
self.hint_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.hint_btn.setText('?')
|
||||||
|
self.hint_btn.setGeometry(QtCore.QRect(self.q.width() - 60, 20, 40, 40))
|
||||||
|
|
||||||
|
self.button.clicked.connect(self.esc)
|
||||||
|
self.back_button.clicked.connect(self.back)
|
||||||
|
self.start_btn.clicked.connect(self.start_stop)
|
||||||
|
self.reset_btn.clicked.connect(self.reset)
|
||||||
|
self.hint_btn.clicked.connect(self.hint)
|
||||||
|
self.save_btn.clicked.connect(self.savefile)
|
||||||
|
|
||||||
|
timer = QtCore.QTimer(self)
|
||||||
|
timer.timeout.connect(self.upd_plot)
|
||||||
|
timer.start(500)
|
||||||
|
|
||||||
|
@QtCore.Slot()
|
||||||
|
def savefile(self):
|
||||||
|
file, check = QtWidgets.QFileDialog.getSaveFileName(None, "Сохранить график 1",
|
||||||
|
r"C:\Users\Vadim\Desktop\plot1.jpg", "Images (*.png *.jpg)")
|
||||||
|
if check:
|
||||||
|
plot1 = PIL.Image.open('tmpplots/tmpplot3.jpg')
|
||||||
|
plot1.save(file)
|
||||||
|
|
||||||
|
def hint(self):
|
||||||
|
if not self.hint_open:
|
||||||
|
self.text.show()
|
||||||
|
self.hint_open = True
|
||||||
|
else:
|
||||||
|
self.text.hide()
|
||||||
|
self.hint_open = False
|
||||||
|
|
||||||
|
def esc(self):
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def back(self):
|
||||||
|
self.w = TitleScreen()
|
||||||
|
self.w.showFullScreen()
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def show_plot(self):
|
||||||
|
self.points.setText('Измеренных точек: ' + str(self.n))
|
||||||
|
self.pixmap0 = QtGui.QPixmap('tmpplots/tmpplot3.jpg')
|
||||||
|
self.pixmap = self.pixmap0.scaledToHeight(0.6 * self.q.height())
|
||||||
|
self.plot1.setPixmap(self.pixmap)
|
||||||
|
|
||||||
|
def upd_plot(self):
|
||||||
|
if self.started:
|
||||||
|
plots.update_plot(3, 0)
|
||||||
|
plots.saveplot(3)
|
||||||
|
self.n += 10
|
||||||
|
self.show_plot()
|
||||||
|
|
||||||
|
def start_stop(self):
|
||||||
|
if not self.started:
|
||||||
|
self.start_btn.setText("Стоп")
|
||||||
|
self.started = True
|
||||||
|
self.save_btn.hide()
|
||||||
|
self.hint_btn.hide()
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.start_btn.setText("Продолжить")
|
||||||
|
self.started = False
|
||||||
|
self.save_btn.show()
|
||||||
|
self.hint_btn.show()
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self.started = False
|
||||||
|
self.start_btn.setText("Начать измерения")
|
||||||
|
self.save_btn.hide()
|
||||||
|
self.hint_btn.show()
|
||||||
|
self.n = 0
|
||||||
|
plots.empty_plot(3)
|
||||||
|
self.show_plot()
|
||||||
|
|
||||||
|
|
||||||
|
class Part2(QtWidgets.QWidget):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.n = 0
|
||||||
|
self.num = 0
|
||||||
|
self.i = 0
|
||||||
|
self.hint_open = False
|
||||||
|
self.started = False
|
||||||
|
self.q = QtGui.QScreen.availableGeometry(QtWidgets.QApplication.primaryScreen())
|
||||||
|
h = self.q.height() * 0.2
|
||||||
|
plots.empty_plot(4)
|
||||||
|
|
||||||
|
self.button = QtWidgets.QPushButton(self)
|
||||||
|
self.button.setGeometry(QtCore.QRect(20, 20, 40, 40))
|
||||||
|
self.button.setText("Esc")
|
||||||
|
|
||||||
|
self.points = QtWidgets.QLabel(self)
|
||||||
|
self.points.setGeometry(QtCore.QRect(7.5 * h - 150, 3 * h - 80, 300, 20))
|
||||||
|
self.points.setText('Измеренных точек в текущей серии: ' + str(self.n))
|
||||||
|
|
||||||
|
self.current = QtWidgets.QLabel(self)
|
||||||
|
self.current.setGeometry(QtCore.QRect(7.5 * h - 150, 3 * h - 120, 300, 20))
|
||||||
|
self.current.setText('Текущий ток разряда: ' + str(self.i))
|
||||||
|
self.current.setStyleSheet('color: green;')
|
||||||
|
|
||||||
|
self.disclaimer = QtWidgets.QLabel(self)
|
||||||
|
self.disclaimer.setText('<html><p align=\"left\"><span style=\" font-size:10pt; font-weight:600;\">Не '
|
||||||
|
'забудьте прочитать методику<\p><p align=\"left\"><span style=\" font-size:10pt; '
|
||||||
|
'font-weight:600;\">и подсказку выше перед началом работы!<\p><\html>')
|
||||||
|
self.disclaimer.setGeometry(7.5 * h - 150, h, 400, 100)
|
||||||
|
|
||||||
|
self.title = QtWidgets.QLabel(self)
|
||||||
|
self.title.setText(
|
||||||
|
"<html><head/><body><p align=\"center\"><span style=\" font-size:16pt; font-weight:600;\"> ЧАСТЬ "
|
||||||
|
"II</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Зондовые характеристики "
|
||||||
|
"плазмы</span></p></body></html>")
|
||||||
|
self.title.setGeometry(QtCore.QRect(self.q.width() // 2 - 200, 20, 400, 80))
|
||||||
|
|
||||||
|
self.back_button = QtWidgets.QPushButton(self)
|
||||||
|
self.back_button.setGeometry(QtCore.QRect(20, self.q.height() - 20, 80, 40))
|
||||||
|
self.back_button.setText("Назад")
|
||||||
|
|
||||||
|
self.start_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.start_btn.setText("Добавить серию")
|
||||||
|
self.start_btn.setGeometry(QtCore.QRect(7.5 * h - 150, 3 * h - 50, 120, 30))
|
||||||
|
|
||||||
|
self.delete_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.delete_btn.setText("Удалить серию")
|
||||||
|
self.delete_btn.setGeometry(QtCore.QRect(7.5 * h + 30, 3 * h - 50, 120, 30))
|
||||||
|
self.delete_btn.hide()
|
||||||
|
|
||||||
|
self.save_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.save_btn.setText("Сохранить")
|
||||||
|
self.save_btn.setGeometry(QtCore.QRect(7.5 * h - 60, 3 * h, 120, 30))
|
||||||
|
self.save_btn.hide()
|
||||||
|
|
||||||
|
self.hint_btn = QtWidgets.QPushButton(self)
|
||||||
|
self.hint_btn.setText('?')
|
||||||
|
self.hint_btn.setGeometry(QtCore.QRect(self.q.width() - 60, 20, 40, 40))
|
||||||
|
|
||||||
|
self.pixmap0 = QtGui.QPixmap('tmpplots/tmpplot4.jpg')
|
||||||
|
self.pixmap = self.pixmap0.scaledToHeight(3 * h)
|
||||||
|
self.plot1 = QtWidgets.QLabel(self)
|
||||||
|
self.plot1.setPixmap(self.pixmap)
|
||||||
|
self.plot1.setGeometry(QtCore.QRect(h, h + 20, 4 * h, 3 * h))
|
||||||
|
|
||||||
|
self.text = QtWidgets.QLabel(self)
|
||||||
|
self.text.setText("<html><p align=\"left\"><span style=\" font-size:10pt;\">Перед проведением измерений "
|
||||||
|
"зондовых характеристик</p><p align=\"left\"><span style=\" font-size:10pt;\">плазмы "
|
||||||
|
"проверьте подключение вольтметра V<sub>2</sub></p><p align=\"left\"><span style=\" "
|
||||||
|
"font-size:10pt;\">и амперметров A<sub>1 </sub>и А<sub>2</sub>, а также убедитесь,"
|
||||||
|
"</p><p align=\"left\"><span style=\" font-size:10pt\";>что переключатель П<sub>1</sub> "
|
||||||
|
"находится в положении II.</p><p align=\"left\"><span style=\" font-size:10pt;\">Установите "
|
||||||
|
"требуемый согласно методике разрядный ток,</p><p align=\"left\"><span style=\" "
|
||||||
|
"font-size:10pt\";>не изменяйте его в момент проведения серии измерений.</p><p "
|
||||||
|
"align=\"left\"><span style=\" font-size:10pt;\">При помощи потенциометра измерьте "
|
||||||
|
"ВАХ</p><p align=\"left\"><span style=\" font-size:10pt;\">в максимальном диапазоне, "
|
||||||
|
"учтите,</p><p align=\"left\"><span style=\" font-size:10pt;\">что полярность можно менять "
|
||||||
|
"с помощью</p><p align=\"left\"><span style=\" font-size:10pt;\">переключателя "
|
||||||
|
"П<sub>2</sub> только при токе I<sub>з</sub>= 0.</p><p align=\"left\"><span style=\" "
|
||||||
|
"font-size:10pt;\">График I<sub>з</sub>(U<sub>з</sub>) будет строиться автоматически,"
|
||||||
|
"</p><p align=\"left\"><span style=\" font-size:10pt;\">после завершения всех серий "
|
||||||
|
"измерений</p><p align=\"left\"><span style=\" font-size:10pt;\">можно сохранить полученные "
|
||||||
|
"значения и график.</p></html>")
|
||||||
|
self.text.setGeometry(QtCore.QRect(6 * h, h + 20, 3 * h, 2 * h + 20))
|
||||||
|
self.text.setStyleSheet("border: 1px solid black; background-color: white;")
|
||||||
|
self.text.hide()
|
||||||
|
|
||||||
|
self.button.clicked.connect(self.esc)
|
||||||
|
self.back_button.clicked.connect(self.back)
|
||||||
|
self.start_btn.clicked.connect(self.start_stop)
|
||||||
|
self.delete_btn.clicked.connect(self.delete)
|
||||||
|
self.hint_btn.clicked.connect(self.hint)
|
||||||
|
self.save_btn.clicked.connect(self.save_file)
|
||||||
|
|
||||||
|
timer = QtCore.QTimer(self)
|
||||||
|
timer.timeout.connect(self.upd_plot)
|
||||||
|
timer.start(500)
|
||||||
|
|
||||||
|
timer2 = QtCore.QTimer(self)
|
||||||
|
timer2.timeout.connect(self.cur_check)
|
||||||
|
timer2.start(1000)
|
||||||
|
|
||||||
|
@QtCore.Slot()
|
||||||
|
def cur_check(self):
|
||||||
|
if plots.experiment % 3 == 0:
|
||||||
|
self.i = 5
|
||||||
|
elif plots.experiment % 3 == 1:
|
||||||
|
self.i = 3
|
||||||
|
else:
|
||||||
|
self.i = 1.5
|
||||||
|
self.current.setText('Текущий ток разряда: ' + str(self.i) + 'мА')
|
||||||
|
|
||||||
|
def save_file(self):
|
||||||
|
file, check = QtWidgets.QFileDialog.getSaveFileName(None, "Сохранить график 2",
|
||||||
|
r"C:\Users\Vadim\Desktop\plot2.jpg", "Images (*.png *.jpg)")
|
||||||
|
if check:
|
||||||
|
plot1 = PIL.Image.open('tmpplots/tmpplot4.jpg')
|
||||||
|
plot1.save(file)
|
||||||
|
|
||||||
|
def hint(self):
|
||||||
|
if not self.hint_open:
|
||||||
|
self.text.show()
|
||||||
|
self.hint_open = True
|
||||||
|
else:
|
||||||
|
self.text.hide()
|
||||||
|
self.hint_open = False
|
||||||
|
|
||||||
|
def esc(self):
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def back(self):
|
||||||
|
self.w = TitleScreen()
|
||||||
|
self.w.showFullScreen()
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def show_plot(self):
|
||||||
|
self.points.setText('Измеренных точек в текущей серии: ' + str(self.n))
|
||||||
|
self.pixmap0 = QtGui.QPixmap('tmpplots/tmpplot4.jpg')
|
||||||
|
self.pixmap = self.pixmap0.scaledToHeight(0.6 * self.q.height())
|
||||||
|
self.plot1.setPixmap(self.pixmap)
|
||||||
|
|
||||||
|
def upd_plot(self):
|
||||||
|
if self.started:
|
||||||
|
plots.update_plot(4, self.num - 1)
|
||||||
|
plots.saveplot(4)
|
||||||
|
self.n += 10
|
||||||
|
self.show_plot()
|
||||||
|
|
||||||
|
def start_stop(self):
|
||||||
|
if not self.started:
|
||||||
|
self.start_btn.setText("Стоп")
|
||||||
|
self.started = True
|
||||||
|
self.save_btn.hide()
|
||||||
|
self.hint_btn.hide()
|
||||||
|
if self.num != 0:
|
||||||
|
plots.plus_plot(4)
|
||||||
|
self.num += 1
|
||||||
|
self.n = 0
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.start_btn.setText("Добавить серию")
|
||||||
|
self.started = False
|
||||||
|
self.save_btn.show()
|
||||||
|
self.hint_btn.show()
|
||||||
|
self.delete_btn.show()
|
||||||
|
|
||||||
|
def delete(self):
|
||||||
|
self.started = False
|
||||||
|
self.start_btn.setText("Добавить серию")
|
||||||
|
self.save_btn.hide()
|
||||||
|
self.hint_btn.show()
|
||||||
|
self.n = 0
|
||||||
|
plots.minus_plot(4)
|
||||||
|
plots.saveplot(4)
|
||||||
|
self.show_plot()
|
||||||
|
self.num -= 1
|
||||||
|
if self.num == 0:
|
||||||
|
self.save_btn.hide()
|
||||||
|
self.delete_btn.hide()
|
Loading…
Reference in New Issue
Block a user