<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title></title> <link rel="stylesheet" media="screen" type="text/css" href="./style.css" /> <link rel="stylesheet" media="screen" type="text/css" href="./design.css" /> <link rel="stylesheet" media="print" type="text/css" href="./print.css" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1 class="sectionedit51"><a name="усовершенствование_моделирования_работы_электрических_схем_в_gschem" id="усовершенствование_моделирования_работы_электрических_схем_в_gschem">Усовершенствование моделирования работы электрических схем в gschem</a></h1> <div class="level1"> </div> <!-- EDIT51 SECTION "Усовершенствование моделирования работы электрических схем в gschem" [1-139] --> <h2 class="sectionedit52"><a name="обоснование" id="обоснование">Обоснование</a></h2> <div class="level2"> <p> Начинающим не так-то просто использовать <strong>gschem</strong> как оболочку для схемотехнического моделирования (для <strong>ngspice</strong> или <strong>gnucap</strong>). Вот что новому пользователю хотелось бы делать в <strong>gschem</strong>: </p> <ul> <li class="level1"><div class="li"> определять, какие виды анализа нужно запускать;</div> </li> <li class="level1"><div class="li"> определять, графики каких напряжений и токов нужно выводить;</div> </li> <li class="level1"><div class="li"> собственно запускать моделирование.</div> </li> </ul> <p> Запуск моделирования и постобработка могут быть во внешней программе, вызываемой посредством IPC. </p> <p> Существует несколько графических оболочек, но они не решают всех вышеуказанных проблем: </p> <ul> <li class="level1"><div class="li"> <a href="http://www.geda.seul.org/tools/gspiceui/index.html" class="urlextern" title="http://www.geda.seul.org/tools/gspiceui/index.html" rel="nofollow">gspiceui</a></div> </li> <li class="level1"><div class="li"> <a href="http://www.comefly.us/" class="urlextern" title="http://www.comefly.us/" rel="nofollow">kjwaves</a></div> </li> <li class="level1"><div class="li"> <a href="http://easy-spice.sourceforge.net/" class="urlextern" title="http://easy-spice.sourceforge.net/" rel="nofollow">easyspice</a></div> </li> </ul> <p> Все оболочки имеют одну проблему — в них нельзя указать соединение, данные которого хотелось бы увидеть. Нужно знать имя соединения для узла. </p> </div> <!-- EDIT52 SECTION "Обоснование" [140-1543] --> <h2 class="sectionedit53"><a name="набросок_проекта" id="набросок_проекта">Набросок проекта</a></h2> <div class="level2"> <p> Допустим, нам хотелось бы совсем немного изменить <strong>gschem</strong> и <strong>libgeda</strong>, чтобы иметь возможность по крайней мере установить несколько измерительных приборов и запустить моделирование. </p> </div> <!-- EDIT53 SECTION "Набросок проекта" [1544-1916] --> <h3 class="sectionedit54"><a name="измерительные_приборы" id="измерительные_приборы">Измерительные приборы</a></h3> <div class="level3"> <p> <strong>Измерителями тока</strong> могут быть обычные источники постоянного напряжения 0 В. Легче всего в качестве такого прибора использовать символ с двумя выводами, подобный обычному амперметру. Если нам захотелось бы подключить измеритель тока к выводу, то нужно, чтобы генератор списка соединений распознал его и заместил нашим “амперметром”. Если в качестве амперметра использовать источник напряжения, генератору не нужно будет знать имён соединений внутри схемы. Все источники напряжения 0 В со специальным именем устройства являлись бы измерителями тока. </p> <p> <strong>Измерителями напряжения</strong> могут быть источники тока 0 А. Второй вывод источника тока присоединяется к <em>GND</em> атрибутом <code>net</code>. Поэтому снова генератору списка соединений не нужно будет знать имён соединений, так как он сможет использовать соединение, подключенное к этому специальному источнику тока. Подобно вышеописанному источнику напряжения мог бы быть специальный (графический) символ, который распознавался бы генератором списка соединений. </p> </div> <!-- EDIT54 SECTION "Измерительные приборы" [1917-3800] --> <h3 class="sectionedit55"><a name="источники_тока_и_напряжения" id="источники_тока_и_напряжения">Источники тока и напряжения</a></h3> <div class="level3"> <p> Определить параметры источников не так просто. В настоящее время они хранятся внутри атрибутов <code>value</code> символа, например <code>value=pulse 0 1 10n 10n 100n 1u 2u</code>. Эти настройки должны соответствовать атрибутам SPICE <code>pulse(V1 V2 TD TR TF PW PER)</code>. </p> <p> Было бы здорово иметь диалоговое окно, предлагающее пользователям имена атрибутов, а не только строку значения. </p> <p> Настройкой источников напряжения или тока могла бы заниматься модифицированная команда редактирования атрибутов (<strong>ee</strong>), которая вызывала бы для этих источников специальные диалоговые окна их свойств. В настоящее время эта команда вызывает диалоговое окно редактирования всех атрибутов символа. </p> </div> <!-- EDIT55 SECTION "Источники тока и напряжения" [3801-5005] --> <h3 class="sectionedit56"><a name="моделирование" id="моделирование">Моделирование</a></h3> <div class="level3"> <p> Как сохранять параметры моделирования внутри <strong>gschem</strong>. </p> <p> Для хранения параметров одного моделирования можно использовать символ с названием устройства <em>SIMULATION</em>. Все параметры, определяющие один вид моделирования сохраняются как атрибуты, прикреплённые к данному объекту: </p> <ul> <li class="level1"><div class="li"> вид анализа (dc, ac, tran,…);</div> </li> <li class="level1"><div class="li"> параметры программы моделирования;</div> </li> <li class="level1"><div class="li"> программа моделирования? (можем ли мы запускать моделирование для одной и той же схемы в двух программах моделирования сразу?);</div> </li> <li class="level1"><div class="li"> параметры для моделирования (глобальные параметры, температура, …).</div> </li> </ul> <pre class="code">v 20061020 1 C 41500 49200 1 0 0 spice-directive-1.sym { device=spice_simulation_block refdes=A1 simulation_name=random name simulation_active=1 simulation_type=DC 0V 1V 0.1V parametric_simulation1=V1 lin 0 5 0.1 parametric_simulation2=R1.value lin 10k 100k 10k option_TNOM=100 Deg option_ABSTOL=1e-3 global_param1=??? global_param2=??? }</pre> <p> Таких объектов моделирования в одной схеме могло бы быть много. </p> <p> Для хранения дополнительных библиотек можно использовать либо директиву вложения (include), либо символ <em>LIBRARY</em>, содержащий все библиотеки в одном из двух видов: </p> <ul> <li class="level1"><div class="li"> как многострочный атрибут;</div> </li> <li class="level1"><div class="li"> как несколько атрибутов библиотек, прикреплённых к символу <em>LIBRARY</em>.</div> </li> </ul> <p> Между глобальными, пользовательскими и локальными библиотеками должно быть различие. Глобальные и пользовательские библиотеки могут определяться в <em><code>gafrc</code></em> или в новом конфигурационном файле <em><code>spicerc</code></em>. </p> </div> <!-- EDIT56 SECTION "Моделирование" [5006-7336] --> <h3 class="sectionedit57"><a name="создание_диалогового_окна_для_моделирования_внутри_gschem" id="создание_диалогового_окна_для_моделирования_внутри_gschem">Создание диалогового окна для моделирования внутри gschem</a></h3> <div class="level3"> <p> Допустим, всё что нам нужно, чтобы добавить поддержку моделирования в <strong>gschem</strong>, это одно диалоговое окно. </p> <ul> <li class="level1"><div class="li"> В нём должен содержаться список моделирований (в виде списка из их названий с кнопками разрешения/запрета).</div> </li> <li class="level1"><div class="li"> В нём должны быть иконки для добавления измерителей.</div> </li> <li class="level1"><div class="li"> Оно могло бы содержать кнопки для большинства общих символов: резистора, конденсатора, катушки индуктивности, диода, … [R,C,L,D,M,E,F,G,H..]</div> </li> <li class="level1"><div class="li"> Оно могло бы содержать несколько диалоговых элементов для настройки SPICE.</div> </li> <li class="level1"><div class="li"> Оно могло бы содержать кнопки моделирования и закрытия.</div> </li> <li class="level1"><div class="li"> Несколько добавочных кнопок, таких как, например: копировать моделирование, удалить моделирование, общие параметры…</div> </li> </ul> <p> При создании такого диалогового окна все объекты моделирования собираются в перечень видов моделирования (в виде списка с кнопками разрешения/запрета). </p> <p> При изменении настроек меняются атрибуты соответствующего объекта моделирования. </p> </div> <!-- EDIT57 SECTION "Создание диалогового окна для моделирования внутри gschem" [7337-9086] --> <h3 class="sectionedit58"><a name="диалоговое_окно_параметров" id="диалоговое_окно_параметров">Диалоговое окно параметров</a></h3> <div class="level3"> <p> Какие параметры нужны для этого диалогового окна? И почему? </p> <p> Расставленные нами измерители можно использовать, чтобы сообщать программе моделирования о том, какие нам хотелось бы сохранять переменные, или программе построения графиков о том, какие хотелось бы увидеть графики. Это вещи совершенно различные, и нам нужна возможность выбирать следующее: </p> <ul> <li class="level1"><div class="li"> выводить на графиках все маркеры и сохранять только напряжения соответствующих узлов;</div> </li> <li class="level1"><div class="li"> выводить на графиках все маркеры, но сохранять все напряжения и токи (с помощью источников напряжения);</div> </li> <li class="level1"><div class="li"> сохранять напряжения узлов только для схемы текущего уровня или также и для подсхем.</div> </li> </ul> </div> <!-- EDIT58 SECTION "Диалоговое окно параметров" [9087-10313] --> <h3 class="sectionedit59"><a name="запуск_моделирования" id="запуск_моделирования">Запуск моделирования</a></h3> <div class="level3"> <p> Кнопка моделирования в диалоговом окне должна вызывать следующие действия: </p> <ul> <li class="level1"><div class="li"> сохранение схемы (спрашивать пользователя или использовать временный файл?);</div> </li> <li class="level1"><div class="li"> создание списка соединений с помощью <strong>gnetlist</strong>;</div> </li> <li class="level1"><div class="li"> создание файлов моделирования и включение туда списка соединений (можно ли это сделать тоже с помощью <strong>gnetlist</strong>?);</div> </li> <li class="level1"><div class="li"> выполнение скрипта запуска моделирования (<strong>guile</strong>, <strong>sh</strong>, …).</div> </li> </ul> <p> Этот скрипт мог бы вызывать даже диспетчер, который бы занимался множеством крупномасштабных моделирований. </p> </div> <!-- EDIT59 SECTION "Запуск моделирования" [10314-11256] --> <h2 class="sectionedit60"><a name="приложение" id="приложение">Приложение</a></h2> <div class="level2"> </div> <!-- EDIT60 SECTION "Приложение" [11257-11289] --> <h3 class="sectionedit61"><a name="символ_измерителя_тока_эскиз" id="символ_измерителя_тока_эскиз">Символ измерителя тока (эскиз)</a></h3> <div class="level3"> <pre class="code">v 20061020 1 P 0 0 200 200 1 0 0 { T 100 0 5 10 0 1 0 0 1 pintype=pas T 0 100 5 10 0 1 0 0 1 pinseq=1 T 0 100 5 10 0 1 0 0 1 pinnumber=1 T 0 100 5 10 0 1 0 0 1 pinlabel=1 } V 300 300 150 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 300 200 240 360 3 10 0 0 -1 -1 L 300 200 360 360 3 10 0 0 -1 -1 T 0 500 9 10 0 0 0 0 1 device=VOLTAGE_PROBE T 200 50 9 6 1 1 0 0 1 refdes=I_VP? T 0 700 9 10 0 0 0 0 1 net=GND:2 T 0 900 9 10 0 0 0 0 1 value=DC 0A</pre> </div> <!-- EDIT61 SECTION "Символ измерителя тока (эскиз)" [11290-11805] --> <h3 class="sectionedit62"><a name="символ_измерителя_напряжения_эскиз" id="символ_измерителя_напряжения_эскиз">Символ измерителя напряжения (эскиз)</a></h3> <div class="level3"> <pre class="code">v 20061020 1 P 0 200 150 200 1 0 0 { T -150 50 5 10 0 1 0 0 1 pintype=pas T 50 250 5 10 0 1 0 0 1 pinseq=1 T 50 250 5 10 0 1 0 0 1 pinnumber=1 T 50 250 5 10 0 1 0 0 1 pinlabel=1 } V 300 200 150 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 300 300 380 140 3 10 0 0 -1 -1 L 300 300 220 140 3 10 0 0 -1 -1 T 0 500 9 10 0 0 0 0 1 device=CURRENT_PROBE T 200 370 9 6 1 1 0 0 1 refdes=V_IP? P 600 200 450 200 1 0 0 { T 500 50 5 10 0 1 0 0 1 pintype=pas T 500 250 5 10 0 1 0 0 1 pinseq=2 T 500 250 5 10 0 1 0 0 1 pinnumber=2 T 500 250 5 10 0 1 0 0 1 pinlabel=2 } L 240 180 360 180 3 10 0 0 -1 -1 T 0 700 9 10 0 0 0 0 1 value=DC 0V</pre> </div> <!-- EDIT62 SECTION "Символ измерителя напряжения (эскиз)" [11806-12512] --> <h3 class="sectionedit63"><a name="ещё_один_символ_измерителя_тока_эскиз_который_использует_kurt_peters" id="ещё_один_символ_измерителя_тока_эскиз_который_использует_kurt_peters">Ещё один символ измерителя тока (эскиз), который использует Kurt Peters</a></h3> <div class="level3"> <pre class="code">v 20061020 1 T 700 650 8 10 1 1 0 0 1 refdes=VAM? T 700 850 5 10 1 1 0 0 1 device=Ammeter T 700 1050 5 10 0 0 0 0 1 footprint=none T 700 1250 5 10 0 0 0 0 1 numslots=0 T 700 1450 5 10 0 0 0 0 1 description=ammeter for spice P 300 1200 300 900 1 0 0 { T 350 1000 5 8 1 1 0 0 1 pinnumber=1 T 350 1000 5 8 0 1 0 2 1 pinseq=1 T 400 850 9 8 1 1 0 5 1 pinlabel=+ T 300 700 5 8 0 1 0 5 1 pintype=pwr } P 300 0 300 300 1 0 0 { T 350 100 5 8 1 1 0 0 1 pinnumber=2 T 350 100 5 8 0 1 0 2 1 pinseq=2 T 300 500 5 8 0 1 0 3 1 pintype=pwr T 300 300 5 10 1 1 0 0 1 pinlabel=- } L 300 400 400 500 3 0 0 0 -1 -1 L 200 500 300 400 3 0 0 0 -1 -1 T 700 450 5 10 0 1 0 0 1 value=DC 0V L 300 400 300 800 3 0 0 0 -1 -1 L 100 800 500 400 3 0 0 0 -1 -1 B 0 300 600 600 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 L 200 800 100 800 3 0 0 0 -1 -1 L 100 700 100 800 3 0 0 0 -1 -1</pre> </div> <!-- EDIT63 SECTION "Ещё один символ измерителя тока (эскиз), который использует Kurt Peters" [12513-] --></body> </html>