Files
templates/python/set_devices/qt_ports/circuit_parameters.py
T
Andrey 41e24629ce Расширить DEIF, загрузку CAN и общую обработку сигналов
Добавить общее ядро DEIF, эмуляцию приборов и переносимые панели Python/Qt.
Расширить загрузчики F2812 и F28335, обновление Flash и профиль STM Invertor.
Добавить альтернативный МНК Eigen, модели неисправностей и диагностику сигналов.
Обновить справочники устройств, проекты CCS и регрессионные проверки.
2026-10-24 15:40:51 +03:00

34 lines
5.1 KiB
Python

"""Необязательные известные элементы последовательного эквивалента RLC.""" # Ввод не смешивает номиналы реального RC-снаббера с параметрами идентифицируемых полюсов.
try: # Поддерживаем современные и совместимые Windows-сборки.
from PySide6.QtCore import Signal # Одно изменение любого элемента делает старый подбор моделей неактуальным.
from PySide6.QtWidgets import QDoubleSpinBox, QHBoxLayout, QLabel, QWidget # Используем стандартные числовые поля Qt6.
except ImportError: # Qt5 получает тот же интерфейс без дополнительных зависимостей.
from PySide2.QtCore import Signal # Контракт сигналов одинаков на Windows 7 и новых системах.
from PySide2.QtWidgets import QDoubleSpinBox, QHBoxLayout, QLabel, QWidget # Набор полей и единицы не зависят от версии Qt.
class CircuitParameters(QWidget): # Компонент можно встроить в подробные параметры любого вида сравнения.
changed = Signal() # Владелец решает, запускать ли автоматический пересчёт или ожидать кнопку.
def __init__(self, parent=None): # По умолчанию ни один электрический элемент не предполагается известным.
super().__init__(parent) # Жизненным циклом компонента управляет родительская панель сравнения.
row = QHBoxLayout(self) # Три поля и пояснение занимают одну строку.
row.setContentsMargins(0, 0, 0, 0) # Сохраняем существующие отступы формы.
row.addWidget(QLabel('Эквивалентный последовательный RLC:')) # Явно называем топологию, к которой относятся формулы R/L и LC.
self.inductance, self.capacitance, self.resistance = QDoubleSpinBox(), QDoubleSpinBox(), QDoubleSpinBox() # Отдельное неизвестное значение разрешено у каждого элемента.
self.controls = (self.inductance, self.capacitance, self.resistance) # Общий список позволяет блокировать ввод во время рабочего задания.
for title, box, suffix in (('L', self.inductance, ' нГн'), ('C', self.capacitance, ' нФ'), ('R', self.resistance, ' Ом')): # Удобные единицы соответствуют обычным масштабам коммутационного контура.
row.addWidget(QLabel(title)) # Подпись отделяет физическую величину от единицы в поле.
box.setDecimals(6) # Дробные нГн, нФ и Ом сохраняются без грубого округления.
box.setRange(0., 1e12) # Ноль означает неизвестное значение; отрицательные пассивные элементы не допускаются.
box.setSpecialValueText('неизвестно') # Не скрываем отсутствие исходных электрических данных за произвольным номиналом.
box.setSuffix(suffix) # Единица видна при вводе любого положительного значения.
box.setMaximumWidth(170) # Ширина в логических пикселях оставляет место всем трём элементам.
box.setToolTip('Введите известный элемент последовательного эквивалента. Ноль — неизвестно. Это не автоматическая модель топологии RC-снаббера.') # Объяснение предотвращает неверную интерпретацию восстановленных номиналов.
box.valueChanged.connect(lambda _value: self.changed.emit()) # Любое изменение требует нового численного подбора и отчёта.
row.addWidget(box) # Поля располагаются в порядке L, C и R.
row.addStretch(1) # Свободная ширина не растягивает числовые поля.
def values(self): # Снимок значений фиксируется до запуска фоновой идентификации.
return dict(inductance_h=self.inductance.value() * 1e-9, capacitance_f=self.capacitance.value() * 1e-9, resistance_ohm=self.resistance.value()) # нГн и нФ переводятся в СИ; Ом уже соответствует внутренним формулам.