From cec98c47db42d0fc08155e1cde161790708551c2 Mon Sep 17 00:00:00 2001 From: Thomas Gohle Date: Sun, 12 Oct 2025 18:15:26 +0200 Subject: [PATCH] Version 0.1 and git Setup --- LICENSE.md | 407 ++++++++++++++ README.md | 135 ++++- script/SDG2042X_GUI_ICON.png | Bin 0 -> 147703 bytes script/SDG2042X_V0.1.py | 1024 ++++++++++++++++++++++++++++++++++ script/SDG2042x.dat | 31 + 5 files changed, 1568 insertions(+), 29 deletions(-) create mode 100644 LICENSE.md create mode 100644 script/SDG2042X_GUI_ICON.png create mode 100755 script/SDG2042X_V0.1.py create mode 100644 script/SDG2042x.dat diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..78a5e15 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,407 @@ +Attribution-NonCommercial 4.0 International +[CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + j. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + k. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + l. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/README.md b/README.md index 5d4a7f2..c2439da 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,119 @@ -# SDG2042X-PyQt-GUI-for-Linux +# ToGo-Lab / SDG2042X Linux GUI – ToGo-Lab Edition + +**Author:** Thomas Gohle – ToGo-Lab -A simple cross‑platform (Linux tested) GUI for controlling the **Siglent SDG2042X** function generator over LAN. +--- -## Features -- Connect via LAN (raw SCPI over TCP, port 5025) -- Basic waveform setup (SINE, SQUARE, RAMP, PULSE, NOISE, ARB, DC) -- Control frequency, amplitude, offset, and phase -- Output ON/OFF toggle -- Burst configuration (mode, cycles, delay, trigger source) -- Sweep configuration (linear/log, start/stop frequency, time, direction) -- ARB Manager (not fully tested yet): - - List built‑in and user waveforms - - Upload `.bin` or `.csv` waveforms to USER memory - - Download USER waveforms from the generator - - Set selected waveform to active channel +## Intro +A PyQt5-based control GUI for the **Siglent SDG2042X Arbitrary Waveform Generator**. +Runs on Linux and communicates over LAN using the instrument’s SCPI interface. +--- +## Overview -## Requirements -- Python 3 -- PyQt5 (`pip install pyqt5`) +This first public release provides a functional desktop interface for the SDG2042X. +It allows full access to the basic generator functions, presets, ARB manager, sweep, burst, and a SCPI command console. +Data and settings are stored in an editable text file (`SDG2042x.dat`) for transparency and portability. + +Future versions will maybe add: +- Configurable paths for screenshots and data files +- More user preferences saved between sessions +- Extended ARB upload/download handling +- CLI options beyond IP address +- UI refinements and better error reporting + +Contributions, forks, and suggestions are very welcome (I am more the HW guy, programming is not my finest profession). +If you encounter bugs or have ideas, please send me a mail with description & logs. Help are **very** welcome! +--- +## How It Works + +The program uses a simple socket connection (`port 5025`) to talk SCPI to the SDG2042X. +Each GUI tab corresponds to an instrument feature: +
+ +| Tab | Function | +|:----------------|:--------------------------------------------------------------| +| **Basic** | Waveform, frequency, amplitude, offset, phase, output control | +| **Burst** | Configure burst mode, trigger source, cycles, delay | +| **Sweep** | Configure linear/log sweeps | +| **ARB Manager** | List, upload, and download arbitrary waveforms | +| **SCPI CLI** | Direct SCPI command line | +| **Presets** | Store and recall up to 10 custom setups | + +Screenshots are fetched via `SCDP` and stored as `.bmp` (or `.bin` if undecodable). + +--- + +## Command Line Usage -## Usage ```bash -python3 sdg2042x_gui.py [options] +python3 SDG2042X_V0.1.py [options] ``` -### Options -- `-ip ` or `--ip ` : Prefill IP address field -- `-h` or `--help` : Show help +**Options** +``` + -ip , --ip Prefill IP address in GUI + -h, --help Show help message +``` Example: ```bash -python3 sdg2042x_gui.py -ip 192.168.1.120 +python3 SDG2042X_V0.1.py --ip 192.168.1.120 +``` +--- + +## The Preset File – `SDG2042x.dat` + +Presets are stored as plain text in key-value form and can be edited manually. +A fresh file is created automatically if missing. + +Example: +```text +# SDG2042X presets +SLOT1_NAME=Test 1 +SLOT1_BSWV=C1:BSWV WVTP,SINE,FRQ,1KHZ,AMP,1V,OFST,0V,PHSE,0 +SLOT1_OUTP=ON +SLOT2_NAME= +SLOT2_BSWV= +SLOT2_OUTP= +... +SLOT10_NAME= +SLOT10_BSWV= +SLOT10_OUTP= ``` -## Notes -- Tested with Siglent SDG2042X firmware supporting SCPI commands. -- Communication uses SCPI over TCP/IP; no VISA or NI libraries required. -- ARB file formats: use Siglent EasyWaveX to prepare `.bin`/`.csv` if needed. +Each slot (1–10) holds: +- **NAME** – user label +- **BSWV** – waveform setup string (as queried from instrument) +- **OUTP** – output state (ON/OFF) + +The GUI’s *Store* button reads back settings from the generator and saves them. +*Recall* sends those settings back to the SDG2042X. + +--- + +## Requirements + +- Python ≥ 3.7 +- PyQt5 +- LAN-connected Siglent SDG2042X (default SCPI port 5025) + +Install dependencies: +```bash +sudo apt install python3-pyqt5 +``` +--- + +## License, Contribution and Feedback + +**Default license:** [CC-BY-NC-4.0 / Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc/4.0/) +You may use, modify, and redistribute with attribution to *ToGo-Lab*. Feel free to fork, enhance, or suggest features. + +--- + +## Contact + +Thomas Gohle +[tgohle@togo-lab.io](mailto:tgohle@togo-lab.io) +[https://togo-lab.io](https://togo-lab.io) + -## License -MIT (or adapt as needed). diff --git a/script/SDG2042X_GUI_ICON.png b/script/SDG2042X_GUI_ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..f42aea1ee3ecb6f03dc65c2f0d446d465a350a8a GIT binary patch literal 147703 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⋙b!qXxGo8zwOz~UL*}WBi)iNC*dBIORQQ63 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 CnFJgF literal 0 HcmV?d00001 diff --git a/script/SDG2042X_V0.1.py b/script/SDG2042X_V0.1.py new file mode 100755 index 0000000..0eacf4d --- /dev/null +++ b/script/SDG2042X_V0.1.py @@ -0,0 +1,1024 @@ +#!/usr/bin/env python3 +# Siglent SDG2042X Linux GUI (PyQt5) +# Features: +# - Basic, Burst, Sweep, +# - ARB Manager, SCPI CLI, +# - Storing Presets, storing to editable text file SDG2042x.dat +# - Screenshot +# +# Author: Thomas Gohle / tgohle@togo-lab.io +# www.togo-lab.io +# tgonet.de / gohle.de +# +# Copyright: CC BY-SA 4.0 +# https://creativecommons.org/licenses/by-sa/4.0/ +# +# Version: 0.1 +#---------------------------------------------------- + +import os +import socket +import sys +import time +from PyQt5 import QtWidgets, QtCore, QtGui + +# -------------------- Constants -------------------- +Window_Name = "Linux GUI SDG2042X – by Thomas Gohle - ToGo-Lab - Ver 0.1" +DEFAULT_PORT = 5025 +SOCKET_TIMEOUT = 2.5 +SIGLENT_WAVES = ["SINE", "SQUARE", "RAMP", "PULSE", "NOISE", "ARB", "DC"] +PRESET_FILE = "SDG2042x.dat" +NUM_SLOTS = 10 + +# -------------------- Transport -------------------- +class SDGLan: + def __init__(self): + self.sock = None + self.addr = None + self.port = DEFAULT_PORT + + def connect(self, addr, port=DEFAULT_PORT): + self.close() + self.addr = addr + self.port = port + self.sock = socket.create_connection((addr, port), timeout=SOCKET_TIMEOUT) + self.sock.settimeout(SOCKET_TIMEOUT) + + def close(self): + try: + if self.sock: + self.sock.close() + finally: + self.sock = None + + def write(self, cmd: str): + if not self.sock: + raise RuntimeError("Not connected") + if not cmd.endswith("\n"): + cmd += "\n" + self.sock.sendall(cmd.encode("ascii")) + + def write_bytes(self, payload: bytes): + if not self.sock: + raise RuntimeError("Not connected") + self.sock.sendall(payload) + + def query(self, cmd: str) -> str: + self.write(cmd) + data = self._recv_line() + return data.strip() + + def query_raw(self, cmd: str) -> bytes: + self.write(cmd) + return self._recv_until_timeout() + + # ---- block helpers ---- + def _recv_exact(self, n: int) -> bytes: + buf = bytearray() + while len(buf) < n: + chunk = self.sock.recv(n - len(buf)) + if not chunk: + break + buf.extend(chunk) + return bytes(buf) + + def _recv_exact_capped(self, n: int, cap: int) -> bytes: + if n > cap: + raise RuntimeError(f"SCPI block length {n} exceeds cap {cap}") + return self._recv_exact(n) + + def query_block(self, cmd: str, timeout_s: float = 8.0, cap: int = 25_000_000) -> bytes: + """Read a SCPI definite-length block (#). Returns payload without header.""" + if not self.sock: + raise RuntimeError("Not connected") + prev_to = self.sock.gettimeout() + try: + self.sock.settimeout(timeout_s) + self.write(cmd) + # seek '#' + first = self._recv_exact(1) + while first and first != b"#": + first = self._recv_exact(1) + if not first: + return b"" + ndig_b = self._recv_exact(1) + if not ndig_b or not ndig_b.isdigit(): + return b"" + ndig = int(ndig_b.decode("ascii")) + len_str = self._recv_exact(ndig).decode("ascii") + if not len_str.isdigit(): + return b"" + length = int(len_str) + payload = self._recv_exact_capped(length, cap) + return payload + finally: + try: + self.sock.settimeout(prev_to) + except Exception: + pass + + def query_scdp(self, timeout_s: float = 15.0, cap: int = 50_000_000) -> bytes: + """Robust screenshot: handles BMP direct or SCPI block-wrapped payload.""" + if not self.sock: + raise RuntimeError("Not connected") + prev_to = self.sock.gettimeout() + try: + self.sock.settimeout(timeout_s) + # Send SCDP + self.write("SCDP") + # Peek first two bytes + first2 = self._recv_exact(2) + if not first2: + return b"" + # Case 1: BMP direct + if first2 == b"BM": + size_bytes = self._recv_exact(4) + if len(size_bytes) != 4: + return b"" + total_size = int.from_bytes(size_bytes, "little") + # We already have 6 bytes + rest = self._recv_exact_capped(total_size - 6, cap) + return first2 + size_bytes + rest + # Case 2: SCPI block + if first2[:1] == b"#": + ndig = int(first2[1:2].decode()) + len_str = self._recv_exact(ndig).decode("ascii") + if not len_str.isdigit(): + return b"" + length = int(len_str) + payload = self._recv_exact_capped(length, cap) + return payload + # Case 3: unknown header, read until timeout + tail = self._recv_until_timeout() + return first2 + tail + finally: + try: + self.sock.settimeout(prev_to) + except Exception: + pass + + def _recv_line(self) -> str: + chunks = [] + while True: + b = self.sock.recv(4096) + if not b: + break + chunks.append(b) + if b.endswith(b"\n"): + break + return b"".join(chunks).decode("ascii", errors="ignore") + + def _recv_until_timeout(self) -> bytes: + data = bytearray() + while True: + try: + b = self.sock.recv(65536) + if not b: + break + data.extend(b) + except socket.timeout: + break + return bytes(data) + +# -------------------- Utilities -------------------- +def human_to_eng(s: str) -> str: + """Convert '1k', '2.5M', '500mV', '10ms' etc. to float string (base units).""" + t = s.strip().lower().replace("vpp", "").replace("v", "") + t = t.replace("hz", "").replace("deg", "") + mult = 1.0 + if t.endswith("ms"): + mult = 1e-3; t = t[:-2] + elif t.endswith("us"): + mult = 1e-6; t = t[:-2] + elif t.endswith("ns"): + mult = 1e-9; t = t[:-2] + elif t.endswith("s"): + mult = 1.0; t = t[:-1] + elif t.endswith("khz"): + mult = 1e3; t = t[:-3] + elif t.endswith("mhz"): + mult = 1e6; t = t[:-3] + elif t.endswith("ghz"): + mult = 1e9; t = t[:-3] + elif t.endswith("k"): + mult = 1e3; t = t[:-1] + elif t.endswith("m") and not t.endswith("mm"): + mult = 1e-3; t = t[:-1] + elif t.endswith("u"): + mult = 1e-6; t = t[:-1] + elif t.endswith("n"): + mult = 1e-9; t = t[:-1] + elif t.endswith("g"): + mult = 1e9; t = t[:-1] + try: + val = float(t) + except ValueError: + return s.strip() + return f"{val*mult}" + +def quote_name(name: str) -> str: + """Quote ARB names if they contain spaces or punctuation.""" + safe = all(ch.isalnum() or ch in ("_", "-") for ch in name) + return name if safe else '"%s"' % name + +def ensure_preset_file(path: str): + if not os.path.exists(path): + with open(path, "w", encoding="utf-8") as f: + f.write("# SDG2042X presets\n") + for i in range(1, 11): + f.write(f"SLOT{i}_NAME=\n") + f.write(f"SLOT{i}_BSWV=\n") + f.write(f"SLOT{i}_OUTP=\n") + return path + +def read_presets(path: str) -> dict: + ensure_preset_file(path) + presets = {} + with open(path, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if not line or line.startswith("#"): + continue + if "=" not in line: + continue + k, v = line.split("=", 1) + presets[k.strip()] = v.strip() + return presets + +def write_presets(path: str, d: dict): + lines = ["# SDG2042X presets"] + for i in range(1, 11): + name = d.get(f"SLOT{i}_NAME", "") + bswv = d.get(f"SLOT{i}_BSWV", "") + outp = d.get(f"SLOT{i}_OUTP", "") + lines.append(f"SLOT{i}_NAME={name}") + lines.append(f"SLOT{i}_BSWV={bswv}") + lines.append(f"SLOT{i}_OUTP={outp}") + with open(path, "w", encoding="utf-8") as f: + f.write("\n".join(lines) + "\n") + +# -------------------- Screenshot worker (threaded) -------------------- +class ScreenshotWorker(QtCore.QThread): + done = QtCore.pyqtSignal(bytes, str, str) # data, filename, error ('' if ok) + + def __init__(self, io: SDGLan, parent=None): + super().__init__(parent) + self.io = io + + def run(self): + try: + # Clear previous errors that may reference old invalid commands + try: + self.io.write("*CLS") + except Exception: + pass + # Drain any residual bytes from prior operations + try: + _ = self.io._recv_until_timeout() + except Exception: + pass + data = self.io.query_scdp(timeout_s=20.0, cap=50_000_000) + if not data: + err = self.io.query("SYST:ERR?") + raise RuntimeError(f"no image data; last SYST:ERR? -> {err}") + ts = time.strftime("%Y%m%d-%H%M%S") + fn = f"{ts}_SDG2042X.bmp" if data.startswith(b"BM") else f"{ts}_SDG2042X.bin" + self.done.emit(data, fn, "") + except Exception as e: + self.done.emit(b"", "", str(e)) + +# -------------------- Tabs -------------------- +class BasicTab(QtWidgets.QWidget): + apply_basic = QtCore.pyqtSignal(dict) + readback_basic = QtCore.pyqtSignal() + toggle_output = QtCore.pyqtSignal(bool) + store_slot = QtCore.pyqtSignal(int) + recall_slot = QtCore.pyqtSignal(int) + + def __init__(self): + super().__init__() + self._build() + + def _build(self): + wave_lbl = QtWidgets.QLabel("Waveform") + self.wave = QtWidgets.QComboBox(); self.wave.addItems(SIGLENT_WAVES) + frq_lbl = QtWidgets.QLabel("Freq") + self.frq = QtWidgets.QLineEdit("1 kHz") + amp_lbl = QtWidgets.QLabel("Amp Vpp") + self.amp = QtWidgets.QLineEdit("1.0") + off_lbl = QtWidgets.QLabel("Offset V") + self.off = QtWidgets.QLineEdit("0.0") + ph_lbl = QtWidgets.QLabel("Phase deg") + self.ph = QtWidgets.QLineEdit("0") + + self.btn_apply = QtWidgets.QPushButton("Apply") + self.btn_read = QtWidgets.QPushButton("Readback") + self.btn_on = QtWidgets.QPushButton("Output ON") + self.btn_off = QtWidgets.QPushButton("Output OFF") + + # Preset controls + preset_lbl = QtWidgets.QLabel("Preset #") + self.preset_num = QtWidgets.QSpinBox(); self.preset_num.setRange(1, 10); self.preset_num.setValue(1) + self.btn_store = QtWidgets.QPushButton("Store") + self.btn_recall = QtWidgets.QPushButton("Recall") + + grid = QtWidgets.QGridLayout(); row = 0 + grid.addWidget(wave_lbl, row, 0); grid.addWidget(self.wave, row, 1) + grid.addWidget(frq_lbl, row, 2); grid.addWidget(self.frq, row, 3); row += 1 + grid.addWidget(amp_lbl, row, 0); grid.addWidget(self.amp, row, 1) + grid.addWidget(off_lbl, row, 2); grid.addWidget(self.off, row, 3); row += 1 + grid.addWidget(ph_lbl, row, 0); grid.addWidget(self.ph, row, 1); row += 1 + grid.addWidget(self.btn_apply, row, 0) + grid.addWidget(self.btn_read, row, 1) + grid.addWidget(self.btn_on, row, 2) + grid.addWidget(self.btn_off, row, 3); row += 1 + + grid.addWidget(preset_lbl, row, 0) + grid.addWidget(self.preset_num, row, 1) + grid.addWidget(self.btn_store, row, 2) + grid.addWidget(self.btn_recall, row, 3) + self.setLayout(grid) + + self.btn_apply.clicked.connect(self._emit_apply) + self.btn_read.clicked.connect(lambda: self.readback_basic.emit()) + self.btn_on.clicked.connect(lambda: self.toggle_output.emit(True)) + self.btn_off.clicked.connect(lambda: self.toggle_output.emit(False)) + self.btn_store.clicked.connect(lambda: self.store_slot.emit(self.preset_num.value())) + self.btn_recall.clicked.connect(lambda: self.recall_slot.emit(self.preset_num.value())) + + def _emit_apply(self): + cfg = dict( + WVTP=self.wave.currentText(), + FRQ=human_to_eng(self.frq.text()), + AMP=human_to_eng(self.amp.text()), + OFST=human_to_eng(self.off.text()), + PHSE=human_to_eng(self.ph.text()), + ) + self.apply_basic.emit(cfg) + +class PresetsTab(QtWidgets.QWidget): + rename_slot = QtCore.pyqtSignal(int, str) + view_refresh = QtCore.pyqtSignal() + + def __init__(self): + super().__init__() + self._build() + + def _build(self): + self.table = QtWidgets.QTableWidget(10, 3) + self.table.setHorizontalHeaderLabels(["Slot", "Name", "Summary"]) + self.table.horizontalHeader().setStretchLastSection(True) + self.table.verticalHeader().setVisible(False) + for i in range(10): + self.table.setItem(i, 0, QtWidgets.QTableWidgetItem(str(i+1))) + self.table.item(i, 0).setFlags(QtCore.Qt.ItemIsEnabled) + self.table.setItem(i, 1, QtWidgets.QTableWidgetItem("")) + self.table.setItem(i, 2, QtWidgets.QTableWidgetItem("")) + self.table.item(i, 2).setFlags(QtCore.Qt.ItemIsEnabled) + + self.btn_load = QtWidgets.QPushButton("Reload File") + self.btn_save = QtWidgets.QPushButton("Save Names") + self.btn_open = QtWidgets.QPushButton("Open File...") + self.path_label = QtWidgets.QLabel(PRESET_FILE) + + layout = QtWidgets.QVBoxLayout() + hl = QtWidgets.QHBoxLayout() + hl.addWidget(self.btn_load); hl.addWidget(self.btn_save); hl.addWidget(self.btn_open); hl.addStretch(1); hl.addWidget(self.path_label) + layout.addLayout(hl) + layout.addWidget(self.table) + self.setLayout(layout) + + self.btn_load.clicked.connect(lambda: self.view_refresh.emit()) + self.btn_save.clicked.connect(self._save_names) + self.btn_open.clicked.connect(self._open_file) + + def _open_file(self): + path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open Preset File", PRESET_FILE, "Text (*.txt *.dat);;All Files (*)") + if not path: + return + self.path_label.setText(path) + self.view_refresh.emit() + + def _save_names(self): + for i in range(10): + name = self.table.item(i, 1).text().strip() + self.rename_slot.emit(i+1, name) + + def update_from_presets(self, d: dict): + for i in range(1, 11): + name = d.get(f"SLOT{i}_NAME", "") + b = d.get(f"SLOT{i}_BSWV", "") + outp = d.get(f"SLOT{i}_OUTP", "") + summ = "" + if b: + up = b.upper() + fields = [] + for key in ("WVTP,", "FRQ,", "AMP,", "OFST,"): + idx = up.find(key) + if idx >= 0: + val = b[idx+len(key):] + val = val.split(",")[0] + fields.append(f"{key[:-1]}={val}") + summ = " ".join(fields) + if outp: + summ += (" " if summ else "") + f"OUTP={outp}" + self.table.item(i-1, 1).setText(name) + self.table.item(i-1, 2).setText(summ) + +# -------------------- Other tabs (Burst, Sweep, ARB, CLI) -------------------- +class BurstTab(QtWidgets.QWidget): + apply_burst = QtCore.pyqtSignal(dict) + readback_burst = QtCore.pyqtSignal() + + def __init__(self): + super().__init__() + self._build() + + def _build(self): + state_lbl = QtWidgets.QLabel("State") + self.state = QtWidgets.QComboBox(); self.state.addItems(["OFF", "ON"]) + mode_lbl = QtWidgets.QLabel("Mode") + self.mode = QtWidgets.QComboBox(); self.mode.addItems(["TRIG", "GAT"]) + src_lbl = QtWidgets.QLabel("Source") + self.src = QtWidgets.QComboBox(); self.src.addItems(["INT", "EXT"]) + ncy_lbl = QtWidgets.QLabel("Cycles") + self.ncy = QtWidgets.QLineEdit("5") + dly_lbl = QtWidgets.QLabel("Delay s") + self.dly = QtWidgets.QLineEdit("0") + gpol_lbl = QtWidgets.QLabel("Gate Pol") + self.gpol = QtWidgets.QComboBox(); self.gpol.addItems(["POS", "NEG"]) + + self.btn_apply = QtWidgets.QPushButton("Apply Burst") + self.btn_read = QtWidgets.QPushButton("Readback Burst") + + grid = QtWidgets.QGridLayout(); row = 0 + grid.addWidget(state_lbl, row, 0); grid.addWidget(self.state, row, 1) + grid.addWidget(mode_lbl, row, 2); grid.addWidget(self.mode, row, 3); row += 1 + grid.addWidget(src_lbl, row, 0); grid.addWidget(self.src, row, 1) + grid.addWidget(ncy_lbl, row, 2); grid.addWidget(self.ncy, row, 3); row += 1 + grid.addWidget(dly_lbl, row, 0); grid.addWidget(self.dly, row, 1) + grid.addWidget(gpol_lbl, row, 2); grid.addWidget(self.gpol, row, 3); row += 1 + grid.addWidget(self.btn_apply, row, 0) + grid.addWidget(self.btn_read, row, 1) + self.setLayout(grid) + + self.btn_apply.clicked.connect(self._emit_apply) + self.btn_read.clicked.connect(lambda: self.readback_burst.emit()) + + def _emit_apply(self): + try: + ncy_int = int(float(self.ncy.text())) + except Exception: + ncy_int = 1 + cfg = dict( + STATE=self.state.currentText(), + MODE=self.mode.currentText(), + TRSR=self.src.currentText(), + NCYC=str(ncy_int), + DLAY=human_to_eng(self.dly.text()), + GATEPOL=self.gpol.currentText(), + ) + self.apply_burst.emit(cfg) + +class SweepTab(QtWidgets.QWidget): + apply_sweep = QtCore.pyqtSignal(dict) + readback_sweep = QtCore.pyqtSignal() + + def __init__(self): + super().__init__() + self._build() + + def _build(self): + state_lbl = QtWidgets.QLabel("State") + self.state = QtWidgets.QComboBox(); self.state.addItems(["OFF", "ON"]) + typ_lbl = QtWidgets.QLabel("Type") + self.typ = QtWidgets.QComboBox(); self.typ.addItems(["LIN", "LOG"]) + fstart_lbl = QtWidgets.QLabel("Start Hz") + self.fstart = QtWidgets.QLineEdit("1 kHz") + fstop_lbl = QtWidgets.QLabel("Stop Hz") + self.fstop = QtWidgets.QLineEdit("10 kHz") + time_lbl = QtWidgets.QLabel("Time s") + self.time = QtWidgets.QLineEdit("1.0") + dir_lbl = QtWidgets.QLabel("Direction") + self.direction = QtWidgets.QComboBox(); self.direction.addItems(["UP", "DOWN"]) + src_lbl = QtWidgets.QLabel("Source") + self.src = QtWidgets.QComboBox(); self.src.addItems(["INT", "EXT"]) + + self.btn_apply = QtWidgets.QPushButton("Apply Sweep") + self.btn_read = QtWidgets.QPushButton("Readback Sweep") + + grid = QtWidgets.QGridLayout(); row = 0 + grid.addWidget(state_lbl, row, 0); grid.addWidget(self.state, row, 1) + grid.addWidget(typ_lbl, row, 2); grid.addWidget(self.typ, row, 3); row += 1 + grid.addWidget(fstart_lbl, row, 0); grid.addWidget(self.fstart, row, 1) + grid.addWidget(fstop_lbl, row, 2); grid.addWidget(self.fstop, row, 3); row += 1 + grid.addWidget(time_lbl, row, 0); grid.addWidget(self.time, row, 1) + grid.addWidget(dir_lbl, row, 2); grid.addWidget(self.direction, row, 3); row += 1 + grid.addWidget(src_lbl, row, 0); grid.addWidget(self.src, row, 1); row += 1 + grid.addWidget(self.btn_apply, row, 0) + grid.addWidget(self.btn_read, row, 1) + self.setLayout(grid) + + self.btn_apply.clicked.connect(self._emit_apply) + self.btn_read.clicked.connect(lambda: self.readback_sweep.emit()) + + def _emit_apply(self): + cfg = dict( + STATE=self.state.currentText(), + WAV=self.typ.currentText(), + STAR=human_to_eng(self.fstart.text()), + STOP=human_to_eng(self.fstop.text()), + TIME=human_to_eng(self.time.text()), + DIR=self.direction.currentText(), + TRSR=self.src.currentText(), + ) + self.apply_sweep.emit(cfg) + +class ARBTab(QtWidgets.QWidget): + refresh_lists = QtCore.pyqtSignal() + set_wave = QtCore.pyqtSignal(str) + upload_wave = QtCore.pyqtSignal(str, str) + download_wave = QtCore.pyqtSignal(str, str) + + def __init__(self): + super().__init__() + self._build() + + def _build(self): + self.built_in = QtWidgets.QListWidget() + self.user = QtWidgets.QListWidget() + refresh = QtWidgets.QPushButton("Refresh") + set_btn = QtWidgets.QPushButton("Set Selected to Channel") + upload_btn = QtWidgets.QPushButton("Upload .bin/.csv → USER") + download_btn = QtWidgets.QPushButton("Download USER → file") + self.name_edit = QtWidgets.QLineEdit(); self.name_edit.setPlaceholderText("User name (optional)") + + grid = QtWidgets.QGridLayout() + grid.addWidget(QtWidgets.QLabel("BUILDIN"), 0, 0) + grid.addWidget(QtWidgets.QLabel("USER"), 0, 1) + grid.addWidget(self.built_in, 1, 0) + grid.addWidget(self.user, 1, 1) + grid.addWidget(refresh, 2, 0) + grid.addWidget(set_btn, 2, 1) + grid.addWidget(self.name_edit, 3, 0) + grid.addWidget(upload_btn, 3, 1) + grid.addWidget(download_btn, 4, 1) + self.setLayout(grid) + + refresh.clicked.connect(lambda: self.refresh_lists.emit()) + set_btn.clicked.connect(self._emit_set) + upload_btn.clicked.connect(self._emit_upload) + download_btn.clicked.connect(self._emit_download) + + def selected_name(self) -> str: + w = self.user.currentItem() or self.built_in.currentItem() + return w.text().strip() if w else "" + + def _emit_set(self): + name = self.selected_name() + if name: + self.set_wave.emit(name) + + def _emit_upload(self): + path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select ARB file", "", "ARB Files (*.bin *.csv);;All Files (*)") + if not path: + return + name = self.name_edit.text().strip() + if not name: + name = os.path.splitext(os.path.basename(path))[0] + self.upload_wave.emit(name, path) + + def _emit_download(self): + item = self.user.currentItem() + if not item: + return + name = item.text().strip() + path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save ARB file", f"{name}.bin", "Binary (*.bin);;All Files (*)") + if not path: + return + self.download_wave.emit(name, path) + +class CLITab(QtWidgets.QWidget): + send_cmd = QtCore.pyqtSignal(str) + query_cmd = QtCore.pyqtSignal(str) + + def __init__(self): + super().__init__() + self._build() + + def _build(self): + self.inp = QtWidgets.QLineEdit() + self.inp.setPlaceholderText("Enter SCPI, e.g. C1:BSWV? or *IDN?") + btn_send = QtWidgets.QPushButton("Send") + btn_query = QtWidgets.QPushButton("Query") + self.out = QtWidgets.QPlainTextEdit(); self.out.setReadOnly(True); self.out.setMinimumHeight(220) + + grid = QtWidgets.QGridLayout(); row = 0 + grid.addWidget(QtWidgets.QLabel("Command"), row, 0) + grid.addWidget(self.inp, row, 1, 1, 4) + grid.addWidget(btn_send, row, 5) + grid.addWidget(btn_query, row, 6); row += 1 + grid.addWidget(self.out, row, 0, 1, 7) + self.setLayout(grid) + + btn_send.clicked.connect(self._do_send) + btn_query.clicked.connect(self._do_query) + self.inp.returnPressed.connect(self._do_query) + + def append(self, s: str): + self.out.appendPlainText(s) + + def _do_send(self): + cmd = self.inp.text().strip() + if cmd: + self.send_cmd.emit(cmd) + + def _do_query(self): + cmd = self.inp.text().strip() + if cmd: + self.query_cmd.emit(cmd) + +# -------------------- Main Window -------------------- +class Main(QtWidgets.QWidget): + def __init__(self, preset_ip=None): + super().__init__() + self.setWindowTitle(Window_Name) + self.i = SDGLan() + self._scr_worker = None + self._build(preset_ip) + + def _build(self, preset_ip): + ip_lbl = QtWidgets.QLabel("IP") + self.ip = QtWidgets.QLineEdit(preset_ip or "") + if not preset_ip: + self.ip.setPlaceholderText("e.g. 192.168.1.120") + port_lbl = QtWidgets.QLabel("Port") + self.port = QtWidgets.QLineEdit(str(DEFAULT_PORT)) + self.btn_connect = QtWidgets.QPushButton("Connect") + self.btn_idn = QtWidgets.QPushButton("IDN?") + self.btn_err = QtWidgets.QPushButton("SYST:ERR?") + self.btn_scr = QtWidgets.QPushButton("Screenshot") + ch_lbl = QtWidgets.QLabel("Channel") + self.ch = QtWidgets.QComboBox(); self.ch.addItems(["C1", "C2"]) + + self.tabs = QtWidgets.QTabWidget() + self.t_basic = BasicTab(); self.tabs.addTab(self.t_basic, "Basic") + self.t_burst = BurstTab(); self.tabs.addTab(self.t_burst, "Burst") + self.t_sweep = SweepTab(); self.tabs.addTab(self.t_sweep, "Sweep") + self.t_arb = ARBTab(); self.tabs.addTab(self.t_arb, "ARB Manager") + self.t_cli = CLITab(); self.tabs.addTab(self.t_cli, "SCPI CLI") + self.t_presets = PresetsTab(); self.tabs.addTab(self.t_presets, "Presets") + + self.log = QtWidgets.QPlainTextEdit(); self.log.setReadOnly(True); self.log.setMinimumHeight(220) + + top = QtWidgets.QGridLayout(); row = 0 + top.addWidget(ip_lbl, row, 0); top.addWidget(self.ip, row, 1, 1, 3) + top.addWidget(port_lbl, row, 4); top.addWidget(self.port, row, 5) + top.addWidget(self.btn_connect, row, 6); row += 1 + top.addWidget(self.btn_idn, row, 0); top.addWidget(self.btn_err, row, 1); top.addWidget(self.btn_scr, row, 2) + top.addWidget(ch_lbl, row, 3); top.addWidget(self.ch, row, 4); row += 1 + top.addWidget(self.tabs, row, 0, 1, 7); row += 1 + top.addWidget(self.log, row, 0, 1, 7) + self.setLayout(top) + + # wiring + self.btn_connect.clicked.connect(self.on_connect) + self.btn_idn.clicked.connect(self.on_idn) + self.btn_err.clicked.connect(self.on_err) + self.btn_scr.clicked.connect(self.on_screenshot) + + self.t_basic.apply_basic.connect(self.on_apply_basic) + self.t_basic.readback_basic.connect(self.on_readback_basic) + self.t_basic.toggle_output.connect(self.on_output) + self.t_basic.store_slot.connect(self.on_store_slot) + self.t_basic.recall_slot.connect(self.on_recall_slot) + + self.t_burst.apply_burst.connect(self.on_apply_burst) + self.t_burst.readback_burst.connect(self.on_readback_burst) + self.t_sweep.apply_sweep.connect(self.on_apply_sweep) + self.t_sweep.readback_sweep.connect(self.on_readback_sweep) + self.t_arb.refresh_lists.connect(self.on_arb_refresh) + self.t_arb.set_wave.connect(self.on_arb_set) + self.t_arb.upload_wave.connect(self.on_arb_upload) + self.t_arb.download_wave.connect(self.on_arb_download) + self.t_cli.send_cmd.connect(self.on_cli_send) + self.t_cli.query_cmd.connect(self.on_cli_query) + + self.t_presets.rename_slot.connect(self.on_rename_slot) + self.t_presets.view_refresh.connect(self.refresh_presets_view) + + ensure_preset_file(PRESET_FILE) + self.refresh_presets_view() + + def logln(self, s: str): + self.log.appendPlainText(s) + + def _pref(self) -> str: + return self.ch.currentText() + ":" + + # ---------- Top actions ---------- + def on_connect(self): + try: + addr = self.ip.text().strip(); port = int(self.port.text().strip()) + self.i.connect(addr, port) + self.logln(f"Connected to {addr}:{port}") + except Exception as e: + self.logln(f"[ERR] connect: {e}") + + def on_idn(self): + try: + self.logln(f"*IDN? -> {self.i.query('*IDN?')}") + except Exception as e: + self.logln(f"[ERR] IDN: {e}") + + def on_err(self): + try: + self.logln(f"SYST:ERR? -> {self.i.query('SYST:ERR?')}") + except Exception as e: + self.logln(f"[ERR] SYST:ERR?: {e}") + + # ---------- Screenshot (threaded) ---------- + def on_screenshot(self): + if not self.i.sock: + self.logln("[ERR] screenshot: not connected") + return + if self._scr_worker and self._scr_worker.isRunning(): + self.logln("[ERR] screenshot already running") + return + self.btn_scr.setEnabled(False) + self.setCursor(QtCore.Qt.WaitCursor) + self._scr_worker = ScreenshotWorker(self.i, self) + self._scr_worker.done.connect(self._on_screenshot_done) + self._scr_worker.start() + + def _on_screenshot_done(self, data: bytes, fn: str, err: str): + self.btn_scr.setEnabled(True) + self.unsetCursor() + if err: + self.logln(f"[ERR] screenshot: {err}") + return + try: + with open(fn, "wb") as f: + f.write(data) + self.logln(f"Screenshot saved to {fn} ({len(data)} bytes)") + img = QtGui.QImage(fn) + if img.isNull(): + self.logln("[ERR] screenshot: Qt could not decode image; file kept") + return + pixmap = QtGui.QPixmap.fromImage(img) + lbl = QtWidgets.QLabel(); lbl.setPixmap(pixmap) + w = QtWidgets.QWidget(); l = QtWidgets.QVBoxLayout(w); l.addWidget(lbl) + w.setWindowTitle("SDG2042X Screenshot") + w.resize(pixmap.width(), pixmap.height()) + w.show() + self._scr_win = w + except Exception as e: + self.logln(f"[ERR] screenshot save/display: {e}") + + # ---------- Basic ---------- + def on_apply_basic(self, cfg: dict): + try: + cmd = (f"{self._pref()}BSWV " + f"WVTP,{cfg['WVTP']},FRQ,{cfg['FRQ']},AMP,{cfg['AMP']}," + f"OFST,{cfg['OFST']},PHSE,{cfg['PHSE']}") + self.i.write(cmd) + self.logln(f"SET: {cmd}") + except Exception as e: + self.logln(f"[ERR] basic apply: {e}") + + def on_readback_basic(self): + try: + rb = self.i.query(f"{self._pref()}BSWV?") + st = self.i.query(f"{self._pref()}OUTP?") + self.logln(f"{self._pref()}BSWV? -> {rb}") + self.logln(f"{self._pref()}OUTP? -> {st}") + except Exception as e: + self.logln(f"[ERR] basic readback: {e}") + + def on_output(self, turn_on: bool): + try: + cmd = f"{self._pref()}OUTP {'ON' if turn_on else 'OFF'}" + self.i.write(cmd) + st = self.i.query(f"{self._pref()}OUTP?") + self.logln(f"SET: {cmd}") + self.logln(f"{self._pref()}OUTP? -> {st}") + except Exception as e: + self.logln(f"[ERR] output: {e}") + + # ---------- Burst ---------- + def on_apply_burst(self, cfg: dict): + try: + parts = [ + f"STATE,{cfg['STATE']}", + f"MODE,{cfg['MODE']}", + f"TRSR,{cfg['TRSR']}", + f"NCYC,{cfg['NCYC']}", + f"DLAY,{cfg['DLAY']}", + f"GATEPOL,{cfg['GATEPOL']}", + ] + cmd = f"{self._pref()}BTWV " + ",".join(parts) + self.i.write(cmd) + self.logln(f"SET: {cmd}") + except Exception as e: + self.logln(f"[ERR] burst apply: {e}") + + def on_readback_burst(self): + try: + rb = self.i.query(f"{self._pref()}BTWV?") + self.logln(f"{self._pref()}BTWV? -> {rb}") + except Exception as e: + self.logln(f"[ERR] burst readback: {e}") + + # ---------- Sweep ---------- + def on_apply_sweep(self, cfg: dict): + try: + parts = [ + f"STATE,{cfg['STATE']}", + f"WAV,{cfg['WAV']}", + f"STAR,{cfg['STAR']}", + f"STOP,{cfg['STOP']}", + f"TIME,{cfg['TIME']}", + f"DIR,{cfg['DIR']}", + f"TRSR,{cfg['TRSR']}", + ] + cmd = f"{self._pref()}SWWV " + ",".join(parts) + self.i.write(cmd) + err = self.i.query("SYST:ERR?") + if not err.startswith("0"): + parts[1] = f"SPAC,{cfg['WAV']}" # fallback for older FW + cmd2 = f"{self._pref()}SWWV " + ",".join(parts) + self.i.write(cmd2) + self.logln(f"SET (fallback): {cmd2}") + else: + self.logln(f"SET: {cmd}") + except Exception as e: + self.logln(f"[ERR] sweep apply: {e}") + + def on_readback_sweep(self): + try: + rb = self.i.query(f"{self._pref()}SWWV?") + self.logln(f"{self._pref()}SWWV? -> {rb}") + except Exception as e: + self.logln(f"[ERR] sweep readback: {e}") + + # ---------- ARB ops ---------- + def on_arb_refresh(self): + try: + b = self.i.query("STL? BUILDIN") + u = self.i.query("STL? USER") + def parse_list(s: str): + parts = [p.strip() for p in s.replace(";", ",").split(',') if p.strip()] + return parts + b_list = parse_list(b) + u_list = parse_list(u) + self.t_arb.built_in.clear(); self.t_arb.user.clear() + self.t_arb.built_in.addItems(b_list) + self.t_arb.user.addItems(u_list) + self.logln(f"BUILDIN: {b_list}") + self.logln(f"USER: {u_list}") + except Exception as e: + self.logln(f"[ERR] ARB refresh: {e}") + + def on_arb_set(self, name: str): + try: + qname = quote_name(name) + self.i.write(f"{self._pref()}BSWV WVTP,ARB") + self.i.write(f"{self._pref()}ARWV NAME,{qname}") + rb = self.i.query(f"{self._pref()}ARWV?") + self.logln(f"SET ARB: {qname}; ARWV? -> {rb}") + except Exception as e: + self.logln(f"[ERR] ARB set: {e}") + + def _make_scpi_block(self, payload: bytes) -> bytes: + n = len(payload) + len_digits = str(len(str(n))).encode('ascii') + header = b'#' + len_digits + str(n).encode('ascii') + return header + payload + + def on_arb_upload(self, name: str, path: str): + try: + with open(path, 'rb') as f: + data = f.read() + block = self._make_scpi_block(data) + qname = quote_name(name) + prefix = f"WVDT USER,{qname},".encode('ascii') + self.i.write_bytes(prefix + block + b"\n") + self.logln(f"Uploaded USER,{qname} ({len(data)} bytes)") + except Exception as e: + self.logln(f"[ERR] ARB upload: {e}") + + def on_arb_download(self, name: str, savepath: str): + try: + qname = quote_name(name) + raw = self.i.query_raw(f"WVDT? USER,{qname}") + idx = raw.find(b"WAVEDATA,") + if idx == -1: + raise RuntimeError("No WAVEDATA header") + blk = raw[idx + len(b"WAVEDATA,"):] + if not blk or blk[0:1] != b'#': + raise RuntimeError("No SCPI block after WAVEDATA,") + ndig = int(chr(blk[1])) + start = 2 + blen = int(blk[start:start+ndig].decode('ascii')) + start += ndig + payload = bytearray(blk[start:start+blen]) + need = blen - len(payload) + while need > 0: + try: + chunk = self.i.sock.recv(min(65536, need)) + if not chunk: + break + payload.extend(chunk) + need -= len(chunk) + except socket.timeout: + break + with open(savepath, 'wb') as f: + f.write(bytes(payload)) + self.logln(f"Downloaded USER,{qname} -> {savepath} ({len(payload)} bytes)") + except Exception as e: + self.logln(f"[ERR] ARB download: {e}") + + # ---------- CLI tab ---------- + def on_cli_send(self, cmd: str): + try: + self.i.write(cmd) + self.t_cli.append(f"> {cmd}") + except Exception as e: + self.t_cli.append(f"[ERR] send: {e}") + + def on_cli_query(self, cmd: str): + try: + resp = self.i.query(cmd) + self.t_cli.append(f"? {cmd}\n< {resp}") + except Exception as e: + self.t_cli.append(f"[ERR] query: {e}") + + # ---------- Presets ---------- + def on_store_slot(self, slot: int): + try: + if slot < 1 or slot > 10: + raise ValueError("slot out of range") + bswv = self.i.query(f"{self._pref()}BSWV?") + outp = self.i.query(f"{self._pref()}OUTP?") + outp_state = "ON" if "ON" in outp.upper().split(",")[0] else "OFF" + d = read_presets(PRESET_FILE) + d[f"SLOT{slot}_BSWV"] = bswv + d[f"SLOT{slot}_OUTP"] = outp_state + write_presets(PRESET_FILE, d) + self.logln(f"Stored slot {slot}: BSWV len={len(bswv)}, OUTP={outp_state}") + self.refresh_presets_view() + except Exception as e: + self.logln(f"[ERR] store slot {slot}: {e}") + + def on_recall_slot(self, slot: int): + try: + if slot < 1 or slot > 10: + raise ValueError("slot out of range") + d = read_presets(PRESET_FILE) + b = d.get(f"SLOT{slot}_BSWV", "").strip() + o = d.get(f"SLOT{slot}_OUTP", "").strip().upper() + if not b: + raise RuntimeError("empty BSWV") + self.i.write(b) + if o in ("ON", "OFF"): + self.i.write(f"{self._pref()}OUTP {o}") + self.logln(f"Recalled slot {slot}: applied BSWV and OUTP={o or 'N/A'}") + except Exception as e: + self.logln(f"[ERR] recall slot {slot}: {e}") + + def on_rename_slot(self, slot: int, name: str): + try: + d = read_presets(PRESET_FILE) + d[f"SLOT{slot}_NAME"] = name + write_presets(PRESET_FILE, d) + self.refresh_presets_view() + except Exception as e: + self.logln(f"[ERR] rename slot {slot}: {e}") + + def refresh_presets_view(self): + try: + d = read_presets(PRESET_FILE) + self.t_presets.update_from_presets(d) + except Exception as e: + self.logln(f"[ERR] refresh presets: {e}") + +# -------------------- CLI entry -------------------- +def show_help(): + print("Usage: sdg2042x_gui.py [options]\n") + print("Options:") + print(" -ip , --ip Prefill IP address field") + print(" -h, --help Show this help message") + +if __name__ == "__main__": + preset_ip = None + argv = sys.argv[1:] + for i, tok in enumerate(argv): + if tok in ("-h", "--help"): + show_help(); sys.exit(0) + if tok in ("-ip", "--ip") and i + 1 < len(argv): + preset_ip = argv[i + 1] + app = QtWidgets.QApplication(sys.argv) + m = Main(preset_ip=preset_ip) + m.resize(1100, 680) + m.show() + sys.exit(app.exec_()) diff --git a/script/SDG2042x.dat b/script/SDG2042x.dat new file mode 100644 index 0000000..ba6681a --- /dev/null +++ b/script/SDG2042x.dat @@ -0,0 +1,31 @@ +# SDG2042X presets +SLOT1_NAME=Sine 1kHz +SLOT1_BSWV=C1:BSWV WVTP,SINE,FRQ,1000HZ,PERI,0.001S,AMP,3V,AMPVRMS,1.0605Vrms,AMPDBM,13.5205dBm,MAX_OUTPUT_AMP,20V,OFST,0V,HLEV,1.5V,LLEV,-1.5V,PHSE,0 +SLOT1_OUTP=ON +SLOT2_NAME= +SLOT2_BSWV= +SLOT2_OUTP= +SLOT3_NAME= +SLOT3_BSWV= +SLOT3_OUTP= +SLOT4_NAME= +SLOT4_BSWV= +SLOT4_OUTP= +SLOT5_NAME= +SLOT5_BSWV= +SLOT5_OUTP= +SLOT6_NAME= +SLOT6_BSWV= +SLOT6_OUTP= +SLOT7_NAME= +SLOT7_BSWV= +SLOT7_OUTP= +SLOT8_NAME= +SLOT8_BSWV= +SLOT8_OUTP= +SLOT9_NAME= +SLOT9_BSWV= +SLOT9_OUTP= +SLOT10_NAME= +SLOT10_BSWV= +SLOT10_OUTP=