Updates
This commit is contained in:
Binary file not shown.
Binary file not shown.
86
main.py
86
main.py
@@ -12,7 +12,7 @@ AUTHOR: D. RICE 06/01/2026
|
|||||||
# Imports
|
# Imports
|
||||||
import sys
|
import sys
|
||||||
from PySide6.QtWidgets import (QApplication, QDialog, QMainWindow)
|
from PySide6.QtWidgets import (QApplication, QDialog, QMainWindow)
|
||||||
from PySide6.QtCore import (QIODevice, QByteArray)
|
from PySide6.QtCore import (QIODevice, QByteArray, QTimer)
|
||||||
from PySide6.QtSerialPort import (QSerialPort, QSerialPortInfo)
|
from PySide6.QtSerialPort import (QSerialPort, QSerialPortInfo)
|
||||||
|
|
||||||
import time
|
import time
|
||||||
@@ -65,14 +65,16 @@ class MainWindow(QMainWindow):
|
|||||||
# Hold process reference.
|
# Hold process reference.
|
||||||
self.p = None
|
self.p = None
|
||||||
|
|
||||||
# Thread and Worker initialisation
|
|
||||||
self.worker_thread = None
|
|
||||||
self.worker = None
|
|
||||||
|
|
||||||
# Add start button action
|
# Add start button action
|
||||||
self.ui.connButton.setCheckable(True)
|
self.ui.connButton.setCheckable(True)
|
||||||
self.ui.connButton.clicked.connect(self.conn_button_press)
|
self.ui.connButton.clicked.connect(self.conn_button_press)
|
||||||
|
|
||||||
|
# Hide other controls
|
||||||
|
self.ui.sn.setHidden(True)
|
||||||
|
self.ui.snLabel.setHidden(True)
|
||||||
|
self.ui.fw.setHidden(True)
|
||||||
|
self.ui.fwLabel.setHidden(True)
|
||||||
|
|
||||||
# Set initial size
|
# Set initial size
|
||||||
initial_width = 1000
|
initial_width = 1000
|
||||||
initial_height = 600
|
initial_height = 600
|
||||||
@@ -95,6 +97,20 @@ class MainWindow(QMainWindow):
|
|||||||
# Create serial rx buffer
|
# Create serial rx buffer
|
||||||
self.receive_buffer = bytearray()
|
self.receive_buffer = bytearray()
|
||||||
|
|
||||||
|
# Create store buffer
|
||||||
|
self.store_buffer = bytearray()
|
||||||
|
|
||||||
|
# Create a timeout counter flag
|
||||||
|
self.timeoutflag = False
|
||||||
|
|
||||||
|
# Create a window response variable
|
||||||
|
self.windowresponse = False
|
||||||
|
|
||||||
|
# Setup QT timers
|
||||||
|
self.timeouttimer = QTimer()
|
||||||
|
self.timeouttimer.setInterval(5000)
|
||||||
|
self.timeouttimer.timeout.connect(self.time_out_timer)
|
||||||
|
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
def conn_button_press (self):
|
def conn_button_press (self):
|
||||||
@@ -122,12 +138,40 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
self.serial.write(QByteArray(byte_data))
|
self.serial.write(QByteArray(byte_data))
|
||||||
|
|
||||||
while (self.serial_rx_flag == False):
|
self.timeouttimer.start()
|
||||||
|
|
||||||
|
while ((self.serial_rx_flag == False) and (self.timeoutflag == False)):
|
||||||
QApplication.processEvents()
|
QApplication.processEvents()
|
||||||
|
|
||||||
|
w.close()
|
||||||
|
|
||||||
|
if self.timeoutflag == True:
|
||||||
|
self.windowresponse = NoDeviceWindow.get_response(self)
|
||||||
|
self.serial.close()
|
||||||
|
self.ui.connButton.setText("CONNECT")
|
||||||
|
self.ui.sn.setHidden(True)
|
||||||
|
self.ui.snLabel.setHidden(True)
|
||||||
|
self.ui.fw.setHidden(True)
|
||||||
|
self.ui.fwLabel.setHidden(True)
|
||||||
|
self.ui.sn.setText("---")
|
||||||
|
self.ui.fw.setText("---")
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.process_serial_number()
|
||||||
|
|
||||||
|
|
||||||
|
self.serial_rx_flag = False
|
||||||
|
self.timeoutflag = False
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.serial.close()
|
self.serial.close()
|
||||||
self.ui.connButton.setText("CONNECT")
|
self.ui.connButton.setText("CONNECT")
|
||||||
|
self.ui.sn.setHidden(True)
|
||||||
|
self.ui.snLabel.setHidden(True)
|
||||||
|
self.ui.fw.setHidden(True)
|
||||||
|
self.ui.fwLabel.setHidden(True)
|
||||||
|
self.ui.sn.setText("---")
|
||||||
|
self.ui.fw.setText("---")
|
||||||
|
|
||||||
QApplication.processEvents()
|
QApplication.processEvents()
|
||||||
|
|
||||||
@@ -167,12 +211,12 @@ class MainWindow(QMainWindow):
|
|||||||
def handle_valid_packet(self, packet):
|
def handle_valid_packet(self, packet):
|
||||||
# Checksum validity check
|
# Checksum validity check
|
||||||
try:
|
try:
|
||||||
print (packet)
|
|
||||||
data_bytes = list(packet[3 : -2])
|
data_bytes = list(packet[3 : -2])
|
||||||
received_checksum = (packet[-2] << 8) | packet[-1]
|
received_checksum = (packet[-2] << 8) | packet[-1]
|
||||||
|
|
||||||
if((~sum(data_bytes)) & 0xFFFF) == received_checksum:
|
if((~sum(data_bytes)) & 0xFFFF) == received_checksum:
|
||||||
print(f"RX DATA: {data_bytes}")
|
self.serial_rx_flag = True
|
||||||
|
self.store_buffer = data_bytes
|
||||||
|
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
@@ -180,7 +224,28 @@ class MainWindow(QMainWindow):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def process_serial_number(self):
|
||||||
|
# Get and update serial number
|
||||||
|
sub_sn = self.store_buffer[0:19]
|
||||||
|
sn_chars = [chr(c) for c in sub_sn if 0 <= c <= 127]
|
||||||
|
sn_str = "".join(sn_chars)
|
||||||
|
self.ui.sn.setText(sn_str)
|
||||||
|
|
||||||
|
# Get and update FW Rev
|
||||||
|
sub_fw = self.store_buffer[19:22]
|
||||||
|
|
||||||
|
major = sub_fw[1:2]
|
||||||
|
sep = sub_fw[0:1]
|
||||||
|
minor = sub_fw[2:3]
|
||||||
|
full = major + sep + minor
|
||||||
|
fw_chars = [chr(c) for c in full if 0 <= c <= 127]
|
||||||
|
fw_str = "".join(fw_chars)
|
||||||
|
self.ui.fw.setText(fw_str)
|
||||||
|
|
||||||
|
self.ui.sn.setHidden(False)
|
||||||
|
self.ui.snLabel.setHidden(False)
|
||||||
|
self.ui.fw.setHidden(False)
|
||||||
|
self.ui.fwLabel.setHidden(False)
|
||||||
|
|
||||||
|
|
||||||
def pack_integers_to_bytes(self, *integers: int) -> bytes:
|
def pack_integers_to_bytes(self, *integers: int) -> bytes:
|
||||||
@@ -213,9 +278,8 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
return struct.pack(format_string, *full_packet)
|
return struct.pack(format_string, *full_packet)
|
||||||
|
|
||||||
def run_scope_setup (self):
|
def time_out_timer(self):
|
||||||
self.worker.run_setup()
|
self.timeoutflag = True
|
||||||
|
|
||||||
|
|
||||||
# Run main
|
# Run main
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
@@ -62,5 +62,5 @@ class Ui_connerrorDialog(object):
|
|||||||
# setupUi
|
# setupUi
|
||||||
|
|
||||||
def retranslateUi(self, Dialog):
|
def retranslateUi(self, Dialog):
|
||||||
self.label.setText(QCoreApplication.translate("Dialog", u"COULDN'T CONNECT TO DSO80204B", None))
|
self.label.setText(QCoreApplication.translate("Dialog", u"COULDN'T CONNECT TO POWERSIM DEVICE", None))
|
||||||
# retranslateUi
|
# retranslateUi
|
||||||
105
ui_mainwindow.py
105
ui_mainwindow.py
@@ -63,7 +63,7 @@ class Ui_MainWindow(object):
|
|||||||
|
|
||||||
self.connButton = QPushButton(self.test_area)
|
self.connButton = QPushButton(self.test_area)
|
||||||
self.connButton.setObjectName(u"connButton")
|
self.connButton.setObjectName(u"connButton")
|
||||||
self.connButton.setGeometry(QRect(350, 25, 200, 25))
|
self.connButton.setGeometry(QRect(25, 25, 200, 25))
|
||||||
self.connButton.setStyleSheet(button_style)
|
self.connButton.setStyleSheet(button_style)
|
||||||
|
|
||||||
text_label_style = """
|
text_label_style = """
|
||||||
@@ -75,12 +75,6 @@ class Ui_MainWindow(object):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#self.manuLabel = QLabel(self.test_area)
|
|
||||||
#self.manuLabel.setObjectName(u"manuLabel")
|
|
||||||
#self.manuLabel.setGeometry(QRect(200, 5, 250, 15))
|
|
||||||
#self.manuLabel.setAlignment(Qt.AlignCenter)
|
|
||||||
#self.manuLabel.setStyleSheet(text_label_style)
|
|
||||||
|
|
||||||
label_style = """
|
label_style = """
|
||||||
QLabel {
|
QLabel {
|
||||||
background-image: url("");
|
background-image: url("");
|
||||||
@@ -90,48 +84,58 @@ class Ui_MainWindow(object):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#self.manu = QLabel(self.test_area)
|
self.fwLabel = QLabel(self.test_area)
|
||||||
#self.manu.setObjectName(u"manu")
|
self.fwLabel.setObjectName(u"fwLabel")
|
||||||
#self.manu.setGeometry(QRect(200, 25, 250, 25))
|
self.fwLabel.setGeometry(QRect(675, 5, 200, 15))
|
||||||
#self.manu.setAlignment(Qt.AlignCenter)
|
self.fwLabel.setAlignment(Qt.AlignCenter)
|
||||||
#self.manu.setStyleSheet(label_style)
|
self.fwLabel.setStyleSheet(text_label_style)
|
||||||
|
|
||||||
#self.modelLabel = QLabel(self.test_area)
|
self.fw = QLabel(self.test_area)
|
||||||
#self.modelLabel.setObjectName(u"modelLabel")
|
self.fw.setObjectName(u"fw")
|
||||||
#self.modelLabel.setGeometry(QRect(475, 5, 125, 15))
|
self.fw.setGeometry(QRect(675, 25, 200, 25))
|
||||||
#self.modelLabel.setAlignment(Qt.AlignCenter)
|
self.fw.setAlignment(Qt.AlignCenter)
|
||||||
#self.modelLabel.setStyleSheet(text_label_style)
|
self.fw.setStyleSheet(label_style)
|
||||||
|
|
||||||
#self.model = QLabel(self.test_area)
|
self.snLabel = QLabel(self.test_area)
|
||||||
#self.model.setObjectName(u"model")
|
self.snLabel.setObjectName(u"snlabel")
|
||||||
#self.model.setGeometry(QRect(475, 25, 125, 25))
|
self.snLabel.setGeometry(QRect(450, 5, 200, 15))
|
||||||
#self.model.setAlignment(Qt.AlignCenter)
|
self.snLabel.setAlignment(Qt.AlignCenter)
|
||||||
#self.model.setStyleSheet(label_style)
|
self.snLabel.setStyleSheet(text_label_style)
|
||||||
|
|
||||||
#self.snLabel = QLabel(self.test_area)
|
self.sn = QLabel(self.test_area)
|
||||||
#self.snLabel.setObjectName(u"snlabel")
|
self.sn.setObjectName(u"sn")
|
||||||
#self.snLabel.setGeometry(QRect(625, 5, 125, 15))
|
self.sn.setGeometry(QRect(450, 25, 200, 25))
|
||||||
#self.snLabel.setAlignment(Qt.AlignCenter)
|
self.sn.setAlignment(Qt.AlignCenter)
|
||||||
#self.snLabel.setStyleSheet(text_label_style)
|
self.sn.setStyleSheet(label_style)
|
||||||
|
|
||||||
#self.sn = QLabel(self.test_area)
|
self.powerButton = QPushButton(self.test_area)
|
||||||
#self.sn.setObjectName(u"sn")
|
self.powerButton.setObjectName(u"powerButton")
|
||||||
#self.sn.setGeometry(QRect(625, 25, 125, 25))
|
self.powerButton.setGeometry(QRect(25, 75, 200, 25))
|
||||||
#self.sn.setAlignment(Qt.AlignCenter)
|
self.powerButton.setStyleSheet(button_style)
|
||||||
#self.sn.setStyleSheet(label_style)
|
|
||||||
|
|
||||||
#self.fwLabel = QLabel(self.test_area)
|
self.setvLabel = QLabel(self.test_area)
|
||||||
#self.fwLabel.setObjectName(u"fwLabel")
|
self.setvLabel.setObjectName(u"setvlabel")
|
||||||
#self.fwLabel.setGeometry(QRect(775, 5, 125, 15))
|
self.setvLabel.setGeometry(QRect(450, 55, 200, 15))
|
||||||
#self.fwLabel.setAlignment(Qt.AlignCenter)
|
self.setvLabel.setAlignment(Qt.AlignCenter)
|
||||||
#self.fwLabel.setStyleSheet(text_label_style)
|
self.setvLabel.setStyleSheet(text_label_style)
|
||||||
|
|
||||||
#self.fw = QLabel(self.test_area)
|
self.setv = QLabel(self.test_area)
|
||||||
#self.fw.setObjectName(u"fw")
|
self.setv.setObjectName(u"setv")
|
||||||
#self.fw.setGeometry(QRect(775, 25, 125, 25))
|
self.setv.setGeometry(QRect(450, 75, 200, 25))
|
||||||
#self.fw.setAlignment(Qt.AlignCenter)
|
self.setv.setAlignment(Qt.AlignCenter)
|
||||||
#self.fw.setStyleSheet(label_style)
|
self.setv.setStyleSheet(label_style)
|
||||||
|
|
||||||
|
self.actvLabel = QLabel(self.test_area)
|
||||||
|
self.actvLabel.setObjectName(u"actvlabel")
|
||||||
|
self.actvLabel.setGeometry(QRect(675, 55, 200, 15))
|
||||||
|
self.actvLabel.setAlignment(Qt.AlignCenter)
|
||||||
|
self.actvLabel.setStyleSheet(text_label_style)
|
||||||
|
|
||||||
|
self.actv = QLabel(self.test_area)
|
||||||
|
self.actv.setObjectName(u"actv")
|
||||||
|
self.actv.setGeometry(QRect(675, 75, 200, 25))
|
||||||
|
self.actv.setAlignment(Qt.AlignCenter)
|
||||||
|
self.actv.setStyleSheet(label_style)
|
||||||
|
|
||||||
frame_style = """
|
frame_style = """
|
||||||
QFrame {
|
QFrame {
|
||||||
@@ -157,14 +161,15 @@ class Ui_MainWindow(object):
|
|||||||
None))
|
None))
|
||||||
self.header.setText(QCoreApplication.translate("MainWindow", u"AUTOMOTIVE POWER SIMULATOR", None))
|
self.header.setText(QCoreApplication.translate("MainWindow", u"AUTOMOTIVE POWER SIMULATOR", None))
|
||||||
self.connButton.setText(QCoreApplication.translate("MainWindow", u"CONNECT", None))
|
self.connButton.setText(QCoreApplication.translate("MainWindow", u"CONNECT", None))
|
||||||
#self.manuLabel.setText(QCoreApplication.translate("MainWindow", u"MANUFACTURER", None))
|
self.snLabel.setText(QCoreApplication.translate("MainWindow", u"SERIAL NO", None))
|
||||||
#self.manu.setText(QCoreApplication.translate("MainWindow", u"---", None))
|
self.sn.setText(QCoreApplication.translate("MainWindow", u"---", None))
|
||||||
#self.modelLabel.setText(QCoreApplication.translate("MainWindow", u"MODEL", None))
|
self.fwLabel.setText(QCoreApplication.translate("MainWindow", u"F/W REV", None))
|
||||||
#self.model.setText(QCoreApplication.translate("MainWindow", u"---", None))
|
self.fw.setText(QCoreApplication.translate("MainWindow", u"---", None))
|
||||||
#self.snLabel.setText(QCoreApplication.translate("MainWindow", u"SERIAL NO", None))
|
self.powerButton.setText(QCoreApplication.translate("MainWindow", u"POWER OFF", None))
|
||||||
#self.sn.setText(QCoreApplication.translate("MainWindow", u"---", None))
|
self.setvLabel.setText(QCoreApplication.translate("MainWindow", u"VOLTAGE SETPOINT", None))
|
||||||
#self.fwLabel.setText(QCoreApplication.translate("MainWindow", u"F/W REV", None))
|
self.setv.setText(QCoreApplication.translate("MainWindow", u"00.00V", None))
|
||||||
#self.fw.setText(QCoreApplication.translate("MainWindow", u"---", None))
|
self.actvLabel.setText(QCoreApplication.translate("MainWindow", u"VOLTAGE MEASURED", None))
|
||||||
|
self.actv.setText(QCoreApplication.translate("MainWindow", u"00.00V", None))
|
||||||
# retranslateUi
|
# retranslateUi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user