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

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

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

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

VB.NET

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

Q&A

2回答

13325閲覧

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

hiro3333

総合スコア14

COM

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

VB.NET

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

0グッド

0クリップ

投稿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 システムに接続されたデバイスが機能していません。

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

投稿削除      

投稿2016/05/30 02:05

編集2016/06/21 00:26
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

TeratermでCOMポート受信もできることも確認済みです。

起動したままで、落としていないなんて、落ちは無いですよね?

サイト:NonSoft さん、他にも有用なコンテンツがあります。
COMポート(シリアル)での送受信
http://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleRs232c.html

USB / USB-COM は、デバイスドライバ依存の機能ですので、
ドライバの出来や、x32/x64、OSによって挙動が変わります。
⇒ステータス変化のイベント、デバイスの取外時の例外処理など。

COMポートは、デバイスマネジャーから参照、設定が可能ですが、
慣れない間は、ポート番号の変更、バッファの変更はしない方が良いです。
⇒変更する場合は、必ずメモを取ってから。
差し込むUSBポートを変更した場合は、ポート番号が変化します。
ドライバーの出来にもよりますが、稀に同じポートに挿したのにポート番号が
同じにならない場合もあります。

投稿2016/05/27 09:55

編集2016/05/27 10:05
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問