algorithmen zur digitalen schaltungssimulation



  • hallo,

    ich schreibe seit einiger zeit an einem simulator für relais/schützschaltungen.
    man erstellt zuerst die schaltung per maus und simuliert dann das ganze dann per knopfdruck. diese art schaltung ist immer ein stromlaufplan dieser art:

    http://www.e-schaltplan.de/stern.gif

    der vorteil: pro strompfad gibt es nur einen verbraucher und dieser ist immer an unterster stelle. das ganze macht die simulation einfacher. ich simuliere primär nur den logischen status der bauelemente, sekundär auch den gesamten stromverbrauch der baugruppe. ich parse zuerst den schaltplan rekursiv und erstelle daraus dann eine objektstruktur die ich simulieren kann. das ganze funktioniert auch prima.

    jetzt würde ich aber noch gern den stromverbrauch pro relais-schalter bestimmten um zu wissen, wann der max. zulässige schaltstrom des relais überschritten wurde und dieses durchbrennt. das problem hierbei ist das finden eines guten algorithmus beim parsen des schaltplans, welcher dann im endeffekt zu jedem relais-schalter ein array von zeigern auf alle daran angeschlossenen verbraucher liefert (das können u.u. mehrere sein, welche über verteilerknoten nach dem relaisschalter folgen).

    meine frage jetzt: kennt jemand hier irgendeinen algorithmus der diese aufgabe erfüllt bzw. dazu geeignet ist?



  • ok, hab jetzt selbst was gefunden. im grunde nicht so schwer. da ich ja sowiso jeden strompfad einzeln komplett durchparse, kann ich folgenen "algo" anwenden:

    1. parsen: wenn das bauelement "relais schalter" auftritt dann lege einen neuen tabelleneintrag für dieses bauelement an
    2. parsen: wenn im weiteren verlauf des parsens des aktuellen strompfades (auch rekursiv) ein bauelement mit verbraucher-eigenschaften auftritt, dann füge dieses der tabelle zu dem bauelement bei 1 hinzu
    3. simulation: nach abschluss jedes kompletten simulationsdurchlaufs (die bauelemente aller y-ebenen wurden simuliert) prüfe pro tabelleneintrag wieviele der dort genannten verbraucher aktuell den status "geschalten bzw. stromduchflossen) hatten und addiere deren strom zum eigenen "aktuell durchflossener strom". wenn dieser wert dann am schluss >als der relais-auslösewert ist -dann ist das bauelement durchgebrannt.

    man sollte eben nicht gleich aufgeben, nur weil einen die lösung nicht SOFORT anspringt. 🤡



  • könntest Du beim Parsen des Stromlaufplans nicht eine spice-Knotenliste herstellen lassen und mit spice simulieren lassen?



  • wenn das so einfach wäre. allein die nötigen infos dazu zu finden. wie gesagt es geht ja -und jetzt auch mit den zusätzlichen simulationsinfos. spice wäre natürlich sehr geil, vor allem wo man damit dann das exakte verhalten der schaltung auch im analogen bereich simulieren könnte. ich habe aber bisher keine infos dazu, wie ich eine spice-knotenliste erstelle bzw. welches format spice erwartet. dann als zweiten punkt: wo kriege ich eine kostenlose spice-version her, die ich in eigenen kommerziellen projekten verwenden darf (dll)?
    optimal wäre eine spice dll, die multithreaded arbeiten kann.



  • schon nach spice netlist im Internet gesucht?

    Und mit "in kommerziellen Projekten verwenden darf" meinst Du "in kommerziellen Projekten verwenden darf, ohne Quellcode oder object files mitzuliefern" oder etwas Anderes?



  • ja, schon. aber irgendwie werden da nur netlist-beispiele und die passenden schaltungen gezeigt, nicht aber nach welchen regeln diese listen erstellt wurden.
    z.b. frage ich mich, wie die verknüpungen zwischen den bauelementen ausgefrückt werden. für mich sieht das absolut nicht intuitiv aus.

    hier z.b.:
    http://www.allaboutcircuits.com/textbook/reference/chpt-7/example-circuits-and-netlists/

    mit kostenlos meinte ich, das ich z.b. eine dll nutzen darf ohne irgendwelche einschränkungen.

    p.s. ok, verstehe jetzt wie er die listen aufbaut. wie das ganze allerdings bei komplexen schaltplänen aussieht -keine ahnung. ich wäre für einen link dankbar. 🙂



  • tenim schrieb:

    jetzt würde ich aber noch gern den stromverbrauch pro relais-schalter bestimmten um zu wissen, wann der max. zulässige schaltstrom des relais überschritten wurde und dieses durchbrennt. das problem hierbei ist das finden eines guten algorithmus beim parsen des schaltplans, welcher dann im endeffekt zu jedem relais-schalter ein array von zeigern auf alle daran angeschlossenen verbraucher liefert (das können u.u. mehrere sein, welche über verteilerknoten nach dem relaisschalter folgen).

    meine frage jetzt: kennt jemand hier irgendeinen algorithmus der diese aufgabe erfüllt bzw. dazu geeignet ist?

    Ehrlich gesagt verstehe ich das Problem nicht. Der "Schaltplan" ist doch nur eine grafische Darstellung. Man sollte davon ausgehen, dass dahinter noch ein Graph oder eine aehnliche Datenstruktur steht, mit der man komfortabel arbeiten kann.



  • Ehrlich gesagt verstehe ich das Problem nicht.

    sieht so aus. hast du überhaupt meine posts komplett gelesen und nicht nur überflogen? frage nur, weil ich mich eigentlich ziemlich klar ausgedrückt habe.

    kurzform:
    hinter dem schaltplan steht natürlich eine datenstruktur die ich beim parsen des schaltplans erstelle und dann simuliere. es ging in meiner initialfrage nur um ein algorithmus der bestimmte eigenheiten des schaltplans effizient in die datenstruktur/objektkette umwandelt. das alles ist jetzt gelösst, ich bin später selbst die lösung gekommen. steht auch alles in meinen vorherigen posts.


Log in to reply