إنشاء المنفذ التسلسلي في التعليمات البرمجية في VB.net
-
11-07-2019 - |
سؤال
وأنا أحاول أن إنشاء منفذ تسلسلي في VB.net باستخدام رمز فقط. لأنني إنشاء مكتبة الصف الأول لا يمكن استخدام المكون المضمنة. لقد حاولت instantiating كائن SeialPort الجديدة ()، ولكن هذا لا يبدو أن يكون كافيا. أنا متأكد من أن هناك شيء بسيط أنا في عداد المفقودين وأي مساعدة سيكون موضع تقدير كبير! شكر!
وP.S. وأود أن أضيف أن المشكلة أواجه في هذا الوقت هو الحصول على رمز لمعالجة الحدث datareceived. البعض من أنه قد يكون العمل، ولكن لا استطيع ان اقول بسبب هذه المشكلة.
المحلول
إذا كنت تريد استخدام الأحداث تأكد من إعلان الكائن منفذ تسلسلي باستخدام "الأساسية WithEvents. والمثال أدناه تسمح لك لربط إلى منفذ تسلسلي، وسترفع حدث مع سلسلة الواردة.
Imports System.Threading
Imports System.IO
Imports System.Text
Imports System.IO.Ports
Public Class clsBarcodeScanner
Public Event ScanDataRecieved(ByVal data As String)
WithEvents comPort As SerialPort
Public Sub Connect()
Try
comPort = My.Computer.Ports.OpenSerialPort("COM5", 9600)
Catch
End Try
End Sub
Public Sub Disconnect()
If comPort IsNot Nothing AndAlso comPort.IsOpen Then
comPort.Close()
End If
End Sub
Private Sub comPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles comPort.DataReceived
Dim str As String = ""
If e.EventType = SerialData.Chars Then
Do
Dim bytecount As Integer = comPort.BytesToRead
If bytecount = 0 Then
Exit Do
End If
Dim byteBuffer(bytecount) As Byte
comPort.Read(byteBuffer, 0, bytecount)
str = str & System.Text.Encoding.ASCII.GetString(byteBuffer, 0, 1)
Loop
End If
RaiseEvent ScanDataRecieved(str)
End Sub
End Class
نصائح أخرى
ولقد وجدت <لأ href = "https://web.archive.org/web/20130709121945/http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial- COM-Port_2900_ في وC_2300 _-. NET.aspx "يختلط =" نوفولو noreferrer "> هذه المقالة أن تكون جيدة جدا.
والرمز لقد كتبت عن ذلك هو:
port = new System.IO.Ports.SerialPort(name, 4800, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
buffer = port.ReadLine();
// process line
}
واسف انها C # ولكن ...
والمسألة الوحيدة التي لدي مع ذلك هو إذا تم إسقاط الميناء في حين انها مفتوحة، التطبيق يبدو أن فشل في الخروج.
وشكرا لكم جميعا لمساعدتكم، خصوصا الجواب عن إنشاء فئة باستخدام الكلمة الأساسية WithEvents.
ولقد وجدت كبيرة من المادة حقا أن يشرح كيفية إنشاء فئة مدير للمنفذ التسلسلي. كما يناقش ارسال ثنائي فضلا عن بيانات عرافة إلى المنفذ التسلسلي. وكان من المفيد جدا.
ولقد استخدمت فئة SerialPort صافي في مشروع الماضي وعملت على ما يرام. هل حقا لا تحتاج إلى أي شيء آخر. تحقق من إعداد الأجهزة في لوحة التحكم وتأكد من أنك مثيل فئة مع نفس المعلمات.