Skip to content

Commit 8276d54

Browse files
committed
Added console widget, added exception handling during device connection
1 parent ce7e945 commit 8276d54

File tree

4 files changed

+93
-35
lines changed

4 files changed

+93
-35
lines changed

oscilloscope/forms/waveform.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- coding: utf-8 -*-
22

3-
# Form implementation generated from reading ui file 'C:\Users\dkc1\Desktop\test-spec\test-spec\oscilloscope\forms/waveform.ui'
3+
# Form implementation generated from reading ui file 'C:\Users\dnwdc\OneDrive\Рабочий стол\!3_aspirant\Работа\RedPitaya_ServiceApp\multichannel-spec\oscilloscope\forms/waveform.ui'
44
#
55
# Created by: PyQt5 UI code generator 5.15.10
66
#

oscilloscope/oscilloscope.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def __init__(self, *args, obj=None, **kwargs):
4343
self.m_plot_oscilloscope.setLabel('bottom', 'Time, ns')
4444

4545
self.m_plot_oscilloscope.showGrid(x=True, y=True, alpha=0.5)
46-
self.m_plot_oscilloscope.setTitle("Wave form")
46+
self.m_plot_oscilloscope.setTitle("Waveform")
4747
#self.pl_trends.setAutoVisible(x=False, y=False)
4848
self.m_plot_oscilloscope.addLegend()
4949

test.py

+40-32
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import spectrometer.spmeters as spmeters
3333

3434
from spectrometer.spmeter_base import SpectraDAQ
35-
from widgets.widgets import ConnectionWidget, DaqWidget
35+
from widgets.widgets import ConnectionWidget, DaqWidget, ConsoleWidget
3636

3737
from transport import api, api_param
3838
from devices.devices import DeviceConn_MasterSlave, DevicesMap, Device, Channel, ChannelWindow, BoardsManager, BoardWindow
@@ -137,6 +137,7 @@ def setupUI(self): #sets up UI in main window
137137
self.oscope_widget = oscope.OscilloscopeW()
138138
self.m_specWidget = spmeters.ChanSpectrometer()
139139
self.m_sumSpectrometer = spmeters.SumSpectrometer()
140+
self.console_widget = ConsoleWidget()
140141

141142
toolbar = QToolBar("Main toolbar")
142143
self.addToolBar(toolbar)
@@ -148,6 +149,8 @@ def setupUI(self): #sets up UI in main window
148149
tabs_lyout.addTab(self.oscope_widget, "Oscilloscope")
149150
tabs_lyout.addTab(self.m_specWidget, "Spectrometer")
150151
tabs_lyout.addTab(self.m_sumSpectrometer, "SMeter (SUM)")
152+
tabs_lyout.addTab(self.console_widget, "SCPI console")
153+
151154

152155
hlayout.addWidget(tabs_lyout)
153156
centerwidget = QWidget()
@@ -161,39 +164,44 @@ def connectDevice(self, window): #sets connection configuration and connect to
161164
self.settings["ip"] = window.lne_ip_edit.text()
162165
self.transport_param["ip"] = self.settings["ip"]
163166
self.transport_param["port"] = self.settings["port"]
164-
self.board.connect(self.settings)
165-
self.board.transport.client.timeout = 20000 #large timeout for SCPI commands
167+
try:
168+
self.board.connect(self.settings)
169+
self.board.transport.client.timeout = 20000 #large timeout for SCPI commands
170+
#get uptime and connection status
171+
uptime_seconds = self.board.transport.transaction([api_param.SCPI_GET_UPTIME], True)[1]
172+
except:
173+
print("Cannot establish connection to device!")
174+
else:
175+
window.setValuesAfterConnection(uptime_seconds, self.board.check_connect()) #update data in connection widget
166176

167-
#get uptime and connection status
168-
uptime_seconds = self.board.transport.transaction([api_param.SCPI_GET_UPTIME], True)[1]
169-
window.setValuesAfterConnection(uptime_seconds, self.board.check_connect()) #update data in connection widget
177+
#if device was not connected previously, add it to the devices table,
178+
#otherwise update information in devices table
179+
if not self.settings["ip"] in self.devicesMap:
180+
self.cwidget.setupData_onConnected(self.board.check_connect(), uptime_seconds, self.devicesMap, False)
181+
else:
182+
self.cwidget.setupData_onConnected(self.board.check_connect(), uptime_seconds, self.devicesMap, True)
170183

171-
#if device was not connected previously, add it to the devices table,
172-
#otherwise update information in devices table
173-
if not self.settings["ip"] in self.devicesMap:
174-
self.cwidget.setupData_onConnected(self.board.check_connect(), uptime_seconds, self.devicesMap, False)
175-
else:
176-
self.cwidget.setupData_onConnected(self.board.check_connect(), uptime_seconds, self.devicesMap, True)
177-
178-
isConnected = self.board.check_connect()
179-
print("Connection:", isConnected)
180-
181-
if window.isTableDevices and isConnected: #if current connection manager is with TableDevices and device is connected
182-
#fill table with connected devices
183-
#assign board in devices table to currently connected device
184-
device = self.devicesMap[self.settings["ip"]]
185-
if device.board == None:
186-
device.board = self.board
187-
device.board.transport.client.write('sp:channels?')
188-
numChannels = int(device.board.transport.client.read_raw().decode('utf-8').rstrip())
189-
device.nChannels = numChannels
190-
device.channels = [None] * numChannels
191-
192-
self.buildBoardTab(device) #create tab widget with channels for board
193-
194-
for deviceIP in self.devicesMap:
195-
self.devicesMap[deviceIP].board.transport.client.write('*IDN?')
196-
print("{0}: {1}".format(deviceIP, self.devicesMap[deviceIP].board.transport.client.read_raw().decode('utf-8').rstrip()))
184+
isConnected = self.board.check_connect()
185+
print("Connection:", isConnected)
186+
187+
if window.isTableDevices and isConnected: #if current connection manager is with TableDevices and device is connected
188+
#fill table with connected devices
189+
#assign board in devices table to currently connected device
190+
device = self.devicesMap[self.settings["ip"]]
191+
if device.board == None:
192+
device.board = self.board
193+
device.board.transport.client.write('sp:channels?')
194+
numChannels = int(device.board.transport.client.read_raw().decode('utf-8').rstrip())
195+
device.nChannels = numChannels
196+
device.channels = [None] * numChannels
197+
198+
self.buildBoardTab(device) #create tab widget with channels for board
199+
200+
self.console_widget.lbl_deviceIP.setText(self.settings["ip"]) #update device IP in console tab
201+
202+
for deviceIP in self.devicesMap:
203+
self.devicesMap[deviceIP].board.transport.client.write('*IDN?')
204+
print("{0}: {1}".format(deviceIP, self.devicesMap[deviceIP].board.transport.client.read_raw().decode('utf-8').rstrip()))
197205

198206
def removeDevice(self, window): #removes device from table
199207
for i in range(self.boards_mgr.count()):

widgets/widgets.py

+51-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
from PyQt5.QtWidgets import (
99
QLabel,QPushButton, QWidget,
1010
QVBoxLayout, QHBoxLayout,
11-
QTabWidget, QToolBar, QCheckBox, QGridLayout, QLineEdit
11+
QTabWidget, QToolBar, QCheckBox, QGridLayout, QLineEdit,
12+
QTextEdit, QSpacerItem, QSizePolicy
1213
)
1314
from PyQt5.QtCore import (
1415
pyqtSignal, Qt, pyqtSlot
@@ -17,6 +18,8 @@
1718
from transport import api, api_param
1819
from devices.devices import DeviceConn_MasterSlave, DevicesMap, Device, Channel, ChannelWindow, BoardsManager, BoardWindow
1920

21+
from pyqtgraph import PlotWidget
22+
2023

2124
class ConnectionWidget(QWidget):
2225
def __init__(self):
@@ -150,3 +153,50 @@ def recalcTicks(self):
150153
def recalcFrames(self):
151154
self.nFrames = int(float(self.lne_full_daq_time.text())*1000/float(self.lne_single_daq_time.text()))
152155
self.lbl_full_daq_frames.setText(str(self.nFrames))
156+
157+
class ConsoleWidget(QWidget):
158+
def __init__(self):
159+
super().__init__()
160+
self.setupUI()
161+
162+
def setupUI(self):
163+
layout = QGridLayout()
164+
165+
self.txt_output = QTextEdit()
166+
self.txt_output.setMinimumHeight(300)
167+
self.txt_output.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
168+
169+
self.lbl_help = QLabel("To change the connected device, click Connect on leftmost Devices area")
170+
171+
self.lne_query = QLineEdit()
172+
self.lne_query.setText("")
173+
self.lbl_query = QLabel("SCPI query")
174+
self.btn_query = QPushButton("Send query")
175+
self.btn_response = QPushButton("Read response")
176+
self.btn_plot = QPushButton("Plot data")
177+
178+
self.m_plotData = PlotWidget()
179+
self.m_plotData.setMinimumHeight(350)
180+
self.m_plotData.setMinimumWidth(450)
181+
182+
self.lbl_currentDevice = QLabel("Current device IP:")
183+
self.lbl_deviceIP = QLabel("0.0.0.0")
184+
185+
layout.addWidget(self.txt_output, 0, 0, 3, -1)
186+
187+
layout.addWidget(self.lbl_help, 4, 0, 1, -1)
188+
layout.addWidget(self.lbl_currentDevice, 5, 0, 1, 1)
189+
layout.addWidget(self.lbl_deviceIP, 5, 1, 1, 1)
190+
191+
layout.addWidget(self.lbl_query, 6, 0, 1, 1)
192+
layout.addWidget(self.lne_query, 6, 1, 1, -1)
193+
layout.addWidget(self.btn_query, 7, 1, 1, 1)
194+
layout.addWidget(self.btn_response, 7, 2, 1, 1)
195+
layout.addWidget(self.btn_plot, 7, 3, 1, 1)
196+
197+
layout.addWidget(self.m_plotData, 8, 0, -1, -1)
198+
layout.setVerticalSpacing(0)
199+
200+
self.setLayout(layout)
201+
self.setMinimumHeight(600)
202+
self.setMinimumWidth(450)

0 commit comments

Comments
 (0)