• 締切済み

シリアル通信

現在、VB6でRS232Cを使いシリアル通信を行っています。一台のみでは何も考えなくてよかったのですが、複数台を同時に通信する場合、1台ずつコマンドの送受信を待ちながら通信を行うというやり方しかわかりません。 現在)1台目送受信開始→1台目送受信完了→1台目の結果の正否→2台目送受信開始→2台目送受信完了→2台目の結果の正否→3台目送受信開始… のように直列に進んでいる感じです。これを下記のように行いたいのです。 実際にやりたい事) 1台目送受信開始→1台目送受信完了→1台目の結果の正否 2台目送受信開始→2台目送受信完了→2台目の結果の正否 3台目送受信開始→3台目送受信完了→3台目の結果の正否 …… イメージとしては並列して送受信を行い1台目の送受信の結果を待たなくても2台目3台目と送受信を開始し、1台目の結果は2台目3台目の送受信をおこないながらでも、もらうことができるようにしたいのですが、どの ようにしたらいいか誰か教えてもらえないでしょうか? 宜しくお願いします。

みんなの回答

回答No.3

ちょっと質問ですが、 パソコンは1台で、それに3台の機器が つながっているということですか?

  • teo98
  • ベストアンサー率23% (70/303)
回答No.2

VB6使っていないのですが、各COMポートをOPENした後、各ポートのOnCommイベントの発生の有無を 監視するIF文を作って、各ポートの細切れなデーターを受信し、文字列変数に格納するようにします。そして、細切れに受信されたデーターを、VB6の文字列操作コマンドでつなげることでデーターを取得することになると思います。 RS232Cのシリアルデーターは、非同期データーでありますし、パソコンの動作速度に比べて遅いことがって、OnCommイベントなどのイベントを監視することで、効率よく、データー収集出来るようになります。

参考URL:
http://speana-1.hp.infoseek.co.jp/vb/vb_4/vb_4.htm
回答No.1

イメージとしては並列して送受信を行い1台目の送受信の結果を待たなくても2台目3台目と送受信を開始し、1台目の結果は2台目3台目の送受信をおこないながらでも、もらうことができるようにしたいのですが・・・ 並列して送受信なら、セントロニクス方式で処理するプリンターポートを使われてはどうですか?元々、RS-232Cは直列用ですから。擬似的にプログラムで処理できるかどうか・・・

関連するQ&A

  • VBでのシリアル通信

    VB6 Professional Virsionを使用しています。 RS232Cでシリアル通信をしたいのですが、どうすればいいのでしょうか。ヒントを教えてください。

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

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

  • VB6でのシリアル通信について質問です。

    VB6でのシリアル通信について質問です。 現在、VB6で開発したラベル印刷のシステムを引き受けたのですが、以下のような状況に陥り困っております。 ・プリンタからPCへの接続はシリアル通信のみ。 ・現在使用しようとしているPCにはシリアル通信のポートがなく、USB接続のみしかできない。 ・RS232CからUSBへの変換コネクタを使ってPCとプリンタを接続しようとしているが、印刷実行時に実行時エラー 8015が発生する。 ・VBからプリンタへの通信はMSCommを使用している。 ・プログラム自体は客先にソースのみが残っていたもので、仕様書等はまったくない。 ネットで調べたところ、MicrosoftのサイトではUSBポートからMSCommを使って通信をする事はできないというような事が記載されておりました。 ただ、他のサイトを色々と調べたところ、普通に通信できるとの意見も記載されておりました。 実際のところ、VB6でRS232C-USB変換コネクタを使用してプリンタへのシリアル通信は可能なのでしょうか。 可能な場合、今回発生したエラーの原因になりそうなものとはなんなのでしょうか。 また、通信が不可能な場合、代替策としてどのような方法を取るのが一番ベストなのでしょうか。 どなたか何卒ご教授よろしくお願い致します。

  • VB2005でシリアル通信

    VB2005を使ってマイコンボードとRS-232Cで通信をしようと思っています。 コマンドとしてはSerialPortを使おうと思っているのですが、 サンプルプログラムとかはあるのでしょうか。 #2403853の方の質問にVisual basic 6のサンプルプログラムの話がありましたが、 VB2005にも同じようなものがあるのでしょうか。 もしそうでしたら、見方も知りたいのですが。

  • シリアル通信の通信・検証方法とは?

    Visual C++ 6.0(MFC)でプログラミングを行っています. VB 6.0でPCから値を入力し,PICへRS232Cケーブルを用いて値を送り,モータコントロールするプログラムは既に存在しており,現在はVBで書かれていた部分(インターフェイス部)をVC++に書き換えようとしています. サンプルプログラムを参考にシリアル通信に関するVC++のプログラムは完成し,PCからモータの制御を行おうと思ったのですが,うまくいきません. こういった際,どこに問題があるのかを検証したいのですがどうすればいいでしょうか? 現状, 1,シリアル通信ができていない 2,シリアル通信はできているが,PICへ値がうまく格納されていない 3,それ以外 問題があるのは分かるのですが,プログラマーのほうに原因がフィードバックされないため困っています. 明確な答えでなくても,アドバイスのようなものがいただけたら幸いです.

  • シリアル通信(タブレット、シーケンサー)

    現在、WindowsXP + VB6 + MSComm <ー> FXn2-16MR(RS232Cユニット)を シリアル通信で制御しています。これをWindows8.1(タブレット) + VB2013で全面的に 書き換えを行っています。テスト用のパソコンとは何の問題間無く通信は通りますが、 対シーケンサーだと送信はしているようだが、受信が全くできない状態です。 制御パラメータは、SerialPort1.Handshake=None, DtrEnable=True, RtsEnable=True 送信時のプロトコルは、<ENQ> + データ(ASCコード) 受信時のプロトコルは、<STX> + データ(ASCコード)+ <ETX> VB6は、この設定で動作しています。 VB2013では、制御パラメータは同じし送受信では普通に SerialPort1.Write、SerialPort1.ReadLineを使っています。 宜しくお願いします。

  • キーエンス製シーケンサとのシリアル通信

    いつも御世話になっております。 早速ですが、現在VB2010Exでキーエンス製シーケンサとシリアル通信のプログラムを作成しています。 接続方法は上位リンクモードで設定しています。 パソコン(VB2010)からの送受信は出来ています。 ただ現在困っているのが、シーケンサの接点の監視です。 ためしに、 PortOpen ↓ コマンド送信(SerialPort1.Write()にて) ↓ レスポンス受信(SerialPort1.DataReceivedにて) ↓ PortClose この工程をループさせてみました。 問題なく、接点の監視は出来たのですが、通信を常時行うプログラムが本当に良いのか疑問に思い質問させていただきました。 シーケンサの接点の監視を常時行うにはどのようなプログラムが一般的なのでしょうか? よろしく御願い致します。

  • シリアル通信について

    現在、VB6.0を使用してシリアル通信のプログラムを作成しております。 その中で、通信先に対してバッチファイルを実行させてたいのですが、 通信先に対してバッチファイルを実行させる方法がわかりません。 どのようにするのか教えて頂けないでしょうか。 また、実行するバッチファイルでは引数を渡す必要があるようなのですが その方法も教えて下さい。 よろしくお願い致します。

  • VB2005 で複数チャンネルのシリアル通信処理

    初めて投稿します、VB2005への初心者です。 複数ポートでシリアル通信を同時に送受信を行おうといているのですが 旨く出来ません。 comm1をOPENして受信を行うとcomm2の受信が行えなくなります。 逆にcomm2から行っても最初にOPENしたcomm1側の受信処理が行えなくなってしまいます。 複数のcommを使用しての処理はどのようにしているのかご教授お願いします。

  • シリアル通信でのNULL送受信方法について

    プログラム初心者です。 現在,visual Studio 2008 c++でRS-485 シリアル通信プログラムを書いています。 使用しているのは変位計なのですが,その仕様書には送信コマンドが 02 00 20 1b 03 3B と表記されています。 00は0x00でNULLとなってしまうと思うのですが、NULLの送信は可能なのでしょうか。 現在書いているプログラムのコマンド送信について書いた部分を以下に示します。 -------------------------------------------------------- 略 DWORD dwWritten; char sendBuf[32]={0}; sendBuf[0] = 0x02; //02 STX sendBuf[1] = 0x00; //00 長 sendBuf[2] = 0xC0; //C0 取得コマンド sendBuf[3] = 0x10; //10 取得コマンド sendBuf[4] = 0x03; //03 ETX sendBuf[5] = 0xD0; //D0 Sum WriteFile(hComm, sendBuf, 6, &dwWritten, NULL); //hComm 指定ポート, 略 -------------------------------------------------------- エラーコード等は省略しています。 指定のポートは開くことができたのは確認したのですが、NULL文字以降がコマンドとして送信できているのか分かりません。 また,その後に ReadFile(hComm, yomiBuf, dwCount, &dwRead, NULL); で受信コマンドを読み込んでいるのですが、NULL以降が読み込めません。 このようなNULL(0x00)のシリアル通信での送受信は可能なのでしょうか。 ご意見よろしくお願いいたします。 また,なにぶん初心者であるため,問題解決のために必要なコードや情報が不足していることがあるかと思います。 その際にはご指摘いただきたいと思います。

専門家に質問してみよう