Variable vergleichen in Timer.Tick mit VB.Net

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Metall4You.

    Variable vergleichen in Timer.Tick mit VB.Net

    Hallo

    Mit einem Timer, Interval = 500 lese ich eine DOUBLE Variable welche sich teilweise ändert. Nun wenn ich einen neuen Wert erhalte möchte ich diesen vergleichen mit dem alten Wert
    den ich in eine PUBLIC Variable gespeichert habe. Ich erhalte jedoch immer den Wert 0, also die Werte sind immer gleich. Verwende folgenden Code in einem Timer.Tick Event.

    VB.NET-Quellcode

    1. Dim ldblTrimPosition As Double = FormatNumber(s1.trimelevatordegrees, 4)
    2. If ldblTrimPosition > fdblTrimPosition Then
    3. '************************************
    4. ' Trim UP
    5. '************************************
    6. fintTrimValue = 255
    7. ElseIf ldblTrimPosition < fdblTrimPosition Then
    8. '************************************
    9. ' Trim DOWN
    10. '************************************
    11. fintTrimValue = 1
    12. Else
    13. fintTrimValue = 0
    14. End If
    15. If fdblTrimPosition <> ldblTrimPosition Then
    16. fdblTrimPosition = ldblTrimPosition
    17. End If


    Bekomme immer fintTrimValue = 0, das heisst die Werte sind gleich obwohl wenn ich es debugge sie unterschiedlich sind.

    Danke für Eure Tipps

    Gruss Ramon

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

    Bitte formatiere dein Listing mit VB-Tag, damit man es besser lesen kann...

    Was mir auf die Schnelle auffällt:
    Du vergleichst Variable 'fdblTrimPosition' immer mit sich selbst, die ist immer gleich...
    Sorry - vergiss meinen letzten Satz - da habe ich mich verlesen...

    Also zuerst dein Listing ordentlich formatieren!
    Wie RFG zu sagen pflegt: Setzt einen Haltepunkt und guck dir die Variable an.

    Die If-Blöcke funktionieren, da musst du dir keine Sorgen machen.
    Es ist relevant wie ldblTrimPosition und fdblTrimPosition ihren Wert bekommen und ob das jeweils der Wert ist, den du dir vorstellst.
    Außerdem nutze Option Strict On
    Willkommen im Forum.

    Welche Werte nimmt denn s1.trimelevatordegrees überhaupt an? Minimum- und Maximum-Werte bitte angeben.
    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Das betrifft u.a. auch den VB6-Namespace: Statt FormatNumber nimm Math.Round.
    Die Bedingung in Zeile#18 kannst Du weglassen. Sie bringt keinen Vorteil. Belass es bei der fdblTrimPosition = ldblTrimPosition-Zuweisung.
    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.
    @Metall4You Ebenfalls: Willkomen im Forum. :thumbup:
    Zum Debuggen im Stidio hab ich hier was verzapft:
    Debuggen, Fehler finden und beseitigen
    Setze in Zeile 3 Deines Codes einen Haltepunkt, ziehe die Variablen ldblTrimPosition und fdblTrimPosition in das Überwachen-Fenster des Studios (üblicherweise ein Tab unter dem Quellcodefenster) und steppe Deinen Code durch.
    ====
    Kann esw sein, dass Du ein paar unwichtige Codezeilen Deines Originalcodes nicht gepostest hast?
    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!
    Guten Abend

    Danke für Eure Tipps.

    Hiermit sende ich meinen geänderten Code. Der Code läuft in einem Timer mit Interval 200.

    VB.NET-Quellcode

    1. Select Case CType(data.dwRequestID, DATA_REQUESTS)
    2. Case DATA_REQUESTS.REQUEST_1
    3. Dim s1 As Struct1 = CType(data.dwData(0), Struct1)
    4. Dim lintFlapsPosition As Integer = CInt(s1.flapsposition)
    5. lblFlaps.Text = lintFlapsPosition.ToString
    6. Dim ldblTrimPosition As Double = CDbl(s1.trimelevatorposition)
    7. lblTrimPosition.Text = ldblTrimPosition.ToString("F4")
    8. Dim ldblTrimIndicator As Double = CDbl(s1.trimelevatorposition)
    9. ldblTrimIndicator = CDbl(((ldblTrimIndicator * 180) / Math.PI) + 4)
    10. lblTrimIndicator.Text = ldblTrimIndicator.ToString("F2")
    11. '************************************
    12. ' Trim Wheels berechnen
    13. '************************************
    14. If ldblTrimPosition > fdblTrimPosition Then
    15. '************************************
    16. ' Trim UP
    17. '************************************
    18. fintTrimValue = 255
    19. ElseIf ldblTrimPosition < fdblTrimPosition Then
    20. '************************************
    21. ' Trim DOWN
    22. '************************************
    23. fintTrimValue = 1
    24. Else
    25. fintTrimValue = 0
    26. End If
    27. If fdblTrimPosition <> ldblTrimPosition Then
    28. '************************************
    29. ' Run Motor
    30. '************************************
    31. Dim lintIndex As Boolean = Set_Speed_TrimWheels(fintTrimValue, ldblTrimIndicator, lintFlapsPosition)
    32. If lintIndex = True Then
    33. fdblTrimPosition = ldblTrimPosition
    34. Else
    35. Me.ToolStripStatusLabel.Text = "Error: " & Err.Description
    36. End If
    37. End If
    38. Case Else
    39. Me.ToolStripStatusLabel.Text = "Unknown request ID: " & data.dwRequestID
    40. End Select


    Gruss Ramon
    Uuund ist der Fehler jetzt behoben oder nicht? Wenn ja, woran lag es?
    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.