C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

SerialPort再接続について

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■88336 / inTopicNo.1)  SerialPort再接続について
  
□投稿者/ 田中 (1回)-(2018/08/22(Wed) 05:42:49)

分類:[.NET 全般] 

お世話になります。
Windows7 .NET2010を使用しています。

機器 → bluetooth → PCの形で
SerialPort.open よりデータを取り込んでいます。

機器と.NET起動順として
@機器の電源を入れる
A.NET(?.exe)を開きデータ受信する

また、こちらの機器は一定の時間で電源が切れます。
機器の電源が切れ
機器の電源投入後に.NETのプログラムで受信できなくなります。

機器へ再接続する方法などありましいたら
ご指導お願いいたします。

機器へ接続できなくなった場合に次のようなエラーあがります。
@パイプの他端にプロセスがありません
Aセマフォがタイムアウトしました



引用返信 編集キー/
■88337 / inTopicNo.2)  Re[1]: SerialPort再接続について
□投稿者/ にゃるら (33回)-(2018/08/22(Wed) 09:17:43)
No88336 (田中 さん) に返信

お手元のソースコードに依存した問題であるのか、シリアル通信の制御の実装に問題があるのかを
切り分けるために、MSDNのシリアル通信のサンプルクラスを使って確認されてみてみませんか?

https://code.msdn.microsoft.com/windowsapps/COM-howto-6c7ff269?ppud=4

このクラス(手直しが必要かもしれませんけど)をループ処理内で生成、接続、受信、切断を実行し、
端末の電源をON/OFFを試して動作やエラー等を確認してみることを提案します。
引用返信 編集キー/
■88338 / inTopicNo.3)  Re[1]: SerialPort再接続について
□投稿者/ 774RR (626回)-(2018/08/22(Wed) 09:57:05)
bt spp で接続していて PC 側の bt 装置はそのまま動作し続けるんだけど通信相手だけ電源切れる、という状況であるとして

USB/COM アダプタにおいて COM driver 側の出来の良しあしで動作が違うというのは何度か経験しているっす。 bt でも同じ状況は想定できる。とりあえず「ソフトウエア側だけでなんとかする」提案としては、
・通信系の Read/Write では必ずエラーチェックする
・エラーが発生したらコネクションを閉じる
・閉じている際に再度通信したいときは自動的に Open を試行する
ようなラッパで一段階包んでみるとか。

相手先デバイスの inquiry/connect あたりは bt driver stack が勝手にやっちゃうのでオイラたち末端プログラマの制御できるところではなかったりするしいろいろ難しいかも。

っていうかなぜ切れるの? 接続中に切ったら通信異常になるのは当然の話で、切れないようにするのが対処の方策として正しい方向だと思う。
引用返信 編集キー/
■88389 / inTopicNo.4)  Re[2]: SerialPort再接続について
□投稿者/ 田中 (2回)-(2018/08/25(Sat) 09:10:26)
お世話になります。

機器の電源が入っている状態で
.net ボタンよりクローズ(以下記載)しまして
再びオープン(以下記載)すると
「セマフォがタイムアウトしました」と出力されます。
※この「セマフォがタイムアウトしました」を回避する方法として
PC再起動で対応しています。

ちなみに、?.exeを開いたときに SerialPort2.Open するようなプログラム記述をした場合で
機器の電源が入っていないときにも
「セマフォがタイムアウトしましたと」出力されます。
機器の電源が入っている場合は問題なくデータを受信します。

通信の際に使用した COM ポートを占有したまま
終了したために、再接続できない為でしょうか..?


Private Sub end_Click(sender As System.Object, e As System.EventArgs) Handles end.Click
Call SerialPort2.Close()
End Sub


Private Sub start_Click(sender As System.Object, e As System.EventArgs) Handles start.Click
Try
'ポート名のセット
'SerialPort2.PortName = Text

'開いていれば一旦閉じる
If SerialPort2.IsOpen = True Then
SerialPort2.Close()
End If
Call SerialPort2.Open()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error")
End Try
End Sub
引用返信 編集キー/
■88394 / inTopicNo.5)  Re[3]: SerialPort再接続について
□投稿者/ にゃるら (38回)-(2018/08/27(Mon) 09:37:14)
No88389 (田中 さん) に返信

インスタンスの使いまわしをされていたのですね。
SerialPort2というインスタンスをClose後はnullにし、
Open時に生成し直されてはいかがでしょうか?

引用返信 編集キー/
■88395 / inTopicNo.6)  Re[4]: SerialPort再接続について
□投稿者/ 田中 (3回)-(2018/08/27(Mon) 09:51:57)
No88394 (にゃるら さん) に返信
> ■No88389 (田中 さん) に返信
>
> インスタンスの使いまわしをされていたのですね。
> SerialPort2というインスタンスをClose後はnullにし、
> Open時に生成し直されてはいかがでしょうか?
>

nullの設定方法はどのようにすれば良かったでしょうか?


ネット検索していまして、こちらのを見つけました

http://dobon.net/vb/dotnet/programing/unhandledexception.html

私の持っているプログラムは次の方法で起動させているのですが、

Private Sub Test_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load

素人の為、以下をどのように取り入れれば良いのか分からないので
教えていただけると助かります。

Public Shared Sub Main()
'ThreadExceptionイベントハンドラを追加
AddHandler Application.ThreadException, _
AddressOf Application_ThreadException
'ThreadExceptionが発生しないようにする
Application.SetUnhandledExceptionMode( _
UnhandledExceptionMode.ThrowException)

'UnhandledExceptionイベントハンドラを追加
AddHandler System.AppDomain.CurrentDomain.UnhandledException, _
AddressOf CurrentDomain_UnhandledException

Application.Run(New Text())

End Sub

引用返信 編集キー/
■88397 / inTopicNo.7)  Re[5]: SerialPort再接続について
□投稿者/ にゃるら (39回)-(2018/08/27(Mon) 12:09:25)
No88395 (田中 さん) に返信
> ■No88394 (にゃるら さん) に返信
>>■No88389 (田中 さん) に返信
>>
>>インスタンスの使いまわしをされていたのですね。
>>SerialPort2というインスタンスをClose後はnullにし、
>>Open時に生成し直されてはいかがでしょうか?
>>
>
> nullの設定方法はどのようにすれば良かったでしょうか?

VBならNothingですね。
SerialPort2をどこかでNewしている箇所があると思いますので、
それを参考にして生成を行われてはいかがでしょうか。
引用返信 編集キー/
■88398 / inTopicNo.8)  Re[6]: SerialPort再接続について
□投稿者/ 田中 (4回)-(2018/08/27(Mon) 14:38:34)

> VBならNothingですね。
> SerialPort2をどこかでNewしている箇所があると思いますので、
> それを参考にして生成を行われてはいかがでしょうか。

Nothing記述してみましたが
次の受信をすることはできませんでした。
引用返信 編集キー/
■88408 / inTopicNo.9)  Re[7]: SerialPort再接続について
□投稿者/ ニャルラ (1回)-(2018/08/27(Mon) 19:10:01)
No88398 (田中 さん) に返信

SerialPortのインスタンスを再生成してダメなら少々のことでは解決できない問題かもしれないですね。
ちょっとすぐに解決するための案はないです。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ