From bf75188f82bc2c87fb4e4e6417e0dc0aefb8b39e Mon Sep 17 00:00:00 2001 From: "nazarchuk.as" Date: Mon, 14 Nov 2022 21:00:20 +0300 Subject: [PATCH] add new window --- Automation/GraduationWindow.py | 115 +++++++++++ Automation/Main.py | 180 +++++++++--------- Automation/Main_experiment_window.py | 11 -- .../GraduationWindow.cpython-39.pyc | Bin 0 -> 3944 bytes .../Main_experiment_window.cpython-39.pyc | Bin 7826 -> 7512 bytes Automation/j/Induction_data.csv | 12 +- Automation/j/data.csv | 4 - 7 files changed, 209 insertions(+), 113 deletions(-) create mode 100644 Automation/GraduationWindow.py create mode 100644 Automation/__pycache__/GraduationWindow.cpython-39.pyc diff --git a/Automation/GraduationWindow.py b/Automation/GraduationWindow.py new file mode 100644 index 0000000..3709284 --- /dev/null +++ b/Automation/GraduationWindow.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Mon Nov 14 20:18:17 2022 + +@author: anna +""" + +import os +import csv +import time +from PyQt6.QtWidgets import (QLineEdit, + QPushButton, + QWidget, + QTableWidget, + QGridLayout, + QTableWidgetItem, + QHeaderView, + ) +from Abstract_window import AbstractWindow + + +class GraduationWindow(AbstractWindow): + def __init__(self, parent): + super().__init__() + + self.setWindowTitle('Градуировка электромагнита') + self.parent = parent + self.volt = 0 + + # make csv file + self.parent.flow_dataname = 'Induction_data.csv' + self.heads = ['B,mTl', 'E,mV', 'I_M,mA','t,ms'] + with open(os.path.join(self.parent.folder, self.parent.flow_dataname), 'w') as file: + wr = csv.writer(file) + wr.writerow(self.heads) + + self.centralwidget = QWidget() + self.resize(1400, 800) + self.setCentralWidget(self.centralwidget) + self.grid_layout = QGridLayout(self.centralwidget) + + self.start = QPushButton('Старт') + self.start.clicked.connect(self.start_clicked) + self.start.setEnabled(True) + + self.menu = QPushButton('Меню') + self.menu.setEnabled(False) + self.menu.clicked.connect(self.menu_clicked) + + self.lineEdit = QLineEdit(placeholderText='Индукция B, мТл') + self.lineEdit.returnPressed.connect(self.enter_value) + self.lineEdit.setReadOnly(True) + + self.table = QTableWidget(self) # Create a self.table + self.table.setColumnCount(len(self.heads)) # Set three columns + self.table.setRowCount(0) + self.table.setHorizontalHeaderLabels(self.heads) + header = self.table.horizontalHeader() + for i in range(len(self.heads)): + header.setSectionResizeMode(i, QHeaderView.ResizeMode.Stretch) + self.table.resizeColumnsToContents() + + self.grid_layout.addWidget(self.start, 0, 0) + self.grid_layout.addWidget(self.lineEdit, 1, 0) + self.grid_layout.addWidget(self.table, 0, 3, -1, 1) + self.grid_layout.addWidget(self.menu, 2, 0) + + def menu_clicked(self): + self.parent.number = 0 + self.parent.change_number() + + def start_clicked(self): + self.start.setEnabled(False) + self.start_time = round(time.time()*1000) + self.lineEdit.setReadOnly(False) + self.menu.setEnabled(True) + + def enter_value(self): + self.lineEdit.setReadOnly(True) + self.no_data() + self.lineEdit.clear() + self.lineEdit.setReadOnly(False) + + def no_data(self): + current_time = round(time.time()*1000) + b = self.lineEdit.text() + u = str((current_time-self.start_time)/60) + i = str((current_time-self.start_time)/60/2) + t = str(current_time-self.start_time) + self.save_data([b, u, i, t]) + + def save_data(self, data): + with open(os.path.join(self.parent.folder, self.parent.flow_dataname), 'a') as file: + wr = csv.writer(file) + wr.writerow(data) + self.table.insertRow(self.table.rowCount()) + for i in range(len(data)): + self.table.setItem(self.table.rowCount()-1, i, + QTableWidgetItem(str(data[i]))) + + def take_data(self): + t = (round(time.time()*1000)-self.start_time) + b = self.lineEdit.text() + msg = 'VOLTage '+str(self.volt)+'\n' + self.parent.ser.write(msg.encode('ascii')) + time.sleep(1) + + msg = 'MEASure:Current?\n' + self.parent.ser.write(msg.encode('ascii')) + time.sleep(1) + bytesToRead = self.parent.ser.inWaiting() + I_M = self.parent.ser.read(bytesToRead) + self.volt += 5 + self.save_data([b, self.volt, I_M, t]) \ No newline at end of file diff --git a/Automation/Main.py b/Automation/Main.py index c42da1a..5aa9800 100644 --- a/Automation/Main.py +++ b/Automation/Main.py @@ -8,25 +8,27 @@ from PyQt6.QtWidgets import (QApplication, QLineEdit, QPushButton, QWidget, - QTableWidget, QGridLayout, QTableWidgetItem, QHeaderView, + QLabel ) from Abstract_window import AbstractWindow from Main_experiment_window import (MainExperimentDataWindow, MainExperimentChartWindow) +from GraduationWindow import GraduationWindow class Start: def __init__(self): self.number = 0 - self.foldername = '' + self.foldername = None if not QApplication.instance(): self.app = QApplication(sys.argv) else: self.app = QApplication.instance() self.window = StartWindow(self) + # self.add_ser() self.draw() self.app.exec() @@ -34,19 +36,32 @@ class Start: 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 = MainExperimentDataWindow(self) if self.number == 21: self.window.close() self.window = MainExperimentChartWindow(self) - if self.number == 10: + if self.number == 30: self.window.close() - self.window = FlowWindow(self) - if self.number == 0: - self.window.close() - self.window = StartWindow(self) + self.window = SignWindow(self) self.draw() + + def add_ser(self): + self.ser = serial.Serial( + port='/dev/ttyUSB2', + baudrate=9600, + timeout=1 + ) + self.ser.isOpen() + msg = 'OUTput on\n' + self.ser.write(msg.encode('ascii')) class StartWindow(AbstractWindow): @@ -58,20 +73,34 @@ class StartWindow(AbstractWindow): self.centralwidget = QWidget() self.resize(1400, 800) self.setCentralWidget(self.centralwidget) - self.lineEdit = QLineEdit(placeholderText='Введите фамилию') + 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 = QPushButton('Градуировка электромагнита') self.flow.clicked.connect(self.flow_click) - self.flow.setEnabled(False) - self.main = QPushButton('основной эксперимент') + if not self.parent.foldername: + self.flow.setEnabled(False) + + self.sign = QPushButton('Знак носителей') + self.sign.clicked.connect(self.sign_click) + if not self.parent.foldername: + self.sign.setEnabled(False) + + self.main = QPushButton('Основной эксперимент') self.main.clicked.connect(self.main_click) - self.main.setEnabled(False) - + if not self.parent.foldername: + self.main.setEnabled(False) + if self.parent.foldername: + self.lineEdit.setReadOnly(True) + 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.sign, 3, 0) self.hbox_layout.addWidget(self.main, 2, 1) def flow_click(self): @@ -81,6 +110,10 @@ class StartWindow(AbstractWindow): def main_click(self): self.parent.number = 20 self.parent.change_number() + + def sign_click(self): + self.parent.number = 30 + self.parent.change_number() def enter_name(self): # make folder @@ -91,97 +124,71 @@ class StartWindow(AbstractWindow): self.flow.setEnabled(True) self.main.setEnabled(True) + self.sign.setEnabled(True) self.lineEdit.setReadOnly(True) - -class FlowWindow(AbstractWindow): +class SignWindow(AbstractWindow): def __init__(self, parent): super().__init__() - - self.setWindowTitle('Градуировка электромагнита') + + self.setWindowTitle('Определение знака носителей') self.parent = parent + self.start = QPushButton('Старт') + self.start.clicked.connect(self.start_clicked) + self.start.setEnabled(True) + + self.menu = QPushButton('Меню') + self.menu.setEnabled(False) + self.menu.clicked.connect(self.menu_clicked) - # make csv file - self.parent.flow_dataname = 'Induction_data.csv' - head_1 = 'B,mTl' - head_2 = 'U,mV' - head_3 = 't,ms' - with open(os.path.join(self.parent.folder, self.parent.flow_dataname), 'w') as file: - wr = csv.writer(file) - wr.writerow([head_1, head_2, head_3]) - + self.with_field = QLabel('С полем: ', self) + self.without_field = QLabel('С полем: ', self) + self.with_field_value = QLabel(self) + self.without_field_value = QLabel(self) + self.centralwidget = QWidget() self.resize(1400, 800) self.setCentralWidget(self.centralwidget) self.grid_layout = QGridLayout(self.centralwidget) - - self.start = QPushButton('Старт') - self.start.clicked.connect(self.start_clicked) - self.start.setEnabled(True) - self.next = QPushButton(self) - self.next.setIcon(QIcon('arrow.png')) - self.next.setEnabled(False) - self.next.clicked.connect(self.next_clicked) - - self.lineEdit = QLineEdit(placeholderText='Индукция B, мТл') - self.lineEdit.returnPressed.connect(self.enter_value) - self.lineEdit.setReadOnly(True) - - self.table = QTableWidget(self) # Create a self.table - self.table.setColumnCount(3) # Set three columns - self.table.setRowCount(0) - 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.grid_layout.addWidget(self.start, 0, 0, 1, -1) + self.grid_layout.addWidget(self.with_field, 1, 0) + self.grid_layout.addWidget(self.with_field_value, 1, 1) + self.grid_layout.addWidget(self.without_field, 2, 0) + self.grid_layout.addWidget(self.without_field_value, 2, 1) + self.grid_layout.addWidget(self.menu, 3, 0, 1, -1) - self.grid_layout.addWidget(self.start, 0, 0) - self.grid_layout.addWidget(self.lineEdit, 1, 0) - self.grid_layout.addWidget(self.table, 1, 3) - self.grid_layout.addWidget(self.next, 2, 0) - - def next_clicked(self): - self.parent.number = 20 + def menu_clicked(self): + self.parent.number = 0 self.parent.change_number() def start_clicked(self): self.start.setEnabled(False) - self.start_time = round(time.time()*1000) - self.lineEdit.setReadOnly(False) - self.next.setEnabled(True) - - def enter_value(self): - self.lineEdit.setReadOnly(True) - self.get_data() - self.lineEdit.clear() - self.lineEdit.setReadOnly(False) - - def get_data(self): + with_field=10 + without_field=15 + # without_field, with_field = self.get_values() + self.with_field_value.setText(str(with_field)+', mV') + self.without_field_value.setText(str(without_field)+', mV') + self.menu.setEnabled(True) - - - # bytesToRead=ser.inWaiting() - # data=ser.read(bytesToRead) - # print(data) - - current_time = round(time.time()*1000) - b = self.lineEdit.text() - u = str((current_time-self.start_time)/60) - t = str(current_time-self.start_time) - with open(os.path.join(self.parent.folder, self.parent.flow_dataname), 'a') as file: - wr = csv.writer(file) - wr.writerow([b, u, str(t)]) - self.table.insertRow(self.table.rowCount()) - self.table.setItem(self.table.rowCount()-1, 0, QTableWidgetItem(b)) - self.table.setItem(self.table.rowCount()-1, 1, QTableWidgetItem(u)) - self.table.setItem(self.table.rowCount()-1, 2, QTableWidgetItem(t)) + def measure(self, volt): + msg = 'VOLTage '+str(volt)+'\n' + self.parent.ser.write(msg.encode('ascii')) + time.sleep(1) + volt_name = os.path.join('/dev', 'usbtmc0') + f_volt = open(volt_name, 'w') + f_volt.write('Measure:Voltage:DC?\n') + f_volt.close() + f_volt = open(volt_name, 'r') + v = '{:.9f}'.format(float(f_volt.read(15))*10**3) + f_volt.close() + return v + + def get_values(self): + without_field = self.measure(0) + with_field = self.measure(10) + return without_field, with_field @@ -213,4 +220,3 @@ start = Start() # bytesToRead=ser.inWaiting() # data=ser.read(bytesToRead) # print(data) - diff --git a/Automation/Main_experiment_window.py b/Automation/Main_experiment_window.py index 6a8fb87..70da9d3 100644 --- a/Automation/Main_experiment_window.py +++ b/Automation/Main_experiment_window.py @@ -46,7 +46,6 @@ class MainExperimentDataWindow(AbstractWindow): self.setWindowTitle('Основной эксперимент. Получение данных') self.parent = parent - # self.add_ser() self.data_thread = ThreadData(self) self.resize(1400, 800) self.number_iteration = 1 @@ -101,16 +100,6 @@ class MainExperimentDataWindow(AbstractWindow): self.grid_layout.addWidget(self.new, 2, 2, 1, -1) self.grid_layout.addWidget(self.chart, 3, 2, 1, -1) - def add_ser(self): - self.parent.ser = serial.Serial( - port='/dev/ttyUSB2', - baudrate=9600, - timeout=1 - ) - self.parent.ser.isOpen() - msg = 'OUTput on\n' - self.parent.ser.write(msg.encode('ascii')) - def enter_a(self): # TODO self.parent.a = self.lineEdit.text() diff --git a/Automation/__pycache__/GraduationWindow.cpython-39.pyc b/Automation/__pycache__/GraduationWindow.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5cc9c61769943988517169b1f3bdc5f7afe3a7f GIT binary patch literal 3944 zcmai1&5snv6|erBo}QWAVFSzedJ~B4!N3A`;)po0VGWoB78W+3jAV71sb;r_p6;c( zhBc!>vRErVIgXS|4pB5~DF@#y$B`mz=Wm$3)-^d~|Akzf->aU*0~;&ds@GMos$RW% z-yPO!KEv}xPqh9r$=E+>F#gyWyoHwk27t3B;|4bqqiN``*);XnYFhYOiQRFUPRDJ! zol>*Z@tR(z+$?werr)VFD+cYglWM2dtQqVQ;|_N}VBC#r>sE7un>Sgb)O*dJ7f~o9 zKAWYpSJ4)-2eYSNn>};t?CGDJJ^ea5XU_QkTVYqOWa8{>n5Ln>1>V>~qom46f zz+NmX533hyM*XjECeBw~Ige3*5ms*g`ymQe>J-ibmU ziCb~B)-cq>xjVTOVN2eQQ=YB0=+N=U8V&L*=tK-6Vomcyc2|q)0}mpyxcvcZ+Qr42 z4li*JW0#k?k8g=rcokod*Z2g!I-H`pUvHnw-H8*j6Bryn_edvL7p$XD9O+b8I@zc=m+z58ULiT3Wn9LCe!1ZBt! z{Q@(?VgAoxj$q9suk(owXKdX;zN=Wr8LVPzq5CQnKK#Sx`@_$MUu>=q|Bl{2hMy0g z3_qLQ{Al>)@NdH>n~yc}D=hiz@M|o2Jp4?+L|AX?a>~0cGO2)vGCbMJA2jTqbN+Z| zDe2i4j(2YL+{?k$bCX+4IL|hhGgp8GZ?8np{o7RF< z%)4<)IeB+A63PpLIE`fxsEIrp`QK73lSsL%p@>qc><3vQRqbw)t?ApOVJA|~3j8-$ zcD5R&%FNJP4dsfm+gY3{_pUx%S-7`y*F-GopyHdY2?~6w)&gx2CTm6Xa7C2Iy-3x; z#C$PRL=r(Bs4B~dCPAXZiJ+^1eHjX=O06Vr-HSLnS(-*IFsdhlZM+YH7gCB$T-lu{ z?W!ul?Ri1cP+qbf+iD_`U6Eb~J2`e#z)B>72Vv5UR0X7N;M&*H-PT%<~}ll>O(`xs|LF%~39xTL^ohXsvYb&7JGYtfNEb-1E`% z7qBY<9g3{*mvKL4jaE8CCpK{W^_*-e(Cl)8R$D%3riOp z_P4yMQkvfu(x4pA4N}A- zvL2HdMz*#o*SDR0P|`t~v!2CpOJnVCu~_5a;%?vUTYbClEZbuW6qj(?)*Aq#4$vrx zcc@P~&@zA;5x|v&;z;}gNL9|m2ay&?!`0TQs;#b|Fdb-x8+Vk^6>ri~Lq4zGUjqFr zw7d$y;BMq(({Q%lz8$g}iM>VMwEa-XE2C*S{TUsS6G;XVvD>&Mpo_}JKxK0jvMLR{ z{&r9X=wl^rF z1ob%#REypiRJfy!)%|}fM*E>Otsw^xNzKxT3>2<{Az=b1Bz!8AyJAGr!6}$!Q z3O(=EwJS^Eax|+9UpZmkies(7-ma?`&fV;a=pMBxU2vO4*)s@!=f zBV<=91eAp$?m4BZvJCGPE=r*!C%a?tvh9RsQ(Dt04t}>&#ZNakDpZT1U<-e1N@Z`2+xx z^9j%PT)duF)^qqxDg^=0TG+3BNV^J!DK&Zh;iCNU$wico^c$G#f=ZWYy3W&elCI$j v7t!U*>3Zg3L*K67isd(4%iMFrWFp_vZ0^GyUnWQ@X8b8HrY5 z9h`~%Z}cNFbMcQ^#szs!-IQc$Nn4Z}C2nFzH3uK$dWtdpk-3e})jR4kHAX4Xp3rfo zP{Voc3u|LtAF?(4rT=3$aeL2eb{G4(9d-@x=O#{mOES&WQ-k;Bc7i$hYP`jI_;>sz z>Bp6M_6fgLZm~yrrD`_&boV3ek!6~Jh#OVD%d*_iu`D=AF`Opw6n&6yuW}{mwmUs| VDhez3w)%|q@prO}PVFc=_#c7qn5+N* delta 789 zcmZ9KTSyd97{}+Eotc%{i<|7t%c@%x4Mj>8MCnTxC`yG?0wIQV&tzlng>Pn4H%$e@ zmxSmP<&$nvFFi`G5cOo$p-cygz<-AexIr zOog6(4(88fpGOaBFwIYBcAO zT`MRI&p|ggEsT-I7voe#1jrPI>kXHkqR?m1r8Tah2I%AZ8H z;0_;a-l5*1*dD{9a_IA!*l=f=qzIg|2mf0Dwo=Ev`gTkMDD$toHuMED9@W=cc0k7~ zr1|Z5D^&T@_~ipgAp*flV^->;5_0?KN?enemhgFBV&L=*Dd!17FQZ%Z@vJl&t2!c; zoC^C0R=9COSRgGz6LY@fjg~GtIfl#pMPh$!Q6|bQ;7y4o{w!RAE