Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Visual Βασικά Προγραμματισμός

Πώς να αποκτήσετε πρόσβαση Serial & Parallel Ports, χρησιμοποιώντας τη Visual Basic 6

Αν αναπτύσσει ένα πρόγραμμα με τη χρήση της Visual Basic 6 , και θέλετε να είναι σε θέση να έχουν πρόσβαση στις σειριακές και παράλληλες θύρες , πρέπει να εισαγάγετε συγκεκριμένες Visual Basic κώδικες προγραμματισμού στο πρόγραμμα του " . VB " το αρχείο . Μπορείτε να επεξεργαστείτε αυτό το αρχείο απευθείας στο περιβάλλον προγραμματισμού Visual Basic προγραμματισμό , αλλά ο κωδικός πρόσβασης για την προσθήκη με τις σειριακές και παράλληλες θύρες είναι πολύ μεγάλη και συγκεκριμένη . Οδηγίες
Η

1 Κάντε διπλό κλικ στο " Microsoft Visual Studio . NET » εικονίδιο του προγράμματος για να ξεκινήσει το πρόγραμμα . Κάντε κλικ στο "Αρχείο" μενού , μετακινήστε τον κέρσορα του ποντικιού σας πάνω από το " New " και επιλέξτε το " Project" επιλογή . 2

Κάντε κλικ στο " Έργα της Visual Basic " επιλογή κάτω από το " ? Τύποι έργου " τίτλο . Κάντε κλικ στο " Εφαρμογή κονσόλας " επιλογή κάτω από τα «Πρότυπα» τίτλο .
Εικόνων 3

Πληκτρολογήστε ένα όνομα για την εφαρμογή στο χώρο που παρέχεται και κάντε κλικ στο κουμπί "OK " για να δημιουργήσετε το του έργου . Το αρχείο " Module1.vb " ανοίγει αυτόματα
Η 4

Επικολλήστε τον ακόλουθο κώδικα στο αρχείο του έργου « Module1.vb " πριν από τη γραμμή του κώδικα που διαβάζει " Module Module1 " : .

Option Strict On

« Καθορίστε μια κλάση CommException που μεταβιβάζονται από την κατηγορία ApplicationException , και στη συνέχεια να ρίξει ένα αντικείμενο τύπου CommException όταν λαμβάνετε ένα μήνυμα λάθους message.Class CommExceptionInherits ApplicationExceptionSub Νέα ( ByVal Αιτιολογία Όπως String ) MyBase.New ( Λόγος ) Τέλος SubEnd Class
5

Επικολλήστε τον ακόλουθο κώδικα στο αρχείο " Module1.vb " του έργου μετά τη γραμμή του κώδικα που διαβάζει " Module Module1 " :

' αναγνωρίσει structures.Public Δομή DCBPublic DCBlength Όπως Int32Public bAUDRATE Όπως Int32Public fBitFields Όπως Int32 » Δείτε Σχόλια σε Win32API.TxtPublic wReserved Όπως Int16Public XonLim Όπως Int16Public XoffLim Όπως Int16Public ByteSize Όπως BytePublic Ισοτιμία Όπως BytePublic StopBits Όπως BytePublic XonChar Όπως BytePublic XoffChar Όπως BytePublic ErrorChar Όπως BytePublic EofChar Όπως BytePublic EvtChar Όπως BytePublic wReserved1 Όπως INT16 » Reserved ? Do Not UseEnd Δομή

Δημόσια Δομή COMMTIMEOUTSPublic ReadIntervalTimeout Όπως Int32Public ReadTotalTimeoutMultiplier Όπως Int32Public ReadTotalTimeoutConstant Όπως Int32Public WriteTotalTimeoutMultiplier Όπως Int32Public WriteTotalTimeoutConstant Όπως Int32End Δομή

« κηρύξει constants.Public Const GENERIC_READ Όπως Int32 = & H80000000Public Const GENERIC_WRITE Όπως Int32 = & H40000000Public Const OPEN_EXISTING Όπως Int32 = 3Public Const FILE_ATTRIBUTE_NORMAL Όπως Int32 = & H80Public Const NOPARITY Όπως Int32 = 0Δημόσιες Const ONESTOPBIT Όπως Int32 = 0

' αναγνωρίσει αναφορές στους εξωτερικούς functions.Public κηρύξει Λειτουργία Auto CreateFile Lib " kernel32.dll " _ ( ByVal lpFileName As String , ByVal dwDesiredAccess Όπως Int32 , _ByVal dwShareMode Όπως Int32 , ByVal lpSecurityAttributes Όπως IntPtr , _ByVal dwCreationDisposition Όπως Int32 , ByVal dwFlagsAndAttributes Όπως Int32 , _ByVal hTemplateFile Όπως IntPtr ) Όπως IntPtr

Δημόσια αναγνωρίσει Λειτουργία Auto GetCommState Lib " kernel32.dll " ( ByVal nCid Όπως IntPtr , _ByRef lpDCB Όπως DCB ) Όπως Boolean

Public Declare Αυτόματη Λειτουργία SetCommState Lib " kernel32.dll " ( ByVal nCid Όπως IntPtr , _ByRef lpDCB Όπως DCB ) Όπως Boolean

Δημόσια αναγνωρίσει GetCommTimeouts Λειτουργία Auto Lib " kernel32.dll " ( ByVal hFile Όπως IntPtr , _ByRef lpCommTimeouts Όπως COMMTIMEOUTS ) Όπως Boolean

Δημόσια αναγνωρίσει SetCommTimeouts Λειτουργία Auto Lib " kernel32.dll " ( ByVal hFile Όπως IntPtr , _ByRef lpCommTimeouts Όπως COMMTIMEOUTS ) Όπως Boolean

Δημόσια κηρύξει Λειτουργία Auto WriteFile Lib " kernel32 . dll " ( ByVal hFile Όπως IntPtr , _ByVal lpBuffer Όπως Byte ( ) , ByVal nNumberOfBytesToWrite Όπως Int32 , _ByRef lpNumberOfBytesWritten Όπως Int32 , ByVal lpOverlapped Όπως IntPtr ) Όπως Boolean

Δημόσια αναγνωρίσει Λειτουργία Auto ReadFile Lib " kernel32.dll " ? ( ByVal hFile Όπως IntPtr , _ByVal lpBuffer Όπως Byte ( ) , ByVal nNumberOfBytesToRead Όπως Int32 , _ByRef lpNumberOfBytesRead Όπως Int32 , ByVal lpOverlapped Όπως IntPtr ) Όπως Boolean

Δημόσια αναγνωρίσει Λειτουργία Auto CloseHandle Lib " kernel32.dll " ( ByVal hObject Όπως IntPtr ) Όπως Boolean
Η 6

Επικολλήστε τον ακόλουθο κώδικα στο αρχείο " Module1.vb " του έργου μετά τη γραμμή του κώδικα που διαβάζει " Sub Main » :

« να αναγνωρίσει τις τοπικές μεταβλητές που θα χρησιμοποιήσετε στο code.Dim hSerialPort , hParallelPort Όπως IntPtrDim επιτυχία ως BooleanDim MyDCB Όπως DCBDim MyCommTimeouts Όπως COMMTIMEOUTSDim BytesWritten , BytesRead Όπως Int32Dim Buffer ( ) Όπως Byte

' αναγνωρίσει τις μεταβλητές για να χρησιμοποιήσετε για encoding.Dim oEncoder Όπως New System.Text.ASCIIEncodingDim oEnc Όπως System.Text.Encoding = oEncoder.GetEncoding ( 1252 )

«Μετατροπή String για την Byte ( ) . Ρυθμιστικό = oEnc.GetBytes ( " Test " ) Δοκιμάστε ' Δείτε το σειριακό port.Console.WriteLine ( "Πρόσβαση στο σειριακή θύρα COM1 ") » Αποκτήστε μια λαβή στην COM1 σειριακό port.hSerialPort = CreateFile ( " COM1 " , GENERIC_READ Ή GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ) « Βεβαιωθείτε ότι η λαβή που λαμβάνεται είναι valid.If hSerialPort.ToInt32 = -1 ThenThrow Νέα CommException ( " δεν είναι δυνατή η απόκτηση ενός λαβή στη θύρα COM1 " ) End If ' ανακτήσετε τις τρέχουσες ρυθμίσεις ελέγχου . επιτυχία = GetCommState ( hSerialPort , MyDCB ) Αν επιτυχία = False ThenThrow Νέα CommException ( " Αδύνατη η ανάκτηση τις τρέχουσες ρυθμίσεις ελέγχου" ) End If ' Τροποποιήστε τις ιδιότητες της δομής ανακτηθεί DCB ανάλογα με την περίπτωση . " ΠΡΟΣΟΧΗ : Φροντίστε να τροποποιήσετε τις ιδιότητες σύμφωνα με τους υποστηρίζεται values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Reconfigure COM1 με βάση τις ιδιότητες των τροποποιημένων DCB structure.Success = SetCommState ( hSerialPort , MyDCB ) Αν επιτυχία = False ThenThrow Νέα CommException ( "Αδύνατη η αναμορφώσουν COM1 " ) End If ' ανακτήσετε τις τρέχουσες time-out settings.Success = GetCommTimeouts ( hSerialPort , MyCommTimeouts ) Αν επιτυχία = False ThenThrow Νέα CommException ( " Αδύνατη η ανάκτηση τρέχουσες ρυθμίσεις time-out " ) End If ' Τροποποιήστε τις ιδιότητες της δομής ανακτηθεί COMMTIMEOUTS ανάλογα με την περίπτωση . " ΠΡΟΣΟΧΗ : Φροντίστε να τροποποιήσετε τις ιδιότητες σύμφωνα με τους υποστηρίζεται values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Ρυθμίστε ξανά τις ρυθμίσεις χρονικού ορίου , με βάση τις ιδιότητες του τροποποιημένου COMMTIMEOUTS structure.Success = SetCommTimeouts ( hSerialPort , MyCommTimeouts ) Αν επιτυχία = False ThenThrow Νέα CommException ( "Αδύνατη ξανά τις ρυθμίσεις του time-out " ) End If " Εγγραφή δεδομένων σε COM1.Console.WriteLine ( « Γράφοντας τα ακόλουθα δεδομένα στο COM1 : Test " ) επιτυχία = WriteFile ( hSerialPort , Buffer , Buffer.Length , BytesWritten , IntPtr.Zero ) Αν επιτυχία = False ThenThrow Νέα CommException ( " Αδύνατη η εγγραφή στο COM1 " ) End If ' Διαβάστε τα δεδομένα από COM1.Success = ReadFile ( hSerialPort , Buffer , BytesWritten , BytesRead , IntPtr.Zero ) Αν επιτυχία = False ThenThrow Νέα CommException ( " Αδύνατη η ανάγνωση από την COM1 ") End IfCatch πρώην Όπως ExceptionConsole.WriteLine ( Ex.Message ) Τέλος « Απελευθερώστε τη λαβή στην COM1 . επιτυχία = CloseHandle ( hSerialPort ) Αν επιτυχία = False ThenConsole.WriteLine ( " Αδύνατη η επαναφορά λαβή στην COM1 ") End IfEnd Δοκιμάστε
Η 7

Επικολλήστε τον παρακάτω κώδικα αμέσως μετά τον κώδικα που εισάγεται στο αρχείο " Module1.vb " στο Βήμα 6 :

Δοκιμάστε ' παράλληλη port.Console.WriteLine ( "Πρόσβαση στο παράλληλη θύρα LPT1 ") » Αποκτήστε μια λαβή στην LPT1 παράλληλα port.hParallelPort = CreateFile ( " ? LPT1 " , GENERIC_READ Ή GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero )« Βεβαιωθείτε ότι η λαβή που λαμβάνεται είναι valid.If hParallelPort.ToInt32 = -1 ThenThrow Νέα CommException ( " δεν είναι δυνατή η απόκτηση μια λαβή για να η θύρα LPT1 " ) End If ' Ανακτήστε τον έλεγχο ρεύματος settings.Success = GetCommState ( hParallelPort , MyDCB ) Αν επιτυχία = False ThenThrow Νέα CommException ( " Αδύνατη η ανάκτηση τις τρέχουσες ρυθμίσεις ελέγχου " ) End If ' Τροποποιήστε τις ιδιότητες του προέρχονται DCB δομή ανάλογα με την περίπτωση . " ΠΡΟΣΟΧΗ : Φροντίστε να τροποποιήσετε τις ιδιότητες σύμφωνα με τους υποστηρίζεται values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Reconfigure LPT1 με βάση τις ιδιότητες των τροποποιημένων DCB structure.Success = SetCommState ( hParallelPort , MyDCB ) Αν επιτυχία = False ThenThrow Νέα CommException ( "Αδύνατη η αναμορφώσουν LPT1 " ) End If ' ανακτήσετε τις τρέχουσες time-out settings.Success = GetCommTimeouts ( hParallelPort , MyCommTimeouts ) Αν επιτυχία = False ThenThrow Νέα CommException ( " Αδύνατη η ανάκτηση τρέχουσες ρυθμίσεις time-out " ) End If ' Τροποποιήστε τις ιδιότητες της δομής ανακτηθεί COMMTIMEOUTS ανάλογα με την περίπτωση . " ΠΡΟΣΟΧΗ : Φροντίστε να τροποποιήσετε τις ιδιότητες σύμφωνα με τους υποστηρίζεται values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Ρυθμίστε ξανά τις ρυθμίσεις χρονικού ορίου , με βάση τις ιδιότητες του τροποποιημένου COMMTIMEOUTS structure.Success = SetCommTimeouts ( hParallelPort , MyCommTimeouts ) Αν επιτυχία = False ThenThrow Νέα CommException ( "Αδύνατη ξανά τις ρυθμίσεις του time-out " ) End If " Εγγραφή δεδομένων στη θύρα LPT1 . «Σημείωση : Δεν μπορείτε να διαβάσετε δεδομένα από μια παράλληλη θύρα καλώντας το ReadFile function.Console.WriteLine ( « Γράφοντας τα ακόλουθα δεδομένα στο LPT1 : Test " ) Επιτυχία = WriteFile ( hParallelPort , Buffer , Buffer.Length , BytesWritten , IntPtr.Zero ) Αν επιτυχία = False ThenThrow Νέα CommException ( " Αδύνατη η εγγραφή σε LPT1 ") End IfCatch πρώην Όπως ExceptionConsole.WriteLine ( Ex.Message ) Τέλος « Απελευθερώστε τη λαβή για να LPT1.Success = CloseHandle ( hParallelPort ) Αν επιτυχία = False ThenConsole . WriteLine ( " Αδύνατη η επαναφορά λαβή σε LPT1 ") End IfEnd Δοκιμάστε

Console.WriteLine ( " Πιέστε το πλήκτρο ENTER για να κλείσετε " ) Console.ReadLine ( )
8

Κάντε κλικ στο "Build " μενού και επιλέξτε το "Build Solution " επιλογή . Κάντε κλικ στο μενού " Debug " και επιλέξτε το "Start " επιλογή . Η εφαρμογή έχει πλέον πρόσβαση στις σειριακές και παράλληλες θύρες .
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα