![]() |
Bibliothek zur komplexen Schaltungsberechnung
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Für alle, die komplexe Schaltungsberechnung mit Widerständen, Kondensatoren und Spulen in Delphi suchen: meine Bibliothek berechnet diese Schaltungen und bietet einige Zusatzfunktionen wie z.B. die Berechnung von Resonanzfrequenzen. All jene, die den Quelltext sehen möchten ohne Delphi öffnen zu wollen seien auf das ![]() Lizenz: Open Source; solange mein Name im Header bleibt (als ursprünglicher Autor o.ä.) kann der Code modifiziert werden. Wird der Code in einem Programm verwendet bitte in der About-Box und der Readme (falls es eine gibt) einen entsprechenden Hinweis. Verwendung in Shareware oder anderen kommerziellen Projekten ist nicht gestattet. Der Code ist noch etwas Beta, da nicht alles getestet ist. Freue mich über Anregungen aller Art :) Dust Signs PS. Beispielcode ist im Anhang nicht dabei! |
Re: Bibliothek zur komplexen Schaltungsberechnung
Moin,
wirklich sehr gut (Idee, Ausführung & Programmierstil). Aber trotzdem habe ich eine kleine Frage. Wieso muss GlobalCircularFrequency im Interface-Teil als globale Variable angelegt werden? Das kann doch auch mit in die Klasse TCustomCircuitElement. Oder sehe ich da jetzt was falsch. MfG Thorsten |
Re: Bibliothek zur komplexen Schaltungsberechnung
Eher noch in TCircuitElementGroup... darüber könnte man nachdenken. Die Idee dahinter war folgende: meist berechnest du eine einzige Schaltung - und da ändert sich die Frequenz nicht ;)
Dust Signs //EDIT: ich meine z.B., dass der erste Kondensator in der Schaltung einen Wechselstrom mit gleicher Frequenz abbekommt wie der zweite ;) |
Re: Bibliothek zur komplexen Schaltungsberechnung
Ja, das war mir schon klar.
Nur was ich nicht verstehe ist, warum du deine wunderbare OOP-Struktur mit einer globalen Variable zerschiessen musst? Und mir ist noch etwas aufgefallen... Die Elemente mussen doch alle einen Wert bekommen. Überschreibe doch den Konstruktor deiner Elemente mit einem eigenen, der dann auch gleich den Wert des Bauteils initalisiert. Dann ist das Einrichten eines neuen Elementes einfacher. aus
Delphi-Quellcode:
wird dann
r := TResistor.Create;
r.ElementValue := 2200; g.AddElement(r);
Delphi-Quellcode:
Über ElementValue kann man immer noch den Wert verändern.
g.AddElement(TResistor.Create(2200));
Zur Zeit ist FElementValue nämlich nicht initalisiert. (wenn man ElementValue vergisst) Dieses Vergessen geht über einen eigenen Konstruktor nicht! MfG Thorsten |
Re: Bibliothek zur komplexen Schaltungsberechnung
Das wäre zwar schön, hätte aber einen entscheidenen Nachteil: ich könnte TCircuitElementGroup nicht mehr von TCustomCircuitElement ableiten, was aber für die Verschachtelung notwendig ist... oder welchen Bauteilwert hat deiner Meinung nach eine solche Gruppe :P
//EDIT: hab eine Lösung. Sehr elegant, dein Vorschlag - vielen Dank :). Dauert noch ein bisschen bis ich den ersten Beitrag update - mom. Dust Signs |
Re: Bibliothek zur komplexen Schaltungsberechnung
Ok, du hast es selber gemerkt.
Musste das auch gerade mal testen. Du bist wahrscheinlich auf die selbe Idee gekommen (zwei ein Gedanke) Bin gespannt auf deine Erweiterungen... MfG Thorsten |
Re: Bibliothek zur komplexen Schaltungsberechnung
Mögliche Erweiterungen: Stern- und Dreiecksschaltungen. Eventuell Funktionen, um direkt von einem Bauteil oder einer Bauteilgruppe den Strom/die Spannung bei jeweils gegebener anderer Größe direkt zu berechnen. Sonst noch Vorschläge?
Dust Signs PS.: Update complete ;) |
Re: Bibliothek zur komplexen Schaltungsberechnung
Sorry, muss aber noch mal nerven!
in deinem Beispielcode, den du in dem anderen Forum (leider nicht hier) gepostet hast, wird deine TCircuitElementGroup (g) nicht wieder freigegeben. Ist das dein erwähntes Speicherleck? MfG Thorsten |
Re: Bibliothek zur komplexen Schaltungsberechnung
g wird doch automatisch freigegeben :spin: Siehe circcalc.pas, Zeile 103f ;)
Delphi-Quellcode:
Dust Signs
for i := Low(FElements) to High(FElements) do //Free all elements
FElements[i].Free; |
Re: Bibliothek zur komplexen Schaltungsberechnung
Ja, die Inhalte (Elemente) von g werden freigegeben. Und was ist mit g selbst?
MfG Thorsten |
Re: Bibliothek zur komplexen Schaltungsberechnung
Am besten lässt sich das im Debugger verfolgen:
g2 hat 2 Elemente: den Kondensator und g (eine weitere Gruppe -> Verschachtelung) Wenn ich jetzt g2 freigebe, wird (Zeile 103) der Kondensator vernichtet und anschließend Free von g aufgerufen (zweites Element). g.Free zerstört alle seine Elemente (R, L, C) und anschließend sich selbst. Danach zerstört sich g2 selbst. Klar soweit ;) Dust Signs |
Re: Bibliothek zur komplexen Schaltungsberechnung
Das mag ja alles sein.
Aber, ich werde das jetzt mal an deinen Code (aus dem anderen Forum) zeigen...
Delphi-Quellcode:
MfG
procedure TCircuitCalculationForm.FormCreate(Sender: TObject);
var g: TCircuitElementGroup; begin //Dummy-Prozedur um Funktionalität zu testen! g := TCircuitElementGroup.Create; <-- wo wird diese Zeile freigegeben? with g do begin Parallel := true; AddElement(TResistor.Create(2200)); AddElement(TCoil.Create(0.3)); AddElement(TCapacitor.Create(8E-6)); end; with TCircuitElementGroup.Create do begin Parallel := false; AddElement(TCoil.Create(0.4)); AddElement(g); with ComplexEditorFrame1 do begin Initialize; SetReadOnly(true); SetPhasor(Impedance); //Ergebnis sollte 6,9113 + j248,7774 sein end; Free; end; end; Thorsten |
Re: Bibliothek zur komplexen Schaltungsberechnung
Zeile 15: g ist ab diesem Zeitpunkt ein Element von g2 und wird beim Freigeben von g2 auch freigegeben ;). Oder ist es doch ein Speicherleck ^^. Debugg einfach mal ;)
Dust Signs |
Re: Bibliothek zur komplexen Schaltungsberechnung
Ok, jetzt habs ich auch kapiert.
nein, alles ok - sorry MfG Thorsten |
Re: Bibliothek zur komplexen Schaltungsberechnung
Liste der Anhänge anzeigen (Anzahl: 1)
Bin im Moment dabei, eine Visualisierungsunit für die Schaltungen zu schreiben :). Ist leider noch ziemlich Beta - aber hier mal ein Preview. Hab den Rest des Fensters nicht weggeschnitten, aber die weiße Fläche mit den Schaltelementen sieht man ja auch so ;) als Preview sozusagen ;)
Dust Signs |
Re: Bibliothek zur komplexen Schaltungsberechnung
Hallo Dust Signs!
Zuerst mal Danke für Deine Arbeit. Werd ich gleich mal testen. Beim grben Überlesen fiel mir folgendes auf: Zitat:
Werde das alles ert aml testen. Die Fragen kommen später. Weiter so schöni |
Re: Bibliothek zur komplexen Schaltungsberechnung
Zitat:
Dust Signs |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz