VB.netのコードでシリアルポートを作成する
-
11-07-2019 - |
質問
コードのみを使用してVB.netにシリアルポートを作成しようとしています。クラスライブラリを作成しているため、組み込みコンポーネントを使用できません。新しいSeialPort()オブジェクトをインスタンス化しようとしましたが、それで十分ではないようです。私は行方不明の簡単なものがあると確信しており、どんな助けも大歓迎です!ありがとう!
PS私が現時点で抱えている問題は、datareceivedイベントを処理するコードを取得することです。それ以外は動作している可能性がありますが、その問題のためにわかりません。
解決
イベントを使用する場合は、「withevents」を使用してserialPortオブジェクトを宣言してください。以下の例では、シリアルポートに接続し、受信した文字列でイベントを発生させます。
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
他のヒント
この記事は非常に優れています。
それから書いたコードは:
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キーワードを使用してクラスをインスタンス化することについての回答に感謝します。
シリアルポート用のマネージャークラスを作成する方法を説明する本当に素晴らしい記事を見つけました。また、バイナリおよび16進データをシリアルポートに送信する方法についても説明します。とても役に立ちました。
過去のプロジェクトでSerialPort .Netクラスを使用しましたが、うまくいきました。あなたは本当に他に何も必要としません。コントロールパネルのハードウェア設定を確認し、同じパラメーターを使用してクラスをインスタンス化してください。