Wie Hintergrundprozesses ansteurn/programmieren?

  • VB.NET

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von egon.

    Dassis Glaubensfrage.
    Ich finde Regions bescheuert, und schaffs fast immer, zu vermeiden.
    1. Wird eine Datei zu groß, versuche ich vorrangig richtige Hilfs-Klassen zu schaffen, die TeilFunktionalität übernehmen können.
    2. Zweite Wahl sind partiale Klassen, aber auch nur, wenn ich deren Aufgabe klar kenntlich machen kann.
    3. 3. Wahl sind mir Regions.

    Aber 1) ist OOP - das annere ist beides Spagghetti.
    @egon Ich denke, der Sinn der Klasse Datenmodell sollte dir jetzt einsichtig sein, wenn du solche Fragen stellst.
    Danke für die Vorschläge von euch. Ja, der Sinn der Klassen ist mir klar. Bei dem "Datenmodell" bin ich mir nicht so sicher, da mir das Handwerkszeug im Umgang damit fast vollständig fehlt. Daher habe ich auch das kleine Beispielprojekt erstellt und um Hilfe bei einigen beispielhaften Grundfunktionen gebeten. Ich habe die Hoffnung, dass ich das dann selbst erweitern kann.

    Hintergrund der Frage nach der Aufteilung: Ich versuche mein Spaghettimonster im mehreren Schritten aufzulösen. Ich gehe alleine nicht an das bestehende Datenmodell ran und ware da erst auf Hinweise zu dem Testmodell aus Beitrag #39.
    Ich kann aber mein bestehendes Projekt jetzt schon in mehrere Abschnitte aufteilen, damit die spätere Neugestaltung leichter wird. Meine Idee ist, dass ich die Controls von den Sub und Func trenne und auch die inhaltliche Aufteilung nicht vergesse. Das Schaffen von Klassen wäre dann vermutlich der nächste Schritt. ... und das noch ohne das Datenmodell anzufassen.
    keine Ahnung ob das was bringt. Wahrscheinlich nur wenig, und wenn du dir noch ganz besondere Tricks einfallen lässt, wirds womöglich noch schlimmer.
    Spaghetti ist Spaghetti, da kann man auch durch schönes anordnen und gruppieren von Methoden, Feldern, Privat, Public, EventHandlern etc. nix machen.
    Weil was nütztes, wennde alle EventHandler beisammen hast, in den Zeilen 300 - 1000, und die müssen halt Methoden aufrufen - wo die Methoden sind: Zeilen 4000-5500.

    Es ist und bleibt ein hanebüchenes KreuzUndQuerUndDurcheinander.

    Und auch Regions und Partiale Klassen lösen das nicht:
    Die schiere Menge an Code bringt zwangsläufig mit sich, dass was zusammengehört (etwa Aufrufer und Aufgerufenes) gnadenlos unübersichtlich weit auseinander liegend codiert ist.
    So, nun habe ich mein bestehendes Programm so gut gegliedert wie ich konnte. Ihr findet es im Anhang. Vielleicht hilft es, damit ihr die Grenzen meiner Programmierfähigkeit besser einschätzen könnt.
    Neue Klasse sind noch nicht hinzugekommen. Es sind auch noch nicht alle Fehlerzustäne, die möglich sind, abgefangen worden. Über eine Ausgliederung der Diagrammerstellung, also eine Klasse "Diagramm" denke ich momentan nach. So könnte ein großer Teil ausgelagert werden oder zumindest klarer abgetrennt werden..
    Damit ihr das Programm testen könnt habe ich eine Zufallsfunktion für die Erzeugung einer Messkurve eingebaut.

    Wie machen wir jetzt weiter? Ich bräuchte Hilfe bei dem besprochenen Datenmodell und den restlichen Klassen. Ich meine so etwas wie eine "Anschubhilfe". Nicht das ich flasch verstanden werden. Natürlich möchte ich die Hauptarbeit selbst erledigen ;-).

    Die Klasse "Diagramm" müsste ich vermutlich selbst hinbekommen. Auch das Einblenden von Referenzverstärkerkurven ist sehr unschön gelöst und wird erst neu geschrieben, wenn wir bei den Klassen weiter sind.
    Bilder
    • Programm Gliederung.png

      127,22 kB, 1.472×1.647, 144 mal angesehen
    Dateien
    @egon Lösch die Klasse ApplicationEvents.vb, die ist leer.
    Was soll die Klasse Class_Chart_NF? Der Prozedur-Name Variablen_Konstanten ist ja absolut daneben. :D

    VB.NET-Quellcode

    1. Form1._CurveDatas_noise_NF(0).XValues(1) = 2
    ist ein NoGo, gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen

    VB.NET-Quellcode

    1. Public _CurveDatas_noise_NF As CurveData() = {New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData(), New CurveData()}
    machst Du besser alls List(Of CurveData), da kannst Du Instanzen anhängen, wenn es erforderlich ist.

    VB.NET-Quellcode

    1. .DefaultExt = "plt|txt"
    ist einfach falsch, entweder die eine oder die andere.
    Aus fünf mach zwei Zeilen:

    VB.NET-Quellcode

    1. ComboBox_COM_Steuerung_automatik.Items.AddRange(IO.Ports.SerialPort.GetPortNames)
    2. ComboBox_COM_Steuerung_automatik.SelectedIndex = 0
    Punkte_anwaehlen(...) ist ein NoGo. CheckBoxMesspunkte001.Checked = f001 usw.
    Mach eine Routine für sowohl alles True uns alles False und eine weitere Routine für den Spewzialzustand.
    Dein TabControl ist größer als die Form.
    Vielleicht fängst Du an und packst Daten in eine Datenklasse, dann weiter elementare Zugriffe auf diese Daten auch in diese Klasse.
    Und schmeiß den unsäglichen VisualBasic-NameSpace raus: Visual Studio - Empfohlene Einstellungen
    Das soll zunächst reichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ... machst Du besser alls List(Of CurveData), da kannst Du Instanzen anhängen, wenn es erforderlich ist.
    Das habe ich noch nicht verstanden.

    Wie kann man Chr(34)ersetzen? Ist das Convert.ToChar(34) ?

    ... Form1._CurveDatas_noise_NF(0).XValues(1) = 2 ist ein NoGo, gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Der Link überfordert mich. Ich habe nicht verstanden wie ich es richtig machen muss - sorry - auch nach dem dritten Lesen :(

    ...Vielleicht fängst Du an und packst Daten in eine Datenklasse, dann weiter elementare Zugriffe auf diese Daten auch in diese Klasse.
    Gerne, aber wie? Wie erfolgt dann der Zugriff. Ich meine verstanden zu haben, wie die Struktur aussehen muss, habe aber keine Ahnung von Handling.
    Kannst du mir da bitte nochmals eine Anschubhilfe geben.

    Die Klasse Class_Chart_NF sollte eine Vorbereitung auf eine Klasse "Diagramm" sein - ein Testobjekt.

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

    VB.NET-Quellcode

    1. Dim CurveDataList As New List(Of CurveData)
    2. '... später dann sooft Du brauchst:
    3. CurveDataList.Add(New CurveData)

    So entsteht eine beliebig lange Liste von CurveData-Instanzen, die Du auch per ForEach und LINQ durchgehen kannst. Kein starres Feld.

    Dein Chr(34)-Ersatzvorschlag klingt funktionierend.

    Wenn der Link Dich überfordert, dann geh ihn langsam durch, er ist wichtig. Wo kommst Du nicht weiter? Warum Du es nicht so machen solltest wie angekreidet, beantworte ich Dir so: Warum »Form1.Show« und Co. einem irgendwann ins Bein schießen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    egon schrieb:

    Wie kann man Chr(34)ersetzen? Ist das Convert.ToChar(34) ?

    VB.NET-Quellcode

    1. MessageBox.Show("""")
    2. MessageBox.Show("""""")
    3. MessageBox.Show("""x""")

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, hier nun ein erster Versuch um eure Hilfestellungen richtig anzuwenden. Ist die Arbeit mit den Klassen so richtig und gehe ich mit der Klasse Datenmodell so richtig um?
    In der Klasse Messung scheint sich ein Ringschluss eingeschlichen zu haben oder mache ich da einen Denkfehler?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim datenmodell As New List(Of Datenmodell)
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. datenmodell.Add(New Datenmodell)
    5. ' Wird so korrekt eine Rauschquelle hinzugefügt?
    6. datenmodell(0).Rauschquellen.Add(New Rauschquelle)
    7. ' Werden so korrekt Name, Hinweise und Messwerte der Rauschquelle hinzugefügt?
    8. datenmodell(0).Rauschquellen(0).Name = "Name zur Rauschquelle"
    9. datenmodell(0).Rauschquellen(0).Hinweise = "Hinweise zur Rauschquelle"
    10. datenmodell(0).Rauschquellen(0).Messwerte.Add(New Messwerte)
    11. ReDim datenmodell(0).Rauschquellen(0).Messwerte(0).XValues_freq(5)
    12. For i = 0 To 4
    13. datenmodell(0).Rauschquellen(0).Messwerte(0).XValues_freq(i) = i * 2 'wird das nicht irgendwann sehr lang und unübersichtlich?
    14. Next
    15. End Sub
    16. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    17. ' Ist das so richtig?
    18. datenmodell(0).Rauschquellen(0).Rauschquelle_werte_einlesen()
    19. End Sub
    20. End Class


    VB.NET-Quellcode

    1. Public Class Datenmodell
    2. Public MessVorgaenge As New List(Of Messvorgang)
    3. Public Rauschquellen As New List(Of Rauschquelle)
    4. End Class
    5. Public Class Messvorgang
    6. Public Messung As New Messung
    7. Public Rauschquelle As New Rauschquelle
    8. End Class
    9. Public Class Rauschquelle
    10. Public Name As String
    11. Public Hinweise As String
    12. 'Was ist nun richtig/besser?
    13. 'Public Messwerte As New Messwerte 'oder
    14. Public Messwerte As New List(Of Messwerte)
    15. Public Sub Rauschquelle_werte_einlesen()
    16. 'Wie kann ich hier Werte einer Rauchquelle einlesen?
    17. 'Wie wird aus dem Hauptprogramm richtig auf die Werte der Rauschquelle zugegrirren?
    18. 'z.B. (1, 2.0) (2, 2.2) (3, 1.9)
    19. 'Wie wird die Sub richtig aus dem Hauptprogramm aufgerufen?
    20. ' Geht das dann so? datenmodell(0).Rauschquellen(0).Rauschquelle_werte_einlesen()
    21. ' Wie wird dann sichergestellt, dass auf die richtigen Daten zugegriffen wird?
    22. End Sub
    23. End Class
    24. Public Class Messung
    25. Public VerstaerkerName As String
    26. Public Hinweise As String
    27. Public Anzahl_Messpunkte As Integer
    28. Public Einzelmessung_gueltig As Boolean
    29. Public Gesamtmessung_gueltig As Boolean
    30. Public Messwerte As New Messwerte
    31. ' Public Messvorgang As New Messvorgang 'Ist das hier nicht ein Ringschluss?
    32. End Class
    33. Public Class Messwerte
    34. Public XValues_freq() As Double 'Frequenzwert
    35. Public XValues_freq_Anzeige() As Double 'Frequenzwert aufbereitet für die Anzeige in Hz, kHz oder MHz
    36. Public YValues_NF() As Double ' Rauschzahl (bei einer Messung) oder ENR (bei einer Rauschquelle)
    37. Public YValues_NF_Anzeige() As Double
    38. Public YValues_NF_Part1() As Double
    39. Public YValues_NF_Part2() As Double
    40. Public YValues_NF_Part3() As Double
    41. Public YValues_NF_Part4() As Double
    42. Public YValues_ENR() As Double ' Stärke der Rauschquelle
    43. Public YValues_gain() As Double ' Verstärkung (bei einer Messung)
    44. Public YValues_gain_Anzeige() As Double
    45. End Class






    Zusatzfrage zum Forum: Wenn ich einen Beitrag schreiben will ist der Abschnitt zur Textbearbeitung (fett, unterstrichen, Code einfügen)grau und man kann nichts anklicken? Habt ihr vielleicht eine Ahnung woran das liegen kann?
    Kann man das so einstellen, dass es beim schreiben einen automatischen Zeilenumbruch gibt. Bei mir wird die Zeile eimmer länger.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „egon“ ()

    Bzgl. Ringschluss: Stell Dir die Frage: Hat/Beinhaltet ein Messvorgang eine Messung? Oder eine Messung einen Messvorgang? Entweder oder. Was ergibt für Dich Sinn?
    Textbearbeitung ausgeblendet? Hast Du [Quellcode] aktiviert? Scripte deaktiviert? Mach mal bitte nen Screenshot und poste diesen. Das mit der [Quellcode]-Vermutung würde auch das Zeilenphänomen erklären:
    Bilder
    • QuellcodeModeOnOff.png

      43 kB, 1.099×280, 121 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wie geschrieben 8| . Klick oben links auf [Quellcode], um jenen Modus zu deaktivieren.

    Edit: OK, geschrieben hab ich es zwar nicht, aber ich dachte, dass Du aufgrund der Bilder selbst draufkommst, dass Du mit dem Anklicken des [Quellcode]-Buttons den Modus wechseln kannst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Bzgl. des Ringschlusses schrieb ich ja bereits was.
    Dass Du Dir nicht sicher bist, ist anfangs normal. Um es vorweg zu nehmen: Es sollte (oder besser: muss) anders gehen. Denn:
    1. Ist-Zustand: Alle Klassenvariablen sind Public. Soll-Zustand: Eine Klasse verbirgt ihre Membervariablen und gibt nur das wichtigste preis. Sonst könnte man von überall die Werte ändern, auch wenn die dann total sinnlos werden.
    2. Datenmodell (komischer Name für eine Klasse) enthält eine Liste von Rauschquellen und Messvorgängen. Allerdings hat jeder Messvorgang selber eine Rauschquelle. Da stimmt was nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe die Klasse jetzt überarbeitet. Vielleicht verschlimmbessere ich auch...

    Ich bin mir auch noch nicht sicher, wie/wo die Messablaufsteuerung eingearbeitet wird, da ich im Umgang mit den Klassen noch sehr unsicher bin. Ich habe jetzt schon ziemlich viel darüber gelesen und stelle immer wieder fest, dass es nicht einfach ist sich von der alten Art zu programmieren zu lösen. Ohne Beispiele stecke ich im Sumpf und falle euch hoffentlich nicht allzusehr damit auf die Nerven.
    Auch habe ich nicht verstanden, wann mit As New Messwerte und wann mit As New List(Of Messwerte) gearbeitet wird.

    Zu den Rauschquellen:
    Es gibt mehrere Rauschquellen zur Auswahl mit einer beliebigen Anzahl von Punkten - unabhängig von von der Vermessung des Verstärkers. Da werden also Daten zu den Rauschquellen abgelegt werden müssen.
    Wenn eine Rauschmessung eines Verstärkers durchgeführt werden soll, muss eine Rauschquelle ausgewählt und deren Werte interpoliert werden, so dass für jeden Messpunkt ein berechneter Wert vorliegt. Jetzt muss man entscheiden, ob diese Daten bei der Rauschquelle oder beim Messvorgang abgelegt werden. Ich habe mich momentan entschieden, dass wenn ein Messvorgang gestartet wird die Daten der Rauschquelle den Frequenzpunkten der durzuführenden Verstärkermessung zugeordnet werden sollen. Wie greift man am besten auf diese Daten zu?

    Zum Messablauf:
    Auch hier benötige ich Beispiele im Umgang, damit ich Messablaufsteurerung programmieren kann.

    @VaporiZed schreibt: 1. Ist-Zustand: Alle Klassenvariablen sind Public. Soll-Zustand: Eine Klasse verbirgt ihre Membervariablen und gibt nur das wichtigste preis. Sonst könnte man von überall die Werte ändern, auch wenn die dann total sinnlos werden.
    Wie mach ich es dann besser. Auch hier komme ich ohne eure Hilfe leider nicht weiter - sorry.


    Hier die Klassen:

    VB.NET-Quellcode

    1. Public Class Messvorgang
    2. Public Messung As New Messung
    3. ' Hier gehört auch die Steuerung des Messablaufes hin - oder?
    4. Public MessVorgaenge As New List(Of Messvorgang) ' Macht das hier Sinn?
    5. End Class


    VB.NET-Quellcode

    1. Public Class Rauschquelle
    2. Public Name As String
    3. Public Hinweise As String
    4. 'Public Messwerte As New Messwerte 'oder 'Was ist nun richtig/besser?
    5. Public Messwerte As New List(Of Messwerte)
    6. Public Sub Rauschquelle_werte_einlesen()
    7. 'Wie kann ich hier Werte einer Rauchquelle einlesen?
    8. 'Wie wird aus dem Hauptprogramm richtig auf die Werte der Rauschquelle zugegrirren?
    9. 'z.B. (1, 2.0) (2, 2.2) (3, 1.9)
    10. 'Wie wird die Sub richtig aus dem Hauptprogramm aufgerufen?
    11. End Sub
    12. End Class


    VB.NET-Quellcode

    1. Public Class Messung
    2. Public VerstaerkerName As String
    3. Public Hinweise As String
    4. Public Anzahl_Messpunkte As Integer
    5. Public Einzelmessung_gueltig As Boolean
    6. Public Gesamtmessung_gueltig As Boolean
    7. Public Messwerte As New Messwerte
    8. Public Rauschquelle_ueberarbeitet As New List(Of Rauschquelle)
    9. 'Public Rauschquelle_ueberarbetet As New Messwerte
    10. End Class
    11. Public Class Messwerte
    12. Public XValues_freq() As Double 'Frequenzwert
    13. Public XValues_freq_Anzeige() As Double 'Frequenzwert aufbereitet für die Anzeige in Hz, kHz oder MHz
    14. Public YValues_NF() As Double ' Rauschzahl (bei einer Messung) oder ENR (bei einer Rauschquelle)
    15. Public YValues_NF_Anzeige() As Double
    16. Public YValues_NF_Part1() As Double
    17. Public YValues_NF_Part2() As Double
    18. Public YValues_NF_Part3() As Double
    19. Public YValues_NF_Part4() As Double
    20. Public YValues_ENR() As Double ' Stärke der Rauschquelle
    21. Public YValues_gain() As Double ' Verstärkung (bei einer Messung)
    22. Public YValues_gain_Anzeige() As Double
    23. End Class

    egon schrieb:

    Public MessVorgaenge As New List(Of Messvorgang) ' Macht das hier Sinn?
    Puh. Schwer zu sagen. Ich bin noch nicht ganz durch Deine Vorstellungen durchgestiegen. Ergibt es Sinn, dass eine Liste von Messvorgängen zum Eigentum eines Messvorgangs gehört?

    egon schrieb:

    Auch habe ich nicht verstanden, wann mit As New Messwerte und wann mit As New List(Of Messwerte) gearbeitet wird.

    Der Knoten bei Dir im Kopf kommt durch die in dem Fall ungünstige Namensgebung. Ein Klassenname sollte nie im Plural sein. Stell Dir eine Klasse mit dem Namen Autos vor. Die Instanziierung würde z.B. lauten:

    VB.NET-Quellcode

    1. Dim SuzukiSwift As New Autos
    Das ergibt beim Lesen keinen Sinn. Daher sollte es besser im Singular benannt werden: Class Auto, bzw. bei Dir Class Messwert. Dann wird auch klar, was der Unterschied zwischen Public X As New Messwert und Public Y As New List(Of Messwert) ist. X ist ein einzelner Messwert, Y eine beliebig lange Liste von Messwerten.

    VB.NET-Quellcode

    1. Public Sub Rauschquelle_werte_einlesen()
    2. 'Wie kann ich hier Werte einer Rauchquelle einlesen?
    3. 'Wie wird aus dem Hauptprogramm richtig auf die Werte der Rauschquelle zugegrirren?
    4. 'z.B. (1, 2.0) (2, 2.2) (3, 1.9)
    5. 'Wie wird die Sub richtig aus dem Hauptprogramm aufgerufen?
    6. End Sub

    Da fehlt mir die Info, was Du vorhast. Du kannst ja an diese Sub Daten so ziemlich jeglicher Art übergeben: Public Sub Rauschquelle_werte_einlesen(Wert1 As Integer, Wert2 As Double). Dann wird später diese Sub mit z.B. Rauschquelle.Rauschquelle_werte_einlesen(1, 2.0) aufgerufen. Welche Werte Du übergibst, welchen Typ sie haben, wieviele Werte die Sub erfordert und was Du mit den Werten dann machst, bleibt ja alles Dir überlassen.

    Fehlt nur noch, dass mir EdR für meine Beiträge steinigt, weil ich seine Argumentationsreihe durcheinanderwirble X/

    EDIT: @egon Zur letzten Klasse Messwert (ich nenn sie gleich mal um): Kann ein Messwert wirklich mehrere XValues_freq haben? Denn ich befürchte, dass Du die Pluralisierung von Messwert in die Klasse eingebaut hast. Es geht bei dieser Klasse aber doch m.E. darum, woraus ein einziger Messwert besteht. Die Erzeugung und Verwaltung mehrerer Messwerte erfolgt außerhalb der Klasse, z.B. mit einer List(Of Messwert).
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Danke. Wenn EdR das Modell wieder verändert und dies begründet lerne ich wieder etwas. Das ist doch nicht schlimm ;-).
    Das mit der Einzahl und der Mehrzahl habe ich versucht mit aufzunehmen. Auch habe ich die Klasse Messwert etwas vereinfacht.
    Ich bin mir auch noch nicht sicher, ob ich die Klasse Messvorgang benötige. Vielleicht stellt sich das erst später heraus.

    Die Werte für die Rauschquelle liegen in dieser Form vor: (1. Wert = Frequenz) (2. Wert = Stärke der Quelle)

    Quellcode

    1. 2D3B ENR=6,85dB ==> Name der Rauschquelle
    2. 1 6,85 ==> Datentyp decimal oder double
    3. 8 6,95 ==> Anzahl 5 bis 200 Wertepaare
    4. 10 6,90
    5. 14 6,75
    6. 20 6,85
    7. 32 6,80
    8. 60 6,80
    9. 80 6,95

    Diese Werte müssen irgendwie an die Klasse Rauschquelle übergeben werden.

    Reicht das an Infos? Ich möchte dich um folgende Beispiele/Routinen bitten: (Ist das möglich?)
    - Rauschquelle_werte_einlesen()
    In der Klasse Rauschquelle muss eine Instanz eröffnet werden. Die Rauschquelle soll den Namen "Rauscher1" bekommen und zwei Wertepaare enthalten. Simuliert durch (1 6,85) und (10 6,90)
    Nach .XValues_freq() und YValues_ENR()
    - Nun soll eine neue Instanz (Ist der Begriff richtig?) der Klasse Messung mit dem Namen .VerstaerkerName="Verst_1" des zu vermessenden Verstärkers, geöffnet werden - steht also für eine Messreihe.
    In dieser Instanz der Klasse Messung werden nun überarbeitet Werte der Rauschquelle abgelegt. Simuliert durch die beiden Wertepaare bei denen zum Y-Wert 1 hinzuaddiert wird.
    Wie löst man das dann mithilfe einer Sub?
    - Dann soll noch eine zweite Klassen-Instanz Messung (gemeint ist eine neue Messreihe) geöffnet werden. Später sollen einige Messreihen gleichzeitig im Diagramm dargestellt werden können.
    - Bitte Private und Public anpassen.

    Hier die neue Überarbeitung der Klassen

    VB.NET-Quellcode

    1. Public Class Messvorgang
    2. 'keine Ahnung ob nötig
    3. End Class


    VB.NET-Quellcode

    1. Public Class Rauschquelle
    2. Public Name As String
    3. Public Hinweise As String
    4. Public Rauschwerte As New List(Of Messwert) ' .XValues_freq() und .YValues_ENR()
    5. Public Sub Rauschquelle_werte_einlesen()
    6. ' ??????
    7. End Sub
    8. End Class


    VB.NET-Quellcode

    1. Public Class Messung
    2. Public VerstaerkerName As String
    3. Public Hinweise As String
    4. Public Anzahl_Messpunkte As Integer
    5. Public Einzelmessung_gueltig As Boolean
    6. Public Gesamtmessung_gueltig As Boolean
    7. Public Messwerte As New List(Of Messwert)
    8. Public Rauschquelle_ueberarbeitet As New List(Of Messwert)
    9. End Class


    VB.NET-Quellcode

    1. Public Class Messwert
    2. Public XValues_freq() As Double 'Frequenzwert
    3. Public YValues_NF() As Double ' Rauschzahl (bei einer Messung) oder ENR (bei einer Rauschquelle)
    4. Public YValues_NF_Part1() As Double
    5. Public YValues_NF_Part2() As Double
    6. Public YValues_NF_Part3() As Double
    7. Public YValues_NF_Part4() As Double
    8. Public YValues_ENR() As Double ' Stärke der Rauschquelle
    9. End Class

    Vermutlich wird mir EdR heftig widersprechen. Für mich gehören zu einem Messwert der X-Wert, der Y-Wert und alle Hilfsgrößen aus denen der Y-Wert berechnet wird. Das sind NF_Part1() bis NF_Part4() und YValues_ENR() (enthält den Wert für die Stärke der Rauschquelle bei genau dieser Frequenz - also eine wichtige Hilfsgröße). Vielleicht kann deshalb auch in der Klasse Messung auf Rauschquelle_ueberarbeitet verzichtet werden. Der Wert wird dann under Messwert YValues_ENR() abgelegt.

    egon schrieb:

    Für mich gehören zu einem Messwert der X-Wert, der Y-Wert und alle Hilfsgrößen aus denen der Y-Wert berechnet wird.

    Ja, aber warum sind denn das alles Arrays in Deiner Klasse??? Ein Messwert kann doch nur einen Frequenzwert haben, oder täusche ich mich da?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Rauschquelle As New Rauschquelle
    3. Public Sub InitialisiereRauschquelle()
    4. Rauschquelle.Rauschquelle_werte_einlesen(1, 6.85)
    5. End Sub
    6. '...
    7. End Class
    8. Public Class Rauschquelle
    9. Public Sub Rauschquelle_werte_einlesen(Frequenz As Integer, Stärke As Double)
    10. Dim NeuerMesswert As Messwert
    11. NeuerMesswert.XValue_freq = Frequenz 'Achtung! Umbenannt und kein Array mehr
    12. NeuerMesswert.YValue_ENR = Stärke
    13. Rauschwerte.Add(NeuerMesswert)
    14. End Sub
    15. '...
    16. End Class


    btw: Schreib konsequent deutsch oder englisch im Code. Ist nutze CamelCase, englisch. Und meine Variablennamen und Co. haben selten Abkürzungen. Finde Deinen eigenen konsequenten Weg.

    Und wieder stellt sich die Frage: Die Rauschquelle hat Messwerte und der Messvorgang auch. Ja oder nein: ist das für Dich sinnvoll?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    Da hast du recht und das habe ich auch vorhin entdeckt und gerade eingearbeitet. So wie im Spoiler dargestellt macht es irgendwie Sinn für mich. Nun fehlt noch eine Ablaufsteuerung in der mehrere Messreihen zusammen gefasst werden und auch der Messvorgang gesteuert wird.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Messreihe
    2. Public VerstaerkerName As String
    3. Public Hinweise As String
    4. Public Anzahl_Messpunkte As Integer
    5. Public Einzelmessung_gueltig As Boolean
    6. Public Gesamtmessung_gueltig As Boolean
    7. Public Messwerte As Messwerte
    8. 'Public Messwerte As New List(Of Messwert)
    9. End Class
    10. Public Class Messwerte
    11. Public XValues_freq() As Double 'Frequenzwert
    12. Public YValues_NF() As Double ' Rauschzahl (bei einer Messung) oder ENR (bei einer Rauschquelle)
    13. Public YValues_NF_Part1() As Double
    14. Public YValues_NF_Part2() As Double
    15. Public YValues_NF_Part3() As Double
    16. Public YValues_NF_Part4() As Double
    17. Public YValues_ENR_Quelle_interpoliert() As Double ' Stärke der Rauschquelle - interpolierte Werte
    18. End Class
    19. Public Class Rauschquelle
    20. Public Name As String
    21. Public Hinweise As String
    22. Public Index As Integer 'Hilfsgröße nur zum Testen - wird später gelöscht
    23. Public Anzahl_Werte As Integer
    24. Public XValues_freq() As Double
    25. Public YValues_ENR() As Double
    26. Public Sub Init() ' Werte_beim Programmstart einlesen
    27. ReDim XValues_freq(4)
    28. ReDim YValues_ENR(4)
    29. XValues_freq(1) = 1 ' hier kommt später eine Einleseroutine
    30. YValues_ENR(1) = 6.1 + Index
    31. XValues_freq(1) = 10
    32. YValues_ENR(1) = 6.2 + Index
    33. XValues_freq(2) = 20
    34. YValues_ENR(2) = 6.3 + Index
    35. Anzahl_Werte = 3
    36. End Sub
    37. Public Function Frequenzinterpolation(Frequenzpunkte() As Double) As Array 'ENR_Werte() As Double
    38. 'Es wird von außen ein Array mit Frequenzwerten übergeben und dann die
    39. 'Wert der Stärke (ENR) der Rauschuqelle aus den Informationen der
    40. 'Rauschquelle berechnet - genau für die gewünschten Frequenzpunkte
    41. Dim ENR_Werte(3) As Double
    42. 'Hier kommt die Rechnung
    43. Return ENR_Werte
    44. End Function
    45. End Class