Forum: PC-Programmierung Programm-Ansatz gesucht (vermaschtes Strom-Netz berechnen)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
0 lesenswert
nicht lesenswert
Angenommen ich habe ein großes vermaschtes Netz aus sagen wir 10.000 
Widerständen, an manchen Punkten wird Strom eingespeist und an manchen 
Punkten wird Strom entnommen.

Wie berechnet man die fließenden Ströme in den einzelnen Widerständen, 
wie löst man sowas am besten mit einem Computer auf? Die Gleichungen 
dafür dürften extrem komplex werden und die Suche nach Programmfehlern 
in sowas verspricht Bauchschmerzen.

Hat irgendjemand schon mal so eine Simulation oder Berechnung 
geschrieben oder weiß einen guten Weg dafür? Mich würde mal 
interessieren, wie man an sowas herangeht oder sowas löst.

von Marek N. (bruderm)


Bewertung
2 lesenswert
nicht lesenswert

von Helmut S. (helmuts)


Bewertung
3 lesenswert
nicht lesenswert
Das berechnet man am einfachsten mit der Knotenpotentialanalyse.
Du kannst natürlich auch einfach ein beliebiges SPICE-Programm dafür 
nehmen. Dem gibt man einfach eine Netzliste und drückt RUN. Nach kurzer 
Rechenzeit bekommt man eine Datei mit allen Potentialen und den Strömen. 
Als SPICE-Programm empfehle ich das kostenlose LTspiceXVII.

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
1 lesenswert
nicht lesenswert
Danke euch beiden für die Tips.

@Marek
Danke, lese ich mir durch.

@Helmut
Daß LTSpice das kann weiß ich - aber mich interessiert eben, wieso es 
das kann, was dahintersteckt.

von Yalu X. (yalu) (Moderator)


Bewertung
2 lesenswert
nicht lesenswert
Spice ist quelloffen. Es gibt auch einiges an Veröffentlichungen dazu.

: Bearbeitet durch Moderator
von Helmut S. (helmuts)


Bewertung
0 lesenswert
nicht lesenswert
Rechenmethoden
Die „brute force“ Methode ist einfach die Matrix zu invertieren.
Für solche dünn besetzten Matrizen gibt es schnellere und 
speichersparende Verfahren (sparse matrix).

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
0 lesenswert
nicht lesenswert
Ich muß erstmal rausbekommen, wie man so eine Matrix erzeugt.

Denke wenn man die einmal hat, kann man sie auch einmal komplett 
durchrechnen. Heutige Computer bieten dafür ja mehr als genug 
Rechenleistung.

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Ben B. schrieb:
> Denke wenn man die einmal hat, kann man sie auch einmal komplett
> durchrechnen. Heutige Computer bieten dafür ja mehr als genug
> Rechenleistung.

Kommt darauf an wie geduldig du bist :)

10000 Widerstände sind zwar nicht so arg viel, aber wenn du alle in
Reihe schaltest, ergibt das 10000 Knoten und damit bei Anwendung des
Knotenverfahrens ein System mit 10000 Gleichungen. Wendet man darauf das
Gauß-Verfahren an, erfordert dies ca. 670 Milliarden Rechenoperationen
(⅔n³). Die sind auf einem gewöhnlichen PC nicht in ein paar Sekunden
durchgenudelt, benötigen aber auch nicht gerade eine halbe Ewigkeit.

Für diesen speziellen Fall ist das Maschenverfahren natürlich besser
geeignet, denn dann reduzieren sich die 10000 Knoten auf 1 Masche und
damit auf 1 Gleichung, die praktisch in der Zeit 0 berechnet werden
kann.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
0 lesenswert
nicht lesenswert
Maschenverfahren kenne ich ein bißchen, nervt aber. :D Ich muß mal 
schauen wie man sowas am besten auf dem Rechner umsetzt. Solche Sachen 
sind manchmal mit Kopf und Papier einfacher als mit 16x 5Ghz...

von Helmut S. (helmuts)


Bewertung
1 lesenswert
nicht lesenswert
Die Väter von Spice waren schlau. Die haben bewusst auf das 
Knotenpotentialverfahren gesetzt. Verschwende keine Zeit mit dem 
Maschenstromverfahren.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
1 lesenswert
nicht lesenswert
Okay. Weißt Du, wie man die dafür nötige Matrix am besten
aufstellt bzw. hast Du etwas Erfahrung damit?

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Ben B. schrieb:
> Okay. Weißt Du, wie man die dafür nötige Matrix am besten
> aufstellt bzw. hast Du etwas Erfahrung damit?

Das ist eigentlich gan einfach und steht in dem von Marek verlinkten
Wikipedia-Artikel:

  https://de.wikipedia.org/wiki/Knotenpotentialverfahren#Matrix_des_linearen_Gleichungssystems_aufstellen

Ben B. schrieb:
> Maschenverfahren kenne ich ein bißchen, nervt aber.

Im Prinzip sind Knoten- und Maschenverfahren gleichwertig.

Allerdings sind die Schaltungen üblicherweise im Knotendarstellung
vorgegeben (bspw. als Spice-Netzliste), die direkt mit dem
Knotenverfahren verarbeitet werden kann. Für das Maschenverfahren muss
man die Schaltung erst in die Maschendarstellung überführen, was einen
zusätzlichen Verarbeitungsschritt bedeutet. Dieser benötigt zwar kaum
Rechenzeit, muss aber erst einmal programmiert werden. Weil
Programmierer meist faule Leute sind, arbeiten praktisch alle
Schaltungssimulationsprogramme mit dem Knotenverfahren.

Insbesondere bei Schaltplänen mit überkreuzenden Leitungen ist das
Finden der Maschen auch für Menschen schwieriger, weswegen man oft dem
Knotenverfahren den Vorzug gibt. Allerdings möchte man bei der manuellen
Berechnung auch die Anzahl der Gleichungen minimieren, weswegen mitunter
das Maschenverfahren vorteilhafter ist.

: Bearbeitet durch Moderator
von C. A. Rotwang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Yalu X. schrieb:
> Die sind auf einem gewöhnlichen PC nicht in ein paar Sekunden
> durchgenudelt, benötigen aber auch nicht gerade eine halbe Ewigkeit.

Das Stichwort heisst 'sparse matrix (dünn besetzte Matrix) und wer mag 
kann das auch auf einen FPGA schubsen: 
http://cas.ee.ic.ac.uk/people/nachiket/publications/spice_matrix-solve_fpt-2009.pdf
https://thesis.library.caltech.edu/6159/1/submit_oct26.pdf
https://www5.in.tum.de/lehre/vorlesungen/duenn_matr/duennbesetzte_matrizen.pdf

von Helmut S. (helmuts)


Bewertung
1 lesenswert
nicht lesenswert
Ich habe mal eine Netzliste mit vielen Tausend Knoten mit einem 
C-Programm für Spice erzeugt. Das waren im wesentlichen zwei 
for-Schleifen in denen Strings mit fortlaufenden Referendesignators und 
Netznamen generiert wurden. Die Idee war eine Plane aus L und C 
Elementen zu simulieren.
Da du keine Netzliste willst, füll halt direkt eine Matrix mit den 
Indizes der for-Schleifen. Du benötigst dann noch eine Spaltenmatrix für 
die zugeführten Ströme.

In Matlab oder Octave sieht das Wie folgt aus.
G sei die Leitwertmatrix.
I sei die Spaltematrix.
P sei die Matrix mit den Potentialen.

P = inv(G)*I

Inv erzeugt die inverse Matrix.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
1 lesenswert
nicht lesenswert
Okay danke euch, ich muß das erstmal ganz in Ruhe durchlesen und 
versuchen zu verstehen.

Ich finde es immer etwas einfacher, solche Aufgaben selbst zu lösen, 
anstatt einem Computer den Lösungsweg einzuhämmern, erst recht wenn er 
aus irgend einem Plan erst die Knoten bestimmen muß bzw. die 
Abhängigkeiten zwischen den Knoten. Mal sehen, evtl. Aufwand zu groß für 
ein Spaßprojekt nur um rauszufinden wie's funktioniert.

von Helmut S. (helmuts)


Bewertung
0 lesenswert
nicht lesenswert
Die Funktion für inv() gibt es bestimmt fertig im Netz. Die Generierung 
der Matrix muss man natürlich selber machen. Am besten mal mit einer 
kleinen 4x4 Matrix zum testen anfangen. Das Ergebnis mit SPICE 
kontrollieren.

https://www.codesansar.com/numerical-methods/matrix-inverse-using-gauss-jordan-method-c-program.htm

: Bearbeitet durch User
von Hannes J. (Firma: professional Professional) (pnuebergang)


Bewertung
0 lesenswert
nicht lesenswert
Ben B. schrieb:
> Ich finde es immer etwas einfacher, solche Aufgaben selbst zu lösen,
> anstatt einem Computer den Lösungsweg einzuhämmern,

Wenn du das erste Mal von Hand den Lindner durchgerechnet hast, dann 
siehst du das ganz anders. Aber absolut anders.

Für den modernen, ja ach so gestressten Bachelor-Studenten (hahaha), der 
Lindner in dem Zusammenhang ist ein dreibändiges Werk 
https://www.hanser-fachbuch.de/buch/Elektro+Aufgaben+Band+1/9783446452213 
mit E-Technik Aufgaben aller Art zum Rechnen. Ca 1000 - 1500 
Rechenaufgaben pro Band.

Früher wurde der von Studenten als Übung in den Grundlagen der E-Technik 
durchgerechnet. Von vorne bis hinten. Von Hand mit Papier, Bleistift, 
Rechenschieber/Taschenrechner. Auch in einigen Ausbildungsberufen war es 
üblich den Lindner zu rechnen, zumindest Teile von Band 1 Gleichstrom 
und Band 2 Wechselstrom.

> erst recht wenn er
> aus irgend einem Plan erst die Knoten bestimmen muß bzw. die
> Abhängigkeiten zwischen den Knoten.

Das geht rein schematisch und dafür sind Computer klasse. Wenn du viele 
Netze von Hand durchgerechnet hattest, dann war ein Programm wie SPICE 
der absolute Luxus. Lochkarten stanzen, ab in den Großrechner, einen Tag 
warten. Aber Hauptsache nicht mehr den Scheiß von Hand machen müssen.

> Mal sehen, evtl. Aufwand zu groß für
> ein Spaßprojekt nur um rauszufinden wie's funktioniert.

Einfach nachlesen. Die die Doktorarbeit von dem Spice-Programmierer gibt 
es im Netz 
http://www2.eecs.berkeley.edu/Pubs/TechRpts/1975/ERL-m-520.pdf

von Egon D. (egon_d)


Bewertung
0 lesenswert
nicht lesenswert
Ben B. schrieb:

> Ich finde es immer etwas einfacher, solche Aufgaben
> selbst zu lösen, anstatt einem Computer den Lösungsweg
> einzuhämmern,

Naja, kommt auf die Häufigkeit und das Vorwissen an.

Um überhaupt erstmal das Prinzip zu verstehen, ist es
sicherlich am besten, einige Aufgaben von Hand zu
rechnen.
Um zu verstehen, wie man sehr große Probleme dieser
Art behandeln kann, ist es dagegen nützlich, das mal
selbst zu programmieren.
Um es öfter routinemäßig zu berechnen, will man das
aber nicht dauernd von Hand machen -- sondern den
Blechtrottel verwenden.


> erst recht wenn er aus irgend einem Plan erst die
> Knoten bestimmen muß bzw. die Abhängigkeiten zwischen
> den Knoten.

Plan?!
Normalerweise gibt man ja eine Netzliste ein; da sind
die Knoten schon irgendwie durchnummeriert, und die
(reellen oder komplexen) Impedanzen sind direkt als
Kantengewichte aufzufassen. Gegebenenfalls muss man
erstmal den Leitwert berechnen, daber das ist ja
trivial.
Für SEHR große Systeme kann man m.W. mit geschickter
Nummerierung der Knoten noch einiges beschleunigen;
das ist aber ein fortgeschrittenes Thema.


> Mal sehen, evtl. Aufwand zu groß für ein Spaßprojekt
> nur um rauszufinden wie's funktioniert.

Kommt darauf an, was Du Dir genau vorstellst.
Lineare, rein resistive Netzwerke mit DC dürfte nicht
schwierig sein; das geht mit reellen Zahlen.
Komplexe lineare Netzwerke mit AC erfordern komplexe
Zahlen; das geht aber noch mit Numerik der linearen
Algebra.

Bei komplexen NICHTLINEAREN Netzwerken (--> Dioden,
Transistoren) ist der Spaß allerdings zu Ende; das läuft
nämlich auf ein System nichtlinearer Differential-
gleichungen hinaus. Das ist m.W. das, was Spice bei der
Transientenanalyse berechnet.

Man kann auch hybride, "semi-numerische" Methoden
verwenden, wenn man die zulässigen Schaltungsstrukturen
einschränkt. Ich hatte mal ein Programm zur Filter-
simulation angefangen; das analysiert tatsächlich die
Schaltungsstruktur (Reihenschaltung, Parallelschaltung,
belasteter Spannungsteiler) und wertet die Übertragungs-
funktion dann punktweise aus. Das funktioniert bei Filtern
deshalb, weil die allermeisten klassischen Filter eine
Kettenleiterstruktur haben.

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
C. A. Rotwang schrieb:
> Yalu X. schrieb:
>> Die sind auf einem gewöhnlichen PC nicht in ein paar Sekunden
>> durchgenudelt, benötigen aber auch nicht gerade eine halbe Ewigkeit.
>
> Das Stichwort heisst 'sparse matrix

Ja, das hat ja Helmut oben schon geschrieben, woraufhin Ben es aber der
Einfachheit halber erst einmal klassisch versuchen wollte. Genau darauf
bezog sich meine Antwort.

Helmut S. schrieb:
> In Matlab oder Octave sieht das Wie folgt aus.
> G sei die Leitwertmatrix.
> I sei die Spaltematrix.
> P sei die Matrix mit den Potentialen.
>
> P = inv(G)*I

In Matlab und Verwandten gibt es auch Funktionen, um lineare
Gleichungsssysteme direkt, also ohne den Umweg über die Matrixinverse,
zu lösen:

Matlab: linsolve
Numpy:  linalg.solve
Scipy:  linalg.solve

Diese sind meist schneller und numerisch stabiler als die Multiplikation
mit der Inversen.

von MaWin (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Ben B. schrieb:
> Ich muß mal
> schauen wie man sowas am besten auf dem Rechner umsetzt. Solche Sachen
> sind manchmal mit Kopf und Papier einfacher als mit 16x 5Ghz...

Aber auch nur, wenn man nichts verstanden hat. Ansonsten Matrix und 
rechte Seite erstellen, ein Funktionsaufruf zum Lösen, fertig.

von Tobias P. (hubertus)


Bewertung
1 lesenswert
nicht lesenswert
Helmut S. schrieb:
> P = inv(G)*I

Yalu X. schrieb:
> Multiplikation
> mit der Inversen.

das ist in Matlab grundsätzlich keine so gute Idee. Besser:

A \ r

entspricht einer linksseitigen Multiplikation mit der Inversen (also 
inv(A)*r), während

r / A

eine rechtsseitige Multiplikation mit der Inversen ist (also r*inv(A)). 
Logisch ist es zwar dasselbe, aber erst die Inverse zu berechnen kann 
numerische Probleme bringen, weshalb der obige Operator \ bzw. der 
Operator / da gewisse Optimierungen vornimmt. Dabei werden dann auch 
dünnbesetzte, diagonale, dreieckige, ... usw. Matrizen unterschieden und 
automatisch die entsprechenden numerischen "Abkürzungen" genommen. Das 
Gleichungssystem

Ax = b

löst man also am besten

x = A \ b

Das gilt natürlich nur in Matlab. Ob das in Octave auch so funktioniert 
und dieselben Optimierungen vornimmt, kann ich nicht sagen.

Grüsse,
Tobias

: Bearbeitet durch User
Beitrag #6269425 wurde von einem Moderator gelöscht.
von Helmut S. (helmuts)


Bewertung
1 lesenswert
nicht lesenswert
Tobias P. schrieb:
> Helmut S. schrieb:
>> P = inv(G)*I
>
> Yalu X. schrieb:
>> Multiplikation
>> mit der Inversen.
>

Das verstehe ich jetzt aber nicht. Ich habe schon zig Gleichungssysteme 
auf diese Art gelöst und wüsste nicht was daran falsch sein soll.

http://www.ece.northwestern.edu/local-apps/matlabhelp/techdoc/ref/inv.html

von Tobias P. (hubertus)


Bewertung
1 lesenswert
nicht lesenswert
Helmut S. schrieb:
> Das verstehe ich jetzt aber nicht. Ich habe schon zig Gleichungssysteme
> auf diese Art gelöst und wüsste nicht was daran falsch sein soll.

es ist nicht falsch. Aber wie gesagt, wenn die Matrix A bestimmte 
Eigenschaften hat, kann man da was optimieren und je nach dem numerisch 
stabilere Algorithmen verwenden.
Ich weiss nicht, ob es bei neueren Versionen noch immer so ist, aber 
habs in meinem Matlab 2017 grade ausprobiert:
wenn ich in einem Skript den Befehl

inv(A)*b

verwende, dann wird auf der Zeile eine Warnung angezeigt. "Better use A 
\ b".

Der grund ist halt, dass die Berechnung der Inversen von A 
Rundungsfehler erzeugt, und die propagieren dann weiter, wenn man die 
Multiplikation mit b dann noch macht. Wenn aber A z.B. dreieckig ist, 
dann kann man sich die Berechnung der Inversen sparen und einen anderen 
Solver verwenden.

Guck hier unter "Algorithms": 
https://ch.mathworks.com/help/matlab/ref/mldivide.html
da ist ein ganz schöner PAP, was da alles erst geprüft wird, bevor das 
Glechungssystem gelöst wird. Im allgemeinen Fall wird A nicht 
invertiert, sondern die LU-Zerlegung wird zuerst berechnet. Diese hat 
dann vorteilhafte Eigenschaften, sodass die Lösung stabiler ist:

https://de.wikipedia.org/wiki/Gau%C3%9Fsches_Eliminationsverfahren#L%C3%B6sen_eines_LGS

von Helmut S. (helmuts)


Bewertung
1 lesenswert
nicht lesenswert
Tobias P. schrieb:
> Helmut S. schrieb:
>> Das verstehe ich jetzt aber nicht. Ich habe schon zig Gleichungssysteme
>> auf diese Art gelöst und wüsste nicht was daran falsch sein soll.
> es ist nicht falsch. Aber ...

Hallo Tobias,
danke für die guten Erklärungen. Ich werde mal schauen ob das auch in 
Octave geht.
Gruß
Helmut

von Tobias P. (hubertus)


Bewertung
1 lesenswert
nicht lesenswert
Helmut S. schrieb:
> Ich werde mal schauen ob das auch in
> Octave geht.

cool! berichte uns doch dann.

Grüsse
Tobias

von Helmut S. (helmuts)


Bewertung
1 lesenswert
nicht lesenswert
Tobias P. schrieb:
> Helmut S. schrieb:
>> Ich werde mal schauen ob das auch in
>> Octave geht.
>
> cool! berichte uns doch dann.
>
> Grüsse
> Tobias

Habe es gerade mit Octave 5.2.0 probiert. Es funktioniert.

>> format long
>> format compact
>> a=[1,5,3;5,2,1;3,2,7]
a =
   1   5   3
   5   2   1
   3   2   7

>> b=[2;1;4]
b =
   2
   1
   4

>> inv(a)*b
ans =
   6.617647058823529e-02
   7.352941176470595e-02
   5.220588235294117e-01

>> a\b
ans =
   6.617647058823528e-02
   7.352941176470597e-02
   5.220588235294117e-01

>> linsolve(a,b)
ans =
   6.617647058823528e-02
   7.352941176470597e-02
   5.220588235294117e-01

von Tobias P. (hubertus)


Bewertung
1 lesenswert
nicht lesenswert
Helmut S. schrieb:
> Habe es gerade mit Octave 5.2.0 probiert. Es funktioniert.
>


in der Tat, und man kann auch sehen, dass die letzten beiden dasselbe 
Resultat ergeben und beim ersten kleine Fehler vorhanden sind!
ok in diesem Beispiel sind die Fehler jetzt sehr klein. Wenn man aber 
sehr kleine und sehr grosse Zahlen gemischt hat, dann werden die 
numerischen Fehler z.T. einiges grösser. Ist mir mal aufgefallen als ich 
den Frequenzgang eines Quarzfilters fitten wollte. Dort hat man in den 
Matrizen pF und MHz teilweise gemischt - dann wirds spannend ;-)

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
0 lesenswert
nicht lesenswert
Hmmm gar nicht so leicht, ein Programm zu stricken, was ein vermaschtes 
Schaltbild ohne große menschliche Hilfe in eine berechenbare Matrix 
umstrickt. :(

von Egon D. (egon_d)


Bewertung
1 lesenswert
nicht lesenswert
Ben B. schrieb:

> Hmmm gar nicht so leicht, ein Programm zu stricken, was
> ein vermaschtes Schaltbild ohne große menschliche Hilfe
> in eine berechenbare Matrix umstrickt. :(

??? Liest Du überhaupt, was man Dir antwortet?

Für Computerrechnung geht man vernünftigerweise nicht von
einem Schaltplan, sondern von einer NETZLISTE aus!

von Yalu X. (yalu) (Moderator)


Bewertung
1 lesenswert
nicht lesenswert
Ben B. schrieb:
> Hmmm gar nicht so leicht, ein Programm zu stricken, was ein vermaschtes
> Schaltbild ohne große menschliche Hilfe in eine berechenbare Matrix
> umstrickt. :(

Wenn du in irgendeiner dokumentierten Form eine Netzliste hast, sollte
das nicht so schwer sein.

Oder möchtest du die Matrix bzw. die Netzliste aus einem Screenshot oder
Scan des Schaltplans erstellen? Das ist natürlich deutlich schwieriger.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
0 lesenswert
nicht lesenswert
Nein, nicht aus einem Scan. Aber wenn man es aus einem "programmierten" 
Schaltplan hinbekommt, wäre das schon praktisch. Ich meine so, daß alle 
Widerstände und die Verbindungen bekannt sind, man das ganze auch 
bildlich darstellen könnte, aber so, daß das Programm alleine daraus die 
relevanten Knoten bzw. diese Matrix erzeugen kann.

von Egon D. (egon_d)


Bewertung
0 lesenswert
nicht lesenswert
Ben B. schrieb:

> Nein, nicht aus einem Scan. Aber wenn man es aus einem
> "programmierten" Schaltplan hinbekommt, wäre das schon
> praktisch.

Hmm. Du hast nie "Grundlagen der Elektrotechnik" gehabt?


> Ich meine so, daß alle Widerstände und die Verbindungen
> bekannt sind,

Verdrehter ("perverser" :) Ansatz.

Maßgeblich sind die Begriffe der Graphentheorie, also die
Existenz von "... Elementen erster Art, die wir Knoten,
und Elementen zweiter Art, die wir Kanten nennen."

Das, was im Layoutprogramm "Netz", "Netzwerk" oder so heißt,
ist graphentheoretisch einfach ein Knoten. Knoten enthalten
keine Bauelemente.
Die Zweige, die die Bauelemente enthalten, sind graphen-
theoretisch die Kanten.

Die "Netze" (=Knoten) werden einfach durchnummeriert, wobei
die Reihenfolge egal ist. Ggf. muss man beim Bezugsknoten
("Masse", "GND",...) aufpassen.
Jede (!) Verbindungsstelle von zwei oder mehr Bauelementen
ist ein Knoten, der eine eigene Nummer bekommt.

Alle Kanten sind jetzt durch Angabe des Kantengewichtes
charakterisierbar; dieses Kantengewicht ist die Impedanz
bzw. Admittanz (Widerstand bzw. Leitwert), bei AC wird
diese Angabe komplex. Man muss daher nicht zwischen
ohmschen Widerständen, Spulen und Kondensatoren unter-
scheiden.

Die Kanten werden durch Nummer von Anfangs- und Endknoten
und das Kantengewicht beschrieben. Aus der Kantenliste
lässt sich direkt die Leitwertmatrix der KPA aufstellen.


> man das ganze auch bildlich darstellen könnte, aber so,
> daß das Programm alleine daraus die relevanten Knoten
> bzw. diese Matrix erzeugen kann.

Naja, wie schon gesagt: Es ist ungünstig, vom Schaltplan
auszugehen (und liege dieser auch elektronisch vor), weil
einige Layoutprogramme den Schaltplan nicht graphentheoretisch
in Knoten und Kanten strukturieren, sondern als eine Art
"Vektorgraphik mit zusätzlichen Kommentaren" auffassen. Es
ist dann schwierig, die Knoten zu extrahieren.
Es ist einfacher, von der Netzliste auszugehen, die das
Programm ja hoffentlich auch exportiert.

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
-3 lesenswert
nicht lesenswert
> Du hast nie "Grundlagen der Elektrotechnik" gehabt?
Du Egon, wenn man schon wieder solchen Blödsinn liest, vergeht einem die 
Lust auf sowas.

-- hat sich erledigt, Thread kann gelöscht werden.

Dankeschön!

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Ich habe mal ein rudimentäres Python-Progrämmchen (knotenanalyse.py)
zusammengeklopft, das eine Spice-Netzliste¹ einliest, daraus das
Gleichungssystem aufstellt und dieses löst. Fehler in der Eingabedatei
werden größtenteils mit Python-Exceptions quittiert ;-)

In LTspice habe ich ein Beispiel eingegeben (testschaltung.{asc,png}).
LTspice erzeugt aus der asc-Datei eine Netzliste (testschaltung.net).
Diese habe ich mit dem Python-Programm berechnen lassen:

$ knotenanalyse.py testschaltung.net 
  N002: 6.31559
  N006: 6.51187
  N005: 4.9148
  N003: 9.3832

Die Resultate stimmen mit den von LTspice berechneten (testschaltung.op)
überein.

Die Matrix G und die Vektoren I und φ habe ich im Programm wie in

  https://de.wikipedia.org/wiki/Knotenpotentialverfahren#Matrix_des_linearen_Gleichungssystems_aufstellen

benannt.

——————————————
¹) Es wird nur eine kleine, aber zu Demonstrationszwecken ausreichende
   Untermenge aller Spice-Features unterstützt.

: Bearbeitet durch Moderator
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
-1 lesenswert
nicht lesenswert
Wie weit ist Python von was verständlichem wie weiß nicht, PHP weg?
duck und wegrenn

Mal sehen ob mir das weiterhilft, kann leider weder Python noch C++.
Dann muß ich mich mal damit befassen wie ich von einem Schaltplan zu 
einer Netzliste komme.

Danke Dir auf jeden Fall für Deine Mühe, Yalu.

Edit für noch 'ne blöde Frage:
Wie schaut das Format für die Netzliste aus,
insbesondere die letzte Angabe pro Zeile/Bauteil?

: Bearbeitet durch User
von Egon D. (egon_d)


Bewertung
1 lesenswert
nicht lesenswert
Ben B. schrieb:

>> Du hast nie "Grundlagen der Elektrotechnik" gehabt?
>
> Du Egon, wenn man schon wieder solchen Blödsinn liest,

Welchen Blödsinn?

Da Du ja freiwillig kein Sterbensbeswörtchen zu Deinem
Wissenshintergrund verloren hast, interessierte mich,
worauf man aufbauen kann und was neu für Dich ist.


> vergeht einem die Lust auf sowas.

Das geht mir genauso.

Ich schreibe zwei ausführliche Antworten, und die einzige
Reaktion von Dir ist, beleidigt zu sein. Super.


> -- hat sich erledigt, Thread kann gelöscht werden.
>
> Dankeschön!

Weisst Du was? Vielleicht hast Du Recht, und ich sollte
meine Teilnahme im Forum auf das Lesen beschränken.
Ich muss mich von den Leuten, mit denen ich mein Wissen
teile, nicht auch noch zum Dank vollpampen lassen.

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Bewertung
1 lesenswert
nicht lesenswert
Ben B. schrieb:
> Wie weit ist Python von was verständlichem wie weiß nicht, PHP weg?
> duck und wegrenn

Mit PHP kann ich leide nicht dienen, das ist mir zu schwer.

> Edit für noch 'ne blöde Frage:
> Wie schaut das Format für die Netzliste aus,
> insbesondere die letzte Angabe pro Zeile/Bauteil?

Schau dir das angehängte Beispiel in meinem letzten Beitrag an.

V1  N001  0      5
R4  N002  N005  47

Der erste Wort (V1 bzw. R4) ist der Name des Elements. Das erste Zeichen
gibt den Elementtyp an (V=Spannungsquelle, R=Widerstand). Die Zeichen
danach (1 bzw. 4) dienen nur der Unterscheidung mehrerer Elemente des
gleichen Typs, sie haben keinen Einfluss auf die Simulation.

Das zweite und dritte Wort sind die Knoten, mit denen das Element
verbunden ist. Das können (fast) beliebige Strings sein. LTspice benennt
die Knoten – wenn nicht vom Benutzer vorgegeben – mit N001, N002, N003
usw. Der GND-Knoten heißt immer 0 und hat das absolute Potential 0V.

Das vierte Wort ist der Wert des Elements, bei einem V-Element also die
Spannung in Volt, bei einem R-Element der Widerstandswert in Ω.

Bei anderen Elementen variiert die die Bedeutung der Parameter etwas.
Ein Transistor bspw. benötigt mindestens fünf Angaben:

Q1 Kollektorknoten Basisknoten Emitterknoten BC547C

Der Elementtyp ist Q (= Bipolartransistor), statt zwei Anschlussknoten
müssen drei angegeben werden, und anstelle des Bauteilwerts tritt hier
ein Modellname (hier BC547C).

Mit einem * beginnende Zeilen sind Kommentare, mit einem . werden
Spice-Direktiven eingeleitet. Diese geben bspw. an, was genau berechnet
werden soll. Das in meinem Beispiel verwendete .op berechnet den
DC-Arbeitspunkt der Schaltung.

Das Format wurde bewusst so gewählt, dass Netzlisten mit wenig Aufwand
auch manuell erstellt werden können. Zur Zeit der Entstehung von Spice
stand den meisten noch kein grafischer Schaltplaneditor zur Verfügung.
Man zeichnete den Schaltplan also erst auf Papier, beschriftete jeden
Knoten mit einer Zahl oder einem kurzen Text und übertrug dann den Plan
Bauteil für Bauteil in die Spice-Datei.

Mehr über das Format findest du in den einschlägigen Dokumentationen im
Netz.

: Bearbeitet durch Moderator
von Helmut S. (helmuts)


Bewertung
2 lesenswert
nicht lesenswert
Ben B. schrieb:
> Mal sehen ob mir das weiterhilft, kann leider weder Python noch C++.

Die Netzliste lässt man sich von dem Schaltplanprogramm erzeugen.
Um aus der Netzliste die Matrix zu erzeugen kann man jede 
Programmiersprache nehmen die Strings verarbeiten kann - Basic, C, ... .

> Edit für noch 'ne blöde Frage:
> Wie schaut das Format für die Netzliste aus,
> insbesondere die letzte Angabe pro Zeile/Bauteil?

Das kann man sich in dem .net-file anschauen.

Refererenzdesignator Netz1 Netz2 Wert

Widerstände beginnnen mit R, Kondensatoren mit C, Spulen mit L. 
Spannungsquellen mit V, Stromquellen mit I.

V1 N001 0 5
R4 N002 N005 47
R9 N005 0 68
R7 N006 N005 39
R5 N003 N006 82
R10 N006 0 33
R1 N002 N001 12
R3 N004 N003 15
R6 N005 N001 56
R8 N004 N006 27
V2 N004 0 12
R2 N003 N002 22

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Bewertung
-2 lesenswert
nicht lesenswert
Verdammt, daß das der Wert des Bauteils ist, hätte man auch noch selbst 
erraten können. Ok, danke euch für eure Mühe, mal sehen was ich damit 
anfangen kann.

@Egon
> nicht auch noch zum Dank vollpampen lassen
Aber ich soll mich von Dir hier volle Breitseite anfurzen lassen oder 
was?! Das kannst Du mal sowas von vergessen. Wie man in den Wald 
reinruft, so schallt's auch wieder raus!

Da ist mir auch Deine fachliche Kompetenz völlig egal wenn Du gleich im 
ersten Satz so loslegst. Da habe ich keine Lust mehr, den Rest von 
Deinem Beitrag zu lesen. Das ist das gleiche Verhalten wie früher bei 
den Klassenclowns. Mit denen kam man am besten klar, wenn man ihnen 
gleich beim ersten Versuch, einen z.B. wegen meines ach so lustigen 
Namens schon am ersten Tag zum Opfer zu machen, erst mal ordentlich die 
Fresse eingebasht hat. Danach hatte man seinen Tadel - und seine Ruhe, 
weil der ganze Rest hat's bleiben lassen. Manche Leute scheinen das 
wirklich zu brauchen, damit bestimmte Areale ihres anscheinend noch 
mechanisch arbeitenden Gehirns wieder brauchbare Ergebnisse liefern. 
Gewissermaßen wie ein Neukalibrierung, vor allem der oberen Grenzwerte.

Mehr sage ich dazu nicht. Nur noch eines: Wenn Du mit mir diskutieren 
willst, dann gerne fachlich/sachlich, aber nicht so wie ey Du hast ja 
noch nicht mal Grundlagen in Elektrotechnik ... Nö hab ich nicht, 
scheint man für die Entwicklung eigener µC-Schaltungen oder 
Leistungselektronik (bspw. Schaltnetzteile oder Wechselrichter) dann 
wohl nicht zu brauchen.

-- Ende der Durchsage.

von kk (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich weiß zwar nicht, welches Programm du verwenden möchtest bzw. 
Programmiersprache, aber wenn du das Knotenpotentialverfahren mit 
Matrizen berechnen möchtest, dann würde ich dir Matlab empfehlen.

von Markus (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Ben B. schrieb:
> Du Egon, wenn man schon wieder solchen Blödsinn liest, vergeht einem die
> Lust auf sowas.

Hallo??? Du willst ein Netzwerk berechnen, beherrscht aber weder 
Grundlagen der E-Technik (wir sprechen vom 1. und teilweise vom 2. 
Semester!) noch Python oder C.
Wo sollen wir denn da anfangen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.