Checkpoint EEPROM, firmware analysis and instrument protocol updates
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user