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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

4373閲覧

[シリアル通信]初回のみ接続がうまくできない

entaro12345

総合スコア75

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2020/04/08 01:47

編集2020/04/08 02:17

前提・実現したいこと

c#でシリアル通信のFormアプリを作成しています。
(シリアルポートはUSB接続しています。)
接続でうまくいかないことがあり困っています。
・必ず初回のみエラーが出て接続不可
・TeraTermでは接続できることは確認済み
・2回目以降の接続に関しては問題なく接続可

お力添え宜しくお願いします。

発生している問題・エラーメッセージ

初回接続時に下記のエラーが発生します。

システムに接続されたデバイスが機能していません。

該当のソースコード

c#

1private void btnConnect_clicked(object sender, EventArgs e) 2{ 3 // COMポートをOPEN 4 serialPort = new SerialPort(); 5 serialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort1_DataReceived); 6 serialPort.PortName = "COM4"; 7 serialPort.BaudRate = 19200; 8 serialPort.DataBits = 8; 9 serialPort.Parity = Parity.None; 10 serialPort.StopBits = StopBits.One; 11 serialPort.Encoding = Encoding.UTF8; 12 serialPort.DtrEnable = true; 13 serialPort.RtsEnable = true; 14 15 // 接続開始 16 try 17 { 18 serialPort.Open(); ←ここでエラー発生し、catchへ 19 this.Invoke(new Action<string>(this.appendText), DateTime.Now + " 接続開始" + Environment.NewLine); 20 } 21 catch (Exception ex) ←ex.messageに上記のエラーメッセージがはいります 22 { 23 this.Invoke(new Action<string>(this.appendText), DateTime.Now + " " + ex.Message + Environment.NewLine); 24 } 25} 26 27// 画面上にログとして出力 28private void appendText(string _sLog) 29{ 30 this.txtLog.AppendText(_sLog); 31} 32 33// データ受信トリガー 34private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) 35{ 36 if (serialPort != null && serialPort.IsOpen) 37 { 38 try 39 { 40 // 受信データを読み込む 41 SerialPort sp = (SerialPort)sender; 42 string sChildData = sp.ReadExisting(); 43 44 // 受信データをDBへ格納などの処理 ※省略 45 } 46 catch (Exception ex) 47 { 48 this.Invoke(new Action<string>(this.appendText), DateTime.Now + " 受信データ読込に失敗しました。" + Environment.NewLine); 49 } 50 } 51}

試したこと

・TeraTermにて接続確認後にFormアプリで接続すると接続できることは確認できました。
・エラー発生前にデバイスマネージャーにてデバイス認識できていることは確認しました。

補足情報(FW/ツールのバージョンなど)

C#/Visual Studio 2017
.NetFramework 4.7.1

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

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

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

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

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

y_waiwai

2020/04/08 02:00

そのエラーメッセージはどの行で出るんでしょうか。 また、提示のコードはオープンする箇所のみですが、受信するところのコードも提示しましょう
entaro12345

2020/04/08 02:11 編集

ご連絡ありがとうございます。 エラーは接続開始のtry-catchの部分で「serialPort.Open();」時にcatch文に入ってしまいます。 ⇒本文へ追記します。 受信のコードにつきましても追記します。
dodox86

2020/04/08 04:05

USBシリアルで次の信号線制御はいらない(あるいはそのUSBシリアルデバイスがサポートしていない)のでは。 > serialPort.DtrEnable = true; > serialPort.RtsEnable = true; trueにセットせず(放置)してOpenしてみたらどうでしょうか。
entaro12345

2020/04/08 04:27

ありがとうございます。 serialPort.DtrEnable = true; serialPort.RtsEnable = true; をtrueにせず試してみたところ、うまくいきました。
entaro12345

2020/04/08 04:28

dodox86さま ベストアンサーにさせていただきたいので、回答していただけますでしょうか。
dodox86

2020/04/08 04:44

動いて良かったです。回答しました。
guest

回答1

0

ベストアンサー

※質問への追記・修正の依頼 から一部修正して転載

USBシリアルですので、ご提示のコード中の次の信号線制御指定はいらない(そのUSBシリアルデバイスがサポートしていない)のではないかと思われます。

serialPort.DtrEnable = true;
serialPort.RtsEnable = true;

trueにセットせず(放置して)serialPort.Openを試してみてください。

投稿2020/04/08 04:44

dodox86

総合スコア9183

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

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

entaro12345

2020/04/08 04:45

ありがとうございます。 規定値のfalseにしたところ期待通りの動作をしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問