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))
#=========================================
#== 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")
#=========================================