БИБЛИОТЕКА МОДЕЛИРОВАНИЯ ДИНАМИЧЕСКИХ СИСТЕМ С ИСПОЛЬЗОВАНИЕМ PYTHON
Постановка проблемы. В современных условиях разработки электронных устройств возникает необходимость в эффективном инструменте моделирования схем до их физической реализации. Существующие решения часто имеют ограниченную гибкость или сложность в расширении функциональности.
Требуется создание программного обеспечения, позволяющего:
− Создавать математические модели электронных схем
− Проводить различные виды анализа
− Обеспечивать возможность расширения базового функционала
Анализ последних исследований и публикаций. Современные системы моделирования электронных схем активно развиваются в направлении повышения точности и скорости вычислений.
Особое внимание уделяется:
− Интеграции с другими инструментами проектирования
− Расширению библиотек компонентов
− Внедрению новых методов анализа
− Улучшению пользовательского интерфейса
Целью работы является разработка программного обеспечения для моделирования электронных схем, которое:
− Обеспечивает создание математических моделей схем
− Реализует основные виды анализа (DC и AC)
− Имеет модульную архитектуру для дальнейшего расширения
− Предоставляет удобный интерфейс для работы с данными
Основная часть
Для решения задачи моделирования электронной схемы необходимо получить математическую модель для возможности дальнейшего анализа.
Следовательно, необходимо реализовать класс, который будет соответствовать математической модели электрической цепи и хранить в себе все необходимые данные, такие как: номера и индексы узлов, список компонентов (нетлист), сформированные уравнения равновесия.
Представим диаграмму класса Circuit (рис. 1).
При инициализации объекта класса Circuit формируется список узлов и список компонентов из переданного нетлиста. Также для инициализации объекта можно указать тип модели, которая будет создаваться. реализовано два метода: общий табличный метод и гибридный ГМ10. Но Такая реализация предполагает возможность добавления других необходимых пользователю методов путем дописывания соответствующего кода.

Рис. 1. Диаграмма класса Circuit
Также на данной диаграмме видны два возможных анализа: DC-анализ и AC-анализ. В дальнейшем планируется доработать еще несколько типов анализа.
Методы DC и AC анализов возвращают словарь с такой структурой:
- Название анализа;
- Начало отсчета времени;
- Конец отсчета времени;
- Шаг времени;
- Список векторовнапряжений и токов (для каждого момента времени и каждого элемента схемы).
Сделано это для удобства формирования результатов, как в текстовой, так и в графической формах.
На диаграмме, представленной на рисунке 2, изображено подробное описание логики возможного сеанса использования данной программы. Пользователь создает компоненты, необходимые ему для моделирования. Затем необходимо создать объект схемы Circuit и передать ему нетлист для формирования математической модели. При вызове метода для анализа схемы пользователю будет предоставлено решение уравнений равновесия данной модели в виде текстового или графического ответа.
Для реализации компонентов был создан класс Component с общими полями и методами (рис. 3). Все компоненты из базового набора подражают классу Component. То есть, для создания нового компонента необходимо просто переопределить или добавить необходимые поля и/или методы. Это также упрощает создание новейших, нужных юзеру частей схемы, не входящих в базисный набор.

Рис. 2. Диаграмма последовательности работы программы

Рис. 3 Диаграмма класса Component

Рис. 4 Диаграмма класса Resistor
Класс Resistor следует классу Component и представлен на рисунке 4.
Осмотрим параметры, необходимые для инициализации объекта класса:
classResistor(Component):
def__init__(self, name: str, nodes: list, resistance: float):
− name – название для компонента в схеме;
− nodes – список из узлов, к которым подключен резистор (в данном случае 2 узла)
− resistance – числовое значение с плавающей точностью для определения сопротивления
Пример создания объекта:
R1 = Resistor('R1', [0,1],3)# 3 Ohm
Класс CurrentSource следует классу Component и представлен на рисунке 5.
Осмотрим параметры, необходимые для инициализации объекта класса:
class CurrentSource(Component):
def__init__(self, name: str, nodes: list, current: float, ac_curr ent=None):
1) name – название для компонента в схеме;
2) nodes – список из узлов, к которым подключен резистор (в данном случае 2 узла)
3) current – числовое значение с плавающей точной для определения силы тока
- ac_current – функция зависимая от времени (для анализа по переменному току), принимающая функцию или кортеж значений для функций по умолчанию.
Пример создания объекта:
I2 = CurrentSource(‘I2’, [0,1],2)#2 Ampere
Класс VoltageSource следует классу Component и представлен на рисунке 6.
Осмотрим параметры, необходимые для инициализации объекта класса:
classVoltageSource(Component):
def__init__(self, name: str, nodes, voltage, ac_voltage=None):
1) name – название для компонента в схеме;
2) nodes – список из узлов, к которым подключен резистор (в данном случае 2 узла)
− voltage – числовое значение с плавающей точностью для определения напряжения
− ac_ voltage – функция зависимая от времени (для анализа по переменному току), принимающая функцию или кортеж значений для функций по умолчанию.
Имеющиеся функции:
Пример создания объекта:
V2 = VoltageSource('V2', [0,1],1)#1 Volt
Для выполнения АC-анализа необходимо вызвать метод solve_AC(), имеющий следующие входные параметры:
defsolve_AC(self, start, stop, step):
− start – начало отсчета времени;
− stop – конец отсчета времени;
− step – шаг времени.
Данный метод возвращает словарь, содержащий результаты выполнения матричного уравнения Ax=b для каждого шага времени. На базе данного словаря можно строить графические результаты анализа.
Рассмотрим схему, состоящую из двух элементов: источника тока и резистора и двух узлов (один из которых нулевой) (рис. 7).
Код для описания конфигурации схемы:
R1 = Resistor(‘R1’, [0,1],3)# 3 Ohm
I2 = CurrentSource(‘I2’, [0,1],2)#2 Ampere
test_circuit = Circuit()
test_circuit.add_components([R1, I2])

Рис. 5. Диаграмма класса CurrentSource

Рис. 6. Диаграмма класса VoltageSource

Рис. 7. Схема к примера
Пусть сила тока источника равна 2 Ампера, а сопротивление резистора – 3 Ом (рис. 8).
Проведем DC анализ для данных значений:
test_circuit.solve_DC()#DC
Рис. 8. Результаты примера
Выводы
Разработанное программное обеспечение позволяет эффективно моделировать электронные схемы. Основные результаты:
− Создана гибкая архитектура на основе объектно-ориентированного подхода
− Реализованы базовые методы анализа DC и AC
− Обеспечена возможность расширения функциональности
− Система позволяет получать детальные результаты анализа в удобной форме
Библиографическая ссылка
URL: https://publish2020.scienceforum.ru/article/view?id=1047 (дата обращения: 01.11.2026).

