Nazarchuk/Automation/Main.py
nazarchuk.as 697711e4d2 l
2022-12-29 21:48:27 +03:00

266 lines
8.6 KiB
Python

import os
import sys
# import serial
import csv
import time
# from PyQt import KeepAspectRatioByExpanding
from PyQt6.QtGui import QIcon, QPalette, QImage, QBrush
from PyQt6.QtWidgets import (QApplication,
QLineEdit,
QPushButton,
QWidget,
QGridLayout,
QTableWidgetItem,
QHeaderView,
QLabel
)
from Abstract_window import AbstractWindow
from Main_experiment_window import MainWindow
from ChartWindow import ChartWindow
from GraduationWindow import GraduationWindow
from SignWindow import SignWindow
from ResistanceWindow import ResistanceWindow
class Start:
def __init__(self):
self.number = 0
self.foldername = None
if not QApplication.instance():
self.app = QApplication(sys.argv)
else:
self.app = QApplication.instance()
self.current=0
self.window = StartWindow(self)
l = 'usbtmc'+str(1)
self.I_M_name = os.path.join('/dev', l)
# self.add_equip()
self.draw()
self.app.exec()
def draw(self):
self.window.show()
def change_number(self):
if self.number == 0:
self.window.close()
self.window = StartWindow(self)
if self.number == 10:
self.window.close()
self.window = GraduationWindow(self)
if self.number == 20:
self.window.close()
self.window = MainWindow(self)
if self.number == 30:
self.window.close()
self.window = SignWindow(self)
if self.number == 40:
self.window.close()
self.window = ResistanceWindow(self)
if self.number == 50:
self.window.close()
self.window = ChartWindow(self)
self.draw()
def add_equip(self):
self.ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate=9600,
timeout=1
)
self.ser.isOpen()
msg = 'OUTput on\n'
self.ser.write(msg.encode('ascii'))
for i in range(3):
l = 'usbtmc'+str(i)
file = os.path.join('/dev', l)
f = open(file, 'w')
f.write('*IDN?\n')
f.close()
f = open(file, 'r')
st = f.read(35)
print(st, i)
f.close()
if st=='AKIP,AKIP-2101/2,NDM36GBD4R0065,3.0':
self.amp_name = os.path.join('/dev', l)
if st=='AKIP,AKIP-2101/2,NDM36GBD4R0064,3.0':
self.I_M_name = os.path.join('/dev', l)
if st=='Prist,V7-78/1,TW00023291,03.31-01-0':
self.volt_name = os.path.join('/dev', l)
def close(self):
pass
msg = 'VOLTage '+str(0)+'\n'
self.ser.write(msg.encode('ascii'))
def __del__(self):
pass
msg = 'OUTput off\n'
self.ser.write(msg.encode('ascii'))
class StartWindow(AbstractWindow):
def __init__(self, parent):
super().__init__()
self.setWindowTitle('Эффект Холла в полупроводниках')
self.parent = parent
self.parent.a = 0.05/10**3
self.parent.l = 7.5/10**3
self.parent.L = 8/10**3
self.parent.sigma = 6103401*7.5/8
self.parent.sigma_sigma = 373
self.parent.dataname = 'data.csv'
self.centralwidget = QWidget()
self.resize(1400, 800)
self.setCentralWidget(self.centralwidget)
if not self.parent.foldername:
self.lineEdit = QLineEdit(placeholderText='Введите фамилию')
else:
self.lineEdit = QLineEdit(placeholderText=self.parent.foldername)
self.lineEdit.returnPressed.connect(self.enter_name)
self.flow = QPushButton('Градуировка электромагнита')
self.flow.clicked.connect(self.flow_click)
# if not self.parent.foldername or not self.parent.current==0:
# self.flow.setEnabled(False)
self.flow_text = QLabel('Измеряется зависимость тока через электромагнит от магнитной индукции при помощи измерителя магнитной индукции', self)
self.sign = QPushButton('Знак носителей')
self.sign.clicked.connect(self.sign_click)
# if not self.parent.current==2:
# self.sign.setEnabled(False)
self.sign_text = QLabel('Устанавливается характер проводимости: электронный или дырочный', self)
self.res = QPushButton('Удельная проводимость')
self.res.clicked.connect(self.res_click)
# if not self.parent.current==3:
# self.res.setEnabled(False)
self.res_text = QLabel('Производится измерение оммического сопротивления образца', self)
self.chart = QPushButton('Обработка данных')
self.chart.clicked.connect(self.chart_click)
# if not self.parent.current==4:
# self.chart.setEnabled(False)
self.chart_text = QLabel('Выполняется расчет всех констант образца и построение графиков', self)
self.main = QPushButton('Определение ЭДС Холла')
self.main.clicked.connect(self.main_click)
# if not self.parent.current==1:
# self.main.setEnabled(False)
if self.parent.foldername:
self.lineEdit.setReadOnly(True)
self.main_text = QLabel('Определяется ЭДС Холла', self)
self.hbox_layout = QGridLayout(self.centralwidget)
self.hbox_layout.setRowStretch(1, 1)
self.hbox_layout.addWidget(self.lineEdit, 1, 0, 1, 2)
self.hbox_layout.addWidget(self.flow, 2, 0)
self.hbox_layout.addWidget(self.flow_text, 2, 1)
self.hbox_layout.addWidget(self.main, 3, 0)
self.hbox_layout.addWidget(self.main_text, 3, 1)
self.hbox_layout.addWidget(self.sign, 4, 0)
self.hbox_layout.addWidget(self.sign_text, 4, 1)
self.hbox_layout.addWidget(self.res, 5, 0)
self.hbox_layout.addWidget(self.res_text, 5, 1)
self.hbox_layout.addWidget(self.chart, 6, 0)
self.hbox_layout.addWidget(self.chart_text, 6, 1)
def flow_click(self):
self.parent.number = 10
self.parent.change_number()
self.parent.current+=1
def chart_click(self):
self.parent.number = 50
self.parent.change_number()
def main_click(self):
self.parent.number = 20
self.parent.change_number()
self.parent.current+=1
def res_click(self):
self.parent.number = 40
self.parent.change_number()
self.parent.current+=1
def sign_click(self):
self.parent.number = 30
self.parent.change_number()
self.parent.current+=1
def enter_name(self):
# make folder
self.parent.foldername = self.lineEdit.text()
self.parent.folder = os.path.join(os.getcwd(), self.parent.foldername)
if not os.path.exists(self.parent.folder):
os.mkdir(self.parent.folder)
self.flow.setEnabled(True)
self.lineEdit.setReadOnly(True)
def testing_analisis(self):
self.chart.setEnabled(True)
self.parent.foldername = 'Перерптлв'
self.parent.folder = os.path.join(os.getcwd(), self.parent.foldername)
if not os.path.exists(self.parent.folder):
os.mkdir(self.parent.folder)
self.parent.dataname = 'data.csv'
self.parent.flow_dataname = 'Induction_data.csv'
self.parent.a=2*10**-3
self.parent.sigma = -313
self.parent.sigma_sigma=0
start = Start()
# import time
# import serial
# ser=serial.Serial(
# port='/dev/ttyUSB2',
# baudrate=9600,
# timeout=1
# )
# ser.isOpen()
# msg='Output on\n'
# ser.write(msg.encode('ascii'))
# msg='VOLTage 1\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)