Forum: PC-Programmierung H-Tronic HB628 mit Visual Studio 2013


von TomHeike (Gast)


Lesenswert?

Hallo zusammen,

ich muß eine vor Jahren von mir in VisualBasic 6 erstellte Steuerung mit 
Visual Studio Express 2013 neu aufrollen. Darin nutze ich natürlich 
wieder Visual Basic, kann nix anderes.

Habe das USB-A/D-Wandlermodul HB628 auf meinem Win 7 64bit Rechner 
angeschlossen und Treiber installiert.

Habe versucht, die HB628-dll in meinem Projekt als Referenz hinzuzufügen 
- da meckert VisualStudio:
sinngemäß "Reference could not be added. Make sure the file is 
accessible and a valid assembly or COM component"

Dann habe ich mir gedacht, das Ding ist doch ein virtueller COM-Port und 
das Protokoll simpel. Also im Projekt einfach einen SerialPort 
hinzugefügt, geöffnet, 3Byte-Sequenzen hinschreiben und 3Byte-Srquenzen 
zurückbekommen, funktioniert.

Die Frage, wozu brauche ich dann überhaupt das DLL-Brimborium?

Kann mir da jemand einen guten Grund nennen - und dann auch, wie ich die 
DLL ins Projekt bringe?

Viele Grüße
Tom.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

TomHeike schrieb:
> Die Frage, wozu brauche ich dann überhaupt das DLL-Brimborium?

Hängt davon ab, was die DLL so treibt. Gibt es von der 'ne Beschreibung?

von Tom (Gast)


Lesenswert?

Ich glaube keine Beschreibung, aber natürlich die Deklarationen zu den 
enthaltenen Funktionen im Beispielprogramm.
Bin allerdings morgen nicht im Büro, und werde wohl nicht online nach 
den auf CD mitgelieferten Dateien suchen. Wird also Montag mit meiner 
Antwort...

von Freibauhandwerker (Gast)


Lesenswert?

TomHeike schrieb:
> Darin nutze ich natürlich wieder Visual Basic

Nein, Du benutzt Visual Basic .NET ...
http://de.wikipedia.org/wiki/Visual_Basic_.NET

Was bedeutet, dass

> Habe versucht, die HB628-dll in meinem Projekt als Referenz hinzuzufügen
> - da meckert VisualStudio:
> sinngemäß "Reference could not be added. Make sure the file is
> accessible and a valid assembly or COM component"

Du so direkt nur .NET-Dlls (das ist in diesem Fall mit Assembly gemeint) 
und COM-Dlls in Deinem Projekt verwenden kannst.

> wie ich die DLL ins Projekt bringe?

- Platform Invoke (P/Invoke).
- C++/CLI-Komponente als Layer zwischen der DLL und Deinem Programm.
- Das ganze Programm in ("nativem") C++ schreiben - inkl. der Verwendung 
einer GUI-Bibliothek - und die DLL einfach benutzen.

Sollte sich in der DLL nichts allzu Kompliziertes befinden, wäre 
SerialPort aber wohl die einfachste Lösung (es sei denn, die Parameter 
der Funktionen sind relativ trivial und P/Invoke damit keine übermäßige 
Fummelei).

von TomHeike (Gast)


Lesenswert?

Also, ich hab mir nochmal das Beispielprogramm für VisualBasic 
angesehen. Scheint bei VB6 stehengeblieben zu sein. So weit meine ich 
die Unterscheide zwischen der alten VB-Welt und der .NET-Welt schon zu 
kennen.

Ok, ich benutze Visual Basic .NET.

Weiter oben wurde nach dem Inhalt der DLL gefragt, ich kann wie gesagt 
nur mit dem .bas-Modul des alten VB6-Beispielprogrammes dienen, in dem 
die DLL-Funktionen deklariert sind:
1
Attribute VB_Name = "HB628_Module"
2
Option Explicit
3
4
' Declare statements for all the functions in the HB628.dll
5
' NOTE: These statements assume that the DLL file is located in
6
'       the same directory as this project.
7
'       If you change the location of the DLL, be sure to change the location
8
'       in the declare statements also.
9
Public Declare Function HB628_Open Lib "hb628.dll" (ByVal ComPort As Byte, ByVal Timeout As Long) As Boolean
10
Public Declare Function HB628_Close Lib "hb628.dll" () As Boolean
11
Public Declare Function HB628_Read_Channel Lib "hb628.dll" (ByVal Channel As Byte, ByRef Result As Integer, ByRef Error As Byte) As Boolean
12
Public Declare Function HB628_Read_All_Channel Lib "hb628.dll" (ByRef Result_Array As Integer, ByRef Error As Byte) As Boolean
13
Public Declare Function HB628_Set_Digital_Output Lib "hb628.dll" (ByVal Channel As Byte, ByVal Value As Byte, ByRef Error As Byte) As Boolean
14
Public Declare Function HB628_Set_All_Digital_Output Lib "hb628.dll" (ByVal Value As Byte, ByRef Error As Byte) As Boolean
15
Public Declare Function HB628_Set_TimeOut Lib "hb628.dll" (ByVal Value As Byte, ByRef Error As Byte) As Boolean
16
17
18
'Errors
19
Public Const Err_No = 0    'no error
20
Public Const ERR_TX = 1    'Tx error
21
Public Const ERR_RX = 2    'Rx error
22
Public Const ERR_CS = 3    'control sum error
23
Public Const ERR_PARAM = 4 'parameters value error

Die Frage ist aber wirklich, brauch ich diese DLL. Macht die überhaupt 
etwas anderes/tiefergehendes, als die nötigen 3-Byte-Sequenzen zum 
Senden zu erzeugen und die 3-Byte-Antwort abwarten, low- und hibyte 
zusammenschrauben und Prüfsumme kontrollieren.

Sowas kann ich mir mittlerweile selbst als Funktionen oder gar class 
schreiben, ist ja echt kein Hexenwerk, sondern einfach eine kleine 
Fleißaufgabe. Muß ich mir halt einen SerialPort als Steuerelement ins 
Projekt holen, aber was ist daran schlimm oder unprofessionell?

Hier mal der Codeschnipsel, der (ohne Prüfsumme und Timeout) den 
A/D-Kanal 1 liest:
1
HB628.Write("c01")
2
            While HB628.BytesToRead < 3
3
            End While
4
            HiByte = HB628.ReadByte
5
            LoByte = HB628.ReadByte
6
            CheckSum = HB628.ReadByte
7
            EngUnits = 256 * HiByte + LoByte
HB628 ist der Name, den ich dem SerialPort gegeben habe.

Es gibt einen anderen, älteren Thread, in dem jemand eine c#-class 
vorstellt, welche wohl die alte DLL "umhüllt" und zugänglich macht. Hat 
mir aber nichts gebracht, weil a) in c# statt VB und b) nach meinem 
Wissenstand zu umständlich/unverständlich.

Viele Grüße
Tom.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.