質問

コードのみを使用して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進データをシリアルポートに送信する方法についても説明します。とても役に立ちました。

http://www.dreamincode.net/forums/showtopic37361.htm

過去のプロジェクトでSerialPort .Netクラスを使用しましたが、うまくいきました。あなたは本当に他に何も必要としません。コントロールパネルのハードウェア設定を確認し、同じパラメーターを使用してクラスをインスタンス化してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top