Entwicklung eines softwaregesteuerten Prüfstandes

  • VB.NET

Es gibt 49 Antworten in diesem Thema. Der letzte Beitrag () ist von obersniggy.

    Ok, danke für den Tipp. Habs hinbekommen. Gibt es eigentlich eine Möglichkeit, ein Diagramm während der Messwertaufnahme "on the fly" zu erstellen? D.h., dass jeder aufgenommene Messwert darin nach und nach eingetragen und miteinander verbunden wird?

    LG
    Hallo,
    hat jemand eine Idee, wie ich ein Array innerhalb einer Timerprozedur pro Intervallzyklus jeweils einen Wert zuweise? Ich bekomme immer die Fehlermeldung, dass der Index außerhalb des Bereichs liegt.

    So sieht das Ganze ungefähr aus:


    Quellcode

    1. Private Sub Command1_Click()
    2. Dim wertArray() As Variant
    3. Dim timeArray(14) As String
    4. timeArray(1) = 50 '50 entspricht 5 Sekunden
    5. timeArray(2) = 50
    6. timeArray(3) = 50
    7. timeArray(4) = 50
    8. timeArray(5) = 30
    9. timeArray(6) = 30
    10. timeArray(7) = 30
    11. timeArray(8) = 30
    12. timeArray(9) = 30
    13. timeArray(10) = 30
    14. timeArray(11) = 30
    15. timeArray(12) = 30
    16. timeArray(13) = 30
    17. timeArray(14) = 30
    18. Do
    19. If bEnde = True Then 'wenn Ende-Button gedrückt wird, soll er die Schleife verlassen
    20. Exit Do
    21. End If
    22. Index = Index + 1
    23. wait = timeArray(Index) 'x Sekunden Timer, siehe timeArray
    24. Timer4.Interval = 100 'Intervall = 100ms
    25. Timer4.Enabled = True
    26. Do
    27. DoEvents
    28. If bEnde = True Then 'wenn Ende-Button gedrückt wird, soll er die Schleife verlassen
    29. Exit Do
    30. End If
    31. Set_Pump False 'Pumpe ein
    32. 'jetzt will ich eigentlich, dass er während Timer4 runtergezählt wird,
    33. alle 100ms (Interval) die FunktionRead ausführt und diese dem
    34. wertArray zuführt. Die Obergrenze (dynamisch) für step ergibt
    35. sich aus den 100ms, und da liegt wahrscheinlich auch mein Fehler.
    36. Wenn in timeArray z.B. 50 steht (entspricht 5 Sekunden), soll er
    37. alle 100ms FunktionRead ausführen und dem Array die Werte
    38. nacheinander zuweisen. Das wären nach der Formel
    39. "step = 1 To (timeArray(Index) * 10) + 1" für dieses Beispiel
    40. 50 Werte in den 5 Sekunden die er auslesen und dem Array zuweisen
    41. sollte. Aber irgendwas mache ich hier falsch. Ich bekomme immer die
    42. Fehlermeldung, dass dr Index außerhalb des Gültigkeitsbereichs liegt..:
    43. For step = 1 To (timeArray(Index) * 10) + 1
    44. read = FunktionRead
    45. wertArray(step) = FunktionRead
    46. Next step
    47. Loop Until wait = 0
    48. End Sub
    49. Private Sub Timer4_Timer()
    50. If wait > 0 Then
    51. wait = wait - 1
    52. End If
    53. End Sub


    Kann mir jemand helfen? Vielen Dank...
    Option Base statement is obsolete in VB.NET (This is going to be a major problem when we are porting out code from VB6 to VB.NET. This change is critically required to give interoperability between other .NET-enabled languages).


    OptionBase kenn ich nur noch von VB 6 und auch laut diesem Text gibt es das nicht mehr...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    Option Base statement is obsolete in VB.NET (This is going to be a major problem when we are porting out code from VB6 to VB.NET. This change is critically required to give interoperability between other .NET-enabled languages).


    OptionBase kenn ich nur noch von VB 6 und auch laut diesem Text gibt es das nicht mehr...


    Sorry, da ich anfangs vor hatte, in VB 2008 zu programmieren, aber ich mich dann doch dafür entschied, mit VB6 zu arbeiten, sollte der Thread evtl. dorthin verschoben werden (falls ein Mod mitliest).
    Du hast also völlig recht, Option Base 1 funktioniert mit VB6. Und da ich ja mit VB6 arbeite, müsste das in dem Fall richtig sein. Evtl. noch nen anderen Tipp?

    Gruß

    Edit: hmm, hast recht, laut dem Statement gibts da wohl Probleme. Mal sehen, ich werd die Arrays mal mit 0 beginnen lassen.
    Habe OptionBase 1 jetzt weggelassen, doch trotzdem bekomme ich "Laufzeitfehler "9" - Index außerhalb des gültigen Bereichs"...

    Anstatt das Array nach und nach mit Daten zu befüllen, könnte ich auch permanent die Werte innerhalb von 30 sec auslesen (so schnell wie möglich, unter Berücksichtigung einer bestimmten Reaktionszeit für das Gerät) und alle dann sofort addieren. Wenn das möglich ist, könnte mir jemand evtl. nen Code dafür schicken, wie ich das angehen kann?

    Ansonsten bliebe mir halt die Möglichkeit, das Array nach und nach zu füllen. Aber da hänge ich wie gesagt irgendwo (siehe Post weiter oben). Ich weiß nur nicht, wie ich das machen kann...

    Danke
    Es fehlt noch ein 2. Loop.

    Lass das Programm in der IDE laufen und sieh dir die Werte der Variablen step und Index nach dem Fehler an oder bau eine eigene Fehlerroutine mit rein, welche die Werte dieser Variablen im Fehlerfall anzeigt.

    VB.NET-Quellcode

    1. private sub Fehlertest()
    2. dim Wert(3) as integer
    3. dim index as integer
    4. on error goto Fehler
    5. Do
    6. index=4
    7. wert(index)=1
    8. loop
    9. Fehler:
    10. if err.number > 0 then
    11. msgbox "Index hat den Wert " & index
    12. end if
    13. err.clear
    14. on error goto 0
    15. end sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!