tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルWindows7でのシリアル通信異常
記事No15353
投稿日: 2011/10/19(Wed) 12:00
投稿者NT
お世話になります。

PCとシーケンサ(設備制御用コントローラ)をシリアル通信で接続して、シーケンサ内のデータを読み出しています。

WindowsXP,Vista,NT,2000では、何の問題もなく動作していましたが、Windows7のみ
通信途中で異常となってしまいます。
下記が通信プログラムの内容です。
------------------------------------------------------------------------------
'********
'通信実行
'********
    
ComRetry:
    FormName.MSComm1.Output = sendstring             'コマンドを送信
    
    recvstring = ""
    
    Do While FormName.MSComm1.OutBufferCount > 0     '送信バッファが空になるまで待機
        DoEvents
    Loop
    
    Do While ((Len(recvstring) = 0) Or (Right(recvstring, 1)
              _ <> Chr(13))) And (Cnt < 200000)
        recvstring = recvstring & FormName.MSComm1.Input
        Cnt = Cnt + 1        '正常に通信が行われなかったときループを抜ける
        DoEvents
    Loop
    
    If Cnt >= 200000 Then
        If Retry > 5 Then
            MsgBox "通信ができません。電源及び通信ケーブルを確認してください。"
            Communicate = 1
            GoTo Exit_Communicate
        Else
            Retry = Retry + 1
            GoTo ComRetry
        End If
    End If
----------------------------------------------------------------------------------
互換モードを試してみましたが、症状は変わりませんでした。
Windows7と他のOSで、何が違うのでしょうか?

よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: Windows7でのシリアル通信異常
記事No15355
投稿日: 2011/10/19(Wed) 20:54
投稿者ミッキー
> 通信途中で異常となってしまいます。

プログラムのどの行で異常になりますか?

> WindowsXP,Vista,NT,2000では、何の問題もなく動作していましたが、
> Windows7のみ通信途中で異常となってしまいます。

これは全て同じスペックのPCで、OSだけ異なる場合の検証結果ですか?
というのは、Windows7 の問題ではなく、PCスペックに問題があるのでは?
と思っています。


あと、投稿されたプログラムについて質問です。
1.GoTo 文を使われていますが、視認性の観点からお勧めはしません。
2.通信タイムアウト処理でカウンタを使用していますが、
  その上限が1,000,000(200,000×5回)なのは何故ですか?
  意味がある数字なのでしょうか?

タイムアウト処理を設けたいのであれば、タイマーを利用するのはいかがでしょうか?
たとえば、5秒応答がなければタイムアウト処理する場合

mTimeoutCount = 0
Timer1.Interval = 1000
Timer1.Enabled = True

Do
  DoEvents
  If mTimeoutCount > 5 Then Exit Do

  (処理記述省略)
Loop

Timer1.Enabled = False

-------------------------------

Private Sub Timer1_Timer()

  mTimeoutCount = mTimeoutCount + 1

End Sub

-------------------------------

[ツリー表示へ]
タイトルRe^2: Windows7でのシリアル通信異常
記事No15356
投稿日: 2011/10/22(Sat) 12:08
投稿者NT
ご回答ありがとうございます。

通信異常の状態ですが、こちらからの送信は正常に送られているのですが、

相手からの返信で何も帰ってこず、ダンマリとなってしまいます。

全てのデータの読み出しを行うのに50回程度、送受信を繰り返します。

いつも決まった場所で止まってしまう訳ではありません。

あと最近のノートパソコンには、シリアル通信ポートが付いておりませんので、

USB変換のシリアル通信ポートを使用しています。

この変換機を疑って、色んなメーカーの物を試したのですが、状況は変わりません。

通信部分のプログラムに何か問題があるのではないかと思い、この掲示板に書込みましたが、

通信プログラム自体には問題はないでしょうか?

アドバイスは、すでに反映しています。ありがとうございました。

カウンター値には、何も意味はありません。ただ、時間を見ているだけです。

又、Win7以外のノートパソコンでは、同様にUSBの変換機を使用しても全く問題なく動作しております。

何が問題なのでしょうか???

[ツリー表示へ]
タイトルRe^3: Windows7でのシリアル通信異常
記事No15357
投稿日: 2011/10/22(Sat) 13:12
投稿者オショウ
> 何が問題なのでしょうか???

  その手の問題は・・・
  PCが高速になった為、PLC側が受信で取りこぼししてしまっていると
  思われますが・・・PLCのシリアル通信に、LEDでERRランプか何かあ
  るので、点灯していないか調べて下さい。

  尚、どこのPLCですか?あと、通信設定は?

  ERRした場合、PLC側でクリアしないと正常通信に復帰できない場合
  もあったような・・・

※ 簡単に確認するなら、ボーレートを無茶苦茶遅くしてみるとか。
  あと、一応、ノイズ対策も必要ですネ!
  PLC通信にBCCチェック等入れる設定ができるはずですので、そういう
  機能を使うと、PCから送信したコマンド文字列に異常があった場合、
  ACK/NAKの返答があり、NAKの場合、通信異常があったことが解るので
  原因の追究にもなります。

以上。参考まで

[ツリー表示へ]
タイトルRe^4: Windows7でのシリアル通信異常
記事No15362
投稿日: 2011/10/28(Fri) 11:16
投稿者NT
ご回答ありがとうございます。

さっそく出来る範囲で試してみます。

ありがとうございました。

[ツリー表示へ]