質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

受付中

VB.NET でのCOM通信の受信について

hiro3333
hiro3333

総合スコア0

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

2回答

0評価

0クリップ

9339閲覧

投稿2016/05/27 09:25

環境:
Visual Studio 2008 VB.NET
Windows 10

VB.NETで、COM通信を行いたいと思います。

Public Class Form1 Delegate Sub DataDelegate(ByVal sdata As String) Public SerialPort1 As System.IO.Ports.SerialPort = New System.IO.Ports.SerialPort() Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try '例外処理のはじまり SerialPort1.Close() If SerialPort1.IsOpen = True Then 'ポートはオープン済み MessageBox.Show("", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If SerialPort1.PortName = TextBox_Com.Text 'オープンするポート名を格納 ' シリアルポートの通信速度指定 SerialPort1.BaudRate = 9600 ' シリアルポートのパリティ指定 SerialPort1.Parity = System.IO.Ports.Parity.None ' シリアルポートのビット数指定 SerialPort1.DataBits = 8 ' シリアルポートのストップビット指定 SerialPort1.StopBits = System.IO.Ports.StopBits.One SerialPort1.Open() 'ポートオープン Catch ex As Exception '例外処理 TextBox_Line.Text = TextBox_Line.Text & ex.ToString & vbCrLf & ex.Message & vbCrLf End Try SerialPort1.RtsEnable = True 'RTSをON End Sub Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Dim ReceivedData As String = " " '受信データ用変数を宣言します Try ReceivedData = SerialPort1.ReadLine 'データを受信します Catch ex As Exception ReceivedData = ex.Message '例外処理を行います End Try 'Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します Dim adre As New DataDelegate(AddressOf PrintData) Me.Invoke(adre, ReceivedData) End Sub Private Sub PrintData(ByVal sdata As String) TextBox_Line.Text = TextBox_Line.Text & sdata & vbCrLf End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If SerialPort1.IsOpen = True Then 'ポートオープン済み SerialPort1.Close() 'ポートクローズ End If End Sub End Class

送信側からSend()して見ると、
送信には成功しているようなのですが、
受信側の

SerialPort1.Open() 'ポートオープン

の処理で例外が発生します。
通信はUSB接続で行っています。
COMポート番号はあっていることを確認しています。
TeratermでCOMポート受信もできることも確認済みです。

System.IO.IOException: システムに接続されたデバイスが機能していません。 場所 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) 場所 System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Boolean discardNull) 場所 System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) 場所 System.IO.Ports.SerialPort.Open() 場所 Travel_Car_Register_Recv.Form1.Button1_Click(Object sender, EventArgs e) 場所 c:\Form1.vb:行 23 システムに接続されたデバイスが機能していません。

解決方法が見つからず、苦慮しています。

どなたかわかりませんか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。