■ VB2005のシリアル通信で

[Visual Basic 初心者掲示板] [過去ログの一覧]


ネギ4本 2008/02/17(日) 18:52:12 <初心者>
シリアル通信で制御しようと
Public Class RS232CForm

    Dim ADRS As Integer '後で書き付け足した場所
    Dim DT As Integer '後で書き付け足した場所


    Private Sub RS232CForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        With ComSerialPort
            .PortName = "COM4"                  ' 通信ポートはCOM4
            .BaudRate = 4800                    ' 通信速度は9600bps
            .DataBits = 8                       ' データ長は8ビット
            .Parity = IO.Ports.Parity.Even     ' パリティチェックなし
            .StopBits = IO.Ports.StopBits.One   ' ストップビットは1
            ' ハードウェアによるハンドシェイク
            .Handshake = IO.Ports.Handshake.None
            .RtsEnable = True                  ' RTSラインを有効にする

        End With

    End Sub

    Private Sub ConnectButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectButton.Click

        Try
            ' 通信ポートが開いているかどうかの判定
            If ComSerialPort.IsOpen = False Then
                ' 通信ポートを開く場合の処理
                ComSerialPort.Open()            ' 通信ポートを開く
                ConnectButton.Text = "通信停止"
            Else
                '   通信ポートを切断する場合の処理
                ComSerialPort.Close()           ' 通信ポートを切断
                ConnectButton.Text = "通信開始"
            End If
        Catch ex As Exception
            ' 通信ポートの接続・切断時のエラー処理
            MessageBox.Show(ex.Message, "接続エラー", _
                MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub SendButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendButton.Click

        ' 通信ポートが開いているかどうかの判定
        If ComSerialPort.IsOpen Then
            Try
                ' データの送信

                ADRS = &H80 Or &H7 '後で書き付け足した場所

                ComSerialPort.WriteLine(ADRS)
            Catch ex As Exception
                ' 送信エラー時の処理
                MessageBox.Show(ex.Message, "送信エラー", _
                    MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("通信が開始されていません", "送信エラー", _
                MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If

    End Sub

    ' デリゲート型の宣言
    Delegate Sub RecieveDataDelegate(ByVal RecieveData As String)


    ' デリゲート型のプロシージャを宣言
    Private Sub SetRecieveData(ByVal DataString As String)

        RecieveDataTextBox.Text &= DataString

    End Sub

    ' SerialPortコントロールのDataReceivedイベントハンドラ
    Private Sub ComSerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles ComSerialPort.DataReceived

        Dim RecieveData As String
        ' デリゲート型の変数の宣言と生成
        Dim recieve As New RecieveDataDelegate(AddressOf SetRecieveData)

        Try
            ' データの受信
            Dim D1 As Integer
            DT = &H10 Or D1
            D1 = 0

            RecieveData = ComSerialPort.ReadLine
        Catch ex As Exception
            ' 受信エラー時の処理
            RecieveData = ex.Message
        End Try


        'デリゲート型のプロシージャを呼び出す
        Invoke(recieve, RecieveData)

    End Sub

End Class

っというコードをかきました。
送信ができているんですが何も表示されません。
どういうふうにしたら表示できるかご教授を願いします。

自分ではもうわかりません

我龍院 2008/02/18(月) 08:07:26
>.Parity = IO.Ports.Parity.Even     ' パリティチェックなし
パリティが偶数になっていますが。(^^;

ネギ4本 2008/02/18(月) 16:21:57 <初心者>
ありがとうございます。
Public Class RS232CForm

    Dim ADRS As Integer '後で書き付け足した場所
    Dim DT As Integer '後で書き付け足した場所


    Private Sub RS232CForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        With ComSerialPort
            .PortName = "COM4"                  ' 通信ポートはCOM4
            .BaudRate = 4800                    ' 通信速度は4800bps
            .DataBits = 8                     ' データ長は8ビット
            .Parity = IO.Ports.Parity.None     ' パリティチェック偶数
            .StopBits = IO.Ports.StopBits.One   ' ストップビットは1
            ' ハードウェアによるハンドシェイク
            .Handshake = IO.Ports.Handshake.None
            .RtsEnable = True                  ' RTSラインを有効にする

        End With

    End Sub

    Private Sub ConnectButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectButton.Click

        Try
            ' 通信ポートが開いているかどうかの判定
            If ComSerialPort.IsOpen = False Then
                ' 通信ポートを開く場合の処理
                ComSerialPort.Open()            ' 通信ポートを開く
                ConnectButton.Text = "通信停止"
            Else
                '   通信ポートを切断する場合の処理
                ComSerialPort.Close()           ' 通信ポートを切断
                ConnectButton.Text = "通信開始"
            End If
        Catch ex As Exception
            ' 通信ポートの接続・切断時のエラー処理
            MessageBox.Show(ex.Message, "接続エラー", _
                MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub SendButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SendButton.Click

        ' 通信ポートが開いているかどうかの判定
        If ComSerialPort.IsOpen Then
            Try
                ' データの送信

                ADRS = &H80 Or &H7 '後で書き付け足した場所

                ComSerialPort.WriteLine(ADRS)
            Catch ex As Exception
                ' 送信エラー時の処理
                MessageBox.Show(ex.Message, "送信エラー", _
                    MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("通信が開始されていません", "送信エラー", _
                MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If

    End Sub

    ' デリゲート型の宣言
    Delegate Sub RecieveDataDelegate(ByVal RecieveData As String)


    ' デリゲート型のプロシージャを宣言
    Private Sub SetRecieveData(ByVal DataString As String)

        RecieveDataTextBox.Text &= DataString '受信したデータをtextboxに書き込む

    End Sub

    ' SerialPortコントロールのDataReceivedイベントハンドラ
    Private Sub ComSerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles ComSerialPort.DataReceived

        Dim RecieveData As String
        ' デリゲート型の変数の宣言と生成
        Dim recieve As New RecieveDataDelegate(AddressOf SetRecieveData)

        Try
            ' データの受信
            Dim D1 As Integer
            DT = &H10 Or D1
            D1 = 0

            RecieveData = ComSerialPort.ReadLine
        Catch ex As Exception
            ' 受信エラー時の処理
            RecieveData = ex.Message
        End Try


        'デリゲート型のプロシージャを呼び出す
        Invoke(recieve, RecieveData)

    End Sub

End Class

USB-RSAQ5をつかってブルーボックスとシリアル通信をしようとしています。
まだできません。どなたかご教授お願いします。

うに 2008/02/18(月) 17:50:53
Visual Basic 掲示板
でVISTAでUSB-RSAQ5が使えなくてメーカーに連絡して
最新ドライバをもらったという話がありました。
もしOSがVISTAなら一度確認してみては?

気になったところ
相手に送信するコマンドならば
ADRS = Chr(&H80) & Chr(&H7)
ではないですか?
PC      -> &h80 &h07
BLUEBOX -> &h06
とかそういうプロトコルでは?

送信に制御コード使っているのであれば
受信にも含まれているでしょうから表示可能な
文字に変換してからでないと正しく表示できないと
思います。

#ところでブルーボックスとは何をする機器でしょうか?
#型番とかはありませんか?(Googleで調べられませんでした)

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library