From 5505a553b564239d4ed725aa057d369ad5d277fa Mon Sep 17 00:00:00 2001 From: Jasper-Harvey0 Date: Thu, 22 Jan 2026 10:24:45 +1100 Subject: [PATCH 1/3] Update waveform function --- src/fixate/drivers/dso/agilent_mso_x.py | 45 ++++++++++++------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/fixate/drivers/dso/agilent_mso_x.py b/src/fixate/drivers/dso/agilent_mso_x.py index 7d1fbf35..265993be 100644 --- a/src/fixate/drivers/dso/agilent_mso_x.py +++ b/src/fixate/drivers/dso/agilent_mso_x.py @@ -643,39 +643,38 @@ def waveform_preamble(self): preamble[labels[index]] = val return preamble - def waveform_values(self, signals, file_name="", file_type="csv"): + def waveform_values(self, signal, file_name="", file_type="csv"): """ - :param signals: + :param signal: The channel ie "1", "2", "3", "4", "MATH", "FUNC" :param file_name: If :param file_type: :return: """ - signals = self.digitize(signals) - return_vals = {} - for sig in signals: - return_vals[sig] = [] - results = return_vals[sig] - self.write(":WAV:SOUR {}".format(sig)) - self.write(":WAV:FORM BYTE") - self.write(":WAV:POIN:MODE RAW") - preamble = self.waveform_preamble() - data = self.retrieve_waveform_data() - for index, datum in enumerate(data): - time_val = index * preamble["x_increment"] - y_val = ( - preamble["y_origin"] - + (datum - preamble["y_reference"]) * preamble["y_increment"] - ) - results.append((time_val, y_val)) + signal = self.digitize(signal) + # digitize returns a list: + self.write(":WAV:SOUR {}".format(signal[0])) + self.write(":WAV:FORM BYTE") + self.write(":WAV:POIN:MODE RAW") + + preamble = self.waveform_preamble() + data = self.retrieve_waveform_data() + time_values = [] + values = [] + for index, datum in enumerate(data): + time_val = index * preamble["x_increment"] + y_val = ( + preamble["y_origin"] + + (datum - preamble["y_reference"]) * preamble["y_increment"] + ) + time_values.append(time_val) + values.append(y_val) if file_name and file_type == "csv": # Needs work for multiple references with open(file_name, "w") as f: f.write("x,y") - for label in sorted(preamble): - f.write(",{},{}".format(label, preamble[label])) f.write("\n") - for time_val, y_val in enumerate(results): + for time_val, y_val in zip(time_values, values): f.write( "{time_val},{voltage}\n".format( time_val=time_val, voltage=y_val @@ -683,7 +682,7 @@ def waveform_values(self, signals, file_name="", file_type="csv"): ) elif file_name and file_type == "bin": raise NotImplementedError("Binary Output not implemented") - return results + return time_values, values def retrieve_waveform_data(self): self.instrument.write(":WAV:DATA?") From 40c226e2893460b508581e34ab0ad0b7ddf72adb Mon Sep 17 00:00:00 2001 From: Jasper-Harvey0 Date: Wed, 4 Feb 2026 13:29:00 +1100 Subject: [PATCH 2/3] Updated waveform_values to not set the scope to run when getting data --- src/fixate/drivers/dso/agilent_mso_x.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/fixate/drivers/dso/agilent_mso_x.py b/src/fixate/drivers/dso/agilent_mso_x.py index 265993be..a190fdf8 100644 --- a/src/fixate/drivers/dso/agilent_mso_x.py +++ b/src/fixate/drivers/dso/agilent_mso_x.py @@ -652,11 +652,16 @@ def waveform_values(self, signal, file_name="", file_type="csv"): :param file_type: :return: """ - signal = self.digitize(signal) - # digitize returns a list: - self.write(":WAV:SOUR {}".format(signal[0])) - self.write(":WAV:FORM BYTE") - self.write(":WAV:POIN:MODE RAW") + # Check if there is actually data to acquire: + # This line also makes the channel the source for the data export! + data_available = int( + self.query(":WAVeform:SOURce CHANnel" + str(signal) + ";POINTs?") + ) + if data_available == 0: + # No data is available + # Setting a channel to be a waveform source turns it on, so we need to turn it off now: + self.write(":CHANnel" + str(signal) + ":DISPlay OFF") + raise ValueError("No data is available") preamble = self.waveform_preamble() data = self.retrieve_waveform_data() From 667d4e039556de72e8c6aefbe51ed32276403fca Mon Sep 17 00:00:00 2001 From: Jasper-Harvey0 Date: Wed, 4 Feb 2026 14:31:08 +1100 Subject: [PATCH 3/3] Shift waveform to be centered on trigger --- src/fixate/drivers/dso/agilent_mso_x.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fixate/drivers/dso/agilent_mso_x.py b/src/fixate/drivers/dso/agilent_mso_x.py index a190fdf8..f255dc60 100644 --- a/src/fixate/drivers/dso/agilent_mso_x.py +++ b/src/fixate/drivers/dso/agilent_mso_x.py @@ -668,7 +668,7 @@ def waveform_values(self, signal, file_name="", file_type="csv"): time_values = [] values = [] for index, datum in enumerate(data): - time_val = index * preamble["x_increment"] + time_val = index * preamble["x_increment"] + preamble["x_origin"] y_val = ( preamble["y_origin"] + (datum - preamble["y_reference"]) * preamble["y_increment"]