Symulacja obwodów

0

Witajcie, mam do zaprogramowania pewien projekt który miałby symulować działanie prostego obwodu elektrycznego, coś na przykład jak na załączonym obrazku : http://www.images.nsx.pl/uploads/6df1a_schemat.png

Problem pojawia się przy tym, jakiej struktury danych użyć do przechowywania elementów. Początkowo zastanawiałem się nad drzewem, lecz przecież drzewo ma jeden korzeń, a tak jak na obrazku jest wiele "korzeni". Macie jakieś pomysły ?

0

graf

0

Witam,

Czy te elementy na schematach ( o dwóch wejściach i jednym wyjściu ) są standartowymi bramkami logicznymi, np. typu : AND , OR czy XOR ?

                                                                                 Pozdrawiam

                                                                                        JK
0

Mogą to być także takie bramki.

0

a jakie moga byc inne ? No jedna moze sie w pewnym momencie zatrzasnac ...
cos wiecej ? w koncu moze byc tak ze na wejsci jest 1 na wyjsci 5 (odwrocone drzewo)

0

Witam,

Obecność bramek logicznych nie jest tak oczywista ; równie dobrze mogłyby być to
analogowe komparatory napięcia
Rozumiem, że rodzaj układów ( scalonych ) o dwóch wejściach, jak i o jednym wyjściu
nie jest jednoznacznie ustalony ( równie dobrze mogłyby to być analogowe komparatory
napięcia, jak i bramki logiczne dowolnego typu. Gdyby to były bramki logiczne ściśle
określonego typu, to można byłoby się pokusić o konstrukcję tzw. tablic stanu lub
tablic przejścia :

http://www.mimuw.edu.pl/~kubica/sop/wyklad3/wyklad.html
http://www.testerzy.pl/slownik/tablica-stanow
http://www.ifd.univ.gda.pl/local/pe/sekwencyjne.pdf

Skoro rodzaj bramek może być dowolny ( nie jest wstępnie ściśle określony ), to może warto
byłoby pomyśleć o zredagowaniu programu typu "generator tablicy stanu" lub "generator tablicy
przejścia" ( generowałby określoną tablicę w zależności od rodzaju użytych bramek ) ?
Następną sprawą jest rodzaj użytego języka programowania. Gdyby miał być użyty język,
w którym nie występują operacje logiczne bitowe, to algebrę Boole'a dałoby się
zaimplementować w postaci zwyczajnych operacji arytmetycznych, np. następująco :

AND "u * v"
OR "sign ( u + v )"
XOR "sign ( abs ( u - v ) )" { ta ostatnia dotyczy nie tylko bramki XOR, ale również - komparatora napięcia }

Wyrażenia w cudzysłowach nazwiemy 'funkcjami rozwijającymi' ; natomiast zmienne "u" i "v" mogą przyjmować tylko wartości zero-jedynkowe ( w przypadku komparatora napięcia mogą przyjmować dowolne wartości ). Konkretną bramkę można zadeklarować jako obiekt ( w językach dopuszczających programowanie obiektowe ), gdzie metodę stanowiłaby funkcja rozwijająca, natomiast własnościami były wartości na poszczególnych wejściach i wyjściach.
W przypadku języków programowania, które nie dopuszczają programowania obiektowego, bramkę można byłoby zadeklarować jako rekord czy strukturę ; w przypadku np. starszych wersji Pascala, w którym jedno pole byłoby typu proceduralnego ( zawierałoby właśnie 'funkcję rozwijającą' ). W przypadku języków programowania, w których istnieje potężna
funkcja eval ( dotyczy to nie tylko
języka JavaScript, ale także języka PERL oraz języków - interpreterów wbudowanych w takie pakiety matematyczne, jak
Matlab czy Scilab )
można byłoby funkcję rozwijająca zapisać ( jako wzór ) w polu łańcuchowym owej struktury.
Oto przykład zapisu konstrukcji bramki OR jako struktury w języku pakietu Scilab :

gate = struct ( 'funktor' , 'gate.a3 = sign ( gate.a1 + gate.a2 )' , 'a1' , 0 , 'a2' , 0' , 'a3' , 0 )

( gdzie 'a1' i 'a2' są wejściami tej bramki, natomiast 'a3' jest jej wyjściem ).
Wystarczy teraz wykonać polecenie :

eval ( 'gate.funktor' )

aby została wyliczona wartość na wyjściu tej bramki.
Takie same deklaracje można zapisać nie tylko w darmowym Scilabie, ale również w komercyjnym Matlabie. Matlab umożliwia także jeszcze inne podejście do tego problemu. W Matlabie istnieje potężny "podpakiet" o nazwie
Simulink a służący do symulacji obwodów
elektronicznych. Można zasymulować te układy w Simulinku, a następnie zapisać je do pliku w formacie "*.MDL" ; pliki w tym formacie są plikami tekstowymi ( "paratekstowymi" ) :

http://dotwhat.net/mdl/3911/

http://www.fileinfo.com/extension/mdl

Wystarczy zatem wygenerowany plik MDL ze schematem obejrzeć pod jakimkolwiek edytorem ASC ; może to podpowie, w jaki sposób kodować tego rodzaju układy.

                                                    Pozdrawiam
                                                    
                                                      JK  

1 użytkowników online, w tym zalogowanych: 0, gości: 1