Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   DigiSim - Ein Digitaler Simulator (https://www.delphipraxis.net/126620-digisim-ein-digitaler-simulator.html)

omata 29. Dez 2008 16:59


DigiSim - Ein Digitaler Simulator
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe gerade einen digitalen Simulator fertiggestellt. Die Anwendung ist aus einer Spielerrei hervorgegangen. Vielleicht interessiert sich jemand dafür, deshalb veröffentliche ich ihn hier einfach mal.

BUG 29. Dez 2008 17:14

Re: DigiSim - Ein Digitaler Simulator
 
Lustige Sache :thumb:

Aber zwei Sachen sind mir aufgefallen:
  • Wenn ich mit der Maus über einen Ausgang komme, wird die Schaltung nicht mehr angezeigt.
  • Gibt es eine Möglichkeit nicht benötigte (einzelne) Bauteile wieder zu löschen?
MfG,
Bug

EDIT: Ich nutze Vista (siehe unten).

ConstantGardener 29. Dez 2008 17:17

Re: DigiSim - Ein Digitaler Simulator
 
Hallo omata,

nettes Teil. :thumb: Besonders interessant für Anfänger um Logische Verknüpfungen zu üben/zu durchschauen.

mfg cg

Die Muhkuh 29. Dez 2008 17:23

Re: DigiSim - Ein Digitaler Simulator
 
Der Bug mit der Maus über dem Ausgang scheint nur bei Vista so zu sein.

omata 29. Dez 2008 18:11

Re: DigiSim - Ein Digitaler Simulator
 
Vielen Dank für die Rückmeldungen :hi:

Zitat:

Zitat von BUG
Wenn ich mit der Maus über einen Ausgang komme, wird die Schaltung nicht mehr angezeigt.

Das ist komisch, ich verstehe nicht, was da bei Vista problematisch sein soll. Im MouseMove-Event lasse ich die Schaltung neu zeichnen :gruebel:

Zitat:

Zitat von BUG
Gibt es eine Möglichkeit nicht benötigte (einzelne) Bauteile wieder zu löschen?

Ja, Bauteil mit der linken Maustaste nehmen und in den linken Bereich ziehen und dort loslassen.

himitsu 4. Jan 2009 15:08

Re: DigiSim - Ein Digitaler Simulator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Erstmal 'nen Lob, ist ganicht mal so schlecht geworden.

Aber eines solltest du (falls du dieses Projekt fortführen möchtest) besser mal machen ...
und zwar die "Bausteine" nicht statisch im Programm definieren und überall verstreut diese einzeln zu behandeln.

Besser wäre es die "Bauelemente" (deren Definition, Behandlung, Berechnung und das Zeichnen) dynamisch zu erstellen ... macht es leichter später mal was zu ändern und auch noch Neues zu definieren (gibt ja nicht nur diese Grundelemente).

Hatte mal vor vielen Jahren (bestimmt schon 9-10 Jahre :gruebel: ) selbst mal sowas versucht und ebenfalls (ok, wußte es damals auch nicht besser) alles überall, kreuz und quer fest programmiert in dem Programm und seiner Oberfläche verbaut.
Tja und als es anfing komplexer zu werden, war's aus, da ich einfach nicht mehr durchsah, was wie und wo passierte und ich somit die Fehler nicht mehr fand.


DigiComponents.pas
hier sind die Typendefinitionen und einige Grundfunktionen drin, sowie die Funktionen zur Speicherverwaltung

InternalComponents.pas
definiert die Komponenten
- nicht wundern, da sind 2 Versionen drin, aber mit dem selben Inhalt ... einmal direkt über die Grundfunktionen, ur speicherverwaltung und dann nochmal über 'ne Klasse, welche alles kapselt

Und ich hoff mal ich hab soweit keine "neuen" Fehler reingebaut, als ich alles für dich nochmal auf das "Grundlegende" reduziert hab (nur die von dir schon enthaltenen Bauelemente und nichts bezüglich Zoomen und sonstigen Größenänderungen in der Darstellung)

DC_GetMem/I_GetMem und DC_FreeMem/I_FreeMem sind eigentlich nur da, damit man später eventuelle Probleme ausschließen kann, welche z.B. beim Laden zusätzlicher Bauelemente (z.B. aus DLLs) bekommen könnte.

xZise 4. Jan 2009 15:30

Re: DigiSim - Ein Digitaler Simulator
 
Dem muss ich beiflichten. Mein Editor für DrawBall war zuerst ziemlich statisch (siehe hier im Forum), aber jetzt habe ich einfach eine Oberklasse und dann für besondere Objekte (z.B. Türen, da sie zwei Stati/Status ^^ annehmen können) Unterklassen. Nudn habe ich mich mit deinem Thema noch nicht so beschäftigt, und kann deshalb nicht sagen wie man das bei dir am besten macht (aber himitsu hat ja einen Ansatz).

Btw himitsu:
Zitat:

Zitat von himitsu
Erstmal 'nen Log,[...]

Ist das ein "Programmierergag" statt Lob Log zu sagen ^^ Oder einfach nur ein paar Zentimeter zu hoch :)

Aber ansonsten habe ich hier (Windows Vista Home Premium x64) das Problem mit dem Ausgang. Warum genau kann ich dabei nicht sagen. Was interessant ist, dass bei Raufziehen des Ausgangs es zuerst nicht weg war, aber nach ... 100px (?) war alles weg. ging man unter die Grenze zurück war alles in Ordnung.

MfG
xZise

DP-Maintenance 4. Jan 2009 16:08

DP-Maintenance
 
Dieses Thema wurde von "fkerber" von "Open-Source" nach "Freeware" verschoben.
auf Wunsch des Autors verschoben

omata 4. Jan 2009 16:11

Re: DigiSim - Ein Digitaler Simulator
 
Vielen Dank für diese Kommentare. Ich werde meinen Quellcode ab jetzt für mich behalten.

xZise 4. Jan 2009 17:47

Re: DigiSim - Ein Digitaler Simulator
 
Haben wir dich verärgert oder woher kommt der Sinneswandel?

MfG
xZise

linwerben 8. Aug 2024 19:41

AW: DigiSim - Ein Digitaler Simulator
 
Hi omata,
ich finde das Programm sehr gut. Versuche zur Zeit auch einen Logiksimulator zu erstellen, aber für einen
speziellen Anwendungsfall. Könnte was werden, wenn ich das Problem beim Starten der Simulation lösen würde.
Mir ist nicht klar, wie ich etliche Bausteine zeitlich aktualisieren kann, dass die Ausgänge auch richtigen Wert
haben. So, wie in deiner Beispielschaltung gezeigt, wird doch eine Aktualisierungsreihenfolge notwendig sein.
Das bekomme ich nicht hin, hast du da eine Idee?
PS: gibt es zu deinem Simulator ein gesamtes Projekt als Source zum Download. Wäre sehr hilfreich.
mfG
linwerben:)

Sinspin 9. Aug 2024 10:12

AW: DigiSim - Ein Digitaler Simulator
 
Du brauchst einen Takt, so wie das bei allen CPU's oder digitalen Chips gemacht wird.
Also sozusagen einen Zustand in dem alle Gatter ihren Zustand um 1 Bit ändern können.
Mit jedem Takt werden alle einmal aktiv und setzen einen neuen Zustand an ihrem Ausgang.

TiGü 9. Aug 2024 11:10

AW: DigiSim - Ein Digitaler Simulator
 
Der Ersteller des DigiSim war zuletzt vor 12 Jahren online und der Thread hier ist auch schon über 15 Jahre alt! :!:

linwerben 9. Aug 2024 19:22

AW: DigiSim - Ein Digitaler Simulator
 
Zitat:

Zitat von Sinspin (Beitrag 1539666)
Du brauchst einen Takt, so wie das bei allen CPU's oder digitalen Chips gemacht wird.
Also sozusagen einen Zustand in dem alle Gatter ihren Zustand um 1 Bit ändern können.
Mit jedem Takt werden alle einmal aktiv und setzen einen neuen Zustand an ihrem Ausgang.

Danke für die Antwort.
Aber, wenn der Eingang nicht aktuell ist kann auch der Ausgang nicht richtig berechnet werden. Um den Ausgang von
AND2 richtig zu bestimmen, müssen erst alle Bausteine vor diesem auf Grund der Eingänge bestimmt werden.
Das ist aber mein Problem. Es müssen ja nicht immer alle Bausteine neu berechnet werden. Wie kann man das machen.
mfG
linwerben

Sinspin 9. Aug 2024 19:57

AW: DigiSim - Ein Digitaler Simulator
 
Klar, nach dem einschalten des Stromes herscht immer erstmal Chaos. Das ist ja auch der Grund warum man aus Speicher schon was lesen kann, auch wenn es nur das Rauschen des Universums ist.
So ist das auch bei einfachen FlipFlops / Gattern. Reale Daten liegen nur an der ersten Schicht an. Dann dauert es einige Takte bis "hinten" ein Ergebnis raus kommt.
Einmal gesetzte Zustände verändern sich ja nicht mehr. Bzw. werden bei jedem Takt ohne Zustandsänderung am Eingang nur erneuert.
Bei CPU's die ohne extra Innenleben daherkommen ist das ja auch so. Raus kommt ein Ergebnis erst nach einigen Takten.

Ich kann mich noch erinnern als wir in der Ausbildung selber FlipFlops erstellen und verdraten durften um daraus Zählgatter mit Ausgabe auf einer 7-Segment Anzeige zu basteln.

blawen 9. Aug 2024 23:18

AW: DigiSim - Ein Digitaler Simulator
 
Zitat:

Zitat von Sinspin (Beitrag 1539699)
Klar, nach dem einschalten des Stromes herscht immer erstmal Chaos. Das ist ja auch der Grund warum man aus Speicher schon was lesen kann, auch wenn es nur das Rauschen des Universums ist.
So ist das auch bei einfachen FlipFlops / Gattern. Reale Daten liegen nur an der ersten Schicht an. Dann dauert es einige Takte bis "hinten" ein Ergebnis raus kommt.
Einmal gesetzte Zustände verändern sich ja nicht mehr. Bzw. werden bei jedem Takt ohne Zustandsänderung am Eingang nur erneuert.
Bei CPU's die ohne extra Innenleben daherkommen ist das ja auch so. Raus kommt ein Ergebnis erst nach einigen Takten.

Getaktete Schaltungen (FlipFlops, etc.) haben normalerweise einen Reset Eingang, insofern herscht kurz nach dessen Aktivierung ein definierter Ausgangszustand - diesen braucht es auch, wer weiss, was die Schaltung sonst machen würde. Von "es geschieht gar nichts" bis zur "Selbstzerstörung" liegt alles drin ;-)

Logikgatter wiederum brauchen keinen Takt. Sobald ein Pegel anliegt, wird der dem Gatter entsprechende Ausgangswert nahezu unverzögert ausgegeben (ns/us).
Im Bild vom Beitrag #1 sind es reine Logikgatter. Hier muss nicht mit irgendwelchen Zeitlichen Abläufen gearbeitet werden, dies ist ist auch nicht unbedingt einfach, weil man schlicht die Abhängigkeiten der einzelnen Gatter kennen muss. Bei sich ändernden Schaltungen nicht wirklich einfach.

Mit Hilfe der Boolschen Algebra und den De Morganschen Gesetzen geht es deutlich einfacher, wobei dies auf dem Papier einfacher umsetzbar ist, als mit ein paar Codezeilen.

himitsu 9. Aug 2024 23:25

AW: DigiSim - Ein Digitaler Simulator
 
Zitat:

Zitat von blawen (Beitrag 1539704)
nahezu unverzögert ausgegeben (ns/us).

Mindestens Lichtgeschwindigkeit, da das elektrische Feld im Leiter auch so schnell ist, aber es kann in gewissen Medien auch langsamer sein, vor allem dann, wenn andere physikalische/chemische Vorgänge eine Rolle spielen.

Bei einfachen "digitalen" Simulatoren nimmt man einfach 2 Zustände und schert sich oft nicht um sowas.
Einfach den alten Zustand nehmen, von einem anfangs definierten Initialzustand ausgehend, und daraus den nächsten Zustand bestimmen/berechnen, indem (notfalls) alle Teile der Schaltung durchlaufen werden.
Ausgang = neuer Zustand
Eingänge = alter Zustand

Dann kopieren und von Vorne.

Natürlich kann man auch noch Verzögerungen einfügen, wo einzelne Komponenten intern mehrere Zwischenschritte behandeln, bevor es wirklich am Ausgang ankommt, um unterschiedlich schnelle Bauteile bissl "realistischer" zu handhaben.



Analoge Schaltungen zu simulieren, da wird es dann richtig spaßig, da Laufzeiten und ganz feine Signalunterschiede eine extrem große Auswirkung haben können.

linwerben 25. Feb 2025 19:52

AW: DigiSim - Ein Digitaler Simulator
 
Hallo omata oder andere User,
ich benötige von DigiSim die gesamten Files des Projektes (dpr, res, frm und pas), um diese in Delphi zu laden und einige Programmabläufe nach zu gehen. Ich schreibe gerade einen eignenen Simulator für eine speziellen Anwendung. Da habe ich noch einige Probleme, die sie bereits gelöst haben.

Vielen Dank!
linwerben

Phoenix 27. Feb 2025 12:37

AW: DigiSim - Ein Digitaler Simulator
 
Ich befürchte nach 16 Jahren wird das schwierig.

Aber probier mal die .exe mit KI zu diassemblen. Scheint mit VB4 Code zu funktionieren, siehe: https://www.reddit.com/r/ClaudeAI/co...claude_37_and/

Ich wäre gespannt, ob das funktioniert. :cyclops:

linwerben 28. Feb 2025 18:05

AW: DigiSim - Ein Digitaler Simulator
 
Hi User,
habe es mal mit einen Decompiler probiert. ja, geht, aber das Ergebnis ist unbefriedigend.Die Quellen wären das einzig ware.
Gibt es den User omata denn noch? Ich dachte das Internet vergißt nichts, dann sollte doch noch jemand die Quellen abgelegt haben.
Wenn nicht, dann muß ich mit meinen Wissen weiter probiren.
Danke für die Antwort.
Gruß linwerben


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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