none
MSCOMMを使用したプログラムについて RRS feed

  • 質問

  • お世話になります。

    現在、ACCESS2000とMSCOMMを使用してシリアル通信プログラミングをしています。

    以下のような現象が発生しており困っております。

    制御機器AとパソコンBをRS-232Cケーブルで接続しています。

    パソコンBは制御機器Aより文字を受信し、その文字を画面に表示するといたプログラムです。

    パソコンBのオンボードのcomポートに接続して受信処理を行うとOnCommイベントが1度だけ発生します。

    (OnCommイベント1回目)ABCDEFGH

    といった文字列を受信します。

    次に、パソコンBでUSBシリアル変換ケーブル使用して受信処理を行うと、OnCommイベントが2回発生します。

    (OnCommイベント1回目)A

    (OnCommイベント2回目)ABCDEFGH

    といったような感じで受信します。

    私の認識ですと、2回目のOnCommイベント時には残りのBCDEFGHのみ受信するのでは?

    と思っていたのですが、そうではないようです。

    USBシリアル変換ケーブルは秋月電子のPL-2303という変換ケーブルを使用しています。

    MSCOMMの設定は以下の通りです。
    CDTimeout=0
    CommPort=2
    CTSTimeout=0
    DSRTimeout=0
    DTREnable=True
    EOFEnalbe=False
    Handshaking=comNone
    InBufferSize=1024
    InputLen=100
    InputMode=comInputModeText
    Interval=1000
    NullDiscard=True
    RTSEnable=True
    Settings="4800,e,7,1"
    SThreshold=0

    どうして今回のような現象が起きたのかがわかりません。

    comポートのドライバの設定等何かあるのでしょうか。

    2011年8月26日 5:39

回答

  • "MSCOMMを使用した他のプログラム"を使用して動作確認してみては如何ですか?
    例えば、Visual Basicの付属サンプルプログラムVBTermなど。

    "他のプログラム"に問題が発生しなければ、プログラミングに問題有りなのかもしれません。

    ちなみに、手元の実行環境では、
    VBTerm + MSComm32.ocx + Prolific USB-to-Serial Comm Port + Windows XP SP3の組み合わせが問題なく動作しています。

     

    • 回答の候補に設定 山本春海 2011年9月12日 8:02
    • 回答としてマーク 山本春海 2011年9月15日 4:17
    2011年9月1日 1:35

すべての返信

  • USBシリアルがあやしい動きをしたときは、まずはドライバを更新してみては?
    PL2303であれば、http://www.prolific.com.tw/eng/downloads.asp?id=31  にあります。
    jzkey
    • 回答の候補に設定 山本春海 2011年9月12日 8:02
    2011年8月29日 14:35
  • "MSCOMMを使用した他のプログラム"を使用して動作確認してみては如何ですか?
    例えば、Visual Basicの付属サンプルプログラムVBTermなど。

    "他のプログラム"に問題が発生しなければ、プログラミングに問題有りなのかもしれません。

    ちなみに、手元の実行環境では、
    VBTerm + MSComm32.ocx + Prolific USB-to-Serial Comm Port + Windows XP SP3の組み合わせが問題なく動作しています。

     

    • 回答の候補に設定 山本春海 2011年9月12日 8:02
    • 回答としてマーク 山本春海 2011年9月15日 4:17
    2011年9月1日 1:35
  • 返事が遅くなり大変申し訳ありませんでした。

    ドライバの更新をしてみましたが、現象は変わりませんでした。

    ありがとうございました。
    • 編集済み ikageso 2011年9月13日 0:58
    2011年9月13日 0:49
  • 返事が遅くなり大変申し訳ありませんでした。

    プログラムの見直しを行い、受信完了のメッセージ(CRLF)を受信するまでループで待機している部分に

    SLEEP(500)

    を挿入してみたところ、正常に受信が行われました。

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

    2011年9月13日 0:58