Что такое spice модель

Компьютерное моделирование электрических схем

Компьютеры могут быть мощным инструментом при правильном использовании, особенно в области науки и техники. Существует программное обеспечение для моделирования электрических схем, и эти программы могут быть очень полезны, помогая разработчикам проверять идеи перед сборкой реальных схем, экономя много времени и денег.

Эти же программы могут быть фантастическими помощниками для начинающих студентов-электронщиков, позволяя быстро и легко исследовать идеи без необходимости сборки реальных схем. Конечно, ничто не заменит сборку и тестирование реальных схем, но компьютерное моделирование определенно помогает в процессе обучения, позволяя студенту экспериментировать с изменениями значений и видеть их влияние на схему. В этой книге я буду часто использовать распечатки схем моделирования, чтобы проиллюстрировать важные концепции. Наблюдая за результатами компьютерного моделирования, учащийся может получить интуитивное представление о поведении схемы без пугающего абстрактного математического анализа.

Моделирование схем с помощью SPICE

Чтобы смоделировать схемы на компьютере, я использую специальную программу под названием SPICE, которая работает, описывая схему для компьютера с помощью текстового списка. По сути, этот список сам по себе является своего рода компьютерной программой и должен соответствовать синтаксическим правилам языка SPICE. Затем компьютер используется для обработки или «запуска» программы SPICE, которая интерпретирует текстовый список, описывающий схему, и выводит результаты его подробного математического анализа, также в текстовой форме. Если кому-то нужна дополнительная информация, то многие детали использования SPICE описаны в томе 5 «Справочная информация» этой серии книг. Здесь я просто представлю основные концепции, а затем мы применим SPICE для анализа этих простых схем, о которых читали.

Во-первых, нам нужно установить SPICE на нашем компьютере. Как бесплатная программа, она обычно доступна для загрузки в Интернете в форматах, подходящих для многих различных операционных систем. В этой книге я использую одну из более ранних версий SPICE (версию 2G6) из-за простоты использования. Далее нам понадобится схема для анализа SPICE. Давайте попробуем одну из схем, показанных ранее в данной главе. Вот эта принципиальная схема:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 1 – Принципиальная схема

Эта простая схема состоит из батареи и резистора, соединенных напрямую вместе. Нам известно напряжение батареи (10 В) и сопротивление резистора (5 Ом), но больше ничего неизвестно о схеме. Если мы опишем эту схему для SPICE, она сможет сказать нам (по крайней мере), какой ток у нас будет в цепи, используя закон Ома (I=E/R).

SPICE – это программа, использующая текст

SPICE не может напрямую понять диаграмму схемы или любую другую форму графического описания. SPICE – это компьютерная программа, использующая текст, которая требует, чтобы схема была описана относительно ее составляющих компонентов и точек соединений. Каждая уникальная точка соединения в цепи описывается для SPICE номером «узла». Точки, которые являются электрически общими друг для друга в моделируемой цепи, обозначаются одним номером. Возможно, будет полезно думать об этих числах как о номерах «проводов», а не как о номерах «узлов», следуя определению, данному в предыдущем разделе. Так компьютер узнает, что с чем связано: через общие номера проводов или узлов. В схеме из нашего примера есть только два «узла»: верхний провод и нижний провод. SPICE требует, чтобы где-то в цепи был узел 0, поэтому мы обозначим наши провода 0 и 1:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 2 – Обозначение узлов на схеме

На приведенной выше иллюстрации я показал несколько меток «1» и «0» вокруг каждого провода, чтобы подчеркнуть концепцию общих точек, имеющих общие номера узлов; но всё же это графическое изображение, а не текстовое описание. Прежде чем можно будет продолжить анализ, SPICE должен получить значения компонентов и номера узлов в текстовой форме.

Использование текстового редактора для создания файлов SPICE

Создание текстового файла на компьютере включает использование программы, называемой текстовым редактором. В текстовых редакторах отсутствует возможность форматирования текстовых процессоров (без курсивных, полужирных или подчеркнутых символов), и это хорошо, поскольку такие программы, как SPICE, не знают, что делать с этой дополнительной информацией. Если мы хотим создать простой текстовый файл, в котором абсолютно ничего не записано, кроме символов клавиатуры, мы выбираем, текстовый редактор.

При использовании операционной системы Microsoft, такой как DOS или Windows, с системой идут несколько текстовых редакторов. В DOS есть старая программа редактирования текста Edit, которую можно вызвать, набрав edit в командной строке. В Windows стандартным выбором будет текстовый редактор Notepad. Доступно множество и других программ для редактирования текста. Я использую бесплатный текстовый редактор под названием Vim и запускаю его в операционных системах Windows 95 и Linux. Неважно, какой редактор вы используете, поэтому не беспокойтесь, если скриншоты в этом разделе не похожи на ваши; здесь важна информация о том, что вы вводите, а не о том, какой редактор вы используете.

Примечание: возможно, вам будет удобно использовать редактор Notepad++, для которого есть плагин для подсветки синтаксиса SPICE.

Чтобы описать для SPICE эту простую схему из двух компонентов, я начну с вызова моей программы текстового редактора и ввода строки «названия» для схемы:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 3 – Текстовый редактор. Название схемы

Мы можем описать батарею, набрав строку текста, начинающуюся с буквы «v» (означает «voltage source», источник напряжения), указав, к какому проводу подключается каждая клемма батареи (номера узлов), и напряжение батареи, например:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 4 – Текстовый редактор. Описание батареи на схеме

Данная строка сообщает SPICE, что у нас есть источник напряжения, подключенный между узлами 1 и 0, являющийся источником постоянного напряжения (DC), с напряжением 10 вольт. Это всё, что нужно знать компьютеру о батарее.

Теперь обратимся к резистору: SPICE требует, чтобы резисторы были описаны буквой «r», номерами двух узлов (точек соединения) и сопротивлением в омах. Поскольку это компьютерное моделирование, указывать номинальную мощность резистора не нужно. В «виртуальных» компонентах есть одна хорошая черта: им не могут повредить чрезмерное напряжение или ток!

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 5 – Текстовый редактор. Описание резистора, подключенного между узлами

Теперь SPICE будет знать, что между узлами 1 и 0 подключен резистор со значением 5 Ом. Эта очень короткая строка текста сообщает компьютеру, что у нас есть резистор («r»), подключенный между теми же двумя узлами, что и батарея (1 и 0), со значением сопротивления 5 Ом.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 6 – Текстовый редактор. Список соединений (netlist) схемы для SPICE

Перемещение текстовых файлов в SPICE

После того, как мы закончили вводить все необходимые команды SPICE, нам нужно «сохранить» их в файл на жестком диске компьютера, чтобы SPICE мог ссылаться на него при запуске. Поскольку это мой первый список соединений SPICE, я сохраню его под именем « circuit1.cir » (фактическое имя произвольно). Вы можете назвать свой первый список соединений SPICE совершенно другим именем, при условии, что вы не нарушаете никаких правил именования файлов своей операционной системы, например, используя не более 8 + 3 символов (восемь символов в имени и три символа в расширении: 12345678.123) в DOS.

Чтобы вызвать SPICE (указать ему, что необходимо обработать содержимое файла списка соединений circuit1.cir ), мы должны выйти из текстового редактора и получить доступ к командной строке, где мы можем ввести текстовые команды для операционной системы компьютера. Этот «примитивный» способ вызова программы может показаться архаичным пользователям компьютеров, привыкшим к графической среде «укажи и щелкни», но это очень мощный и гибкий способ решения задач. Помните, что то, что вы делаете здесь, используя SPICE, является простой формой компьютерного программирования, и чем больше вы будете привыкать давать компьютеру команды в текстовой форме (в отличие от простого щелчка мышью по иконкам), тем большее мастерство в управлении компьютером вы приобретете.

В командной строке введите следующую команду, а затем нажмите клавишу Enter (в этом примере используется имя файла circuit1.cir ; если вы выбрали другое имя файла для файла списка соединений, замените его):

Вот как это выглядит на моем компьютере (под управлением операционной системы Linux) непосредственно перед нажатием клавиши Enter :

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 7 – Запуск SPICE

Как только вы нажмете клавишу Enter для выполнения этой команды, на экране компьютера должен будет напечататься текст из вывода SPICE. Ниже приведен скриншот, показывающий, что SPICE вывел на моем компьютере (я увеличил окно «терминала», чтобы показать вам полный текст; в терминале обычного размера текст легко превышает длину одной страницы):

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 8 – Вывод SPICE в терминале

Одним из преимуществ использования «примитивной», использующей текст программы, такой как SPICE, является то, что текстовые файлы, с которыми мы имеем дело, чрезвычайно малы по сравнению с другими форматами файлов, особенно графическими форматами, используемыми в другом программном обеспечении для моделирования схем. Кроме того, тот факт, что вывод SPICE представляет собой обычный текст, означает, что вы можете направить вывод SPICE в другой текстовый файл, где он может быть обработан. Для этого мы повторно отправляем команду операционной системе компьютера, чтобы запустить SPICE, на этот раз перенаправляя вывод в файл, который я назову « output.txt »:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 9 – Запуск SPICE с выводом результатов в текстовый файл

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 10 – Вывод SPICE в текстовом файле

Теперь я могу свободно редактировать этот файл, удаляя любой посторонний текст (например, «баннеры», показывающие дату и время), оставляя только текст, который, как мне кажется, имеет отношение к анализу моей схемы:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 11 – Отредактированный вывод SPICE в текстовом файле

После соответствующего редактирования и повторного сохранения под тем же именем файла (в этом примере output.txt ) текст может быть вставлен в любой документ, причем «простой текст» является универсальным форматом файла почти для всех компьютерных систем. Я даже могу включить его прямо в текст этой книги, вместо графического изображения «скриншота», например:

Кстати, этот формат для вывода текста из моделирования SPICE в этой серии книг является предпочтительным: в виде текста, а не в виде картинок скриншотов.

Изменение значений в SPICE

Чтобы изменить значение компонента в моделировании, нам нужно открыть файл списка соединений ( circuit1.cir ) и внести необходимые изменения в текстовое описание схемы, затем сохранить эти изменения в файле с тем же именем и повторно запустить SPICE через командную строку. Этот процесс редактирования и обработки текстового файла знаком каждому программисту. Одна из причин, по которой мне нравится преподавать SPICE, заключается в том, что он подготавливает студента к тому, чтобы думать и работать как программист, и это хорошо, потому что программирование – это важная область работы, связанная с передовой электроникой.

Ранее мы исследовали последствия изменения одной из трех переменных в электрической цепи (напряжения, тока или сопротивления), используя закон Ома, чтобы математически предсказать, что произойдет. Теперь давайте попробуем сделать то же самое с помощью SPICE, чтобы он выполнил вычисления за нас.

Если бы мы утроили напряжение в схеме из нашего последнего примера с 10 до 30 вольт и оставили сопротивление цепи неизменным, мы бы ожидали, что ток также утроится. Давайте попробуем выполнить это, изменив имя нашего файла списка соединений, чтобы не перезаписывать первый файл. Таким образом, оба варианта моделирования схемы будут храниться на жестком диске нашего компьютера для будущего использования. Результатом работы SPICE для этого измененного списка соединений будет следующий текстовый список:

Как мы и ожидали, ток утроился с увеличением напряжения. Раньше ток составлял 2 ампера, но теперь он увеличился до 6 ампер (-6,000 x 10 0 ). Также обратите внимание, как увеличилась общая рассеиваемая мощность в цепи. Раньше она составлял 20 Вт, а сейчас 180 Вт (1,8 x 10 2 ). Если вспомнить, что мощность пропорциональна квадрату напряжения (закон Джоуля: P=E 2 /R), то этого можно было ожидать. Если мы утроим напряжение в цепи, мощность должна увеличиться в девять раз (3 2 = 9). Результат произведения 9 и 20 действительно равен 180, поэтому выходные данные SPICE действительно коррелируют с тем, что мы знаем о мощности в электрических цепях.

Создание комментариев в SPICE

Команды печати и вывода графиков

В обоих выходных форматах левый столбец чисел представляет напряжение батареи на каждом этапе, и по нему видно, что оно увеличивается от 0 до 100 вольт, по 5 вольт за раз. Числа в правом столбце указывают силу тока в цепи для каждого из этих напряжений. Посмотрите внимательно на эти числа, и вы увидите пропорциональную связь в каждой паре значений: закон Ома (I=E/R) верен в каждом случае, каждое значение силы тока составляет 1/5 соответствующего значения напряжения, потому что сопротивление цепи составляет ровно 5 Ом. Опять же, отрицательные числа для силы тока в данном анализе SPICE – это скорее причуда, чем что-либо еще. Просто обращайте внимание на абсолютное значение каждого числа, если не указано иное.

Программы для интерпретации и преобразования данных SPICE

Существуют даже некоторые программы, способные интерпретировать и преобразовывать неграфические данные, выводимые SPICE, в графические диаграммы. Одна из этих программ называется Nutmeg, и ее выходные данные выглядят примерно так:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 12 – Результат преобразования выходных данных SPICE программой Nutmeg

Обратите внимание, как Nutmeg выводит график напряжения на резисторе v(1) (напряжение между узлом 1 и предполагаемой опорной точкой узла 0) в виде линии с положительным наклоном (от нижнего левого к верхнему правому углу). Станете ли вы когда-нибудь опытным в использовании SPICE, не имеет отношения к его применению в данной книге. Важно только то, чтобы вы поняли, что означают числа в отчете, созданном SPICE. В следующих примерах я приложу все усилия, чтобы аннотировать численные результаты SPICE, чтобы устранить любую путаницу и раскрыть всю мощь этого удивительного инструмента, который поможет вам понять поведение электрических цепей.

Программный пакет LTspice

В качестве альтернативы консольному симулятору SPICE можно рассмотреть использование программного обеспечения LTspice от Analog Devices. LTspice представляет собой мощный программный пакет, включающий в себя SPICE-симулятор, редактор принципиальных схем и средство просмотра осциллограмм с улучшениями и моделями, позволяющими упростить моделирование аналоговых схем.

Основы работы с LTspice представлены в следующих статьях:

А ниже показаны скриншоты примера схемы и ее анализа.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 13 – Пример схемы в LTspice Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель Рисунок 14 – Пример анализа схемы в LTspice

Источник

Node-SPICE: Моделирование переходных процессов в электрической сети

Всем привет! Сегодня я хочу рассказать об одном своем проекте, который создавался как один из инструментов получения данных для диссертации, и так как на данный момент он свою основную задачу выполнил, я хочу пустить его в GPLv3-плавание — быть может, он будет полезен кому-то еще. Однако перед тем, как отдать швартовы, я решил воспользоваться профилировщиком Intel Vtune Amplifier, чтобы убедиться в том, что мой пакет имитационного моделирования древовидной сети электроснабжения оптимально расходует вычислительные ресурсы компьютера.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Под катом подробности про себя, про проект и про оптимизацию производительности (которую за полчаса удалось повысить более, чем в два раза)

Введение

Последние 6 лет я занимаюсь вопросами энергосбережения и повышения показателей качества электроэнергии на промышленных объектах. В первую очередь, это компенсация реактивной мощности на уровне потребителя электроэнергии, дабы эта самая реактивная мощность не потреблялась из промышленной сети электроснабжения. Параллельно этой задаче стоит задача стабилизации напряжения в узлах нагрузок, непосредственно возле потребителей.

Представьте себе обычный асинхронный электродвигатель. Тысячи их. Выглядят так:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

В различных авторитетных и не очень источниках можно найти статистическую информацию о том, что до 70% вырабатываемой электроэнергии потребляется именно асинхронными электродвигателями. Не думаю что реальная цифра далека от этого значения.

Так вот, замечали когда-нибудь, что если дома запускается старый холодильник, свет моргает? Этот эффект — фликер — возникает из-за того, что при пуске электродвигатель потребляет ток в 5-7 раз больше номинального. В самые первые моменты пуска намагничивание статора отсутствует, индуктивное сопротивление минимально и сеть фактически нагружается чисто довольно малым активным сопротивлением обмотки статора. Потом, когда двигатель начинает набирать обороты, статор намагничивается, реактивное сопротивление обмотки статора увеличивается и ток уменьшается.

А теперь представьте себе электрическую сеть предприятия:
Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель
Рис. 1 — Магистральные схемы питания электроприемников: а — с распределенными нагрузками; б — с сосредоточенными нагрузками; в — блок трансформатор — магистраль; 1 — распределительный щит подстанции; 2 — распределительный силовой пункт; 3 — электроприемник; 4 — магистраль; 5 — шинная сборка.

Это такая древовидная разветвленная электрическая сеть с множеством электроприемников. В обобщенном виде ее можно нарисовать вот так:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель
Рис. 2 — Обобщенная структурная схема питания электроприемников.

В схеме на рис. 2 узел Ve является точкой подключения источника питания сети(промышленная сеть переменного тока, судовой генератор, инвертор ветрогенератора и т.п.), в результате чего напряжение узла становится равным Ue. К источнику посредством активно-индуктивной питающей линии с сопротивлением Ze=Re+jLe, подключен распределительный узел V0 с напряжением U0, которое определяется как:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

где I_ — ток потребляемый от узла Ve, который равен сумме токов, потребляемых нижестоящими нагрузками:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

где N— число нагрузок, запитанных от данного узла. Для схемы на рис. 2 от узла Ve питаются все имеющиеся в системе узлы-нагрузки — V3 — V6. К узлу V1 подключены узлы-нагрузки V3, V4; а к узлу V2 узлы-нагрузки V5, V6 соответственно.

Зачем создавался Node-SPICE

Если какая-то из нагрузок изменяется, изменяется ток во всей цепи до корня, следовательно, изменяется напряжение в корне, а за ним и во всех остальных узлах. И если нам нужно стабилизировать напряжение в нескольких точках цепи, то возникает задача сделать это оптимально, ибо два стабилизатора будут оказывать влияние друг на друга. Чтобы проследить это влияние на множестве вариантов необходимо произвести имитационное моделирование сети.

Схему на рис. 2 Вполне себе можно нарисовать в пакете Matlab Simulink. Но есть одна загвоздка — если схема большая, или этих схем много, то рисовать каждую схему, запускать моделирование, снимать и сохранять результаты моделирования, графики переходных процессов, чертовски муторно, и решил я, что создать свой собственный моделлер будет быстрее (фигушки) и интереснее (а вот тут я был прав).

Для того, чтобы разработка была еще более интересной и полезной, я, суровый Сишник-железячник, в качестве языка разработки решил разобраться уже наконец с C++.

Установка

Исходники представляют собой проект Visual Studio 2013 и выложены на GitHub.
Для сборки приложения необходимо скачать библиотеку линейной алгебры Eigen и указать путь к папке с библиотекой с помощью системной переменной среды $(EIGEN_DIR). Visual Studio должна будет подхватить путь к этой папке и без особых шорохов скомпилировать приложение.

Для вывода и сохранения графиков приложение использует пакет gnuplot с модулем cairo — gnuplot должен уметь сохранять изображения в формате PNG. Проверить это можно выполнив в консоли gnuplot команду set terminal png. Gnuplot не должен ругаться на неверный аргумент — последним грешил gnuplot, идущий в комплекте с octave. Путь к gnuplot должен быть указан в $(PATH).

Архитектура приложения

Приложение должно было состоять из независимых друг от друга модулей(рис 3), но что-то пошло не так:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель
Рис. 3 — Структурная схема программы

Основными модулями системы являются:

Команда запуска выглядит следующим образом:

Формат конфигурационного файла — текстовый, состоящий из строк вида:

где a,b,c,d,e — ключи параметров, часть из которых (a, b) имеют булев тип данных — активную или неактивную опцию или режим. Другая часть, например c, d, e — имеющие текстовое или числовое значение параметра.

Конфигурационный файл, в котором в трехфазному источнику напряжения через анализатор качества подключен электромотор и несимметричная нагрузка выглядит следующим образом:

На рабочем столе Workbench может располагаться любое число элементарных узлов Node, подключенных в древовидной конфигурации.

Каждый узел имеет вход для подключения источника напряжения и выход для питания последующей нагрузки. К выходу одного узла может быть входами подключено несколько дочерних узлов. Родительский узел устанавливает напряжение на клеммах дочернего узла и запрашивает потребляемый им ток. Если у дочернего узла есть свои дочерние узлы, то операция производится рекурсивно. Отличается поведение у узла — источника напряжения, который в системе единственный. После этапа моделирования источнику предоставляется информация об общем потребляемом токе и возвращается информация о текущем значении напряжения на выходе источника.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Вне зависимости от своего типа узлы имеют общий интерфейс, позволяющий создавать различные конфигурации оборудования. Добавление элементарного узла осуществляется с помощью команды load.

Общий вид команды load:

Существуют следующие общие для всех узлов ключи конфигурации:

КлючЗначение по умолчаниюОписание
-namenonameУникальное имя узла. В системе не может быть несколько узлов с одинаковыми именами.
-wbNoneИмя рабочего стола, на котором расположен электроприемник. По умолчанию узел располагается на последнем объявленном рабочем столе
-On

0Время подключения элементарного узла. Время задается в секундах. Значение по умолчанию: «0»
-Off

Равно общему времени моделированияВремя отключения элементарного узла. Задается в секундах. Можно отключить источник напряжения.
-tБез типаТип узла (рассмотрен ниже).
-Imax0(без ограничений)Ток срабатывания максимально-токовой защиты.
-width

800Ширина графиков
-heigth

600Высота графиков
-fontArial,10Шрифт текста на графиках
-rawСохранение файла сырых данных графика

Реализованые типы элементарных узлов Node:

Предполагается, что каждый рабочий стол представляет собой некую схему и должна существовать возможность создавать вложенные схемы, т. е. вложенные рабочие столы. Эта возможность заложена в тестовой версии программы(но, естественно, не реализована :)). Уникальные ключи для рабочего стола отсутствуют. Так как может существовать несколько рабочих столов, после введения второго и более рабочего стола для узлов следует указывать, к какому рабочему столу они относятся. Если ключ -wb не указать, то элементарный узел будет размещен на последнем созданном рабочем столе.

В текущей версии программного комплекса может быть только один источник напряжения, что несколько ограничивает возможности программы, но является достаточным для моей задачи.

Есть у меня мыслишки взять все и переписать, используя комплексное исчисление, любое число источников и приемников электроэнергии любой конфигурации, но я слезно умоляю себя если и садиться за это, то ПОСЛЕ защиты диссертации. Пока держусь.

На рисунке 5 показан процесс моделирования источника напряжения без нагрузки:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель
Рис. 5 — Графики тока и напряжения источника напряжения, работающего в режиме холостого хода

Анализатор качества потребления включается в любой участок системы и анализирует различные параметры потребления. Данный узел отвечает за построение графиков.

После проведения имитационного моделирования данный узел с помощью модуля Plot выводит требуемые графики и сохраняет их на диске в виде изображений.

Данный элементарный узел реализует математическую модель асинхронного электродвигателя.

КлючЗначение по умолчаниюОписание
-Rs

0Сопротивление обмотки статора
-Rr

0Сопротивление обмотки ротора
-Ls

0Индуктивность обмотки статора
-Lr

0Индуктивность обмотки ротора
-Lm

0Индуктивность рассеяния
-J <>0Момент инерции ротора
-p <>0Число полюсов обмотки статора
-Ms

0Статический момент на валу
-Tload

0Время наброса нагрузки
-saveGraphNoneАктивация построения графиков момента на валу и частоты вращения привода

На рисунке 6 показан процесс пуска асинхронного электродвигателя. В момент времени 1 с. к валу прикладывается момент 700 Н*м и двигатель переходит в рабочий режим.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель
Рис. 6 — Графики частоты вращения вала двигателя, а также момента на валу и статического момента при пуске двигателя

Данный элементарный узел представляет собой параллельное соединение активного сопротивления, индуктивности и емкости. В зависимости от параметров позволяет производить моделирование следующих штатных и нештатных режимов воздействия на источник напряжения: одно- и двухфазная нагрузка, несимметричная нагрузка, короткое замыкание по фазе краткое и длительное по времени, короткое замыкание на землю по всем фазам, краткое и длительное во времени.

КлючЗначение по умолчаниюОписание
-Ra <Ом>
-Rb <Ом>
-Rc

0(отключен)Сопротивление резистора в фазе
-R

0(отключен)Сопротивление резистора во всех фазах
-La <Гн>
-Lb <Гн>
-Lc

0(отключен)Индуктивность дросселя в фазе
-L

0(отключен)Индуктивность дросселя во всех фазах
-Ca <мкФ>
-Cb <мкФ>
-Cc

0(отключен)Емкость конденсатора в фазе
-C

0(отключен)Емкость конденсатора во всех фазах

Моделируем кратковременное КЗ в сети:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

КЗ 0,1 с. Скорость не успевает упасть ниже критической, двигатель восстанавливает скорость после снятия КЗ.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

КЗ 0,5 с, двигатель успевает затормозиться и после включения момент двигателя становится меньше момента на валу и происходит аварийный останов двигателя

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Замыкание в Фазе А. Скорость практически не проседает, из-за особенностей работы асинхронного электродвигателя ему достаточно двух фаз. Вращающееся магнитное поле в зазоре принимает овальную форму и вал начинает вибрировать с частотой питающей сети.

Оптимизация кода

Вообще, как оказалось в результате, сам основной процесс моделирования написан достаточно аккуратно и по результатам моделирования каких-либо архитектурных изменений сделано не было. Но дьявол кроется в деталях.
Открываем Intel Vtune Amplifier, создаем новый проект:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Указываем путь к нашей программе и ключи запуска. Неплохо будет воспользоваться кнопками Binary/Symbol Search и Source Search и указать пути к исходному коду и бинарникам с Debud-символами – потом будет удобнее перемещаться по проекту и исходному коду.

Используем следующий конфиг:

Все приведенные конфиг-файлы есть в папке /doc проекта.

Начнем с самого простого basic hotspot с интервалом 1ms

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

И запускаем.

Elapsed Time:52.548s
CPU Time:37.460s
Total Thread Count:1,035

Top Hotspots:
Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Святые нейтроны… Я конечно знал что iostream работает медленно, но чтобы настолько… Это, кстати, с отключением синхронизации с

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

20 секунд процессорного времени из общих 35 секунд. Больше 50% времени. Это не лезет ни в какие ворота.
Больше о том, насколько медленны потоки можно прочитать здесь. Имеет смысл переписать все на бронепаровозный fprintf(). Еще меня заинтересовало что в таблице функция cout фигурирует дважды. И точно — прослойка для gnuplot создает временные файлы, а потом удаляет их. Добавим ключик -raw к node для сохранения сырых файлов графиков. Есть ключи — сохранил, нет, не сохранил.
Запускаем профилировщик. Ха!

Elapsed Time:22.421s
CPU Time:17.107s
Total Thread Count:1,035

Top Hotspots:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

В лидерах по-прежнему файловый вывод, но потребляющий уже меньше 5% процессорного времени. Серьезный успех! Смотрим Bottom-Up three

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Второе и третье место занимают указатели и итераторы:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

И что весьма логично — места достаются анализатору качества электроэнергии, ибо последний делает кучу всякой работы.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Данный код писался как проверка концепции скользящего режима измерений. Как видно из кода, каждый новый шаг солвера сопряжен со сдвигом небольшого (64-128 символов), но все же массива. Имеет смысл воспользоваться кольцевым буфером для решения данной задачи. Тогда операция добавления нового элемента будет иметь стоимость О(1) вместо О(N).

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

«Зачем это надо?» скажете вы, мол, анализатор качества один в системе, моторов лучше добавь в конфиг. И окажетесь наполовину правы — моторы мы обязательно добавим, вот только анализаторов в системе может быть ровно столько сколько в системе узлов — это фишка моей диссертации такая.
Глянем заодно что там такого с GetVoltage и GetCurrent нехорошего:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Хм, как насчет воспользоваться ссылками?

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Elapsed Time:23.197s
CPU Time:16.551s
Total Thread Count:1,048

Top Hotspots:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Bottom-Up three показывает, что первый в списке опять таки наш fprintf и pango, вылезающий из-под gnuplot – в них лезть уже не будем (хотя стоило бы).

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

А что действительно радует, так это то что NewStep, от которого пара шагов до Solve вырвался в лидеры. Запустим моделирование на 40 секунд и посмотрим как изменится картина:

Elapsed Time:73.235s
CPU Time:61.790s
Total Thread Count:1,048

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Эффект масштабируется, так что здесь нам пока делать нечего.

Подведем итог

БылоСталоЭффект
CPU Time:37.460s16.551s226%

Неплохо для получаса работы?
Добавим в систему пяток моторов:

Из Bottom-Up three мало что уже понятно:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Вот если заглянуть в Caller counter то можно увидеть куда деваются ресурсы. На решение матричных уравнений при расчете мат. модели электродвигателя — большую часть времени работает библиотека Eigen.

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

В библиотеку мы не полезем, лучше заменим моторы на rl-нагрузки. Они для меня намного важнее — можно создавать всякие разные перекосы фаз, КЗ, возмущения и прочие радости.

Так как на один тик толком считать ничего не надо, увеличим частоту тактирования солвера, да и нагрузок доведем до 10 штук.

Elapsed Time:11.008s
CPU Time:6.485s
Total Thread Count:1.245

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Fprintf мы не трогаем, а вот основной виновник:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Здесь мы копируем векторы double[4] друг в друга. Как видно, копирование вектора средствами самого вектора не очень оптимально. Забабахаем-ка мы цикл — для 4-х элементов особо изгаляться не стоит:

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

И последний раз

Elapsed Time:9.563s
CPU Time:6.386s
Total Thread Count:1.245

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Что такое spice модель. Смотреть фото Что такое spice модель. Смотреть картинку Что такое spice модель. Картинка про Что такое spice модель. Фото Что такое spice модель

Выводы:

А нету их. Я решил для себя, что негоже в OpenSource выкладывать тормозные приложения и посидел немножко с удобным и мощным инструментом профилирования. В отличие от расстановки таймстампов внутри кода, Vtune, что называется, «мордой тычет» в медленный код, намекая на то, что неплохо бы тот или иной кусок переписать.

Мое приложение, на самом деле, можно бесконечно оптимизировать — ибо костыль на костыле. Можно выкинуть Eigen и переписать Acmotor используя Boost, можно на том же Boost написать вывод графиков, можно переписать кучу мест используя векторные инструкции(здесь кстати будет кстати профилировщик Intel Advisor), переписать программу используя многопоточность(TBB, OpenMP, OpenCL) и т.д.

Кстати вот здесь можно получить бесплатную версию Intel parallel Studio для студенческих и обучающих нужд.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *