Multifunktionales Messgerät über USB-Schnittstelle auslesen und Daten verarbeiten

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Marko12345.

    Multifunktionales Messgerät über USB-Schnittstelle auslesen und Daten verarbeiten

    Hallo,

    ich habe ein Messgerät (Temperatur, PH-Werte, ...) der Marke Greisinger mit einer USB-Verbindung zum PC. Da ich ein absoluter Neuling in VB bin, wollte ich mal hier fragen welche Dateien (DLL, ...) bzw. was ich alles benötige um das Messgerät in Visual Basic 2010 aus zu lesen und die Werte/Daten zum Beispiel in einer Excel-Tabelle zu speichern.


    Wie bereits erwähnt bin ich ein absoluter Neuling (bisher immer mit Matlab gearbeitet) und gerade dabei mich in VB einzuarbeiten.

    Für Tipps zum allgemeinen Vorgehen oder nützlichen Tutorials wäre ich sehr dankbar.
    Willkommen im Forum. :thumbup:
    Trenne zunächst Deine Aufgaben: USB, Excel.
    Löse jede in einem separaten Projekt. Wenn dann alles läuft, füge sie in einem weiteren Projekt zusammen.
    -----
    Was Du brauchst: Eigentlich sollte der Hersteller das iwo ordentlich dokumentriert haben, vllt. hast Du sogar ein kleines Demo-Programm samt Quellen auf einer CD / DVD.
    Sieh mal nach, besuch ggf. die www des Herstellers.
    Wenn dann immer noch Probleme bestehen, melde Dich wieder.
    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!
    Hallo,

    Habe die zugehörigen Unterlagen und Software des Herstellers jetzt besorgt.

    Mein Problem ist jetzt das genaue Vorgehen bei der Programmierung. Bin ja absoluter Neueinsteiger in VB (2010) und habe nicht all zu viel an Literatur, Tutorials, etc. zur Schnittstellenprogrammierung in VB 2010 gefunden.

    Kann mir jemand vielleicht Literatur oder Tutorials zu diesem Thema empfehlen (Messgerät über USB-Schnittstelle auslesen) empfehlen????

    Bin für jeden Tipp und Hinweis sehr dankbar da ich echt nicht weiß wie ich das ganze programmiertechnisch angehe.

    Marko12345 schrieb:

    Habe die zugehörigen Unterlagen und Software des Herstellers jetzt besorgt.
    Dazu gehört doch bestimmt auch ein Demo-Programm?
    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!
    Also die Messgeräte die wir hier haben die auch an dne PC angeschlossen werden über RS232 oder USB haben Software dazu, allerdings keine Dokumentation wie man die Libraries selbst verwendet, leider. Deswegen könnte es für ein Neuling schwer werden sich solch ein Wissen selbst zu erarbeiten und Tutorials wirst du zu so einem komplexten Thema nicht finden. Da jeder Treiber anders ist, man kann ja nicht Pauschal sagen es gibt diese oder jene Funktionen zum Ansprechen bzw. Auslesen. Deswegen gibts ja idR. auch Dokumentationen wo alle Funktionen und deren Parameter beschrieben sind, sofern sie für die Verwendung in eigener Software vorgesehen sind. Viele wollen natürlich das nur ihre eigene Software genutzt wird und geben somit keine Infos über die verwendeten Libraries heraus.
    Also ich habe die Dokumentation und Programmierbeispiele zu den Windows-Funktionsbibliotheken GMH3X32E.DLL und die Dateien.
    (Auch GMH3X32E.LIB )

    Unter anderem sind da auch Beispiele enthalten jedoch nur in Visual C# (2008,2010) und C++ (2008,2010) und eine in VB 2006.

    Mein Problem ist ja, dass ich nicht ganz genau weiss, wie ich zum Beispiel die DLL-Dateien einbinde.

    Mache gerade ein paar Tutorials und eigene Programme. Bringt mich leider nur wenig voran da ich ein sehr spezielle Aufgabenstellung habe ?(

    Marko12345 schrieb:

    Visual C#
    Na da ist doch schon alles gelaufen.
    Gugst Du hier.
    Ansonsten postest Du den Code / das Projekt, das kriegen wir auf jeden Fall hin. :thumbsup:
    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!

    Marko12345 schrieb:

    Mein Problem ist ja, dass ich nicht ganz genau weiss, wie ich zum Beispiel die DLL-Dateien einbinde.
    Projekt...Einfügen...Verweis.

    Marko12345 schrieb:

    sind da auch Beispiele enthalten jedoch nur in Visual C#
    C#-Beispiele kannst du per Code-Converter in VB.net umwandeln (s.o.).
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für den Link @RodFromGermany.

    Ich habe mal die vorhandene Datei von VB 2006 in Visual Basic 2010 konvertiert, jedoch kommt es zu einer fehlermeldung wenn ich die Anwendung dann ausführe. Um ehrlich zu sein bin ich mit dem Code auch ein wenig überfordert. (Zu viel auf einmal)

    Ich werde hier mal den Code (Visual Basic 2010) posten und hoffe jemand kann mir einen kleinen Überblick darüber geben wie zum Beispiel die DLL-Dateien eingebunden wird und an welcher Stelle was erfolgt.

    Sorry schon mal im Vorraus und danke für die Mühe auch wenn keine Antworten komm. (Dann versuch ichs halt alleine :cursing: )

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. #Region "Definitionen"
    4. #Region "GMH DLL Funktionen"
    5. Declare Auto Function GMH_Transmit Lib "GMH3x32E.dll" Alias "GMH_Transmit" ( _
    6. ByVal _i16_Address As Short, _
    7. ByVal _i16_CallingCode As Short, _
    8. ByRef _i16ptr_Priority As Short, _
    9. ByRef _dblptr_Float As Double, _
    10. ByRef _i32ptr_Integer As Integer) _
    11. As Short
    12. Declare Auto Function GMH_OpenCom Lib "GMH3x32E.dll" Alias "GMH_OpenCom" ( _
    13. ByVal _i16_ComPortNumber As Short) _
    14. As Short
    15. Declare Auto Function GMH_GetErrorMessageRet Lib "GMH3x32E.dll" Alias "GMH_GetErrorMessageRet" ( _
    16. ByVal _i16_RetVal As Short, _
    17. ByVal _strptr_MessageString As Byte()) _
    18. As Short
    19. Declare Auto Function GMH_GetErrorMessageFL Lib "GMH3x32E.dll" Alias "GMH_GetErrorMessageFL" ( _
    20. ByVal _dbl_Float As Double, _
    21. ByVal _strptr_MessageString As Byte()) _
    22. As Short
    23. Declare Auto Function GMH_GetType Lib "GMH3x32E.dll" Alias "GMH_GetType" ( _
    24. ByVal _i32_SerienNummer As Integer, _
    25. ByVal _strptr_MessageString As Byte()) _
    26. As Short
    27. Declare Auto Function GMH_CloseCom Lib "GMH3x32E.dll" Alias "GMH_CloseCom" ( _
    28. ) _
    29. As Short
    30. Declare Auto Function SearchForComPorts Lib "EASYB32E.dll" Alias "SearchForComPorts" ( _
    31. ByRef _i16_ComPortArray As Short, _
    32. ByRef _i16_ArrayLength As Short) _
    33. As Short
    34. Declare Auto Function GetUnit Lib "EASYB32E.dll" Alias "GetUnit" ( _
    35. ByVal _i16_UnitValue As Short, _
    36. ByVal _strptr_UnitString As Byte()) _
    37. As Short
    38. #End Region
    39. #Region "DLL Parser Funktionen"
    40. Function GetErrorMessage( _
    41. ByVal _i16_ErrorCode As Short, _
    42. ByVal _dbl_FloatValue As Double, _
    43. ByVal _b_ShowMessageBox As Boolean) _
    44. As String
    45. Dim _str_MessageBoxCaption As String
    46. Dim _str_MessageBoxText As String
    47. If (_i16_ErrorCode <> -36) Then
    48. Dim _arr_ReturnStringFromDLL(1024) As Byte
    49. Dim _i16_StringLength As Short
    50. _i16_StringLength = GMH_GetErrorMessageRet(_i16_ErrorCode, _arr_ReturnStringFromDLL)
    51. If (_i16_StringLength > 0) Then
    52. Dim enc As New System.Text.UTF7Encoding()
    53. _str_ErrorMessage = enc.GetString(_arr_ReturnStringFromDLL, 0, _i16_StringLength)
    54. End If
    55. Else
    56. Dim _arr_ReturnStringFromDLL(1024) As Byte
    57. Dim _i16_StringLength As Short
    58. _i16_StringLength = GMH_GetErrorMessageFL(_dbl_FloatValue, _arr_ReturnStringFromDLL)
    59. If (_i16_StringLength > 0) Then
    60. Dim enc As New System.Text.UTF7Encoding()
    61. _str_ErrorMessage = enc.GetString(_arr_ReturnStringFromDLL, 0, _i16_StringLength)
    62. End If
    63. End If
    64. If (_b_ShowMessageBox) Then
    65. _str_MessageBoxCaption = "Fehler " + _i16_ErrorCode.ToString()
    66. _str_MessageBoxText = _str_ErrorMessage
    67. MessageBox.Show( _
    68. _str_MessageBoxText, _
    69. _str_MessageBoxCaption, _
    70. MessageBoxButtons.OK, _
    71. MessageBoxIcon.Error)
    72. End If
    73. Return _str_ErrorMessage
    74. End Function
    75. Function GetUnitString( _
    76. ByVal _i16_UnitCode As Short, _
    77. ByVal _i16_LanguageOffset As Short) _
    78. As String
    79. Dim _str_UnitCode As String = ""
    80. If (_i16_UnitCode >= 0) Then
    81. Dim _arr_ReturnStringFromDLL(1024) As Byte
    82. Dim _i16_StringLength As Short
    83. _i16_StringLength = GetUnit(_i16_UnitCode, _arr_ReturnStringFromDLL)
    84. If (_i16_StringLength > 0) Then
    85. Dim enc As New System.Text.UTF7Encoding()
    86. _str_UnitCode = enc.GetString(_arr_ReturnStringFromDLL, 0, _i16_StringLength)
    87. End If
    88. End If
    89. Return _str_UnitCode
    90. End Function
    91. #End Region
    92. #Region "Globale Variblen"
    93. Dim i16_ErrorCode As Short
    94. Dim _dbl_Float As Double
    95. Dim _str_ErrorMessage As String = ""
    96. #End Region
    97. #Region "Error Handler"
    98. Public Property ErrorCode() As Short
    99. Get
    100. Return i16_ErrorCode
    101. End Get
    102. Set(ByVal value As Short)
    103. If (value < 0) Then
    104. i16_ErrorCode = value
    105. Else
    106. i16_ErrorCode = 0
    107. End If
    108. End Set
    109. End Property
    110. #End Region
    111. #End Region
    112. '#Region "Hauptprogramm"
    113. #Region "Oberflächen Steuerelemente"
    114. #Region "Steuerelement-Klick Funktions-Handler"
    115. Private ComPortNumber As Integer
    116. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_MesswertLesen.Click
    117. Dim _i16_Adresse As Short
    118. Dim _i16_Priority As Short
    119. Dim _i32_Integer As Integer
    120. Dim _i16_UnitCode As Short
    121. Dim _dbl_Messwert As Double
    122. _i16_Priority = 0
    123. _i32_Integer = 0
    124. _dbl_Float = 0
    125. 'Anzeigewert von Adresse 1 Lesen
    126. _i16_Adresse = 1
    127. ErrorCode = GMH_Transmit(_i16_Adresse, 0, _i16_Priority, _dbl_Float, _i32_Integer)
    128. If (ErrorCode >= 0) Then
    129. _dbl_Messwert = _dbl_Float
    130. 'Anzeige-Einheit von Adresse 1 Lesen
    131. ErrorCode = GMH_Transmit(_i16_Adresse, 202, _i16_Priority, _dbl_Float, _i32_Integer)
    132. If (ErrorCode >= 0) Then
    133. _i16_UnitCode = System.Convert.ToInt16(_i32_Integer)
    134. Else
    135. _i16_UnitCode = 0
    136. End If
    137. l_MessWert.ForeColor = Color.Black
    138. 'Ausgeben Anzeigewert + Anzeige-Einheit
    139. l_MessWert.Text = _dbl_Messwert.ToString() + " " + GetUnitString(_i16_UnitCode, 0)
    140. Else
    141. l_MessWert.ForeColor = Color.Red
    142. 'Ausgeben Fehlermeldung
    143. l_MessWert.Text = "Err" + ErrorCode.ToString() + ": " + GetErrorMessage(ErrorCode, _dbl_Float, False)
    144. End If
    145. l_MessWert.Visible = True
    146. End Sub
    147. #End Region
    148. #End Region
    149. Private Sub b_ComPortsNeuEinlesen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_ComPortsNeuEinlesen.Click
    150. b_Auswählen.Enabled = False
    151. b_ComPortsNeuEinlesen.Enabled = True
    152. b_GerätetTypBestimmen.Enabled = False
    153. b_PortSchliessen.Enabled = False
    154. b_MesswertLesen.Enabled = False
    155. 'Vorhandene Com Ports suchen und in ComboBox eintragen
    156. Dim _str_SelectedComPort As String
    157. Dim _i16_ComPortArray(512) As Short
    158. Dim _i16_ComPortCount As Short
    159. Try
    160. _str_SelectedComPort = cb_ComPorts.SelectedItem.ToString()
    161. Catch ex As Exception
    162. _str_SelectedComPort = ""
    163. End Try
    164. 'Vorhandene ComPorts suchen
    165. SearchForComPorts(_i16_ComPortArray(0), _i16_ComPortCount)
    166. cb_ComPorts.Items.Clear()
    167. Dim _i16_Counter As Short
    168. For _i16_Counter = 0 To _i16_ComPortCount - 1
    169. cb_ComPorts.Items.Add("COM" + (_i16_ComPortArray(_i16_Counter)).ToString())
    170. Next _i16_Counter
    171. If (_str_SelectedComPort = "") Then
    172. cb_ComPorts.SelectedIndex = 0
    173. Else
    174. cb_ComPorts.SelectedItem = _str_SelectedComPort
    175. End If
    176. If (cb_ComPorts.SelectedIndex >= 0) Then
    177. b_Auswählen.Enabled = True
    178. Else
    179. b_Auswählen.Enabled = False
    180. End If
    181. End Sub
    182. Private Sub b_Auswählen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_Auswählen.Click
    183. b_Auswählen.Enabled = True
    184. b_ComPortsNeuEinlesen.Enabled = True
    185. b_GerätetTypBestimmen.Enabled = False
    186. b_PortSchliessen.Enabled = False
    187. b_MesswertLesen.Enabled = False
    188. Dim _str_ComPort As String = cb_ComPorts.SelectedItem.ToString().Replace("COM", "")
    189. Dim _i16_ComPort As Short = System.Convert.ToInt16(_str_ComPort)
    190. ComPortNumber = _i16_ComPort
    191. If ComPortNumber > 0 Then
    192. If (GMH_OpenCom(ComPortNumber) >= 0) Then
    193. b_Auswählen.Enabled = False
    194. b_ComPortsNeuEinlesen.Enabled = False
    195. b_GerätetTypBestimmen.Enabled = True
    196. b_PortSchliessen.Enabled = True
    197. End If
    198. End If
    199. End Sub
    200. Private Sub b_GerätetTypBestimmen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_GerätetTypBestimmen.Click
    201. b_MesswertLesen.Enabled = False
    202. Dim _i16_Adresse As Short
    203. Dim _i16_Priority As Short
    204. Dim _i32_Integer As Integer
    205. Dim _i16_StringLength As Short
    206. Dim _i32_IDNummer As Integer
    207. Dim _barr_GeräteTyp(1024) As Byte
    208. Dim _str_GeräteTyp As String
    209. _i16_Priority = 0
    210. _i32_Integer = 0
    211. _dbl_Float = 0
    212. 'Anzeigewert von Adresse 1 Lesen
    213. _i16_Adresse = 1
    214. ErrorCode = GMH_Transmit(_i16_Adresse, 12, _i16_Priority, _dbl_Float, _i32_Integer)
    215. If (ErrorCode >= 0) Then
    216. _i32_IDNummer = _i32_Integer
    217. b_MesswertLesen.Enabled = True
    218. _i16_StringLength = GMH_GetType(_i32_IDNummer, _barr_GeräteTyp)
    219. If (_i16_StringLength > 0) Then
    220. Dim enc As New System.Text.UTF7Encoding()
    221. _str_GeräteTyp = enc.GetString(_barr_GeräteTyp, 0, _i16_StringLength)
    222. l_Type.Text = _str_GeräteTyp
    223. l_Type.Visible = True
    224. ls_Type.Visible = True
    225. End If
    226. Else
    227. l_MessWert.ForeColor = Color.Red
    228. 'Ausgeben Fehlermeldung
    229. l_MessWert.Text = "Err" + ErrorCode.ToString() + ": " + GetErrorMessage(ErrorCode, _dbl_Float, False)
    230. End If
    231. l_MessWert.Visible = True
    232. End Sub
    233. Private Sub b_PortSchliessen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_PortSchliessen.Click
    234. ErrorCode = GMH_CloseCom()
    235. b_Auswählen.Enabled = True
    236. b_ComPortsNeuEinlesen.Enabled = True
    237. b_GerätetTypBestimmen.Enabled = False
    238. b_PortSchliessen.Enabled = False
    239. b_MesswertLesen.Enabled = False
    240. l_MessWert.Visible = False
    241. l_Type.Visible = False
    242. ls_Type.Visible = False
    243. End Sub
    244. End Class

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

    Marko12345 schrieb:

    Ich habe mal die vorhandene Datei von VB 2006 in Visual Basic 2010 konvertiert
    1. Mach bitte mal um Deinen Code einen Expander (auperhalb der BV-Tags markieren und [+] drücken.
    2. Häng bitte mal das ganze C#-Demo-Projekt als ZIP dran.
    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!
    Hab mal fix reingesehen, da ist unsafe Code drin, das wirst Du nicht so einfach konvertieren können.
    Was machen Deine C#-Kenntnisse?
    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!
    Wie gesagt, habe bis jetzt nur mit Matlab gearbeitet. Meine C#-Kenntnisse sind auf einem Level wie meine Visual Basic Kenntnisse, also eher mau.

    Unabhängig davon, ist es wirklich so aufwändig wenn ich selbst ein Programm schreibe um das Messgerät aus zu lesen?

    Ich brauche im Prinzip ja nur die vom Messgerät aufgenommene Temperaturen. (Wie bereits erwähnt habe ich ja die Dokumentation vom Hersteller und die DLL- und LIB-Dateien)

    PS: Ich habe auch ein in VB 6.0 geschriebenes Projekt (auch Anwendung (exe-Datei)) welches funktioniert und mit der ich die Temperaturen am PC auslesen kann. leider kann ich damit nichts anfangen, da ich mit meinem VB 2010 die VB 6.0 Projekte nicht öffnen kann. Ich lade das Projekt auch hoch im Anhang. (Vielleicht hilfts ja)
    Dateien

    Marko12345 schrieb:

    (Vielleicht hilfts ja)
    Auf jeden Fall.
    Nimm die Deklarationen aus VB6 nach .NET. Hier musst Du aufpassen, dass die Deklarationen richtig überführt werden. VB6-Long ist .NET Int32.
    Nimm die Aufrufreihenfolge von VB6 nach .NET: Initialisierung, Abfrage Deiner Werte, Runterfahren
    und schwups solltest Du fertig sein.
    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!
    Hi

    Ich kann leider die VB 6.0 Projekte nicht öffnen. (Habe Visual Basic 2010 Express)

    Ich weiss leider auch nicht ob ich VB 6.0 noch irgend wo bekommen kann oder wie ich die Projekte aus VB 6.0 sonst nach VB 2010 importieren kann.

    Bitte um Tipp

    Und zum x-ten Male Danke!!
    Du musst es

    Marko12345 schrieb:

    nicht öffnen
    , es genügt, im Notepad oder im Studio die entsprechenden Passagen aus den einzelnen Quell-Dateien rauszusuchen.
    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!

    Marko12345 schrieb:

    Welche Datei
    Die einzige BAS-Datei.
    GMH3000.BAS

    VB.NET-Quellcode

    1. Attribute VB_Name = "GMH3000"
    2. Option Explicit
    3. '________________________________________________________
    4. 'Globale Deklarationen der GMH3000-DLL
    5. '_______________________________________________________
    6. 'Funktionen
    7. 'GMH3000-Standardfunktionen
    8. Declare Function GMH_Transmit Lib "GMH3x32e.dll" (ByVal adr As Integer, ByVal code As Integer, Priority As Integer, Floatdata As Any, int_dat As Long) As Integer
    9. Declare Function GMH_OpenCom Lib "GMH3x32e.dll" (ByVal port As Integer) As Integer
    10. Declare Function GMH_CloseCom Lib "GMH3x32e.dll" () As Integer
    11. 'Zusatzfunktionen
    12. Declare Function GMH_GetUnit Lib "GMH3x32e.dll" (ByVal UnitNumber As Integer, Char As Any) As Integer
    13. Declare Function GMH_GetType Lib "GMH3x32e.dll" (ByVal TypeNumber As Long, Char As Any) As Integer
    14. Declare Function GMH_GetVersionNumber Lib "GMH3x32e.dll" () As Integer
    15. Declare Function GMH_GetErrorMessageRet Lib "GMH3x32e.dll" (ByVal ErrNumber As Integer, Char As Any) As Integer
    16. '_______________________________________________________
    17. 'EBTransmit-Funktionscodes
    18. Global Const GMH_GetValue As Integer = 0
    19. Global Const GMH_SetValue As Integer = 1
    20. Global Const GMH_GetStatus As Integer = 3
    21. Global Const GMH_GetMinValue As Integer = 6
    22. Global Const GMH_GetMaxValue As Integer = 7
    23. Global Const GMH_GetSerialNumber As Integer = 12
    24. Global Const GMH_SetNewAddress As Integer = 13
    25. Global Const GMH_GetAddress As Integer = 14
    26. Global Const GMH_GetMinAlarm As Integer = 22
    27. Global Const GMH_GetMaxAlarm As Integer = 23
    28. Global Const GMH_GetAlarmdelay As Integer = 24
    29. Global Const GMH_GetAlarmfunction As Integer = 25
    30. Global Const GMH_GetConfigFlag As Integer = 32
    31. Global Const GMH_SetStatus As Integer = 100
    32. Global Const GMH_SetMinAlarm As Integer = 102
    33. Global Const GMH_SetMaxAlarm As Integer = 103
    34. Global Const GMH_SetAlarmdelay As Integer = 104
    35. Global Const GMH_SetAlarmfunction As Integer = 105
    36. Global Const GMH_SetConfigFlag As Integer = 160
    37. Global Const GMH_ClearMinValue As Integer = 174
    38. Global Const GMH_ClearMaxValue As Integer = 175
    39. Global Const GMH_GetMinRange As Integer = 176
    40. Global Const GMH_GetMaxRange As Integer = 177
    41. Global Const GMH_GetUnitCode As Integer = 178
    42. Global Const GMH_GetDecimalPoint As Integer = 179
    43. Global Const GMH_GetMeasCode As Integer = 180
    44. Global Const GMH_SetDispMeasCode As Integer = 191
    45. Global Const GMH_SetDispMinRange As Integer = 192
    46. Global Const GMH_SetDispMaxRange As Integer = 193
    47. Global Const GMH_SetDispUnitCode As Integer = 194
    48. Global Const GMH_SetDispDecPoint As Integer = 195
    49. Global Const GMH_GetDispMeasuring As Integer = 199
    50. Global Const GMH_GetDispMinRange As Integer = 200
    51. Global Const GMH_GetDispMaxRange As Integer = 201
    52. Global Const GMH_GetDispUnitCode As Integer = 202
    53. Global Const GMH_GetBatteryState As Integer = 203
    54. Global Const GMH_GetDispDecPoint As Integer = 204
    55. Global Const GMH_GetChannelcount As Integer = 208
    56. Global Const GMH_GetElectrodeState As Integer = 210
    57. Global Const GMH_GetSlopeCorrection As Integer = 214
    58. Global Const GMH_SetSlopeCorrection As Integer = 215
    59. Global Const GMH_GetOffsetCorrection As Integer = 216
    60. Global Const GMH_SetOffsetCorrection As Integer = 217
    61. Global Const GMH_GetCorrFactor As Integer = 218
    62. Global Const GMH_SetCorrFactor As Integer = 219
    63. Global Const GMH_GetAltitude As Integer = 220
    64. Global Const GMH_SetAltitude As Integer = 221
    65. Global Const GMH_GetPowerOffTime As Integer = 222
    66. Global Const GMH_SetPowerOffTime As Integer = 223
    67. Global Const GMH_GetLoggerData As Integer = 224
    68. Global Const GMH_GetLoggerCycle As Integer = 225
    69. Global Const GMH_SetLoggerCycle As Integer = 226
    70. Global Const GMH_StartLogger As Integer = 227
    71. Global Const GMH_GetLoggerCount As Integer = 228
    72. Global Const GMH_GetLoggerstate As Integer = 229
    73. Global Const GMH_SetLoggerReadOffset As Integer = 229
    74. Global Const GMH_GetRealtimeClock As Integer = 233
    75. Global Const GMH_SetRealtimeClock As Integer = 234
    76. Global Const GMH_GetLoggerSize As Integer = 236
    77. Global Const GMH_Reset As Integer = 240
    78. Global Const GMH_ModuleSpecific As Integer = 248
    79. Global Const GMH_GetSoftwareInfo As Integer = 254
    80. Global Const GMH_GetLoggerDataMan As Integer = 260
    81. Public Function C_NullString(Nullstring() As Byte) As String
    82. 'Umwandlung des DLL-Strings in einen VB-String
    83. Dim i As Integer
    84. Do While Nullstring(i) > 0 And i < 255
    85. C_NullString = C_NullString & Chr$(Nullstring(i))
    86. i = i + 1
    87. Loop
    88. End Function
    89. Public Function GMH3000_Fehlermeldung(ErrorCode As Integer) As String
    90. Dim Char(255) As Byte, ret As Integer
    91. Dim i As Integer
    92. Const lan_german = &H0
    93. 'Const lan_english = &H1000
    94. ret = GMH_GetErrorMessageRet(ErrorCode + lan_german, Char(0)) 'Meldungstring lesen
    95. GMH3000_Fehlermeldung = ErrorCode & ": " & C_NullString(Char()) 'CString in VB String konvertieren
    96. End Function
    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!
    Hallo,

    ich bin leider nicht wirklich weiter gekommen, da ich mit den VB 6.0 Dateien nichts anfangen kann. (Habe VB 2010)

    Kann mir jemand bitte eventuell einen Tipp zu LITERATUR, TUTORIALS oder BEISPIELEN geben. Mit den fertigen Dateien (Visual C#, Visual C++ und VB 2008) kann ich auch nicht arbeiten da diese auf meine Problemstellung nicht ganz passen (sind zu umfangreich und zum Teil fehlerhaft).

    Ich will ein Messgerät welches über USB mit meinem PC verbunden ist auslesen. Ich habe alle erforderlichen Dateien (DLL's, LIB, Dokumentation...)

    Lg und danke