3.8 DLL-Aufrufe in Visual Basic


 

Mit der RSCOM.DLL ist die Verwendung der seriellen Schnittstelle auch in Visual Basic einfach. Alle Beispiele in diesem Buch wurden mit VB5 programmiert. Man kann die freie Version VB5CCE von der CD verwenden, um erste Versuche durchzuführen. Die Quelltexte können aber auch in neueren VB-Versionen geladen werden.

 

In Visual Basic können DLL-Funktionen nur in einem eigenen Modul deklariert werden. Das Modul RSCOM.BAS zeigt alle erforderlichen Einträge.

 

 

Declare Function OPENCOM Lib "RSCOM" (ByVal OpenString$) As Integer

Declare Sub TIMEOUTS Lib "RSCOM" (ByVal b%)

Declare Sub BUFFERSIZE Lib "RSCOM" (ByVal b%)

Declare Sub CLOSECOM Lib "RSCOM" ()

Declare Sub SENDBYTE Lib "RSCOM" (ByVal Dat%)

Declare Function READBYTE Lib "RSCOM" () As Integer

Declare Sub SENDSTRING Lib "RSCOM" (ByVal Dat$)

Declare Function READSTRING Lib "RSCOM" () As String

Declare Sub CLEARBUFFER Lib "RSCOM" ()

Declare Function INBUFFER Lib "RSCOM" () As Integer

Declare Function OUTBUFFER Lib "RSCOM" () As Integer

Declare Sub DTR Lib "RSCOM" (ByVal b%)

Declare Sub RTS Lib "RSCOM" (ByVal b%)

Declare Sub TXD Lib "RSCOM" (ByVal b%)

Declare Function CTS Lib "RSCOM" () As Integer

Declare Function DSR Lib "RSCOM" () As Integer

Declare Function RI Lib "RSCOM" () As Integer

Declare Function DCD Lib "RSCOM" () As Integer

Declare Function INPUTS Lib "RSCOM" () As Integer

Declare Sub TIMEINIT Lib "RSCOM" ()

Declare Function TIMEREAD Lib "RSCOM" () As Double

Declare Sub DELAY Lib "RSCOM" (ByVal ms As Double)

Declare Sub REALTIME Lib "RSCOM" ()

Declare Sub NORMALTIME Lib "RSCOM" ()

 

Listing 3.12 Die Deklarationen zur RSCOM.DLL (RSCOM.bas)

 

Das Programm Bytes.vbp zeigt die Verwendung der DLL in Visual Basic. Hier werden zum Test einstellbare Bytes zwischen 0 und 255 gesendet und empfangene Bytes dargestellt. Man kann die gesendeten Bytes mit einer TXD-RXD-Verbindung von der selben Schnittstelle empfangen oder eine Verbindung mit anderen Geräten herstellen. Das Programm eignet sich auch für die Untersuchung serieller Zeichen mit einem Oszilloskop, weil über eine Timer-Prozedur ein ununterbrochener Zeichenstrom mit zehn Bytes pro Sekunde erzeugt wird.

 

Private Sub Form_Load()

  OPENCOM "COM2:1200,N,8,1"

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

  CLOSECOM

End Sub

 

Private Sub HScroll1_Change()

  Label2.Caption = Str$(HScroll1.Value)

End Sub

 

Private Sub Timer1_Timer()

  SENDBYTE (HScroll1.Value)

  Text1.Text = (Str$(READBYTE))

End Sub

 

Listing 3.13 Senden und Empfangen einzelner Bytes (Bytes.vbp)

 

 

Abb. 3.6 Byteübertragung in Visual Basic ((VBbyte.gif))

 

Ein zweites Beispiel zeigt den einfachen Zugriff auf alle Ein- und Ausgänge der Schnittstelle. Hier werden sowohl die Handshakeleitungen als auch die serielle Kommunikation über TXD und RXD berücksichtigt. Das Programm verwendet eine automatische Umschaltung auf COM1, falls COM2 nicht frei ist. Alle Ausgaben mit SENDBYTE erfolgen mit 1200 Baud.

 

 

Private Sub CommandSendByte_Click()

  D = Val(Text1.Text)

  If D < 0 Then D = 0

  If D > 255 Then D = 255

  SENDBYTE D

End Sub

 

Private Sub Form_Load()

 i = OPENCOM("COM2:1200,N,8,1")

 If i = 0 Then

    i = OPENCOM("COM1:1200,N,8,1")

    Option1.Value = True

 End If

 If i = 0 Then MsgBox ("COM Interface Error")

 BUFFERSIZE 1

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

  CLOSECOM

End Sub

 

 

Private Sub Option1_Click()

 CLOSECOM

 i = OPENCOM("COM1:1200,N,8,1")

 If i = 0 Then MsgBox ("COM1 not available")

End Sub

 

Private Sub Option2_Click()

 CLOSECOM

 i = OPENCOM("COM2:1200,N,8,1")

 If i = 0 Then MsgBox ("COM2 not available")

End Sub

 

Private Sub Timer1_Timer()

  Check1.Value = CTS()

  Check2.Value = DSR()

  Check3.Value = DCD()

  Check4.Value = RI()

  If Check5.Value Then TXD 1 Else TXD 0

  If Check6.Value Then DTR 1 Else DTR 0

  If Check7.Value Then RTS 1 Else RTS 0

  If INBUFFER > 0 Then

    D = READBYTE

    Text2.Text = Str$(D)

  End If

End Sub

 

Listing 3.14 Allgemeine Zugriffe auf die RS232 ((IOtest.vbp))

 

 

 

Abb. 3.7 Zugriff auf alle Leitungen der RS232-Schnittstelle ((IOtestVB.gif))


Download: VB-Beispiele

 


Windows 7, 64 Bit:
Ein Rückmeldung von Bernd Glaser

Gestern haben wir noch kurz die DLL in einer Applikation testen können - bislang mit Erfolg. Das installierte Betriebssystem ist Win 7 64bit  Pro. Der benutzte USB -->Serial-Wandler (PL2303) von Prolific funktioniert problemlos. Die kleine Testapplikation erstellten wir mit Visual Studio 2010 Pro, in VB.net. Im Konfigurations-Manager sollte die Zielplattform entsprechend auf x86 geschaltet werden, somit meckert auch der Compiler nicht mehr.


Verwendung einer DLL unter Python, von Jens Missun


Anbei ein kleines Python-Programm, welches die grundlegende Einbindung der Port.DLL darstellt. (Die Port.DLL ist eine RSCOM.DLL mit weniger Funktionen)

Entscheidend war:
1. Eine Windows DLL wird mit dem Befehl WinDLL(...) aufgerufen
2. Die Stringübergabe eines Null-Terminierten-String erfolgt mit c_char_p(b"COM1:1200,N,8,1"))

#=========================================
#== Beispielprogramm
07.02.2014 ==
#=========================================
#== RS232 mit der
Port.DLL ansprechen ==
#=========================================
from
time import *
from ctypes import
*
#=========================================
#DLL einbinden als
WinDLL
xx=WinDLL("Port.dll")
#Port öffnen - Nullterminierter
String
y=xx.OPENCOM(c_char_p(b"COM1:1200,N,8,1"))
#Kontrollausgabe
print("COM:",y)
#Spannung
auf Pin DTR
xx.DTR(1)
#Pin CTS auslesen und anzeigen
for i in
range(0,100):
a=xx.CTS()
if a==1:
print("#####")
 
elif a==0:
print("#")
else:
print("?")

sleep(0.1)
#Spannung DTR aus
xx.DTR(0)
#Port
schliessen
xx.CLOSECOM()
#Kontrollausgabe
print("Ende")
#=========================================

weiter
zurück