シリアル通信で制御しようと
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
っというコードをかきました。
送信ができているんですが何も表示されません。
どういうふうにしたら表示できるかご教授を願いします。
自分ではもうわかりません
>.Parity = IO.Ports.Parity.Even ' パリティチェックなし
パリティが偶数になっていますが。(^^;
ありがとうございます。
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をつかってブルーボックスとシリアル通信をしようとしています。
まだできません。どなたかご教授お願いします。
Visual Basic 掲示板
でVISTAでUSB-RSAQ5が使えなくてメーカーに連絡して
最新ドライバをもらったという話がありました。
もしOSがVISTAなら一度確認してみては?
気になったところ
相手に送信するコマンドならば
ADRS = Chr(&H80) & Chr(&H7)
ではないですか?
PC -> &h80 &h07
BLUEBOX -> &h06
とかそういうプロトコルでは?
送信に制御コード使っているのであれば
受信にも含まれているでしょうから表示可能な
文字に変換してからでないと正しく表示できないと
思います。
#ところでブルーボックスとは何をする機器でしょうか?
#型番とかはありませんか?(Googleで調べられませんでした)
1回目
.Parity = IO.Ports.Parity.Even ' パリティチェックなし
2回目
.Parity = IO.Ports.Parity.None ' パリティチェック偶数
なんで実装とコメントが逆になるんだろう?
>送信ができているんですが何も表示されません。
ヘキサで表示してみたら
うにさんありがとうございます。
>受信にも含まれているでしょうから表示可能な文字に変換してからでないと正しく表示できないと思います。
初心者でまだ勉強不足のせいかやりかたがわかりません。教えていただけませんか??
K.Mさんありがとうございます。
ちょっと書き間違えました。
ヘキサのやりかたをおしえていただけませんか??
RecieveDataTextBox.Text &= DataString
でブレークをかけて止まるか否かです。
止まらなければ何も送られてきていませんから、
どの様に表示しても同じです。
先ずどの様なデーターが返って来るのを期待しているか
書くべきですね。
それと
>ADRS = &H80 Or &H7 '後で書き付け足した場所
>ComSerialPort.WriteLine(ADRS)
ORはビット演算子なので普通はこういう風には使わない、
ADRS = Chr(&H80) & Chr(&H7)
これの間違では無いかと聞かれていますがどうなのですか?
>送信ができているんですが何も表示されません。
なぜ送信が出来ていると思われるのですか?
.Parity = IO.Ports.Parity.None
こういった設定さえ間違わなければ、コード自体は間違えは
有りませんので通信は出来るはずです。
ドライバーの不具合を疑うなら、ループバックを言う方法で
チェックします。