none
Lesegerät der Härteprüfung equotip3 automatisiert auslesen. RRS feed

  • Allgemeine Diskussion

  • Hallo,

    ich habe eine fertige dll vom Hersteller, die das Gerät ausliest.

    Ich möchte jetzt in VB die DLL automatisiert (am besten durch ein Button) auslesen und die ausgelesenen Daten dann vom Gerät löschen.

    Das Gerät wird über das LAN angesprochen. Ein fertiges Programm ist auch vorhanden, nur dass es nicht voll automatisiert ist. Es soll, wie gesagt, durch ein "klicken" voll automatisiert starten.

    Die Daten sollen einfach in eine Textdatei gespeichert werden.

    Der Hersteller hat auch ein Beispielprogramm in C++ beigefügt. Ich verstehe es jedoch nicht. Ich habe sogar eine fertige exe, jedoch muss der Anwender erst die IP-Adresse angeben oder ob es über USB gehen soll. Die IP-Adresse ist jedoch fest und es soll nur über IP gehen. Also eigentlich muss das Prog ein wenig nur angepasst werden.

    Ich wäre über Eure Hilfe sehr dankbar.

    Grüße

    Marius

    Montag, 28. November 2011 08:38

Alle Antworten

  • Hi,

    und wie soll hier jemand ohne jegliche Kenntnis des Geräts, des Beispielcodes, der vom Hersteller gelieferten Komponente, ... irgendwas dazu sagen können?

    Bitte reich doch mal die notwendigen Informationen nach, dann findet sich bestimmt auch jemand, der dir unter die Arme greifen kann.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 28. November 2011 10:06
    Moderator
  • Hallo Therox_X,

     

    füge doch mal die .dll des Herstellers als Verweis in dein VB Projekt hinzu.

    Jetzt solltest du die Ein Objet erzeugen können. (Oder auf Shared Methoden zugreifen können).

    Das Opjekt sollte jetzt die nötigen Methoden haben.

    Ich denke mal sowas wie ConnectionTyp, IP, Connect, ReadDate, Clear usw.

    Ich denke mal im C++ Beispiel Projekt sind zu den Methoden Passende Beispiel implementiert.

     

    Wenn das nicht weiter hilft bitte Stefans hinweis folgen.

     

    MFG

    Björn

     

    Montag, 28. November 2011 11:07
  • Danke für die Antworten.

    Ich kann es gerne per Mail senden, wenn jemand Interesse hat.

    Würde mir sehr helfen.

    Danke

    Montag, 28. November 2011 13:23
  • Ich kann es gerne per Mail senden, wenn jemand Interesse hat.

    Hallo Therox_X,

    Zur Vollständigkeit poste ich hier den Link wo wir nochmals über den Equotip3 Härtemessgerät diskutiert haben.

    Wie lese ich Daten aus einem Equotip3 Härtemessgerät über das LAN aus?

    Eine .Zip Datei mit den Code (falls der Code zu groß ist) kann man ihm Public Ordner von SkyDrive laden und den link hier Posten. (Wie nutze ich den SkyDrive?)

    Grüße,

    Robert


    Montag, 28. November 2011 14:22
    Moderator
  • Hallo Robert,

    ich habe die gewünschten Dateien hochgeladen. In der PDF ist die Anleitung und in den RARs sind die Beispielprogramme.

    thanks

    Grüße,

    Marius

    Dienstag, 29. November 2011 09:26
  • Hi Therox_X,

     

    wäre  noch nett wenn du den Link zu SkyDrive hier reinstellen würdest damit die Leute auch auf die Daten zugreifen können.

    (Siehe Anleitung )

     

    MFG

    Björn

    Dienstag, 29. November 2011 14:43
  • Mittwoch, 30. November 2011 08:21
  • Hallo Therox_X,

    In der Datei PqRemoteDemoExcel.rar die Du auf SkyDrive hochgeladen hast gibt es folgende Dateien:

    Use PqRemoteOffice.dll for Office Products.txt

    PqRemoteOffice.dll (die Native C++ DLL die man aus .NET abrufen muss [1] oder Calling an unmanaged dll from .NET (C#) [2])

    PqRemoteDemoExcel.xlsm (Eine Excel Datei die VBA Makro enthält)

    Laut der Datei equotip3_automationPackage_OI_E_2011.04.11.pdf : „PqRemoteOffice.dll à This dynamic link library contains exactly the same functions as PqRemote.dll. There is only a difference between the calling conventions used by Office and the calling conventions in C++ projects.“

    Nach meiner Meinung gibt es zwei Wege die Automatisierung zu machen:

    1)    Ein leichterer Weg, indem Du den existierende VBA Code aus PqRemoteDemoExcel.xlsm ein wenig umschreibst und nach der Sub MakeMeasurements(Handle As Integer) die Zehn Werten aus den Zellen in eine TextDatei speicherst.

    2)    Ein mehr aufwändiger Weg, wo man mehrere Kenntnisse braucht (Marshalling ist ein komplexes Thema) ist der Weg indem Du ein VB.NET Projekt aus Visual Studio verwendest und die Signaturen der Funktionen aus PqRemote.Dll herausfindest…das wäre dann der Fall von den obigen Links [1] und [2]

    Ein möglicher Anhaltspunkt um die Signaturen in VB.NET zu bekommen ist die Datei PqRemote.h aus der Datei PqRemoteDemoDLL.rar. Diese kannst Du z.B. dem PInvoke Interop Assistant (hilfreich im Umgang mit nicht gemanagten DLLs. Er kann Dir einiges an Arbeit bei der Konvertierung von C-Funktionssignaturen zu verwalteten P/Invoke-Signaturen abnehmen.) auf der Registerkarte SigImp Translate Snippet geben und Dir den VB.NET Code generieren lassen. Dieser muss dann noch angepasst werden und der Lauffaden der Anwendung kann man sich aus dem Excel VBA nachbasteln in VB.NET.

    Zum lesen: Marshalling zwischen verwaltetem und nicht verwaltetem Code und Platform Invoke Data Types

    Die einzige Funktion die ich ohne das Gerät testen kann:

    Public Class Form1
    
    
        <System.Runtime.InteropServices.DllImportAttribute("PqRemoteOffice.dll", EntryPoint:="PQ_CheckCompatibility")> _
        Public Shared Function PQ_CheckCompatibility(ByVal mainVersion As UInt16, ByVal sideVersion As UInt16) As UInt32
        End Function
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            '    VBA Code
            '    Sub CheckVersion()
            '    Dim mainVersion As Integer
            '    Dim sideVersion As Integer
    
            '    mainVersion = 1
            '    sideVersion = 0
            '    x = PQ_CheckCompatibility(mainVersion, sideVersion)
            '    If (x <> 0) Then
            '        MsgBox("PQ_CheckCompatibility returned <> 0")
            '        Exit Sub
            '    End If
            'End Sub
    
            Dim mainVersion As UInt16
            Dim sideVersion As UInt16
    
            mainVersion = 1
            sideVersion = 0
    
            Dim x As UInt32
    
            x = PQ_CheckCompatibility(mainVersion, sideVersion)
    
            If x <> 0 Then
                MsgBox("PQ_CheckCompatibility returned <> 0")
            Else
                MsgBox("PQ_CheckCompatibility returned 0")
            End If
    
        End Sub
    End Class
    

     

    Grüße,

    Robert

    Mittwoch, 30. November 2011 13:37
    Moderator
  • ****************************************************************************************************************
    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
    ****************************************************************************************************************
    Montag, 5. Dezember 2011 17:06
    Moderator