Daten vom Multimeter VC850 über USB-Schnittstellenadapter auslesen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Daten vom Multimeter VC850 über USB-Schnittstellenadapter auslesen

    Hi,

    hat von euch schonmal jemand versucht Daten vom Multimeter VC850 über einen USB-Schnittstellenadapter mit VB.NET auszulesen?

    Der Adapter geht direkt vom Multimeter in den USB-Port des Rechners, wohin dann vermutlich wohl die Daten geschrieben werden, wenn das Multimeter im PC-Modus ist. Es hat kein Kabel für eine Serielle Schnittstelle RS232, die am Computer auch nicht vorhanden ist, und ich habe auch kein Adapter-Kabel USB2Serial wie das von Profillic.

    Ich weiß gerade nicht, wo ich da ansetzen kann.

    Vielen Dank.

    imho

    Verschoben. ~Thunderbolt

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

    imho74 schrieb:

    Serielle Schnittstelle RS232
    Es gibt für auch Treiber, die es gestatten, ein über ein USB-Kabel angeschlossenes Gerät als RS232 anzusprechen, also im Programm die SerialPort-Komponente zu verwenden. Das ist abhängig vom Gerät, da müsstest Du mal den Gerätehersteller gezielt danach befragen, ich hab solch schon bei unterschiedlichen Geräten (Scanner und Messgeräte) eingesetzt.
    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!
    Das VC850 wird es nicht anders machen als alle anderen Meßgeräte mit PC-Anschluß, die ich bisher in den Fingern hatte (UniTech, Fluke, VoltCraft): Da ist ein USB2Serial-Adapter bereits eingebaut und du findest einen neuen COM-Port in deinem System, wenn du das Meßeisen anklemmst.

    'nuff said ;)

    OlafSt schrieb:

    du findest einen neuen COM-Port in deinem System, wenn du das Meßeisen anklemmst.


    Hi,

    das war auch meine Hoffnung. Aber wenn ich das Messeisen anklemme, ändert sich sich an den COM-Ports nix, dort ist nur das UMTS-Modem:

    Sierra Wireless DM Port (COM3)
    Sierra Wireless NMEA Port (COM4)

    Das Multimeter steht im Gerätemanager als "HID-konformes Gerät".

    Viele Grüße
    imho
    Hi,

    ich bin bei meiner Recherche weitergekommen. Es handelt sich bei der ganzen Geschichte um einen HID-basierten USB-RS232-Umsetzer.


    Derartige Konverter finden sich vor allem bei chinesischen Digitalmultimetern. Vorteile gegenüber „echten“ USB-Seriell-Konvertern:
    • geringerer Chip-Preis, USB Low-Speed genügt
    • Keine Treiberinstallation erforderlich
    • Kein zusätzliches COM-Port taucht auf; Multimeter-Auslesesoftware kann direkt ohne Einstellung eines COM-Ports zugreifen

    Die Nachteile sind:
    • Keine Kompatibilität zu COM-Ports (bekannte API)
    • Undokumentiertes Interface, für Einsteiger „rätselhafte“ Funktionsweise

    Quelle: https://www-user.tu-chemnitz.de/~ygu/basteln/PC/hid-ser.de.htm

    Ok, das USB-Schnittstellenadapter ist also ein HID-Konformes USB-Eingabegerät mit "VID_1A86" und "PID_E008", so steht es auch im Gerätemanager.

    Mit diesem Wissen habe ich versuch, ein simples Beispiel aus "USB Complete" bzw. USB 2.0 von Axelson nachzustellen, bin aber gescheitert:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Module Module1
    3. <StructLayout(LayoutKind.Sequential)> _
    4. Public Structure HIDD_ATTRIBUTES
    5. Dim Size As Integer
    6. Dim VendorID As Short
    7. Dim ProductID As Short
    8. Dim VersionNumber As Short
    9. End Structure
    10. <DllImport("hid.dll")> _
    11. Public Function HidD_GetAttributes _
    12. (ByVal HidDeviceObject As Integer, _
    13. ByRef Attributes As HIDD_ATTRIBUTES) _
    14. As Boolean
    15. End Function
    16. Public Sub Main()
    17. Dim DeviceAttributes As HIDD_ATTRIBUTES
    18. Dim MyVendorID As Long = &H1A86
    19. Dim MyProductID As Long = &HE008
    20. Dim Result As Boolean
    21. ' Set the Size property of DeviceAttributes to the
    22. ' number of bytes in the structure.
    23. DeviceAttributes.Size = Marshal.SizeOf(myHID.DeviceAttributes)
    24. Result = HidD_GetAttributes _
    25. (DeviceHandle, _
    26. DeviceAttributes)
    27. If (DeviceAttributes.VendorID = MyVendorID) And _
    28. (DeviceAttributes.ProductID = MyProductID) Then
    29. Console.WriteLine("My device detected")
    30. Else
    31. Console.WriteLine("Not my device")
    32. End If
    33. Console.ReadKey()
    34. End Sub
    35. End Module



    Soweit erstmal.

    Viele Grüße
    imho

    imho74 schrieb:

    Soweit erstmal
    Dein nicht compilierbarer Code.
    myHID :?:
    DeviceHandle :?: Den bekommst Du über API.CreateFile
    Gugst Du hier.
    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!