Hlavní navigace

Publikovanie elektrických schém a diagramov pomocou circuit-macros

20. 10. 2020
Doba čtení: 8 minut

Sdílet

Úvod do kreslenia elektrických schém a diagramov pomocou circuit-macros. Zapojenia sú vytvárané pomocou textového popisu makrami, ktoré sú nadstavbou jazyka PIC. Pri kompilácii je možné vygenerovať obrázky alebo skripty pre LaTeX.

Denným chlebom každého technika je kreslenie schém a diagramov, pričom prakticky v každej oblasti existujú vhodné programy, ktoré túto činnosť zjednodušujú a uľahčujú. Pri rutinej činnosti je kladený dôraz na obsah, forma často nie je podstatná, dôležité je hlavne to, aby diagram prehľadne zobrazoval to, k čomu bol vytvorený. Pri potrebe publikovania schém a diagramov v článkoch a knihách je ale okrem obsahu často dôležitá aj forma, ako schéma alebo diagram vyzerá, či dodržiava stanovené normy a interné pravidlá.

V dávnych dobách stačilo zaslať do redakcie článok s ručne nakreslenou schémou a kresliči v redakcii zapojenie prekreslili podľa štýlu časopisu, starší čitatelia si zaiste nostalgicky spomenú na precízne ručne kreslené zapojenia v Sdělovací technike, Slaboproudem obzoru a ďalších.

Súčasná doba už kresleniu tušom na pauzák nepraje, na druhej strane bežné programy zvyčajne nie sú orientované na generovanie výstupov do publikácií, aj keď odborné publikácie so schémami vytvorenými v Eagle nie sú žiadnou zvláštnosťou. Väčšie problémy nastanú, ak potrebujeme schému alebo diagram doplniť ďaľšími grafickými prvkami – matematickými vzorcami, šípkami, doplnkovými grafmi a pod.

Pre jednorázové nakreslenie schémy zvyčajne splní všetky požiadavky grafický, zvyčajne vektorový editor (Inkscape, sk1…). Pokiaľ ale potrebujeme obrázky modifikovať, vkladať do nich matematické výrazy, parametrizovat alebo možno aj programovo generovať, jednou z možností je použitie v súčasnej dobe možno trochu archaického spôsobu vytvárania schém a diagramov pomocou textového popisu – makier.

Kreslenie schém a diagramov pomocou circuit-macros

Z pohľadu súčasného uživateľa rozmaznaného klikacími programami môže pripadať v súčasnej dobe kreslenie zapojení a diagramov pomocou textových makier niečo ako použitie parného stroja v športovom aute. Pri podrobnejšom pohľade na princíp vytvárania zapojení pomocou textového popisu zistíme, že princíp sa nie veľmi odlišuje od toho, čo v súčasnej dobe poznáme pod pojmom parametrické modelovanie.


Nostalgická ukážka z príkladov

Knižnica circuit-macros (CM) obsahuje všetky bežné komponenty potrebné pre vytváranie elektrických zapojení v tvare makier pre makroprocesor m4. Pomocou makroprocesora sa popis zapojenia preloží do jazyka PIC, ktorý je určený pre všeobecnú tvorbu grafiky a jeho autorom je legenda IT – Brian W. Kernighan. Pomocou kompilátora dpic sa grafický popis preloží do cielového formátu (svg, ps, pdf …) alebo do makier PSTricks pre priame použitie v LaTeXu. Uvedený postup vyzerá komplikovaný, ale jednoduchý skript dokáže všetky činnosti automatizovať.

Inštalácia

Inštalácia circuit-macros pozostáva zo stiahnutia archívu z domácej stránky a rozbalení do adresára. Distribúcia obsahuje sadu makier a príkladov, neobsahuje žiaden vykonateľný program. Makroprocesor m4 je štandardnou súčasťou linuxových distribúcií. Kompilátor dpic je súčasťou repozitárov, inštaluje sa bežným postupom pre vašu distribúciu.

sudo apt-get install dpic

Štruktúra zdrojového textu schémy

Typický zdrojový text jednoduchého zapojenia v CM má tvar

.PS
cct_init
scale = 2.54
d=1.5
resistor(right_ d, E); llabel(,R_1,);
resistor(down_  d, E); llabel(,R_2,);
.PE

kde

  • .PS a .PE označujú začiatok a koniec skriptu
  • cct_init je volanie inicializacie skriptu a premennýc
  • scale=2.54 je nastavenie mierky kreslenia pre mierku 1cm, default mierka je 1 inch
  • d=1.5 je premenná, ktorá bude použitá ako dĺžkový parameter

Program nakreslí nasledujúce zapojenie


Zapojenie z príkladu

Súradníce sú v karteziánskej sústave. Pri začiatku kreslenia je fiktívne pero nastavené do polohy (0,0). Definovanie komponentu znamená jeho vykreslenie a presun pera do novej polohy, ktorá je definovaná v tomto komponente.

Základným grafickým prvkom je orientovaný dvojpól, zoznam všetkých typov komponentov je uvedený v dokumentácii [PDF]. Postupnosť príkazov

resistor(right_ d, E);
llabel(,R_1,);

Uloží na vykres rezistor orientovany doprava ( right_) o dĺžke 1,5 cm ( d) v tvare podľa európskej normy ( E). Na lavú stranu rezistora v smere ukladania ( llabel) umiestni označenie rezistora. Pretože predpokladáme, že budeme generovať výstupný kód pomocou PSTricks, budú označenie renderované ako matematické vzťahy v LaTeXe. Po vykreslení rezistoru sa pero presunie na koniec rezistoru a príkaz

resistor(down_  d, E); llabel(,R_2,);

Vykreslí nový rezistor v definovanom smere. Na tomto mieste treba upozorniť na používanie parametrov, je rozdiel medzi down_ a down (bez podtržítka). Prvý tvar používa CM, pri ktorom nastavuje aj parametre iných vnútorných premenných napr. pre polohu označovania komponentov, druhý tvar štandardne používa PIC. Z princípu fungovania makroprocesora m4 vyplýva, že ak pri preklade narazí na neznámu konštrukciu, tak ju ponechá v pôvodnom stave ( down), praktickým dôsledkom tohoto je, že pri kreslení zapojenia môžeme zároveň používať aj príkazy jazyka PIC.

Preklad a kompilácia

Najprv uvedieme komplikovanejší postup s využitím renderovania textov v LaTeXe a s využitím makier PSTricks, predpokladáme, že LaTeX s príslušnými modulmi máte už nainštalovaný. V prvom kroku preložíme naše zapojenie pomocou makroprocesora do príkazov jazyka PIC

m4 -I PATH_TO_CM_MACROS pstricks.m4 SOURCE_FILE > PIC_FILE

V príkaze zadefinujeme cestu k adresáru, kde sme rozbalili makrá z archívu, náš zdrojový súbor so zapojením a zvolíme meno súboru, do ktorého sa uložia príkazy v PIC. Súbor pstricks.m4 obsahuje sadu pomocných makier pre finálny výstup.

V druhom kroku súbor v jazyku PIC do sady makier PSTricks preložíme pomocou

dpic -p PIC_FILE > PSTRICK_FILE

Výsledkom prekladu je zdrojový text pre LaTeX s príkazmi pre PSTricks, ktorý má štandardný tvar

\begin{pspicture}
...
\end{pspicture}

Skompilovaný súbor už môžeme vložiť do dokumentu v LaTeXu a ďalej s ním pracovať. Pretože pri kreslení schém potrebuje priebežne sledovať výsledok práce, pre renderovanie obrázku zapojenia do postscriptu môžeme použiť krátky dokument ( LATEX_FILE)

\documentclass{article}
\usepackage{times,pstricks,pst-eps,pst-grad}
\usepackage{graphicx}
\begin{document}
\begin{TeXtoEPS}

\input PSTRICK_FILE        <- menu skompilovaneho suboru bez pripony

\end{TeXtoEPS}\end{document}

Ktorý preložíme

latex LATEX_FILE      <- bez pripony .tex
dvips -E LATEX_FILE   <- bez pripony .aux

Výsledkom prekladu je obrázok vo formáte PostScript. Aj keď uvedený postup vyzerá komplikovane, jednoduché skripty v pythone alebo shelle problém vyriešia.

Pri jednoduchšom spôsobe grafický súbor vygeneruje priamo kompilátor dpic, samozrejme ale bez renderovania textov LaTeXom.

m4 -I PATH_TO_CM_MACROS postscript.m4 SOURCE_FILE | dpic -r > PS_FILE

Poznámky ku kresleniu schém

Úlohou tohoto príspevku nie je opisovať manuály, [PDF] s pomocou príkladov v distribúcii ako aj ukážkami vytvorenými nadšencami po internete si je možné si potrebné postupy pri kreslení zapojení rýchlo osvojiť. Ukážeme len niektoré detaily, ktoré by mohli spôsobiť na začiatku drobné problémy.

Referencie na objekty

Na vytvorené objekty je možné sa odkazovať menom, napr.

R1: resistor(right_ d, E);

a ďaľšom potom môžeme využívať jeho atribúty ako súradnice, pre dvojpóly sú definované napr.

R1.start
R1.center
R1.end
R1.dimen_
...

Súradnice a vetvenie

Aktuálna poloha je definovaná premenou Here code>. Absolútne aj relatívne súradnice môžeme používat v tvare (x,y), pre určenie smeru right_, left_, up_, down_, ktoré môžeme aj kombinovať. Menom sa môžeme odkazovať na súradnice častí objektov

R.end   <->  (R1.end.x, R1.end.y)

Nasledujúce zápisy sú rovnocenné

d=1.5;
resistor from Here to Here + (d,d);
resistor to Here + (d,d);
resistor to Here + (1.5, 1.5);
resistor( right_ d up_ d);

Pri vetvení obvodov aktuálny polohu odložime tým, že vetvu uzatvoríme do zložených zátvoriek. Pre vykreslenie elektrického spojenia slúži makro dot.

R1: resistor(right_ d, E);   llabel(,R_1,);
dot;
{   # odlozenie aktualnej polohy a vykreslenie vetvy
    R2: resistor(up_ d, E);  llabel(,R_2,);
    C1: capacitor(right_ d); llabel(,C_1,);
}
# obnovenie aktualnej polohy
R3: resistor(down_ d, E); llabel(,R_3,);
L1: inductor(right_ d);   llabel(,L_1,);

Vytvorenie vetvy obvodu

Prepojenie medzi komponentami

Pre vytvorenie spojov slúžia makro line from to, line to. Pre presun bez kreslenia na novú pozíciu je určené makro move to. K predchádzajúcemu príkladu doplníme prepojenie medzi kondenzátorom a cievkou a v strede odbočku s rezistorom

line from C1.end to (C1.end, R1.end);  # ekvivalent (C1.end.x, R1.end.y)
dot;
{   # vetva
    R4: resistor(right_ d, E); llabel(,R_4,);
}
line to L1.end

Vytvorenie prepojenia

Zmena polarity komponentu

Dvojpóly sú orientované komponenty, ktoré začínajú na pozícii start a končia na pozícii end. Pri polarizovaných komponentoch (napr. dióda, elektrolytický konddenzátor) je niekedy potrebné ho nakresliť v opačnej polarite. Pre zmenu polarity komponentu je možné použiť makro *reversed*, ktorému predáme názov makra komponentu a jeho argumenty. Meno makra je v uvodzovkách podľa syntaxe m4, kde ako otváracia uvodzovka je použitý znak ` – back quote a zatváracia úvodzovka je ' apostrof resp. single quote

dot;
{   # prava cast mostika
    D1: diode(down d/sqrt(2) right d/sqrt(2) ); llabel(,,D_1)
        dot;
    D2: reversed(`diode', down d/sqrt(2) left d/sqrt(2) ); rlabel(,,D_2)
        dot;
}
{   # lava cast mostika
    D3: reversed(`diode', down d/sqrt(2) left d/sqrt(2) ); llabel(D_3,,)
        dot;
    D4: diode(down d/sqrt(2) right d/sqrt(2) ) ; rlabel(D_4,,)

}

Zmena polarity komponentov

Pretože CM je nadstavbou jazyka PIC, je možné samozrejme využívať aj všetky jeho konštrukcie, vytváranie vlastných makier, cykly, podmienky a mnohé ďaľšie. Podrobnosti si každý záujemca nájde v manuáloch.

školení Root hacking

Ďalšie možnosti

Okrem uvedených metód kreslenia zapojení a diagramov do publikáciíí existuje aj ďalšie možnosti, napr. prostredie CircuiTikz pre LaTex. Predmetom článku bola krátka prezentácia knižnice makier circuit-macro, nie je možné v rámci článku ukázať všetky možnosti a zároveň ani nechceme pripraviť čitateľov o radosť z objavovania veľmi nákazlivého spôsobu vyjadrenia vlastných myšlienok a ideí.

Aj napriek na prvý pohľad zastaralému a zdĺhavému postupu si môže circuit-macros nájsť svoje miesto pod slnkom – od jednoduchého kreslenia schém do publikácií až po programovo generované schémy a diagramy napr. pre oblasť výučby na tvorbu personalizovaných príkladov a písomiek pomocou parametricky zadaných podkladov (za toto ma niekto nebude mať rád), čo je v súčasnej dobe aktuálna téma.

Autor článku

Vyštudoval experimentálnu fyziku na FMFI UK Bratislava a v súčasnej dobe pracuje na Výskumnom centre Žilinskej univerzity. Používa prevažne programovacie jazyky Python a C/C++ pre programovanie mikrokontrolérov (STM) a tvorbu modulov pre Python.

Vyštudoval elektrotechniku na Žilinskej univerzite a v súčasnej dobe pracuje na Katedre multimédií a informačno-komunikačných technológií. Používa programovací jazyk Python a C/C++.