gaf: Fix memory leak
[geda-gaf.git] / docs / wiki / geda-circuit_simulation_improvements.ru.html
blob0870b5c240be6cf1dcd07eb72e51e0077a7712d1
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html>
4 <head>
5 <link rel="stylesheet" media="screen" type="text/css" href="./style.css" />
6 <link rel="stylesheet" media="screen" type="text/css" href="./design.css" />
7 <link rel="stylesheet" media="print" type="text/css" href="./print.css" />
9 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
10 </head>
11 <body>
13 <p>
14 <em>Эта страница доступна также на следующих языках:</em>
15 <a href="geda-circuit_simulation_improvements.html" class="wikilink1" title="geda-circuit_simulation_improvements.html">English</a>
16 </p>
18 <h1 id="усовершенствованиемоделированияработыэлектрическихсхемвgschem">Усовершенствование моделирования работы электрических схем в gschem</h1>
19 <div class="level1">
21 </div>
23 <h2 id="обоснование">Обоснование</h2>
24 <div class="level2">
26 <p>
27 Начинающим не так-то просто использовать <strong>gschem</strong> как оболочку для
28 схемотехнического моделирования (для <strong>ngspice</strong> или <strong>gnucap</strong>). Вот что
29 новому пользователю хотелось бы делать в <strong>gschem</strong>:
30 </p>
31 <ul>
32 <li class="level1"><div class="li"> определять, какие виды анализа нужно запускать;</div>
33 </li>
34 <li class="level1"><div class="li"> определять, графики каких напряжений и токов нужно выводить;</div>
35 </li>
36 <li class="level1"><div class="li"> собственно запускать моделирование.</div>
37 </li>
38 </ul>
40 <p>
41 Запуск моделирования и постобработка могут быть во внешней программе,
42 вызываемой посредством IPC.
43 </p>
45 <p>
46 Существует несколько графических оболочек, но они не решают всех
47 вышеуказанных проблем:
48 </p>
49 <ul>
50 <li class="level1"><div class="li"> gspiceui</div>
51 </li>
52 <li class="level1"><div class="li"> kjwaves</div>
53 </li>
54 <li class="level1"><div class="li"> easyspice</div>
55 </li>
56 </ul>
58 <p>
59 Все оболочки имеют одну проблему --- в них нельзя указать соединение, данные
60 которого хотелось бы увидеть. Нужно знать имя соединения для узла.
61 </p>
63 </div>
65 <h2 id="набросокпроекта">Набросок проекта</h2>
66 <div class="level2">
68 <p>
69 Допустим, нам хотелось бы совсем немного изменить <strong>gschem</strong> и <strong>libgeda</strong>,
70 чтобы иметь возможность, по крайней мере, установить несколько измерительных
71 приборов и запустить моделирование.
72 </p>
74 </div>
76 <h3 id="измерительныеприборы">Измерительные приборы</h3>
77 <div class="level3">
79 <p>
80 <strong>Измерителями тока</strong> могут быть обычные источники постоянного напряжения 0 В. Легче всего в качестве такого прибора использовать символ с двумя выводами, подобный обычному амперметру.
81 Если нам захотелось бы подключить измеритель тока к выводу, то нужно, чтобы генератор списка соединений распознал его и заместил нашим «амперметром».
82 Если в качестве амперметра использовать источник напряжения, генератору не нужно будет знать имён соединений внутри схемы. Все источники напряжения 0 В со специальным именем устройства являлись бы измерителями тока.
83 </p>
85 <p>
86 <strong>Измерителями напряжения</strong> могут быть источники тока 0 А. Второй вывод источника тока присоединяется к <em>GND</em> атрибутом <code>net</code>. Поэтому снова генератору списка соединений не нужно будет знать имён соединений, так как он сможет использовать соединение, подключенное к этому специальному источнику тока.
87 Подобно вышеописанному источнику напряжения мог бы быть специальный (графический) символ, который распознавался бы генератором списка соединений.
88 </p>
90 </div>
92 <h3 id="источникитокаинапряжения">Источники тока и напряжения</h3>
93 <div class="level3">
95 <p>
96 Определить параметры источников не так просто. В настоящее время они
97 хранятся внутри атрибутов <code>value</code> символа, например <code>value=pulse 0 1 10n
98 10n 100n 1u 2u</code>. Эти настройки должны соответствовать атрибутам SPICE
99 <code>pulse(V1 V2 TD TR TF PW PER)</code>.
100 </p>
103 Было бы здорово иметь диалоговое окно, предлагающее пользователям имена
104 атрибутов, а не только строку значения.
105 </p>
108 Настройкой источников напряжения или тока могла бы заниматься
109 модифицированная команда редактирования атрибутов
110 (<kbd>E</kbd><kbd>E</kbd>), которая вызывала бы для этих источников
111 специальные диалоговые окна их свойств. В настоящее время эта команда
112 вызывает диалоговое окно редактирования всех атрибутов символа.
113 </p>
115 </div>
117 <h3 id="моделирование">Моделирование</h3>
118 <div class="level3">
121 Как сохранять параметры моделирования внутри <strong>gschem</strong>.
122 </p>
125 Для хранения параметров одного моделирования можно использовать символ с названием устройства <em>SIMULATION</em>.
126 Все параметры, определяющие один вид моделирования сохраняются как атрибуты, прикреплённые к данному объекту:
127 </p>
128 <ul>
129 <li class="level1"><div class="li"> вид анализа (dc, ac, tran,...);</div>
130 </li>
131 <li class="level1"><div class="li"> параметры программы моделирования;</div>
132 </li>
133 <li class="level1"><div class="li"> программа моделирования? (можем ли мы запускать моделирование для одной и той же схемы в двух программах моделирования сразу?);</div>
134 </li>
135 <li class="level1"><div class="li"> параметры для моделирования (глобальные параметры, температура, ...).</div>
136 </li>
137 </ul>
138 <pre class="code">v 20061020 1
139 C 41500 49200 1 0 0 spice-directive-1.sym
141 device=spice_simulation_block
142 refdes=A1
143 simulation_name=random name
144 simulation_active=1
145 simulation_type=DC 0V 1V 0.1V
146 parametric_simulation1=V1 lin 0 5 0.1
147 parametric_simulation2=R1.value lin 10k 100k 10k
148 option_TNOM=100 Deg
149 option_ABSTOL=1e-3
150 global_param1=???
151 global_param2=???
152 }</pre>
155 Таких объектов моделирования в одной схеме могло бы быть много.
156 </p>
159 Для хранения дополнительных библиотек можно использовать либо директиву вложения (include), либо символ <em>LIBRARY</em>, содержащий все библиотеки в одном из двух видов:
160 </p>
161 <ul>
162 <li class="level1"><div class="li"> как многострочный атрибут;</div>
163 </li>
164 <li class="level1"><div class="li"> как несколько атрибутов библиотек, прикреплённых к символу <em>LIBRARY</em>.</div>
165 </li>
166 </ul>
169 Между глобальными, пользовательскими и локальными библиотеками должно быть
170 различие. Глобальные и пользовательские библиотеки могут определяться в
171 <em><code>gafrc</code></em> или в новом конфигурационном файле <em><code>spicerc</code></em>.
172 </p>
174 </div>
176 <h3 id="созданиедиалоговогоокнадлямоделированиявнутриgschem">Создание диалогового окна для моделирования внутри gschem</h3>
177 <div class="level3">
180 Допустим, всё что нам нужно, чтобы добавить поддержку моделирования в <strong>gschem</strong>, это одно диалоговое окно.
181 </p>
182 <ul>
183 <li class="level1"><div class="li"> В нём должен содержаться список моделирований (в виде списка из их названий с кнопками разрешения/запрета).</div>
184 </li>
185 <li class="level1"><div class="li"> В нём должны быть иконки для добавления измерителей.</div>
186 </li>
187 <li class="level1"><div class="li"> Оно могло бы содержать кнопки для большинства общих символов: резистора, конденсатора, катушки индуктивности, диода, ... [R,C,L,D,M,E,F,G,H..]</div>
188 </li>
189 <li class="level1"><div class="li"> Оно могло бы содержать несколько диалоговых элементов для настройки SPICE.</div>
190 </li>
191 <li class="level1"><div class="li"> Оно могло бы содержать кнопки моделирования и закрытия.</div>
192 </li>
193 <li class="level1"><div class="li"> Несколько добавочных кнопок, таких как, например: копировать моделирование, удалить моделирование, общие параметры...</div>
194 </li>
195 </ul>
198 При создании такого диалогового окна все объекты моделирования собираются в
199 перечень видов моделирования (в виде списка с кнопками разрешения/запрета).
200 </p>
203 При изменении настроек меняются атрибуты соответствующего объекта
204 моделирования.
205 </p>
207 </div>
209 <h3 id="диалоговоеокнопараметров">Диалоговое окно параметров</h3>
210 <div class="level3">
213 Какие параметры нужны для этого диалогового окна? И почему?
214 </p>
217 Расставленные нами измерители можно использовать, чтобы сообщать программе моделирования о том, какие нам хотелось бы сохранять переменные, или программе построения графиков о том, какие хотелось бы увидеть графики. Это вещи совершенно различные, и нам нужна возможность выбирать следующее:
218 </p>
219 <ul>
220 <li class="level1"><div class="li"> выводить на графиках все маркеры и сохранять только напряжения соответствующих узлов;</div>
221 </li>
222 <li class="level1"><div class="li"> выводить на графиках все маркеры, но сохранять все напряжения и токи (с помощью источников напряжения);</div>
223 </li>
224 <li class="level1"><div class="li"> сохранять напряжения узлов только для схемы текущего уровня или также и для подсхем.</div>
225 </li>
226 </ul>
228 </div>
230 <h3 id="запускмоделирования">Запуск моделирования</h3>
231 <div class="level3">
234 Кнопка моделирования в диалоговом окне должна вызывать следующие действия:
235 </p>
236 <ul>
237 <li class="level1"><div class="li"> сохранение схемы (спрашивать пользователя или использовать временный файл?);</div>
238 </li>
239 <li class="level1"><div class="li"> создание списка соединений с помощью <strong>gnetlist</strong>;</div>
240 </li>
241 <li class="level1"><div class="li"> создание файлов моделирования и включение туда списка соединений (можно ли это сделать тоже с помощью <strong>gnetlist</strong>?);</div>
242 </li>
243 <li class="level1"><div class="li"> выполнение скрипта запуска моделирования (<strong>guile</strong>, <strong>sh</strong>, ...).</div>
244 </li>
245 </ul>
248 Этот скрипт мог бы вызывать даже диспетчер, который бы занимался множеством
249 крупномасштабных моделирований.
250 </p>
252 </div>
254 <h2 id="приложение">Приложение</h2>
255 <div class="level2">
257 </div>
259 <h3 id="символизмерителянапряженияэскиз">Символ измерителя напряжения (эскиз)</h3>
260 <div class="level3">
261 <dl class="code">
262 <dt><a href="/./doku.php?do=export_code&amp;id=:geda:circuit_simulation_improvements.ru.txt&amp;codeblock=1" title="Download Snippet" class="mediafile mf_sym">voltage_probe.sym</a></dt>
263 <dd><pre class="code gschem-symbol">v 20061020 1
264 P 0 0 200 200 1 0 0
266 T 100 0 5 10 0 1 0 0 1
267 pintype=pas
268 T 0 100 5 10 0 1 0 0 1
269 pinseq=1
270 T 0 100 5 10 0 1 0 0 1
271 pinnumber=1
272 T 0 100 5 10 0 1 0 0 1
273 pinlabel=1
275 V 300 300 150 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1
276 L 300 200 240 360 3 10 0 0 -1 -1
277 L 300 200 360 360 3 10 0 0 -1 -1
278 T 0 500 9 10 0 0 0 0 1
279 device=VOLTAGE_PROBE
280 T 200 50 9 6 1 1 0 0 1
281 refdes=I_VP?
282 T 0 700 9 10 0 0 0 0 1
283 net=GND:2
284 T 0 900 9 10 0 0 0 0 1
285 value=DC 0A</pre>
286 </dd></dl>
288 </div>
290 <h3 id="символизмерителятокаэскиз">Символ измерителя тока (эскиз)</h3>
291 <div class="level3">
292 <dl class="code">
293 <dt><a href="/./doku.php?do=export_code&amp;id=:geda:circuit_simulation_improvements.ru.txt&amp;codeblock=2" title="Download Snippet" class="mediafile mf_sym">current_probe.sym</a></dt>
294 <dd><pre class="code gschem-symbol">v 20061020 1
295 P 0 200 150 200 1 0 0
297 T -150 50 5 10 0 1 0 0 1
298 pintype=pas
299 T 50 250 5 10 0 1 0 0 1
300 pinseq=1
301 T 50 250 5 10 0 1 0 0 1
302 pinnumber=1
303 T 50 250 5 10 0 1 0 0 1
304 pinlabel=1
306 V 300 200 150 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1
307 L 300 300 380 140 3 10 0 0 -1 -1
308 L 300 300 220 140 3 10 0 0 -1 -1
309 T 0 500 9 10 0 0 0 0 1
310 device=CURRENT_PROBE
311 T 200 370 9 6 1 1 0 0 1
312 refdes=V_IP?
313 P 600 200 450 200 1 0 0
315 T 500 50 5 10 0 1 0 0 1
316 pintype=pas
317 T 500 250 5 10 0 1 0 0 1
318 pinseq=2
319 T 500 250 5 10 0 1 0 0 1
320 pinnumber=2
321 T 500 250 5 10 0 1 0 0 1
322 pinlabel=2
324 L 240 180 360 180 3 10 0 0 -1 -1
325 T 0 700 9 10 0 0 0 0 1
326 value=DC 0V</pre>
327 </dd></dl>
329 </div>
331 <h3 id="ещёодинсимволизмерителятокаэскизкоторыйиспользуетkurtpeters">Ещё один символ измерителя тока (эскиз), который использует Kurt Peters</h3>
332 <div class="level3">
333 <dl class="code">
334 <dt><a href="/./doku.php?do=export_code&amp;id=:geda:circuit_simulation_improvements.ru.txt&amp;codeblock=3" title="Download Snippet" class="mediafile mf_sym">ammeter.sym</a></dt>
335 <dd><pre class="code gschem-symbol">v 20061020 1
336 T 700 650 8 10 1 1 0 0 1
337 refdes=VAM?
338 T 700 850 5 10 1 1 0 0 1
339 device=Ammeter
340 T 700 1050 5 10 0 0 0 0 1
341 footprint=none
342 T 700 1250 5 10 0 0 0 0 1
343 numslots=0
344 T 700 1450 5 10 0 0 0 0 1
345 description=ammeter for spice
346 P 300 1200 300 900 1 0 0
348 T 350 1000 5 8 1 1 0 0 1
349 pinnumber=1
350 T 350 1000 5 8 0 1 0 2 1
351 pinseq=1
352 T 400 850 9 8 1 1 0 5 1
353 pinlabel=+
354 T 300 700 5 8 0 1 0 5 1
355 pintype=pwr
357 P 300 0 300 300 1 0 0
359 T 350 100 5 8 1 1 0 0 1
360 pinnumber=2
361 T 350 100 5 8 0 1 0 2 1
362 pinseq=2
363 T 300 500 5 8 0 1 0 3 1
364 pintype=pwr
365 T 300 300 5 10 1 1 0 0 1
366 pinlabel=-
368 L 300 400 400 500 3 0 0 0 -1 -1
369 L 200 500 300 400 3 0 0 0 -1 -1
370 T 700 450 5 10 0 1 0 0 1
371 value=DC 0V
372 L 300 400 300 800 3 0 0 0 -1 -1
373 L 100 800 500 400 3 0 0 0 -1 -1
374 B 0 300 600 600 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1
375 L 200 800 100 800 3 0 0 0 -1 -1
376 L 100 700 100 800 3 0 0 0 -1 -1</pre>
377 </dd></dl>
379 </div>
380 </body>
381 </html>