- 締切済み
VB2010 シリアル受信した情報を表示する
VB2010 シリアル受信した情報を表示する フォームが表示されたらポートを開けてテキストボックスに文字を表示させたいです。 送られてくる情報はSTXとETXで挟まれた数十文字のアスキー文字です。 フォーム表示中は、teratermやハイパーターミナルで接続不可エラーが出ますし その逆でteratermやハイパーターミナルで接続している時にはcomポートエラーが出ます。 teratermやハイパーターミナルではシリアルで受信した文字が表示されています。 そのような状況で下記、シンプルなコードを作りましたが表示されません。 テキストボックスが何も変化しない状態です。なんでもいいので、テキストボックスに受信した情報を出してみたいです。 http://msdn.microsoft.com/ja-jp/library/cc720852.aspx を参考に受信部分に使っています。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call SerialPort1.Open() End Sub Delegate Sub AddDataDelegate(ByVal str As String) Private Sub AddData(ByVal str As String) TextBox1.Text = TextBox1.Text + str End Sub Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim strDataReceived As String Dim add As New AddDataDelegate(AddressOf AddData) Try strDataReceived = SerialPort1.ReadLine Catch ex As Exception strDataReceived = ex.Message End Try TextBox1.Invoke(add, strDataReceived) End Sub End Class
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Hayashi_Trek
- ベストアンサー率44% (366/818)
送られてくるデータは、ETXの後に改行(CrLf)が入ってますか? 入っていなければReadLine()は完了しません。 私なら次のような手順で取り込みます。 1.シリアルポートにデータが無ければ戻る。 2.1バイト読込む。(受信文字とする) 3.受信文字がSTXなら、作業バッファをクリアして、データ中フラグを立てる。 5.データ中フラグが立っていたら、受信文字を作業バッファに加える。 4.受信文字がETXなら、データ中フラグを消す。 6.受信文字がETXなら、作業バッファを表示する。 7.1へ戻る。
- YUI_AI
- ベストアンサー率45% (303/661)
参考にしたプログラムでは、ボーレート(BaudRate)やパリティ(Parity)データビット(DataBits) 等が設定されていませんが、大丈夫でしょうか? ※多分、設定が合っていない為、正常にデータの送受信が出来ていないのだと思います。 下記URLのサンプルを参考にパラメータを設定してからOpenするべきだと思われます。 http://msdn.microsoft.com/ja-jp/library/system.io.ports.serialport.aspx ※下記設定項目 _serialPort.PortName = SetPortName(_serialPort.PortName) _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate) _serialPort.Parity = SetPortParity(_serialPort.Parity) _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits) _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits) _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake) プロパティの説明はこちらを参照 http://msdn.microsoft.com/ja-jp/library/system.io.ports.serialport_members.aspx