• 締切済み

MSCommのInputコマンドのレスポンスについて

VBのMSCommのInputコマンドのレスポンスについてお聞きしたいのです。 現在Inputのレスポンスが非常に遅くて困っております。 こういう場合の要因としてはどのようなことが考えられるでしょうか? CPUはP3 500です。 以上よろしくお願いします。 開発環境:VB6.0 WinNT4.0WS

みんなの回答

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.2

確かに遅すぎですね。 .InputLen=0でデータを取ってないとかかも知れません。 ソースをどのように記述しているかによってもかわると思います。宜しければソースを提示してください。 因みにこのサイトでMSCommで検索するといいかも知れません。 #うっかり過去投稿の状況確認がおろそかになっていて補足回答が遅くなりました。

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.1

レスポンスが遅いとの事どの程度データをどのような通信方法で取っていてどの程度の時間がかかっているのか不明です。 またロジックも不明ですので本当に遅いのか判断出来ません。 なお500バイト前後なら1秒以内で取れるはずですが.. 速度:9600Bps データ長:8 ストップビット:1 パリティ:偶数 ということでどういう状況か詳しく説明願います。

mk_jmc
質問者

補足

速度:9600Bps データ長:8 ストップビット:1 パリティ:チェックなし 以上の設定で、読み取るデータは100バイトもありません。 デバックしているとただInputのところだけで 15秒かかってしまうのです。(15秒の後に次のロジックへと進みます)

関連するQ&A

  • MSCommの受信について。

    VB6.0でMSCommを使っています。 受信データが例えば「00000 00000 000001111122222」 というようなレスポンスが帰ってくるのですが、これは元々 連続データ読み込み(RDSコマンド)で3個読み出したときの結果が 「00000 00000 00000」 次にある番地に書き込んだ値を読み出すコマンドでの結果が 「11111」と「22222」となっています。 これを連続して送信しているので、バッファにはこのように後ろに追加されています。 これをOncommイベントが発生した時に Buffer=MSComm1.Input としてBufferに保存していますが、その後、文字列操作関数を使って 3つを分割しようとしても上手くいきませんでした。 一応、実験としてボタンをクリックした時に str="00000 00000 000001111122222"とデータを入れ、 文字列操作関数を使ってこれを3つに分割することは可能でした。 なので、アルゴリズム的に間違っているというわけではないようですが、 それを実際にシリアル通信させ、Oncommイベント発生の時に させようとした場合、どうにも上手くうごきませんでした。 複数のコマンドを送信してその結果が返ってくるときに 各コマンドの結果を別々のテキストボックスなどに表示させたいです。 それにはバッファの値を必要な部分にわけ、抽出する必要があると思うのですが、 どのようにすれば実行可能でしょうか? 複数のレスポンスが一気に帰ってきた場合、 バッファからどのように必要データを取り出せばいいでしょうか?

  • こんにちは、VBはじめたての初心者です。MSCommコマンドを利用して

    こんにちは、VBはじめたての初心者です。MSCommコマンドを利用してマイコンと 通信するプログラムを作成中なのですが、わからないことがあるので質問させていただきます。 public aub form_load() MSComm1.CommPort = 3 'ポート番号設定 MSComm1.Settings = "115200,N,8,1" '設定 MSComm1.PortOpen = True 'ポートオープン MSComm1.Handshaking = comNone 'フロー制御無し MSComm1.RTSEnable = False 'RTS制御無し MSComm1.RThreshold = 1 '1バイト受信毎にOnCommイベント発生 Dim txBuffer As String End sub 'テキストに表示した受信文字列を変数に格納、さらに必要な文字列だけ抽出する Private Sub botan_Click() txBuffer = Text2.Text x = InStr(1, txBuffer, "e" & vbCrLf, 1) txBuffer = Mid(txBuffer, x + 3, (Len(txBuffer) - (x + 2))) Text1.Text = txBuffer 'txBufferの内容確認用 End Sub Private Sub cmdr_Click() Text2.Text = "" MSComm1.Output = "r a0 s 00 j ff" & Chr(13) 'マイコンのデータを読み込むコマンド End Sub Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive Buffer = MSComm1.Input Text2.Text = Text2.Text & Buffer ・ ・ ・ End Select End Sub おおざっぱですがこのようなプログラムをつくりました。 目的は受信された文字列(テキストに表示)を変数に格納、さらに必要な文字列だけ抽出する ことなのですが、このプログラムだとデータを読み込むコマンドを送るボタンとそのデータを 変数に格納して必要な部分を抽出するボタンを二回押さなければならず面倒なので、botan_Click() の中の命令をそのままcmdr_Click()に入れたのですが、そうするとエラーが出てしまいます。 いろいろと試したのですがどうやらtxBufferの中に受信データが入ってくれないみたいです。 原因は何か。何かいい方法がないかアドバイスいただけたら幸いです。 やりたいことは、一回のボタンクリックで変数に受信データのほしいとこだけを格納させることです。 よろしくお願いします。

  • RS-232Cのコマンドについて

    はじめまして。 RS-232C通信にて計測器からデータを取得します。 計測器の仕様では、 『呼び出しコマンドが「0x08」でデータが吐き出されます。 ハイパーターミナルで言えば、Ctrl + H のコマンドです。』 と記載されています。 VB6.0のMSCommコントロールを使用して、コマンドを送出して、データを得たいです。 この場合、コマンド送出はどのように記述すればよいのかわかりません。 MSComm.Output = "H" ← Hですか?? コマンドの意味を理解できていなくて、困っています。 初心者でお恥ずかしい質問ですが、教えてください。 宜しくお願いします。

  • サーバからレスポンスが戻ってこない??

    VB.2005でASP.NETのWEBアプリを開発しております。 WEB上でボタンを押し、process.start("test.exe")にてBinフォルダ下の外部exeを起動する処理をしているのですが、起動がうまくいき終了しているのですが、なぜか右下のゲージがゆっくり進んだままレスポンスが帰ってこないという現象が起こっています。 環境はWindows2003ServerでIIS6.0で行っております。 クライアントのWindowsXP上ではうまくいっております。 なにか原因になるものはあるでしょうか??

  • windows7でmscomm32.ocxを使用

    現在の動作環境 アプリ:VisualBasic6.0で作成     Mscomm32.ocxとMSWINSCK.OCXを参照してCOM通信をしています。 OS:WindowsXP 今後はアプリはそのままでWindows7上で動かそうとしています。 OCXをWindows7機の所定の場所に置き登録しようとするとエラーになります。 登録コマンド regsvr32.exe c:\windows\sysmte32\MSWINSCK.OCX regsvr32.exe c:\windows\sysmte32\MSCOMM32.OCX エラー内容 「c:\windows\sysmtem32\MSCOMM32.ocxは読み込まれましたが、DllRegisterServerへの呼び出しはエラーコード0x8002801cにより失敗しました。」 と出ます。 何がいけないのでしょうか? もしくは、それ以前にWindows7上では使用できないといったことなのでしょうか? ご存知の方ご教授いただければと思います。

  • sambaのレスポンスが悪い

    お世話になります。 標記件、以下のような状況で困っております。 ご教授下さいますよう、よろしくお願い致します。 【状況】 ・sambaをインストールし、自分1人だけでテスト運用しているが、共有フォルダ内にExcelファイルを保存し、開こうとすると、著しくレスポンスが遅い。(開くのに10秒以上かかる。) ・一度開くと、次回以降はレスポンスが良くなるが、しばらくしてから再度開くと、レスポンスが悪くなる。 ・使用しているPCは、以前WinXPで同じネットワーク内で共有サーバとして使用していたが、特にレスポンスが悪い事はなかった。(ハード的、環境的な問題ではない模様。) 【自分で行った対策】 ・テキストモードでログイン。(GUIは使用せず) ・不要なサービスはすべて停止。 ・smb.confに、socket options = TCP_NODELAY IPTOS_THROUGHPUT を追加。(他のHPに対処方法として記載されていたので、よく理解していないが追記してみました。) 【ソフト構成】 Linux : RedHatLinux WS Ver4 カーネル : 2.6.9-5.ELsmp samba Ver : 3.0.10-1.4E 【ハード構成】 EPSON Endever CPU: Core2Duo 2.4GHz Mem: 2GB HDD: 50GB + 500GB 以上

  • MSComm コントロールのエラーについて

    ACCESS2003で開発をしています。 MSCommコントロールを使用してデータの送受信をしている既存のプログラムを修正しようと、 自分のPCでプログラムを見てみると、 コントロールが空白になってしまいます。 実行しても、通信のところでエラーが出てしまいます。 コントロールを貼りなおそうと、 コントロールの選択から Microsoft Communications Control, Version6.0を貼り付けても 「Microsoft Office Access では、この ActiveX コントロールはサポートされていません。」 と出てしまいます。 ネットで調べてみたところ、KB960715, KB973346 がインストールされている場合は、 アンインストールすると書いてありましたが、 プログラムの追加と削除から調べたところ、これらはありませんでした。 また、VB6.0をインストールすると動くようですが、 インストールされていない別の端末でエラーは出ずに動いています。 他に考えられる原因は何があるのでしょうか。 ヒントになることでもよいのでご教授いただければ幸いです。

  • MSCommによるCOMポートの制御

    W2k+VB6にて開発しております。 シリアル通信におけるCOMポート制御についての質問なのですが、 ポートをOPENしようとすると「ポートは既に開かれています」というエラーが出てしまいます。 -------------------------------------- if me.comm1.portopen = False then me.comm1.portopen = True end if -------------------------------------- としているにもかかわらずOPENできません。 このような場合どういった要因が考えられるのでしょうか? よろしくお願いします。

  • グリッドにコマンドボタンを貼り付ける方法

    初めまして。現在VBの開発をしている者です。さて急ではございますが、コマンドボタンをドラッグ&ドロップを使用してグリッドのセルに貼り付ける方法を教えてください。

  • rs232cでの受信データ(mscomm)の受信方法VB6

    VB6で、シリアル通信プログラムを作っています。 機器からレスポンスが、02 00 44 03 61 62 63 03 72 0Dと9バイトくるのですが、 8バイト受信した後に、また、最後の0Dを1バイト目として受信しているので困っています。 on commイベントで以下のようにして受信データをテキストボックスに表示しているのですが、 Select Case MSComm1.CommEvent   Case comEvReceive       Dim Buffer() As Byte       Buffer() = MSComm1.Input       For t = 0 To 6 + Buffer(3)  ,BUffer(3)はデータ長です。       Text1.Text = Text1.Text & Hex$(Buffer(t)) & Chr(&H3A)       Next t 8バイト表示した後、1バイト受信が起こるので、Buffer(3)が範囲外となりエラーが起こります。 inputLenは0にしています。 この問題は解決するにはどうしたらよいでしょうか? 0Dは終了コードです。0Dを受信するまで、きちんと1バイトづづ格納していくなどというようにできたらよいのですが、、、 他にも簡単な方法があったらよいのですが、、、 よろしくお願いいたします。