Grafik erzeugen ( Schaltbild)

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Grafik erzeugen ( Schaltbild)

    Hallo,

    bin neu hier also bitte nicht köpfen, falls ich das jetzt heir falsch erstelle.
    Meine Situartion.

    Ich bin Student im 2ten semester, wobei info nicht wirklich mein schwerpunkt ist. Für eine Semesterarbeit muss ich aber eine Blindstromkompensation mit VIsual Basic programmieren. Ich habe mir das nun so vorgestellt:

    Die Oberfälsche ist in 2 Spalten aufgeteilt , die eine als auswählseite und die andere als Optische anzeige des "gebauten schaltbildes". Z.B.: ich habe an jedem bauteil 3 auswahlkasten, wo das beauteil gesetzt werden soll, Beispiel wiederstand in hauptstrang. nun soll an eine feste position ein bild geladen werden. sobald ich dann das nächste bauteil anklicke soll dieses nun an der davor gehängt werden und und verbunden und so weiter. Quasi soll an ein grund linien gerüst images aeingebunden werden. und der die auswahlseite resetet wird um eine weitere zu treffen.
    Ich habe nun leider gar keien ahnung wie ich das umsetzen soll. ISt es überhaupt möglich, wie realisier ich das=? KAnn ich die grundschaltung als hintergrtundbild laden ( weiß nur wie ich die hintergrund farbe ändere)

    Währe super nett wenn ihr mir helfen könntet und ich hab mich einigermaßen verständlich ausgedrückt.
    Am besten du hängst mal eine kleine Skizze an, denn ein Bild sagt mehr als tausend Worte xD

    Das Zeichnen sollte kein Problem sein (siehe meine Signatur, GDI+ Tutorial). Mit .DrawImage kannst du dann deine Bilder zeichnen lassen. Viel wichtiger ist, dass du eine halbwegs brauchbare Datenstrukur aufbaust, denn sonst hast du später schöne Bilder aber die Berechnungen werden mühsam zu machen.

    Wie soll man sich den Schaltplan vorstellen? einfach nur eine Aneinanderreihung von Bauteilen oder gibt es womöglich noch mehr Abzweigungen?
    imageshack.us/photo/my-images/29/schaltbild.png/


    als beispiel. Wobei ich es besser fände wenn sich das bild nach und nach aufbaut. Die condensatoren, wiederstände und spulen sollen halt als bild eingefügt werden. MIt den werten, hab ich mir so überlegt das neben den auswahlfeldern wo das bauteil realisiert werden soll, ein eingabefeld besteht wo der wert der größe eingegeben wird. DIe berechnung zu programieren übernimmt ein komilitone. Ich muss nur die rein obtische generierung des schaltbildes machen und nachher die grafische ausgabe im form eines zeigerdiagramms
    Also das ähnelt dem Bild, dass ich auf dem Wikipedia-Artikel gesehen habe stark.


    Da Frage ich mich nur, ob es bei diesen wenigen Bauteilen bleibt oder ob mehrere dazu kommen können wie in dem rechten Bild...
    Wenn es mehrere werden musst du dir Gedanken darum machen, wie du die Bauteile untereinander verknüpft - und das wird auch für die Rechnung sehr wichtig.

    Wenn ich dich richtig verstanden habe gibt es eine fixe Anzahl von Bauteilen und du kennst die Position innerhalb des Schaltplans ebefalls. Nur um welches Bauteil es sich genau handelt und welche Werte dahinter stehen ist unbekannt und soll per GUI "eingetragen" werden?
    Das wäre sehr einfach und würde sich mit GDI (.Drawimage) und ein paar Linien (.DrawLine) sowie etwas Text (.DrawString) schnell machen lassen. Wenn es dem Schaltplan nur "ähneln" soll kannst du das sogar per Designer machen (Pictureboxen)...
    Als Effekt für das "nach und nach" zusammenbauen kannst du nicht gesetzte Bauteile - von denen du aber weist, dass sie dorthin müssen - grau oder nur schemenhaft darstellen.

    Da ich nicht weiß, was genau eine Blindstormkompensation ist und was da so alles anfällt kann dir nicht genau sagen wie du das coden solltest... bei einer Fixen Anzahl wird es wie gesagt sehr einfach - bei variabler Anzahl an Bauteilen kommt das Problem der verknüpfung dazu und es wird schwieriger
    Also erstmal vielen dan das du so schnell hier antwortest !!!!!

    ALso es werden nicht mehr verschiedene Bauteile außer den 3 werden. Und ihre größe soll per textbox einfach eingegben werden.
    Wie viele Bauteile im netzwerk schlussendlich entstehen ist variabel aber nicht mehr als 5. Nun ist aber nicht festgelegt ob 3 im hauptstrang udn 2 im neben oder 3 im nebenstrang. Die rechnerrei hinter den werten und die programmierung davon übernimmt wer anderes.

    Wie und wo sind den die funktionen zu finden die du mientest?!

    um nochmal genauer zu beschrieben was passieren soll bei meinem part:

    1 auswahl welches bauteil wohin soll und werteingeben und auf weiter klicken.
    2 auswahlseite reseten und rechts in das grundgerüst bidl des bauteils an der gewählten stelle einblenden
    3 das so weiter bis alle 5 bauteile verbraucht sind .

    sollten 2 bauteile in dne hauptstrang sollen , muss halt das 2te bauteil an die 2te stelle rücken sodass die beiden sich nicht überschneiden.

    TUt mir leid das ich hier nicht so gut klarkomme, aber ich hab wirklic hso gut wie keine ahnung muss es aber machen
    Ich würde das ganze als Datenstruktur/Dataset aufbauen. Eine Tabelle enthält die zu verbastelnden Bauteilsorten mit den Grafiken (Induktivität, Kapazität, Ohmsche Last, Draht senkrecht, Draht Abzweig oben,...).
    Eine weitere Tabelle würde Referenzen auf die im aktuellen Schaltbild verbauten Teile_ID mit ihren Daten(Ohms, Henrys und Farräder) enthalten.
    Nun muß man sich Gedanken machen, wie die Teile miteinander verschaltet sind. Als Elektriker bin ich es gewohnt, dass Stromlaufpläne immer in Pfaden von oben nach unten aufgebaut sind. Ergo oben + unten - oder eben wie hier bei AC Phase oben, Null unten.
    Die Verschaltung der Bauteile erfolgt immer parallel bzw. in Reihe zueinander, was sich mit boolschen Gleichungen ausdrücken ließe. Das obige Bild wäre dann:

    Quellcode

    1. //absolut Pseudo
    2. Begin 230V
    3. And C1 //entspricht Kondensator
    4. Or R1 //entspricht ohmschem Widerstand
    5. Ende Null
    Damit sind auch komplexe Schaltungen abzubilden. Das Oder (Or) würde hier bedeuten, dass der Strom sich aufteilt zwischen C1 und R1.
    Da sich dein Kollege um die Berechnung kümmern soll, mußt du ihm also nur so einen Spagetticode vorschmeißen. Auch der könnte in einer Tabelle stehen mit einem Verweis auf die jeweilige Bauteil_ID, die Schaltungsart zum Vorgängerdatensatz (Or, And) und dem Wert des Bauteiles (Ohms, Henrys und Farräder)
    Du mußt dann die Bildchen aus der 1. Tabelle verwenden (Bilder ins Raster zeichnen), um die bildliche Darstellung zu erzeugen und dabei die Bauteildaten i die Tabelle schreiben.
    Scheint mir ein komplexes Vorhaben zu sein. Beschäftige dich dafür vor Allem erstma mit der Datenstruktur im Dataset ohne Datenbank. Vernachlässige zunächst die graphische Darstellung und bastel dein Datenmodell (Obwohl das eigentlich von deinem Kommilitonen geliefert werden müßte, wenn der die Berechnungen macht). Alles beginnt mit den daten, erst dann kommt die Präsentation, wobei die Berechnung damit denn bereits fast fertisch ist.
    Erfinder des Rades hat zum Datenbanking hier im Forum zahlreiche hochinteressante und lehrreiche Tuts gebastelt.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    ein richtiger Designer für elektrische Schaltungen dürfte den Rahmen einer Semesterarbeit reichlich sprengen.

    Was möglich ist, wäre eine festverdrahtete Schaltung mit mw. 5 einheitlichen Super-Bauteilen.

    Unter SuperBauteilen verstehe ich Bauteile, die sowohl Widerstand, Kapazität als auch Induktivität sind, und diese 3 Parameter seien beliebig einstellbar.

    Gewissermaßen tauschst du eine Kapazität durch eine Induktivität aus, indem du die Kapazität auf 0 setzt, und die Induktivität auf den gewünschten wert.

    Auch eine LeitungsUnterbrechung kann eingegeben werden, indem R=999999999 gesetzt wird.

    Dazu ein Control basteln, bei dem die Schaltung immer gleich gezeichnet wird, nur die Bauteile zeichnen sich je nach eingestellten Werten unterschiedlich, inklusive Beschriftung.

    Im Dataset wäre das ziemlich einfach zu modellieren, einfach 2 Tabellen, die übergeordnete heißt Schaltung, mit PrimKey und Name, dass man verschiedene Schaltungs-Auslegungen unterscheiden kann.
    Der Schaltungs-Auslegung untergeordnet die 2. Tabelle "Bauteil", und jede Schaltung bekommt automatisch 5 untergeordnete Bauteile hinzugeneriert.

    Dem Control wird so ein Schaltung-Datensatz zugewiesen, und damit hats die 5 Bauteile und kann die zeichnen.
    Kann man sogar recht kunstvoll machen, dass bei jeder Datenänderung das Bauteil neu gezeichnet wird - das werden die Profs mögen, sowas ;).

    Jo, aber viel zu lernen: typisiertes Dataset, DatagridView, ownerdrawn Control - studierst du Programmieren oder Elektrotechnik?

    Ansonsten gibts bereits ganz ausgezeichnete Tools, mit denen man auch beliebige Schaltungen simulieren kann, mit allem Pipapo.
    Die können alles, nur nicht verschmoren.
    Ich studier Maschienenbau. Allerdings habe nwir in dne ersten 2 semestern Grundstudium mit Wirtschaftsingenieruen und elektotechnikern zusammen. An der eingabeart lässt sich leider nicht rütteln. Vorgabe ist nunmal völlig abewandelte schaltungen. Ich hab im team auch fertige Techniker die mit mir die Visuelle oberfläschedurchgesprochen haben, die programmieren auch die berechnung. Aber ich muss das halt mit den verschiedenen BAuteilen die verschieden gekoppelt sinddarstellen. WIe die die daten verarbeiten ist mir recht schnuppe ich muss das mit dem bild generieren nur hinbekommen und das die eingabe läuft.
    anbei eine simple lösung für die daten-seite der geschichte.

    links eine Auslegung und rechts die dazugehörigen Bauteile: 2 Widerstände (R), 2 Kapazitäten (c), eine Induktivität (L).
    Die Werte für X,y, Width und Height sind für die Positionierung auf der Zeichnung vorgesehen.

    Weitere Auslegungen können übers Menü CloneAuslegung zugefügt werden, dann wird die aktuelle Auslegung geklont mit allen Bauteilen.
    Alle Eigenschaften sind veränderlich, aber es kann nur über CloneAuslegung immer eine komplette Auslegung mit 5 Bauteilen zugefügt werden.
    Die Bauteile könne problemlos umgewidmet werden, zB könnteste einen Klon machen bei demde R1 in L2 umbenennst, den R-Wert auf 0 setzst und stattdessen die Induktivität auf 100 oder sonstwas.

    Man kann auch die Checkbox "AllowEditTemplate" checken, und dann kann man auch Datensätze löschen - entweder eine komplette Auslegung weghauen oder einzelne Bauteile entfernen oder zufügen.
    Aber das Entfernen einzelner Bauteile dürfte bei der Zeichnung Probleme bereiten, denn nach meiner Vorstellung ist ein festverdrahteter Schaltplan vorgesehen - ich weiß aber nicht, wie du den anlegen willst. Jedenfalls die Anschlüsse des Schaltplanes, und die Berechnung müssten bei flexibel gehaltener Bauteile-Verteilung wohl wesentlich mehr Intelligenz mitbringen, was Verdrahtung und Berechnung angeht - daher erstmal diese Einschränkung der Flexiblität.

    Nicht im Bild ist noch weiter rechts leerer Raum, wo die Zeichnung darzustellen wäre.

    Jo, und mit der Zeichnung dürfte das Theater richtig anfangen, also die Daten sind verfügbar: Abmaße, Benennung und Werte der Bauteile, und jetzt ist eine listenreiche Zeichnung zu implementieren, die das schön darstellt.

    hier noch Bild im editable-Modus:

    zum löschen auf die jetzt vorhandenen Zeilenköpfe klicksen und Entf drücken, zum Zufügen einfach zusätzliche Werte in die letzte leere Zeile eintragen
    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Hey, vieledne dank nochmal für die gnazen tipps. Hatte die letzten tage, wegen nem umzug, kein internet.
    ICh wüsste gern noch etwas:

    Ich habe jetzt verschiedene Checkboxen z.b.3 stück

    jetzt hab ich Ne abfrage geschrieben die verhindert das mehr als eine checkbox aktiviert werden kann, bzw da was passiert:

    VB.NET-Quellcode

    1. If check1.checked = true and check2.checked = true
    2. or check 1 .checked = true and check3.checked = true
    3. or check2.checked = true and check3.check =true then
    4. msgbox (" nur eins auswählen")
    5. .....


    Nun soll das aber dauerhaft im hintergrund kontroliert werden und nicht während wenn ich ein button drücke oder so.
    Meine frage nun wo muss ich den code hinschreiben!?

    Snake schrieb:

    jetzt hab ich Ne abfrage geschrieben die verhindert das mehr als eine checkbox aktiviert werden kann

    nimmt man gewönlich RadioButtons für.

    oder aber - datenbänkerischer - eine Listbox mit Single-Selection. Gugge etwa RadioButtonListbox - eine Listbox, die auf Radiobutton gepimpt ist.
    du musst in deiner Form auf alle drei Checkboxen doppelklicken, dann schreibst du da den Code rein...

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
    3. If CheckBox3.Checked = True Then
    4. CheckBox2.Checked = False
    5. CheckBox1.Checked = False
    6. End If
    7. End Sub
    8. Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
    9. If CheckBox2.Checked = True Then
    10. CheckBox3.Checked = False
    11. CheckBox1.Checked = False
    12. End If
    13. End Sub
    14. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    15. If CheckBox1.Checked = True Then
    16. CheckBox2.Checked = False
    17. CheckBox3.Checked = False
    18. End If
    19. End Sub
    20. End Class


    Eine muss natürlich schon im Designer aktiviert werden...
    Du zäumst das Pferd von hinten auf: Immer fröhlich erstmal ein Gui hinhauen, und dann drüber nachdenken, wie mans den Daten beibringt. Jo, da muß man sich gelegentlich neu eindenken - spätestens, wenn man nicht mehr weiter kommt.

    Aber du kannst natürlich auch weiter so wursteln: Alle CheckedChanged aller Checkboxen abonnieren, und dafür sorgen, dass immer nur eine Checked ist.
    Ist nicht ganz trivial, denn wenn du den CheckState der einen Checkbox änderst, dann feuert die ja gleich schon wieder das CheckedChanged-Event. gugge Alles über Events - Stichwort "Ereigniskette".

    (übrigens: je früher mans unternimmt, sich neu einzudenken, desto leichter fälltes)

    Und imo kommst du um datenbänkerisches Denken eh kaum herum mit deinem Schaltbild und den anhängigen Berechnungen.
    Und dann haste kunstvoll deine Checkboxen synchronisiert (was Radiobuttons automatisch tun), dann musstenoch feste was programmieren, was diese Checkstates denn eiglich bedeuten sollen.
    Hingegen datenbänkerisch geht man von der Bedeutung aus, und die Präsentation ergibt sich dann daraus, und ist überdies auch noch ziemlich austauschbar.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()