• 締切済み

Visual Basicにてシリアル通信

VB2008でシリアル通信をしたいと思っております。 MSDNにてSerialPortコントロールを使った例が解説されており、 http://msdn.microsoft.com/ja-jp/library/cc720852.aspx それを利用して基本的な送信/受信ができることは確認しました。 次に受信データにより処理を仕分けたい、 例えば、エラーコードが帰ってきたらエラー用の処理、 正常なリターンがあれば正常処理のような動作を実装したい場合は、 どうすれば良いでしょうか。 アドバイスいただけますと助かります。 よろしくお願いいたします。

みんなの回答

回答No.1

正常系と異常系で処理を分岐させればいいんじゃないかと。 何がわからないのかいまいち理解できず。 まさかif文とかcase文がわからないとかじゃないですよね?

関連するQ&A

  • VB2010で、シリアル通信の方法を教えてください。

    VB2010で、シリアル通信の方法を教えてください。 ツールボックスの「Serial Port」を使っています。 送信までは難なくできたのですが、受信が旨くいきません。 参考にしたサイトは、 http://msdn.microsoft.com/ja-jp/library/cc720852.aspx です。 これを実行すると、受信が出来ないだけでなく、フリーズしてしまいます。 どうやったら、受信できるのでしょうか?

  • VB.netで、シリアル通信のタイムアウト処理について

    VB.netで、シリアル通信のタイムアウト処理について http://msdn.microsoft.com/ja-jp/library/7ya7y41k.aspx このサイトのコードを、参考にしています。 ------------------------------------ここから Dim com1 As IO.Ports.SerialPort = Nothing Try com1 = My.Computer.Ports.OpenSerialPort("COM1") com1.ReadTimeout = 10000 Catch ex As TimeoutException returnStr = "Error: Serial Port read timed out." Finally If com1 IsNot Nothing Then com1.Close() End Try ------------------------------------ここまで この方法ですと、タイムアウトが発生したらポートを閉じるようですが、これを、送信したシリアルのデータを再度、送信させたいと思います。 そして、何度かリトライを掛けた後に、やっぱり駄目だったときに ポートを閉じたいと思います。 どんな方法がありますか? 参考になりそうなサイトなどがありましたら、教えていただけませんか。 以上、よろしくお願いします。

  • visual c# 2010 シリアル通信アプリ

    http://www.kana-soft.com/tech/sample_0007.htm のサイトを参考に、マイコンとのシリアル通信評価に使うPCのアプリケーションを visual c# 2010で作っています。 一応データを受け取るようになったのですが、 63H 62H 61H 00H (アスキーコードだと"cba<null>") というデータを送っているはずなのですが、 扣a というデータが受信されてしまいます。 正しく受信するにはどうすれば良いでしょうか。 (該当していそうな部分のソースです) : : /****************************************************************************/ /*! * @brief データ受信が発生したときのイベント処理. * * @param [in] sender イベントの送信元のオブジェクト. * @param [in] e イベント情報. * * @retval なし. */ private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { //! シリアルポートをオープンしていない場合、処理を行わない. if (serialPort1.IsOpen == false) { return; } try { //! 受信データを読み込む. string data = serialPort1.ReadExisting(); //! 受信したデータをテキストボックスに書き込む. Invoke(new Delegate_RcvDataToTextBox(RcvDataToTextBox), new Object[] { data }); } catch (Exception ex) { MessageBox.Show(ex.Message); } } /****************************************************************************/ /*! * @brief 受信データをテキストボックスに書き込む. * * @param [in] data 受信した文字列. * * @retval なし. */ private void RcvDataToTextBox(string data) { //! 受信データをテキストボックスの最後に追記する. if (data != null) { rcvTextBox.AppendText(data); } }

  • VB2010で、シリアル通信をするには

    VB2010で、シリアル通信をするには シリアルポートをopenしようとすると、エラーで弾かれてしまいます。 どのように対処したら良いですか? 使っているソースコードは、下記の通り。 Private Sub ButtonRsStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonRsStart.Click Try '例外処理のはじまり If SerialPort1.IsOpen = True Then 'ポートはオープン済み MessageBox.Show("すでに" & SerialPort1.PortName & "は接続されています。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If SerialPort1.PortName = "COM1" 'オープンするポート名を格納 SerialPort1.Open() 'ポートオープン PORT_STATE.Text = "OPEN" Catch ex As Exception '例外処理 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub --------------- エラーが発生する場所は、「Catch 」になります。 エラーメッセージは、「ポート 'COM1' へのアクセスが拒否されました。」です。 何が原因なのか、さっぱり分かりません。 ヒントになりそうな解答を頂けないでしょうか?

  • シリアル通信がすっきり終れない

    vb2010expressの初心者です。 コンテックのサイト http://www.contec.co.jp/product/device/serial/application.html からのプログラムを借用してシリアルの受信をしております。初心者なのでくわしい内容は 理解できていないのですが、とにかくうまく動いてくれます。 ところが、このアプリを終了させようとするといつもグダグダしてしまい、すきっと終了 してくれません。結局タスクバーから右クリックでいつも終了させています。 SerialPort1.Close() MeClose() Applocation.Exit() いろいろためして「みましたが、すっきり終ってくれません。どう書いたらいいんでしょうか おしえてください。

  • シリアル通信(タブレット、シーケンサー)

    現在、WindowsXP + VB6 + MSComm <ー> FXn2-16MR(RS232Cユニット)を シリアル通信で制御しています。これをWindows8.1(タブレット) + VB2013で全面的に 書き換えを行っています。テスト用のパソコンとは何の問題間無く通信は通りますが、 対シーケンサーだと送信はしているようだが、受信が全くできない状態です。 制御パラメータは、SerialPort1.Handshake=None, DtrEnable=True, RtsEnable=True 送信時のプロトコルは、<ENQ> + データ(ASCコード) 受信時のプロトコルは、<STX> + データ(ASCコード)+ <ETX> VB6は、この設定で動作しています。 VB2013では、制御パラメータは同じし送受信では普通に SerialPort1.Write、SerialPort1.ReadLineを使っています。 宜しくお願いします。

  • ビジュアル継承について

    C#を勉強しているのですが、「ビジュアル継承」というものがあるのを初めて知って、感動しています。 http://msdn.microsoft.com/ja-jp/library/1z3efhd2.aspx .NETではVB、C#、J#がサポートしているとのことなのですが、.NET以外で似たようなものがあったら教えてください。(たとえばQtではこうだよとか。)

  • msdnのヘルプについて

    都合上、オフラインのヘルプではなく、msdnでヘルプを見てるのですが たとえばアクセスのRunSQLメソッドのヘルプを見たければ、 http://msdn.microsoft.com/ja-jp/library/office/ff194626.aspx のように、msdnのオフィスのページのヘルプを発見できましたが、 違う例えで、VBA.Strings.UCase関数のヘルプを見たい場合は、 オフィスのページのヘルプは用意されてないのでしょうか? UCase関数に関しては、 http://msdn.microsoft.com/ja-jp/library/53e2ew8a(v=VS.90).aspx このページしか見つけられません。 内容はVisual Basicのものですが、VBAライブラリーのものは、VBのページをVBAに読み替えてるしかないのでしょうか? 私は、VBはよく知らないので、VBAのヘルプのページがあればな。と思うのですが、 無理でしょうか?

  • シリアル通信について

    VB6にてシリアル通信プログラムを作成しましたが、データが受信できません。 ハイパーターミナルなら受信できて、一度ハイパーターミナルを使用すると、作成したプログラムでもデータが受信できるようになります。(再起動するとまたハイパーターミナルを使用するまで受信できません) 自作プログラムでなにか処理がたりないのでしょうか?

  • 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

専門家に質問してみよう