AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[Theorie] Stromkreise

Ein Thema von PaddyL · begonnen am 8. Jul 2008 · letzter Beitrag vom 9. Jul 2008
Antwort Antwort
Benutzerbild von PaddyL
PaddyL

Registriert seit: 23. Nov 2007
Ort: Lautertal
34 Beiträge
 
#1

[Theorie] Stromkreise

  Alt 8. Jul 2008, 18:37
Eigentlich kein Delphi spezifisches Problem, mehr theoretisch. Ich programmiere gerade an einem Programm zur Simulation von elektrischen Stromkreisen in Delphi. Das Problem ist, dass ich erstmal testen muesste ob selbige geschlossen sind. Meine bisherige Loesung ist vom Minuspool der Battery einfach eine Funktion laufen zu lassen, die dann die selbe Funktion der nachsten Schaltungskomponente aufruft und wenn sie dann irgendwann mal am Pluspool der Battery ankommt true zurueckgibt (all den Weg bis zum Anfang) oder eben false falls es keine naechste Komponente gibt.
Nochmal zur Verdeutlichung:

Code:
[Battery.TestConnection]
Result := Lampe.Ping;

[Lampe.Ping]
if [...] exists then
  Result := [...].Ping
else
  Result := False;

bis irgendwann wieder

[Battery.Ping]
Result := True;
Geht Klasse, bei Reihenschaltungen natuerlich:
http://img75.imageshack.us/img75/9572/screen1aj7.png

Bei Parallelschaltungen ist das Problem das er sich jedesmal aufteilt, der Ping, und dann immer im Kreis laeft auf der Suche nach einem Rueckgabewert. Der Ping teilt sich auf und teilt sich erneut beim zweiten Multiconnector (Multiplug im Programm genannt), was eine Kettenreaktion ausloesen wuerde (siehe Screen unten). Bisher hab ich es mal so gemacht, dass Verbindungen auf denen bereits gesendet wurde nichts mehr empfangen koennen, damit es nicht staendig abstuerzt, aber ich braechte natuerlich ne richtige Loesung.

http://img514.imageshack.us/img514/2228/screen2ix5.png

Ich hab mal ne Binary des unfertigen Programmes angehaengt damit ihr euch es besser vorstellen koennt.

Hier noch ein paar Codeauszuege wenn auch, da es so offensichtlich nicht geht und ich neue Loesungen suche, nicht unbedingt noetig:
Delphi-Quellcode:
{ A Ping alwas emerges from the negative connector
  of a battery throught all the other components
  until it reaches the battery's positive connector }

function TPTElectronicComponent.Ping(Sender: TPort): Boolean;
var
  I: Integer;
  Results: array of Boolean;
begin
  // First we need to find the Sender's ID and then
  // send the Ping to all Ports with none or the streaming
  // attribute. The Sender's attribute will be set to streamed
  // and each none will become a streaming

  // Prepare the Results
  SetLength(Results, Length(ecConnectors));

  Sender.Connector.Flag := pfStreamed;

  for I := 0 to High(ecConnectors) do
  begin
    if (ecConnectors[I].Flag = pfNone) then
    begin
      if ecConnectors[I].Used then
      begin
        ecConnectors[I].Flag := pfStreaming;
        if ecConnectors[I].Used then
        begin
          Results[I] := ecConnectors[I].Connector.Parent.Ping(ecConnectors[I]);
        end;
      end;
    end;
  end;

  // Sum up the results
  Result := False;
  for I := 0 to High(Results) do
  begin
    Result := (Result or Results[I]);
  end;

  ecPingOk := Result;
end;
Delphi-Quellcode:
{ Start a ping from the negative connector }
procedure TPTBattery.StartPing;
begin
  baOwnTest := True;
  if ecConnectors[1].Used then
  begin
    ecConnectors[1].Connector.Parent.Ping(ecConnectors[1]);
  end;
  baOwnTest := False;
end;

{ A Ping alwas emerges from the negative connector
  of a battery throught all the other components
  until it reaches the battery's positive connector }

function TPTBattery.Ping(Sender: TPort): Boolean;
begin
  Result := False;
  if (Sender.Connector = ecConnectors[0]) and (baOwnTest) then
  begin
    Result := True;
  end
  else if Sender.Connector = ecConnectors[0] then
  begin
    if ecConnectors[1].Used then
    begin
      Result := ecConnectors[1].Connector.Parent.Ping(ecConnectors[1]);
    end;
  end;
end;
Hoffe jemand kann mir helfen
Angehängte Dateien
Dateityp: rar toolbox_131.rar (283,4 KB, 44x aufgerufen)
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von ich2
ich2

Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
 
#2

Re: [Theorie] Stromkreise

  Alt 8. Jul 2008, 19:50
servus,

wollte das Programm mal ausprobieren, aber leider startet es erst gar nicht (Fehler im Anhang)!

Windows XP SP2

gruß
Miniaturansicht angehängter Grafiken
image1_411.jpg  
Wissen ist Macht. Das ändert aber so gut wie nichts an der Übermacht der Dummheit.
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: [Theorie] Stromkreise

  Alt 8. Jul 2008, 19:59
Bei mir läufts, aber die Verbindungen her zustellen ist mir zu fummelig. Naja, ohne Schalter gehts. Hab wahrscheinlich versucht die Kabel an den falschen Enden zu fixieren oder so.
Da gibts doch Algorithmen für (A*, Pathfinding). Das da alle Möglichen Wege abgegangen werden ...
Miniaturansicht angehängter Grafiken
capture-1_189.png  
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#4

Re: [Theorie] Stromkreise

  Alt 8. Jul 2008, 21:25
Moin, moin,

Gefällt mir, vielleicht solltest du aber die Funktion zum öffnen und schließen noch gleichzeitig mit in das Popup-Menü verfrachten, eildieweil nicht jeder eine mittlere Maustaste hat..

Bekommen die Leitungen, die du schon abgelaufen bist, einen Wert, der sagt, dass sie schon berücksichtig worden? Du musst ja sowas wie einen Fluss erzeugen...
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: [Theorie] Stromkreise

  Alt 8. Jul 2008, 22:14
Oha, da hast du dir ja gleich was Schwieriges ausgesucht.
Es gibt ja die Knotenregel und die Maschenregel in elektrischen Netzwerken.
Mit diesen Regeln wird ein lineares Gleichungssystem aufgestellt und gelöst.
http://www.uni-kassel.de/fb16/tet/ww...1_Seite_A4.pdf
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: [Theorie] Stromkreise

  Alt 8. Jul 2008, 23:30
In der Tat, einfach sieht das nicht aus. Vielleicht hilft die das weiter.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: [Theorie] Stromkreise

  Alt 8. Jul 2008, 23:50
ich finde das programm schon ziemlich gut...evtl lässt sich das mit meinem circuitboard kombinieren
auch wenn das herstellen meiner Meinung nach auch ziemlich fummelig ist

//edit: link korrigiert

Gruß Frank
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: [Theorie] Stromkreise

  Alt 9. Jul 2008, 06:57
Moin,

jetzt auch nur ein theoretischer Ansatz zur Lösung. Ich würde bei der Erstellung der Verbindungen gleich eine Flussrichtung mit angeben. Das kann durchaus automatisch geschehen. Funzen tut das natürlich nur, wenn du mit der Stromversorgung beginnst. Sonnst mußt du vor dem Finden offener Verbindungen erst für alle Verbinder und Bauteile die Flussrichtung (Strom) ermitteln. Das kannst du natürlich einmal vom Plus und einmal vom Minuspol aus tun. Danach hast du mit der Recursion in Paralelschaltungen keine Probleme mehr, da gegen die Flussrichtung nicht weiter gesucht wird.

Praktisch gesehen erstellst du also für jeden Verbindungspunkt eines Elementes eine Polarität.

[Edit] siehe Anhang; mit Leerzeichen lassen sich keine Zwischenräume definiert ausfüllen und es ist kein Zusammenhang mehr zu erkennen [/Edit]

Weiter gesucht wird nur verbundenen Elementen, die unterschiedliche Polarität haben. Ob du das nun Spannungsquellen bezogen machst oder nicht, ist für den vorliegenden Fall dann eigentlich egal.

Gruß oki

[Edit] Meine Zeichnung sollte eigentlich so aussehen )siehe Anhang) [/Edit oki]

Nachtrag: Wenn du die Schaltung auch bei Aktionen wie Schalter auf/zu usw. prüfen willst macht es grundsätzlich Sinn den Stromfluss nach jeder Ändereung zu prüfen/definieren. Solltest du weitere Bauelemente wie Halbleiter mit einbauen, so halte ich das an der Stelle dann für unabdingbar, da durch diese Zweige ohne Stromfluss oder nach Betätigen von Schaltern mit umgekehrtem Stromfluss enstehen können.
Miniaturansicht angehängter Grafiken
schaltplan_185.png  
42
  Mit Zitat antworten Zitat
Benutzerbild von PaddyL
PaddyL

Registriert seit: 23. Nov 2007
Ort: Lautertal
34 Beiträge
 
#9

Re: [Theorie] Stromkreise

  Alt 9. Jul 2008, 21:19
@oki: Eigentlich keine so schlechte Idee. Ich lass vorher einen Algorithmus durchlaufen der den Multiplugs sozusagen im Voraus sagt wohin sie zu leiten haben damit alles passt, dann loest sich das Problem ganz gut und ich kann meinen bisherigen Ansatz mit etwas Erweitern beibehalten.
Ich werd mich aber nochmal in den anderen Vorschlag reinarbeiten, mal sehen wie ich das loesen kann.

@_frank_:
Fummelig? Naja ist ne ein 11x11 grosses Feld rund um den eigentlichen Connector, so problematisch fand ich es eigentlich nicht. Hab mal ne Option eingebaut um den gehoverten Connector hervorzuheben, sollte einfacher sein zum selektieren. Wahrscheinlich haette ich das Programm sowieso als Open Source freigeben wenn es ein wenig weiter entwickelt waere, deshalb mal der Source im Anhang (Delphi 7, BSD Lizenz). Was genau macht dein Circuitboard denn? Mein Programm soll wenn es fertig ist eklektische Schaltungen aller Art simulieren koennen (also im begrenzten Rahmen der verfuegbaren Komponenten wozu noch Transistoren, Dioden, Wiederstaende etc. dazukommen sollen, wenn ich Stromstaerke und Spannung eingebaut habe.
Angehängte Dateien
Dateityp: rar toolbox_769.rar (319,3 KB, 15x aufgerufen)
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#10

Re: [Theorie] Stromkreise

  Alt 9. Jul 2008, 21:29
was mir aufgefallen ist (warum es wohl so fummelig war) ist, dass start und endpunkt gleich sein können...also eine verbindung mit sich selbst...
daher hat es öfters nicht geklappt, aber man konnte per delete connection die (nicht sichtbare) verbindung löschen.weiterhin kam es mir so vor, als wenn man z.b. von einem pol der batterie nur einen pin des schalters anschließen konnte.

das drehen würde ich auch nur in 90° schritten machen, sonst dauerts ewig

mein Circuitboard ist ein einfaches layoutprogramm für lochrasterplatinen. die idee war, dass man mit deinem Programm einen funktionsfähigen stromlaufplan entwickeln kann und diese daten in Circuitboard importieren kann, um gleich die passende platine zu erstellen.
du kannst das programm über den SVN-Tree downloaden (code->svn browse->trunk->exe+ini->download).

zu deinem eigentlichen Problem...
ich würde vielleicht versuchen jedem connectionpunkt (komisches Wort ) einen double-wert zu verpassen welcher das Spannungspotential darstellt.bei einer verbindung (auch über kreuz) ist das potential überall gleich. über einem widerstand kannst du so gleich die spannung ausrechnen, welche darüber abfällt, so sollte auch eine parallel-schaltung möglich sein. die lampe leuchtet, wenn der potentialunterschied größer als die benötigte spannung ist.
sind widerstände parallel geschaltet, musst du erst deren gesamtwiderstand berechnen um da potential ausrechnen zu können. aber prinzipell von plus nach minus.

ich hoffe, das hilft dir bisschen weiter...

Gruß Frank
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz