Auslesen des Tischmultimeters Uni-Trend UT 803

  • VB6

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Auslesen des Tischmultimeters Uni-Trend UT 803

    Ich möchte gerne die Daten des Tisch-Multimeters Uni-Trend UT 803 (Website: uni-trend.com/en/product/2014_0724_678.html - Handbuch: uni-trend.com/uploads/soft/wan…o/UT803(CE)-Manual-en.pdf) via Visual Basic 6 auslesen.

    Leider bieten weder der Händler noch der Hersteller eine Dokumentation dafür an.

    Ist irgendjemandem mal eine Info darüber oder noch besser ein funktionierender Quellcode über den Weg gelaufen? Vermutlich benutzen alle Geräte der UT800er Serie das gleiche Protokoll.

    Es ist mir eigentlich egal, in welcher Sprache der Quellcode geschrieben ist, VB 6 wäre nur der Idealfall. VB.NET, C# oder jede andere Sprache sind auch OK. Das würde ich mir schon übersetzen.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Gibts da nich ma ne Lib dazu?

    Bzw ich seh da ned ma irgendeinen Port(USB, LPT oder derartige) mit dem du das Teil auslesen kannst
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ooohhh...verdammt..sry, hab nur bis seite 20 geblättert :whistling: :rolleyes:
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    Gibts da nich ma ne Lib dazu?

    Wieso "nicht mal"? Das wäre ja der Idealfall!Leider habe ich gar nichts gefunden.

    Blöd bei dem Gerät ist, dass ein Anschluss per USB keinen COM-Port erzeugt. Daher muss ich per RS232-USB-Adapter gehen. Natürlich könnte ich auch direkt den USB-Port ansprechen, aber davon habe ich nicht den geringsten Schimmer. COM-Port-Programmierung hingegen ist mir bekannt.

    Aber das ist nicht das aktuelle Problem. Im Moment muss ich erstmal wissen, wie ich die ankommenden Daten überhaupt umwandeln muss, um den Wert des Messgeräts zu erhalten.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Ich habe mir auf jeden Fall bereits alles von der verlinkten Seite heruntergeladen. Grundsätzlich eine sehr gute Ressource!

    Ich hatte aber noch nicht so viel Zeit, das Zeugs durchzuarbeiten. Das Programm dort, welches auch funktioniert, ist Open-Source (leider nur C++). Aber vielleicht komme ich mit der Library weiter. Ich melde mich auf jeden Fall in Kürze dazu zurück.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Kannte ich bisher nicht. Ich lade es mal runter.

    EDIT: Scheint nur das zu sein, was dem MM auch schon als CD beiliegt.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hier mal eine erste Rückmeldung:
    Dieses Programm "dmm.exe" zeigt leider nur ca. alle 40 Sekunden einen Wert an. Im Quellcode steht auch was davon, dass ausgerechnet das UT803 Probleme macht. Vermutlich kommt daher die seltene Datenübertragung. Demnach würde es vermutlich nichts bringen, den Quellcode von C++ nach VB zu übersetzen. Allerdings haben wir nun das Gerät via RS232-Schnittstelle über einen USB-Adapter angeschlossen und mittels des Programms "Tera Term VT" ausgelesen und dann kommen die Messwerte interessanterweise im Klartext. Einfacher geht's nun wirklich nicht. Eine kontinuierliche Datenübertragung funktioniert in jedem anderen Programm als dmm.exe ebenfalls.

    Am kommenden Wochenende werde ich das Auslesen programmieren, dann melde ich mich nochmal zurück.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    So, hier nun die versprochene Rückmeldung. Vorab: Das Programm läuft. ;)

    Da ich von der USB-Schnittstelle gar keine Ahnung habe und dies scheinbar auch komplizierter ist als via RS232, habe ich, wie schon erwähnt, das Multimeter UT-803 über einen Adapter von RS232 auf USB angeschlossen. Allerdings funktionierte dies erst gar nicht. Denn interessanterweise benötigt das Multimeter noch einen Stromimpuls, der nicht über den Adapter kommt. Ein Bekannter von mir hat uns einen Zwischenadapter gebaut, der dieses Problem umgeht.

    Danach konnte ich wie gewohnt per MSComm-Steuerelement die Daten abfragen, die nun als String ankommen. Hier meine Settings für das Steuerelement:

    Visual Basic-Quellcode

    1. Begin MSCommLib.MSComm comMultimeterUT
    2. CommPort = 6
    3. DTREnable = -1 'True
    4. RThreshold = 1
    5. BaudRate = 19200
    6. ParitySetting = 1
    7. DataBits = 7
    8. End

    Hier das Datenempfangsereignis:

    Visual Basic-Quellcode

    1. Private comInpMM As String
    2. Private Sub comMultimeterUT_OnComm()
    3. ' Datenempfang Multimeter (UT-803)
    4. Dim inp As String
    5. Select Case comMultimeterUT.CommEvent
    6. ' Behandeln jedes Ereignisses oder Fehlers durch
    7. ' Positionieren von Code unter jeder Case-Anweisung
    8. ' Fehler
    9. Case comBreak ' Es wurde ein Anhaltesignal empfangen.
    10. Case comFrame ' Fehler im Übertragungsraster (Framing Error)
    11. Case comOverrun ' Datenverlust
    12. Case comRxOver ' Überlauf des Empfangspuffers
    13. Case comRxParity ' Paritätsfehler
    14. Case comTxFull ' Sendepuffer voll
    15. Case comDCB ' Unerwarteter Fehler beim Abrufen des DCB
    16. MsgBox "Schnittstelle Multimeter (UT-803) meldet Fehler!", vbCritical + vbApplicationModal
    17. Exit Sub
    18. ' Ereignisse
    19. Case comEvReceive ' Anzahl empfangener Zeichen gleich RThreshold
    20. inp = comMultimeterUT.Input
    21. comInpMM = comInpMM & inp
    22. If Len(comInpMM) > 2 Then
    23. If Mid$(comInpMM, Len(comInpMM) - 1, 2) = vbCrLf Then
    24. Dim value As String
    25. value = Mid$(comInpMM, 1, InStr(1, comInpMM, vbCrLf) + 1)
    26. comInpMM = vbNullString
    27. If Len(value) = 11 Then
    28. RecValueMultimeter value
    29. End If
    30. End If
    31. End If
    32. Exit Sub
    33. Case comEvCD ' Pegeländerung auf DCD
    34. Case comEvCTS ' Pegeländerung auf CTS
    35. Case comEvDSR ' Pegeländerung auf DSR
    36. Case comEvRing ' Pegeländerung auf RI (Ring Indicator)
    37. Case comEvSend ' Im Sendepuffer befinden sich SThreshold Zeichen
    38. Case comEvEOF ' Im Eingabestrom wurde ein EOF-Zeichen gefunden
    39. Exit Sub
    40. Case Else
    41. MsgBox "Schnittstelle Multimeter (UT-803) meldet unbekannten Status!", vbCritical + vbApplicationModal
    42. End Select
    43. End Sub

    Und hier meine Datenverarbeitungsroutine:

    Visual Basic-Quellcode

    1. Private Sub RecValueMultimeter(ByVal inpStr As String)
    2. ' Verarbeiten eines empfangenen Werts vom Multimeter (UT-803)
    3. On Local Error GoTo ErrorHandler
    4. Dim inpS As String
    5. inpS = Replace(inpStr, vbCrLf, vbNullString)
    6. inpS = Trim(inpS)
    7. Dim i As Integer
    8. Dim startI As Integer
    9. Dim endI As Integer
    10. startI = -1
    11. endI = -1
    12. For i = 1 To Len(inpS)
    13. If startI = -1 Then
    14. If IsNumeric(Mid$(inpS, i, 1)) Then
    15. startI = i
    16. End If
    17. ElseIf endI = -1 Then
    18. If Not IsNumeric(Mid$(inpS, i, 1)) Then
    19. endI = i
    20. Exit For
    21. End If
    22. End If
    23. Next i
    24. inpS = Mid$(inpS, startI, endI - startI)
    25. Dim komma As Integer
    26. komma = CInt(Mid$(inpS, 1, 1)) + 1
    27. inpS = Mid$(inpS, 2, komma) & "," & Mid$(inpS, komma + 2)
    28. lblMultimeter.Caption = inpS & " Volt"
    29. lblMultimeter.Refresh
    30. Exit Sub
    31. ErrorHandler:
    32. MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical + vbApplicationModal
    33. End Sub

    Wie messen ausschließlich Gleichstrom-Volt-Werte von >0 bis <10, daher ist der Code hier wirklich nur minimal. In den empfangenen Daten steckt u. U. nämlich noch viel mehr drin, was man verarbeiten müsste/könnte.

    Ich kann keine Garantie dafür geben, dass mein hier geposteter Quellcode 100% funktioniert, denn ich musste den Code etwas abspecken, da er noch viel aus meinem Programm enthält, was für das reine Abfragen der Daten irrelevant ist. Aber ich denke, falls in der Zukunft mal jemand dasselbe Problem hat, so kommt er hiermit schon weiter.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()