• ベストアンサー

VBによるシリアルポート制御

VB6でシリアルポートからデータを取り込むプログラムを作っています。 データは、バイナリモードで、合計26バイトあります。 これが、20ms間隔で送られてくるデータは、うまく取れたのですが、データを送る間隔を5msにしたところ、うまく受信できないようで、データが表示されなくなってしまいました。 ちなみに20ms間隔の時のシリアルポートのスピード設定が19200bpsで、5ms間隔の時には、115200bpsに変更しています。 VBで115200bpsのポート制御は難しいのでしょうか? それとも、小生のプログラムに問題があるのでしょうか?

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

  • ベストアンサー
  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.1

>VBで115200bpsのポート制御は難しいのでしょうか うちの会社では当たり前にやってます。 ボーレートの問題ではなく送信間隔の問題だと思います。 5msに一回ではRTOSではないのでOSの割り込み発生で落とすと思うけど。 10ms程度なら実績はあります。 でも実際にはOSが割り込み出すので、いったん別の機器で受け取って 100レコードほどバッファして、500msに一回程度ブロック転送で 回避してます。

yoppy_mmn
質問者

お礼

回答ありがとうございます。 115200bpsでデータ送出間隔を20msにしてみたところ、問題ありませんでした。 やはり、データの吐き出し間隔のようです。 このソフトウェアには、まだまだ、問題がたくさんありますので、また相談に乗っていただきたく。 よろしくお願いいたします。

関連するQ&A

  • シリアルポートないんですね。

    最近のノートはシリアルがないんですね。 VBを使ってシリアル通信のプログラムを作って社内に配布しようとしたら、シリアルなんかないよって。USBでできないのって。カードは?って。 MS-COMM使ってる場合、どうしようもないですよね。COMポートの制御は。 ささいなことでかまいませんから、教えてくださいませんか?

  • VB6でシリアルポートの制御

    VB6のコントロールまたは、VB6で使用可能なAPIを使って、シリアルポートの内、DTRとRTS信号線を常にHigh(ON)の状態にすることは可能でしょうか? RS-232CからRS-422へ変換して機器を制御するのですが、変換器がこの信号線を電源として動作するので、常にHigh(ON)の状態にしたいのです。 よろしくお願いします。

  • シリアルポート通信

    VB6でシリアルポート通信を行っているものです。 22byteと26byteのデータをバイナリ受信したいのですが、異なるデータ長のデータをうまく取り込む方法がわかりません。 現状は、26byteのみで運用していたため InputLen=26 RThreshold=25 として運用していました。 22byteのときも26byteの時もスタートコード(02h)とエンドコード(0dh)が付きます。 この手のソフト制作が得意な方がいらっしゃいましたら、ご教示いただきたく。 InputLenとRThresholdの意味合いについてもご存じでしたら、教えてください。

  • CかVBでポートを制御する方法

    C言語かVBでUSB、RS-232C、パラレルポートのいずれかのポートを制御する方法はあるのでしょうか? いろいろと本で探してみたのですが見つかりません。 アバウトな質問で申し訳ないのですが、できるかどうかだけでもいいですし、具体的なプログラムのサンプルが載っている本、HPございましたら教えてください! よろしくお願いします!!

  • シリアル通信のデータ欠けについて

    シリアル通信のデータ欠けについて教えてください。 WindowsXP上でシリアル通信「115200bps、8、None(ODD、EVEN)、1」の設定で、1ms毎に12バイトの送受信を行っているのですが、1分ほど受信すると、データ欠けが発生します。 受信プログラムはこの問題が発覚してから、受信したデータを変数にバッファリングし、保存ボタンを押してから、ログファイルへ保存するシンプルなプログラムを作成し、確認しています。 「切り分けた内容」 1、57600bpsでも発生する 2、VB6、VisualStudio2008 C#で作成したツール及びフリーソフト(SerialDebugger)でも、データ欠けが発生する 3、RS232Cラインモニタ(キャロちゃん)で確認すると、データ欠けは発生していないので、受信側の問題と判断しています。 4、送信間隔を50msと遅くしても発生する 5、RS232C及び、USB変換したものどちらでも発生する 6、9600bpsでは、発生しない(同じデータ数での判断) 7、ケーブル長は1mほど ちなみに通信時間に余裕が無い為、チェックサムやハンドシェイクなどの機能は、入れられません。 一般的にWindowsでシリアルの高速受信を行うと、データ欠けが発生するのが当たり前なのでしょうか?

  • シリアル通信:フロー制御

    シリアル通信:フロー制御 シリアル通信のフロー制御について教えて下さい。 とある解説ページにて Xon/Xoff はバイナリデータの送受信には 使用できない。 と書いてあったのですが、これは伝送フォーマット[A] は NGになり、 [B] で通信しなさいという意味になるのでしょうか? それとも[C]の場合がNGになるということでしょうか? <伝送フォーマット> [A] STX | テキスト | ETX | CR | LF [B] テキスト| CR | LF [C] STX | バイナリ | ETX | CR | LF よろしくお願いします。

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

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

  • H8 3694のシリアルポートについて

    H8 3694のシリアルポートについてなんですが、ちょっと分からないとことがあり質問しました。 自分はVC++でH8 3694と接続したいんですがうまくいきません。接続が出来ないです。 そこで質問なんですが、 H8 3694で接続待機状態をしたいんですがどうすればいいかさっぱり分かりません。よろしくお願いします。たとえば接続成功時になんかのレジスタのビットが変わったりするとかありませんか? どこを探してもシリアルポート通信のサンプルプログラムが探しきれません。よろしくお願いします。

  • USB2.0ポートが4つあっても、合計最大転送速度は480bpsですか

    USB2.0ポートが4つあっても、合計最大転送速度は480bpsですか? 私のPCにはUSB2.0が4つ標準で付いています。制御するプロセッサというかコントローラーは1つです。 仮に、転送速度480bpsの機器があったとします。それを各ポートに1つ、合計4つ接続したとします。 その場合、合計最大転送速度は480bpsですか? それとも1,920bpsですか? その転送速度になる理由も教えて下さい。 半二重通信だからとか480bpsは理論値だとか、細かい事は無しで、単純な理屈でお願いします。

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

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

専門家に質問してみよう