MSCommのデータ送信における処理時間について

このQ&Aのポイント
  • MSCommのデータ送信時に、接続しているデバイスがいない場合の処理時間について質問です。
  • MSComm1.Output = Data$のステートメントを実行する際に約10秒かかる理由が知りたいです。
  • MSComm1.Outputのタイムアウト値を確認する方法や設定されている値について教えてください。
回答を見る
  • ベストアンサー

MSCommのデータ送信

申し訳ございません。 質問させていただいていた内容が解りにくいので再度、質問させてください。 接続しているデバイスがいないときのデータ送信の処理時間について質問がございます。 Dim Data$  Data$ = "Sample" MSComm1.Output = Data$ 'このステートメントを抜けるのに約10秒かかる。 RS-232C接続をしたデバイスにデータを送信します。 このとき、受信するデバイスが接続されいないときのデータ送信に時間が取られています。 通信デバイスのタイムアウトを設定するSetCommTimeouts関数は使用していません。 MSComm1.Outputのタイムアウトはどこで設定されていますか? 設定されているタイムアウト値を確認する方法はございますか?

noname#187796
noname#187796

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MSCOMMにはタイムアウトを設定する機能はありません。 検索しましたか? 「MSCOMM タイムアウト」で検索して2番目のURL http://www5b.biglobe.ne.jp/~kouta_y/news/newsvb/vb14.html

noname#187796
質問者

補足

ありがとうございます。 シリアルポートを利用する為にUSB⇔RS-232C変換ケーブルを使用して、専用のドライバーを導入しています。 タイムアウト値は、このようなドライバーにセットされているのでしょうか? 又、WindowsのICH9チップなどの制御モジュールなどに設定されているのでしょうか? レジストリーなどで確認する方法はございますか? タイムアウト値にできるだけ短くしたいのですが方法はございますか?

その他の回答 (1)

回答No.2

本家マイクロソフトのページ VB6用のMSDNはあまり日本語化されていないようだが、とりあえず http://support.microsoft.com/kb/411403/ja http://support.microsoft.com/kb/192012/ja 英語の情報なら http://msdn.microsoft.com/ja-jp/library/aa259313(en-us,VS.60).aspx

noname#187796
質問者

お礼

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

関連するQ&A

  • データ送信

    MSCommのOutPutプロパティを使用して送信します。 Dim Buffer As String  Buffer = "Dummy" MSComm1.Output = Buffer RS-232C接続をしたデバイスにデータを送信します。 このとき、受信するデバイスがいないとMSComm1.Outputステートメントの処理に約4-5秒かかります。 これは仕様ですか? MSComm1.Iutputプロパティを含めて、タイムアウトに関して参考になるドキュメントやサイトがございましたら教えていただけませんか?

  • MScommで上手く送信できない

    VB5.0、MScommでのバイナリデータの送受信です。 ~.Outputへデータをセットしても 2byteずつしか送信してくれなくて困っています。 どうすれば溜め込まずに送信するようになるのでしょうか あるいはバッファをフレッシュする方法は無いのでしょうか これはもうAPIを使用するしか方法が無いのでしょうか 1フレーム6~13byteの長さで1フレーム単位の送信です。 1byteずつ1フレーム分~.Outputへセットすると 頭の2byteが送信され、次の1フレームをセットすると その次の2byteが送信されます。 更に1フレームセットすると続きの2byte(最初のフレームの5byte目と6byte目)が送信されます。 1フレームを~.Outputへセットした後、 SThreshold=1とすることによるcomEvSendの発生と ~.OutBufferCountが0となることは確認しおり、 その状態で2byteしか送信していません。 1フレームまとめて~.Outputへセットしても同じで、 6byte長のフレームをセットした後、 12byte長のダミーデータを~.Outputへセットすると、 だけ2byte送信されるのではなく、 丁度フレーム全てが送信されたところで止まります。 この時、~.OutBufferCountは0になっています。 更にフレームを~.Outputへセットしていくと、 ダミーデータ→次のフレームの順で送信されます。 試しに1フレーム送信後に~.PortOpen = Falseで ポートを一旦閉じて見ましたが、3byte目以降を 吐き出してくれません。 再度~.PortOpen = Trueでポートを開き、 1フレームセットすると、先のフレームの続き (3byte目、4byte目)から送信されます。 通信の設定 .CommPort = 1 .Settings = "9600,N,8,1" .InputLen = 1 .RThreshold = 1 .InputMode = comInputModeBinary .comNone 他PCとはRD,SD,GNDのみ接続 送信されたかどうかは相手のPCで確認しています。

  • MSCommでoutputできない

    VB6.0でMSCommを用いてシリアル(レーダとつながってる)にデータを送りたいんですがどうもうまく送れません.outputしてすぐoutbuffercountをチェックしてもcnt=0(cntは下記プログラム参照)のままでバッファにちゃんとデータが送れていないのでは?と悩んでいます. なにが原因なんでしょうか?もしくは,他に送信バッファにデータが届いてるかどうかをチェックする方法などご存知でないでしょうか?よろしくおねがいします. MSComm1.CommPort = 2 MSComm1.InputMode = 1 MSComm1.InputLen = 0 MSComm1.Settings = "9600,N,8,1" MSComm1.RThreshold = 1 MSComm1.PortOpen = True MSComm1.InBufferCount = 0 MSComm1.OutBufferCount = 0 Dim s(16) As Byte   ’←以下のデータを送りたいんですが・・ s(0) = &H2 s(1) = &H0 s(3) = &HA s(4) = &H0 s(5) = &H20 s(6) = &H0 s(7) = &H53 s(8) = &H49 s(9) = &H43 s(10) = &H4B s(11) = &H5F s(12) = &H4C s(13) = &H4D s(14) = &H53 s(15) = &HBE s(16) = &HC5 For j = 0 To 16 MSComm1.Output = s(j) cnt = MSComm1.OutBufferCount Next j End Sub あと,レーザーの説明書に ・レーザーに送信する2バイト間の時間間隔は6msを超えないように ・レーザーに送信する2バイト間の最小時間は55μs以上としてください という記述があるんですが,これを満たしてないという可能性も疑ってます. どうやれば,この時間のタイミングで送れるんでしょうか? 長くなってすいません,なにかヒントなどおねがいします.

  • ステップの強制実行

    ↓の例ですが、データを送信したとき、送信先デバイスがそのまま制御を保持してしまい、 送信元で何も制御できないときに、無視して次行を実行するVB6の関数,方法はございますか? コメントアウトでは意味がございません。 Dim Data() As String Data(1) = "123" MSComm1.Output = Data '←ここでの処理を無視して、次行を実行をしたい。 Data(2) = MSComm1.Input ・ ・

  • MSCommを用いたRS-232-Cデータ転送

    Visual Basic ver.6を用いてRS-232-Cデータ転送のプログラムを書いています。 転送には,MSComm controlを用いています。 コンピューター側から命令コードを測定器側に送信すると(例えば,MSComm1.OutPut = "F,3,300," & Chr(13)のように),測定器側からは次のようなテキストデータの転送が指定された回数だけ起こります: @C/R 数値データC/R 数値データC/R ・・・・ ・・・・ (指定回数繰り返す) そこで,質問ですが,このデータをMSComm1.Inputを介してきちんと取得する方法をお教えください。私がよく理解できいない部分は,「どのような形でbufferにデータが落ちているのか?」という部分と「繰り返し処理をどう記述するのか?」という部分です。多分後者は配列型変数を用いて「指定回数」だけ繰り返すことになると思いますが・・・・。 なお,データ転送の制御フォーマットはデータのみの転送で,STXもETXも使用していません。

  • MSComm; 必要なファイル、設定

    VB6で、ActiveXファイルを作成しています。 デバッカーでは、問題なく動作します。 CABファイルを作成して、ファイルをダウンロードさせて動作させると データ送信は、できるのですが受信データが取得できません。 Do - Loop処理を繰り返しているようです。 必要なファイル、プロパティ設定などございますか? ご意見をお願いします。 CABの中身; TEST.OCX ASYCFILT.DLL COMCAT.DLL MSMASK32.OCX MSMSKjp.DLL MSPRPJP.DLL msstdfmt.dll MSSTKPRP.DLL MSVBVM60.DLL OLEAUT32.DLL OLEPRO32.DLL VB6JP.DLL MSComm1.CommPort = 1 MSComm1.Settings = "9600,N,8,1" MSComm1.PortOpen = True MSComm1.InBufferCount = 0 MSComm1.InputLen = 1 '-----Outputプロパティによるデータ受信 MSComm1.Output = (STX) & "CMD" & (CR) '-----Inputプロパティによるデータ受信 Dim Buffer$ Do DoEvents If MSComm1.InBufferCount Then Buffer$ = Buffer$ & MSComm1.Input Select Case Buffer$ Case Chr(13) Exit Do Case Else End Select End If Loop

  • MSCommで送信完了を検出する方法

    MSCommを使って送信したときの送信完了を検出したいのです。 mscPort.Output = xxxxx とすると送信バッファにxxxxxが書き込まれます(これは短時間で完了)が、 そのあとボーレートによる実送信(ボーレートにより長い時間)が実行されます。 この実送信の完了を知るためにOutBufferCount=0になるのを 待てばよいのかなと思って、 まずOutBufferCountの動作を知るために mscPort.Output = xxxxx Label1.Caption = mscPort.OutBufferCount と書いたら、Label1は即0と表示されました。 実送信は約4mSかかるのに即0と表示されるのは、実送信前に0になっているようで 理解できません。 Q1.私の考え方の間違いを教えてください。 Q2.正しい方法を教えてください。  (OnCommのcomEvsendによる方法もありますが、とりあえず、この方法は使いたくないのです。) よろしくお願いします。

  • MSCommについて

    ↓例の桁数、データブロックが不定で連続して受信されます。 最後の1桁は(ETX)です。 (STX)XXXXXX...(ETX)(STX)XXXXX...(FS)XXXXX...(ETX)(STX)XXXXX.......(FS)XXXX...............(ETX) すべての桁数、データブロックが対象なので一度に受信します。 1. 質問はInputプロパティで1桁ずつデータをREC変数に読み込んで、ある条件で、Loop分を抜けたいのですが、 VB6の定義方法がわかりません。 1-1.最後の(ETX)の読み込み 1-2.先頭30桁  MSComm1.InBufferCount = 0 MSComm1.InputLen = 1 Dim REC As String Do DoEvents If MSComm1.InBufferCount Then REC = REC & MSComm1.Input If ..... '最後の(ETX)の読み込み '先頭30桁 Exit Do End If   End If Loop 2. スピート重視で処理するために、InBufferCountに値があったら、すべての受信データをRECにいれたいのですが 取得できていません。 アドバイスはございますか? MSComm1.InBufferSize = 2048 MSComm1.InBufferCount = 0 MSComm1.InputLen = 0 Dim REC As String Do DoEvents If MSComm1.InBufferCount >= 1 Then Exit Do End If Loop REC = MSComm1.Input

  • MSCommオブジェクト に関して。

    MSCommオブジェクト に関して。 VBのMSCommオブジェクト に関して 質問です。 私は、岩通計測(株)のオシロスコープ DS-5102用のサンプルソフト(下記URL) デジタル・オシロスコープ DS-5100シリーズ用 RS-232 サンプルプログラムExcel VBA Ver.1.01 http://www.iti.iwatsu.co.jp/ja/download/ds5100_RS_VBA.html#down0 を使用して、パソコンにオシロスコープの波形情報を 取り込もうとしているのですが、 上手く、このソフトで、波形情報を取り込むことが 出来ません。 メーカーに問い合わせてのですが、 Excelのコントロールツールボックスを表示させ、 デザインモードにしたとき、MSCommオブジェクト(電話機の絵)は、 Excelシート上に表示されますか?。 っと聞かれ、 MSCommオブジェクト(電話機の絵)が表示されません っとお答えすると 表示されていなければ MSCommオブジェクト(電話機の絵) が削除されている可能性があります。 改めて、 こちらのPC環境 Microsoft Office Excel 2003(11.8169.8172)SP3 MSCommオブジェクトが貼りついているのを確認して 保存し直したExcelシートを添付致します。 こちらで、試してみて頂けますか。 っと言われ、試したのですが、 やはり、MSCommオブジェクト(電話機の絵) が表示されないのですが、何方か解決策を お知りの方は、いらっしゃいませんか?。 改めてMSCommオブジェクト(電話機の絵)を挿入、 インストールしなければならないなら、 そうしますし、どうか解決策を宜しく御願い致します。 ちなみに、このような状況で、上記のソフトを 起動すると下記のようなエラーが出ます。 『コンパイル エラー: ByRef引数の型が一致しません。』

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

専門家に質問してみよう