2022-10-31 12:45:59 +03:00
|
|
|
|
import os
|
|
|
|
|
import sys
|
2022-11-01 23:54:46 +03:00
|
|
|
|
import csv
|
|
|
|
|
import time
|
2022-10-31 12:45:59 +03:00
|
|
|
|
from PyQt6.QtCore import Qt
|
|
|
|
|
from PyQt6.QtGui import QAction
|
|
|
|
|
from PyQt6.QtWidgets import (QHBoxLayout,
|
|
|
|
|
QApplication,
|
|
|
|
|
QCheckBox,
|
|
|
|
|
QComboBox,
|
|
|
|
|
QDateEdit,
|
|
|
|
|
QDateTimeEdit,
|
|
|
|
|
QDial,
|
|
|
|
|
QDoubleSpinBox,
|
|
|
|
|
QFontComboBox,
|
|
|
|
|
QLabel,
|
|
|
|
|
QLCDNumber,
|
|
|
|
|
QLineEdit,
|
|
|
|
|
QMainWindow,
|
|
|
|
|
QProgressBar,
|
|
|
|
|
QPushButton,
|
|
|
|
|
QRadioButton,
|
|
|
|
|
QSlider,
|
|
|
|
|
QSpinBox,
|
|
|
|
|
QTimeEdit,
|
|
|
|
|
QVBoxLayout,
|
|
|
|
|
QWidget,
|
|
|
|
|
QTableWidget,
|
|
|
|
|
QGridLayout,
|
|
|
|
|
QMenu,
|
|
|
|
|
QTableWidgetItem,
|
2022-11-01 23:54:46 +03:00
|
|
|
|
QHeaderView,
|
|
|
|
|
|
2022-10-31 18:29:30 +03:00
|
|
|
|
)
|
2022-10-31 12:45:59 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AbstractWindow(QMainWindow):
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super().__init__()
|
|
|
|
|
self.create_actions()
|
|
|
|
|
self.create_menuBar()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def create_menuBar(self):
|
|
|
|
|
menuBar = self.menuBar()
|
|
|
|
|
self.fileMenu = QMenu("&Файл", self)
|
|
|
|
|
menuBar.addMenu(self.fileMenu)
|
|
|
|
|
self.helpMenu = QMenu("&Помощь")
|
|
|
|
|
menuBar.addMenu(self.helpMenu)
|
|
|
|
|
self.fileMenu.addAction(self.exitAction)
|
|
|
|
|
self.helpMenu.addAction(self.helpContentAction)
|
|
|
|
|
self.helpMenu.addAction(self.aboutAction)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def create_actions(self):
|
|
|
|
|
self.exitAction = QAction("&Выход", self)
|
|
|
|
|
self.exitAction.triggered.connect(self.exit_click)
|
|
|
|
|
self.helpContentAction = QAction("&Инструкция", self)
|
|
|
|
|
self.helpContentAction.triggered.connect(self.help_click)
|
|
|
|
|
self.aboutAction = QAction("&О программе", self)
|
|
|
|
|
self.aboutAction.triggered.connect(self.about_click)
|
|
|
|
|
|
|
|
|
|
def exit_click(self):
|
|
|
|
|
self.close()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def help_click(self):
|
|
|
|
|
print('Help')
|
|
|
|
|
# TODO
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def about_click(self):
|
|
|
|
|
print('About')
|
|
|
|
|
# TODO
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Start:
|
|
|
|
|
def __init__(self):
|
|
|
|
|
self.number = 0
|
2022-10-31 18:29:30 +03:00
|
|
|
|
self.foldername = ''
|
2022-10-31 12:45:59 +03:00
|
|
|
|
if not QApplication.instance():
|
|
|
|
|
self.app = QApplication(sys.argv)
|
|
|
|
|
else:
|
|
|
|
|
self.app = QApplication.instance()
|
|
|
|
|
self.window = StartWindow(self)
|
|
|
|
|
self.draw()
|
|
|
|
|
self.app.exec()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def __del__(self):
|
|
|
|
|
print('destruct')
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def draw(self):
|
|
|
|
|
self.window.show()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def change_number(self):
|
2022-10-31 18:29:30 +03:00
|
|
|
|
if self.number == 2:
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.window.close()
|
|
|
|
|
self.window = MainExperiment1Window(self)
|
|
|
|
|
if self.number == 1:
|
|
|
|
|
pass
|
|
|
|
|
self.draw()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
|
|
|
|
|
class StartWindow(AbstractWindow):
|
|
|
|
|
def __init__(self, parent):
|
|
|
|
|
super().__init__()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.setWindowTitle('Эффект Холла в полупроводниках')
|
|
|
|
|
self.parent = parent
|
|
|
|
|
self.centralwidget = QWidget()
|
|
|
|
|
self.resize(1400, 800)
|
|
|
|
|
self.setCentralWidget(self.centralwidget)
|
|
|
|
|
self.lineEdit = QLineEdit(placeholderText='Введите фамилию')
|
|
|
|
|
self.lineEdit.returnPressed.connect(self.enter_name)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.flow = QPushButton('измерение потока')
|
|
|
|
|
self.flow.clicked.connect(self.flow_click)
|
|
|
|
|
self.flow.setEnabled(False)
|
|
|
|
|
self.main = QPushButton('основной эксперимент')
|
|
|
|
|
self.main.clicked.connect(self.main_click)
|
|
|
|
|
self.main.setEnabled(False)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
|
|
|
|
self.hbox_layout = QGridLayout(self.centralwidget)
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.hbox_layout.setRowStretch(1, 1)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
self.hbox_layout.addWidget(self.lineEdit, 1, 0, 1, 2)
|
|
|
|
|
self.hbox_layout.addWidget(self.flow, 2, 0)
|
|
|
|
|
self.hbox_layout.addWidget(self.main, 2, 1)
|
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def flow_click(self):
|
2022-10-31 18:29:30 +03:00
|
|
|
|
self.parent.number = 1
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.parent.change_number()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def main_click(self):
|
2022-10-31 18:29:30 +03:00
|
|
|
|
self.parent.number = 2
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.parent.change_number()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
def enter_name(self):
|
2022-11-01 23:54:46 +03:00
|
|
|
|
# make folder
|
2022-10-31 18:29:30 +03:00
|
|
|
|
self.parent.foldername = self.lineEdit.text()
|
2022-11-01 23:54:46 +03:00
|
|
|
|
self.parent.folder = os.path.join(os.getcwd(), self.parent.foldername)
|
|
|
|
|
if not os.path.exists(self.parent.folder):
|
|
|
|
|
os.mkdir(self.parent.folder)
|
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.flow.setEnabled(True)
|
|
|
|
|
self.main.setEnabled(True)
|
|
|
|
|
self.lineEdit.setReadOnly(True)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
class MainExperiment1Window(AbstractWindow):
|
|
|
|
|
def __init__(self, parent):
|
2022-11-01 23:54:46 +03:00
|
|
|
|
# TODO : clean code
|
2022-10-31 12:45:59 +03:00
|
|
|
|
super().__init__()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.setWindowTitle('Основной эксперимент')
|
2022-10-31 18:29:30 +03:00
|
|
|
|
self.start_time = 0
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.parent = parent
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
|
|
|
|
# make masthead
|
2022-11-01 23:54:46 +03:00
|
|
|
|
self.dataname = 'data.csv'
|
|
|
|
|
head_1 = 'I_0,mA'
|
|
|
|
|
head_2 = 'U_34,mV'
|
|
|
|
|
head_3 = 't,s'
|
|
|
|
|
with open(os.path.join(self.parent.folder, self.dataname), 'w') as file:
|
|
|
|
|
wr = csv.writer(file)
|
|
|
|
|
wr.writerow([head_1, head_2, head_3])
|
|
|
|
|
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-10-31 12:45:59 +03:00
|
|
|
|
self.centralwidget = QWidget()
|
|
|
|
|
self.resize(1400, 800)
|
|
|
|
|
self.setCentralWidget(self.centralwidget)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-11-01 23:54:46 +03:00
|
|
|
|
self.start = QPushButton('Старт')
|
|
|
|
|
self.start.clicked.connect(self.start_clicked_nodata)
|
|
|
|
|
self.start.setEnabled(False)
|
|
|
|
|
|
|
|
|
|
self.stop = QPushButton('Стоп')
|
|
|
|
|
self.stop.clicked.connect(self.stop_clicked)
|
|
|
|
|
self.stop.setEnabled(False)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-11-01 23:54:46 +03:00
|
|
|
|
grid_layout = QGridLayout(self.centralwidget)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-11-01 23:54:46 +03:00
|
|
|
|
self.table = QTableWidget(self) # Create a self.table
|
|
|
|
|
self.table.setColumnCount(3) #Set three columns
|
|
|
|
|
self.table.setRowCount(0)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-11-01 23:54:46 +03:00
|
|
|
|
self.table.setHorizontalHeaderLabels([head_1, head_2, head_3])
|
|
|
|
|
|
|
|
|
|
header = self.table.horizontalHeader()
|
|
|
|
|
header.setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch)
|
|
|
|
|
header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
|
|
|
|
|
header.setSectionResizeMode(2, QHeaderView.ResizeMode.Stretch)
|
|
|
|
|
self.table.setItem(0, 0, QTableWidgetItem("Text in column 1"))
|
|
|
|
|
self.table.setItem(0, 1, QTableWidgetItem("Text in column 2"))
|
|
|
|
|
self.table.setItem(0, 2, QTableWidgetItem("Text in column 3"))
|
|
|
|
|
self.table.resizeColumnsToContents()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.lineEdit = QLineEdit(placeholderText='Введите что-то')
|
|
|
|
|
self.lineEdit.returnPressed.connect(self.enter_smth)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-11-01 23:54:46 +03:00
|
|
|
|
grid_layout.addWidget(self.table, 0, 0, 2, 1) # Adding the table to the grid
|
|
|
|
|
grid_layout.addWidget(self.lineEdit, 0, 2, -1, -1)
|
|
|
|
|
grid_layout.addWidget(self.start, 1, 2)
|
|
|
|
|
grid_layout.addWidget(self.stop, 1, 3)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-11-01 23:54:46 +03:00
|
|
|
|
|
|
|
|
|
self.parent.draw()
|
|
|
|
|
|
|
|
|
|
def enter_smth(self):
|
|
|
|
|
# TODO
|
|
|
|
|
self.parent.smth = self.lineEdit.text()
|
|
|
|
|
self.start.setEnabled(True)
|
|
|
|
|
self.lineEdit.setReadOnly(True)
|
|
|
|
|
|
|
|
|
|
def start_clicked_nodata(self):
|
|
|
|
|
# function to test writing data
|
|
|
|
|
current_time = round(time.time()*1000)
|
|
|
|
|
v = str(current_time/60)
|
|
|
|
|
a=v
|
|
|
|
|
t = str(current_time-self.start_time)
|
|
|
|
|
with open(os.path.join(self.parent.folder, self.dataname), 'a') as file:
|
|
|
|
|
wr = csv.writer(file)
|
|
|
|
|
wr.writerow([v, a, str(current_time-self.start_time)])
|
|
|
|
|
self.table.insertRow(self.table.rowCount())
|
|
|
|
|
self.table.setItem(self.table.rowCount()-1, 0, QTableWidgetItem(v))
|
|
|
|
|
self.table.setItem(self.table.rowCount()-1, 1, QTableWidgetItem(a))
|
|
|
|
|
self.table.setItem(self.table.rowCount()-1, 2, QTableWidgetItem(t))
|
|
|
|
|
|
|
|
|
|
self.stop.setEnabled(True)
|
|
|
|
|
|
|
|
|
|
def stop_clicked(self):
|
|
|
|
|
# TODO
|
|
|
|
|
print('stop')
|
|
|
|
|
self.stop.setEnabled(False)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
2022-11-01 23:54:46 +03:00
|
|
|
|
def start_click(self):
|
2022-10-31 18:29:30 +03:00
|
|
|
|
# measure voltage and current
|
2022-10-31 12:45:59 +03:00
|
|
|
|
volt_name = os.path.join('/dev', 'usbtmc1')
|
2022-10-31 18:29:30 +03:00
|
|
|
|
f_volt = open(volt_name, 'w')
|
2022-10-31 12:45:59 +03:00
|
|
|
|
f_volt.write('Measure:Voltage:DC?\n')
|
|
|
|
|
f_volt.close()
|
|
|
|
|
amp_name = os.path.join('/dev', 'usbtmc2')
|
2022-10-31 18:29:30 +03:00
|
|
|
|
f_amp = open(amp_name, 'w')
|
2022-10-31 12:45:59 +03:00
|
|
|
|
f_amp.write('Measure:Current:DC?\n')
|
|
|
|
|
f_amp.close()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
|
|
|
|
|
f_volt = open(volt_name, 'r')
|
2022-10-31 12:45:59 +03:00
|
|
|
|
v = f_volt.read(15)
|
2022-10-31 18:29:30 +03:00
|
|
|
|
f_amp = open(amp_name, 'r')
|
2022-10-31 12:45:59 +03:00
|
|
|
|
a = f_amp.read(15)
|
|
|
|
|
f_volt.close()
|
|
|
|
|
f_amp.close()
|
2022-10-31 18:29:30 +03:00
|
|
|
|
current_time = round(time.time()*1000)
|
|
|
|
|
s = v + a + str(current_time - self.start_time)
|
2022-11-01 23:54:46 +03:00
|
|
|
|
with open(os.path.join(self.parent.folder, self.dataname), 'a') as file:
|
|
|
|
|
wr = csv.writer(file)
|
|
|
|
|
wr.writerow([v, a, str(current_time-self.start_time)])
|
|
|
|
|
|
|
|
|
|
start = Start()
|
|
|
|
|
|
|
|
|
|
# =============================================================================
|
|
|
|
|
# import time
|
|
|
|
|
# import serial
|
|
|
|
|
#
|
|
|
|
|
# ser=serial.Serial(
|
|
|
|
|
# port='/dev/ttyUSB0',
|
|
|
|
|
# baudrate=9600,
|
|
|
|
|
# timeout=1
|
|
|
|
|
# )
|
|
|
|
|
# ser.isOpen()
|
|
|
|
|
#
|
|
|
|
|
# msg='SYSTem:REMote\n'
|
|
|
|
|
# ser.write(msg.encode('ascii'))
|
|
|
|
|
#
|
|
|
|
|
# while 1:
|
|
|
|
|
#
|
|
|
|
|
# msg='Read?\n'
|
|
|
|
|
# ser.write(msg.encode('ascii'))
|
|
|
|
|
# time.sleep(1)
|
|
|
|
|
#
|
|
|
|
|
# bytesToRead=ser.inWaiting()
|
|
|
|
|
# data=ser.read(bytesToRead)
|
|
|
|
|
# print(data)
|
|
|
|
|
#
|
|
|
|
|
# =============================================================================
|