• ベストアンサー

VBで二つの信号を送るには?

よろしくお願いします VBで計測機械の制御をしようと考えているのですが、うまくいきません 具体的にはコマンドボタンを押して、計測機器に設定を送る際 先発の信号が受け付けられず、後発の信号のみが受け付けられる結果になります それぞれの信号が間違いないことは確認しているので 入力ごとにコマンドボタンを設定することも考えましたが、 見た目もごちゃごちゃしてよくないので、できればボタンひとつで行きたいと思います 一部ですがコードを貼っておきます よろしくお願いします Private Sub Command4_Click(Index As Integer) If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If Dim W As Single W = Text1.Text W = W / 1000 MSComm1.Output = ":WAVELENGTH " & W & "e-06" & vbCrLf Static R As Integer If Combo1 = "3μw" Then R = 3 If Combo1 = "10μw" Then R = 4 If Combo1 = "30μw" Then R = 5 MSComm1.Output = ":RANGE " & R & vbCrLf End Sub

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

  • ベストアンサー
  • goo39
  • ベストアンサー率36% (13/36)
回答No.1

コードは一部との事ですが MSComm1.Output = ":WAVELENGTH " & W & "e-06" & vbCrLf を送信バッファに書き込み、送信せずに MSComm1.Output = ":RANGE " & R & vbCrLf を送信バッファに書き込んでいるように見えます。 最初のコマンド送信(普通は送信して受信)を完了してから 次のコマンドの送信処理を行って見て下さい。 DoEventsで行けると思います。

Mnosan
質問者

補足

W = W / 1000 MSComm1.Output = ":WAVELENGTH " & W & "e-06" & vbCrLf DoEvents ←追加 Static R As Integer If Combo1 = "3μw" Then R = 3 としてみましたが、うまくいきませんでした 他に、Subの途中で送信を実行するコマンドが必要ですか?

その他の回答 (3)

回答No.4

No1とも重なるのですが、 通常1回目と2回目が受信側で別処理になるのであれば、 1回目の受信が完了した時点で何らかの応答メッセージを返すような気がするのですが…。 で、その受信をまって次の送信を行うとういうつくりにするパターンが多い気がします。 それが無理なら、タイマーコントロールを使って、2回目の送信はタイマーのイベントに書いて、1回目の最後でタイマーON、2回目の最後でタイマーOFFにするとか…。

Mnosan
質問者

お礼

結局タイマーを置いて解決しました ありがとうございました

  • midly
  • ベストアンサー率40% (24/59)
回答No.3

前者と後者の出力の間に MsgBox("OK?") を入れて時間を稼いでもダメですか?

noname#259269
noname#259269
回答No.2

MSComm には全く詳しくないのですが。。。 >MSComm1.Output = ":RANGE " & R & vbCrLf この行↑をコメント化した場合には、1つ目の信号が正常に送られるのではないでしょうか? そうであれば、1つ目の信号を送り終わって、そのステータスコードが取れたりしませんか? そのステータスコードを待って2つ目の信号を送る、あるいは、十分な間を置いてから2つ目の信号を送ればよいように思いますが。。。 こんなサイトが見つかりました。 http://support.microsoft.com/kb/411403/ja

Mnosan
質問者

補足

設定を送るだけでステータスコードは返って来ませんでした ステータスを知るには別に「:RANGE?」と送らなければいけないので ステータスコードを待つという手は使えませんでした

関連するQ&A