Можно ли рисовать схемы через код?


17

Есть ли лучший способ не писать файлы списков соединений. что-то вроде:

Define Battery1 As a Battery
Define Resistor1 As a Resistor

Connect Battery1 First Terminal to Resistor1 Second Terminal
Connect Resistor1 First Terminal to Battery1 Second Terminal

РЕДАКТИРОВАТЬ:

Я нахожу ответы довольно полезными. Будет здорово, если есть способ симулировать схему, созданную кодом.


5
FWIW, ваш пример кода выглядит для меня как список соединений. Он просто определяет пару частей (предположительно, библиотека сообщает инструменту, сколько терминалов имеет каждый из них), а затем говорит, какие терминалы подключены друг к другу. Если вы немного его использовали, вы могли бы даже обнаружить, что легче назвать узлы и подключить терминалы к узлам, а не к другим терминалам.
Фотон

3
Существует много пропусков между "возможно ли" и "полезно ли" для многих предметов.
whatsisname

3
Я думаю, что вы, возможно, смотрите на HDL. Хотя они в основном описывают цифровые схемы, они технически не ограничиваются такими (я думаю, что Verilog их поддерживает). Как отмечает @ThePhoton, то, что вы показали, выглядит как список соединений, к которому они обычно компилируются.
Мацей Пехотка

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

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

Ответы:


28

Если вы знакомы с , вы можете использовать circuitikz для рисования хороших схем, написав код.LATЕИкс

введите описание изображения здесь

Пример .
Больше примеров


4
Чтобы добавить к этому - как уже говорили другие, рисование хорошей схемы требует человеческой интуиции. Однако, если вы рисуете много похожих схем, тогда использование laTeX и circuitikz позволит вам создать макет шаблона и настроить его в соответствии со спецификой. Этот подход я использую при создании материалов курса.
Джон

2
Недостающее пространство между номером и устройством выглядит ужасно.
Лунг

@Loong Вы всегда можете поставить пробел между числами и единицами, если хотите. \ или \,можете добавить место в латексной математической среде
nidhin

1
@ Long Это очевидно проблема локализации. Для американца всегда странно иметь случайный дополнительный пробел между числами и единицами.
Хрилис - на забастовке -

1
@ chrylis Это не проблема локализации, это спецификация ISO 80000 и должна использоваться исключительно.
awjlogan

15

Проверьте SKiDL ( https://github.com/xesscorp/skidl ), это то, что вы думаете.

Изменить (как требуется): SKiDL позволяет процедурное описание всех цепей (а не только цифровой), вместо графического ввода вашей схемы. Вывод списка соединений можно затем импортировать в программу компоновки. Он также выполняет проверки ERC и является расширяемым. Это означает, например, что вы можете написать фильтр один раз, а затем повторно использовать его в разных проектах, а не рисовать каждый раз. Написан на Python, со всей необходимой поддержкой.


Добавил немного больше информации.
awjlogan

Другие варианты рисования схемы Python - SchemDraw и lcapy .
Феникс

13

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

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


Verilog-A также может использоваться для описания и моделирования / моделирования аналоговых схем, хотя я не знаю ни о каких некоммерческих симуляторах.
Шамтам

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

@Shamtam, я использовал Veriolog A, но только в качестве языка моделирования. Существуют ли системы, которые могут синтезировать схему из описания Verilog A?
Фотон

@ThePhoton Не то, чтобы я знал. Я предполагаю, что мое использование термина «описать» может вводить в заблуждение в этом смысле.
Шамтам

@Shamtam, я бы не стал волноваться об этом слове. В конце концов, это язык описания оборудования . Это просто описывает функцию, а не реализацию.
Фотон

9

Ваш пример очень похож на modelica , объектно-ориентированный язык для моделирования, основанный на создании блоков и соединении портов между блоками.

Пример использования библиотеки электрических компонентов (с maplesoft.com ),

encapsulated model ChuaCircuit "Chua's circuit, ns, V, A"
  import Modelica.Electrical.Analog.Basic;
  import Modelica.Electrical.Analog.Examples.Utilities;
  import Modelica.Icons;
  extends Icons.Example;

  Basic.Inductor L(L=18);
  Basic.Resistor Ro(R=12.5e-3);
  Basic.Conductor G(G=0.565);
  Basic.Capacitor C1(C=10, v(start=4));
  Basic.Capacitor C2(C=100);
  Utilities.NonlinearResistor Nr(
    Ga(min=-1) = -0.757576,
    Gb(min=-1) = -0.409091,
    Ve=1);
  Basic.Ground Gnd;
equation 
  connect(L.p, G.p);
  connect(G.n, Nr.p);
  connect(Nr.n, Gnd.p);
  connect(C1.p, G.n);
  connect(L.n, Ro.p);
  connect(G.p, C2.p);
  connect(C1.n, Gnd.p);
  connect(C2.n, Gnd.p);
  connect(Ro.n, Gnd.p);
end ChuaCircuit;

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


4

Cirkuit - это редактор для преобразования простого текстового описания в принципиальную схему. Он предоставляет набор макросов M4 для электрических символов.

Он может использоваться вместе с circuitikz, который был предложен nidhin . circuitikz использует более современную графическую систему pgf / TikZ . Сообщество stackexchange имеет очень активных пользователей cirkuitikz , но в TeX есть и другие решения .

Источник: https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/quick.png

Изображение из https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.html .


3

PSTricks - это еще одна библиотека для пользователей TeX. Это может даже сделать сложные математические вычисления, такие как дифференциальные уравнения.

\documentclass[pstricks,border=12pt,12pt]{standalone}
\usepackage{pst-eucl,pst-circ}
\psset
{
    dipolestyle=zigzag,
    labelangle=0,
    labeloffset=-.9,
    intensitylabeloffset=-.4,
    tensionstyle=pm,
    tensionoffset=.9,
    tensionlabeloffset=.9,
    %tensioncolor=red,
    %tensionlabelcolor=blue,
}
\begin{document}
\begin{pspicture}[showgrid=none](12,-12)
	\pstGeonode[PosAngle={135,90,45,0,-45,-90,-135,180,45}]
		(2,-2){A}
		(6,-2){B}
		(10,-2){C}
		(10,-6){D}
		(10,-10){E}
		(6,-10){F}
		(2,-10){G}
		(2,-6){H}
		(6,-6){I}
	%
	\resistor[intensitylabel=$i_1$,tensionlabel=$V_{HA}$](H)(A){$R_1$}
	\resistor[tensionlabel=$V_{AB}$](A)(B){$R_2$}
	\vdc[tensionlabel=$V_{BC}$](B)(C){$E_1$}
	\resistor[tensionlabel=$V_{CB}$](C)(D){$R_3$}
	%
	\resistor[intensitylabel=$i_2$,tensionlabel=$V_{HI}$](H)(I){$R_4$}
	\vdc[tensionlabel=$V_{ID}$](I)(D){$E_2$}
	%
	\resistor[intensitylabel=$i_3$,tensionlabel=$V_{HG}$](H)(G){$R_5$}
	\newSwitch[ison=true,tensionlabel=$V_{GF}$](G)(F){$S_2$}
	\wire(F)(E)
	\resistor[tensionlabel=$V_{DE}$,dipoleconvention=generator](E)(D){$R_6$}
	%
	\vdc[tensionlabel=$V_{FI}$,dipoleconvention=generator](I)(F){$E_3$}
	\newSwitch[intensitylabel=$i_4$,tensionlabel=$V_{BI}$,ison=false](B)(I){$S_1$}	
\end{pspicture}
\end{document}

введите описание изображения здесь


2

Да. Вы можете использовать HDL для описания вашей схемы с помощью кода. Вы можете использовать Verilator, Xilinx или любое другое программное обеспечение, или вы можете использовать https://www.edaplayground.com/ (который работает в режиме онлайн без необходимости устанавливать что-либо на вашем ПК. ).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.