Checkpoint EEPROM, firmware analysis and instrument protocol updates

This commit is contained in:
2026-10-08 21:51:44 +03:00
parent b0c0c05cfa
commit fe9b5a246e
24 changed files with 848 additions and 62 deletions
+19 -4
View File
@@ -8,6 +8,8 @@ See docs/tektronix-dpo4034.md for wiring, commands and scaling.
"""
from dataclasses import dataclass
import math
import struct
import sys
def resource_name(interface, address, board=0):
@@ -52,18 +54,31 @@ class DPO4034:
try:
import pyvisa
except ImportError as exc:
raise RuntimeError("Установите PyVISA и NI-VISA или TekVISA") from exc
if getattr(sys, "frozen", False):
message = "В сборке SETGUI недоступна PyVISA. Используйте исправленную сборку EXE."
else:
message = "В Python-окружении недоступна PyVISA. Установите PyVISA (для Python 3.8: версия 1.14.1)."
raise RuntimeError(message + " Причина: " + str(exc)) from exc
factory = pyvisa.ResourceManager
try:
self.manager = factory()
try:
self.manager = factory()
except (OSError, ValueError) as exc:
if self._factory is not None:
raise
bits = struct.calcsize("P") * 8
raise RuntimeError(
f"Не удалось загрузить VISA-драйвер. Установите NI-VISA или TekVISA {bits}-bit "
"с поддержкой вашей Windows (для Win7 нужна совместимая версия). Причина: " + str(exc)
) from exc
self.instrument = self.manager.open_resource(resource, open_timeout=timeout_ms)
self.instrument.timeout = timeout_ms
self.instrument.write_termination = "\n"
self.instrument.read_termination = "\n"
identity = self.instrument.query("*IDN?").strip()
fields = identity.upper().split(",")
if len(fields) < 2 or "TEKTRONIX" not in fields[0] or fields[1].strip() not in ("DPO4034", "MDO4034C"):
raise ValueError(f"Ожидался Tektronix DPO4034 или MDO4034C, получено: {identity}")
if len(fields) < 2 or "TEKTRONIX" not in fields[0] or fields[1].strip() not in ("DPO4034", "DPO4034B", "MDO4034C"):
raise ValueError(f"Ожидался Tektronix DPO4034, DPO4034B или MDO4034C, получено: {identity}")
self.instrument.write("HEADER OFF")
return identity
except Exception: