COMポートはどのぐらいの速度が出るのでしょうか?

また、「COMポート」=「RS-232C」なのでしょうか?
もしそうだとしたら、最大20kbpsしかでないはずだと思うのですが実際にはもっと出てますよねぇ?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

COMポートはデジタルのシリアルインタフェースですから、それ単


独で変調ということはありませんので、baud (ボー)という概念
はなじみません。モデムを介した電話線の上では、変調速度の数倍
(あるいは数十倍)の bps となります。というか、逆に bps の数
分の一で変調しないと電話線を通らない。(以上、hyde-laさんへ
のコメント)

で、COMポートは基本的にはRS-232Cです。RS-232CはEIAの規格上は
20kbpsまでしか存在しません。が、各メーカーともそれ以上のもの
を独自に出していて、事実上の標準になってしまっているというそ
れだけのことです。

この回答への補足

回答ありがとうございます。

メーカーによって速度が違うということですね。
標準というのは115kbpsでいいのでしょうか?

補足日時:2000/12/01 17:08
    • good
    • 0

115kというのはbpsではなくbow(変調速度)を意味しています。


昔のモデムはbps=bowでしたが、今はそうではないです。
その辺りが混乱を招いているのかと。

因みに、変調とは数値データをたった1本の信号線で送受信
するために必要になります。
COMにはピンが沢山ついていますが、実際に送受信に使われるのは
送信用受信用それぞれ一本ずつです。

したがって、COMポートはドライバの性能によっていくらでも
高い値をたたき出せます。
bpsは、COMポートで繋がっている(DTE、DCE・・・つまり
モデムや他のPC)がどの程度高速な変調をサポートしているか・・・
に依存してしまいます。
    • good
    • 0

「COMポート」=「RS-232C」ではないと思います。


ちなみにcomポートはちょっと前まで115200bpsってのが多くありましたが、現在は…ちょっと解りません。
参考に、私のPCではcomポートのプロパティで921600bpsまで選択が可能になってますが…。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私のPCでも921600bpsまで選択可能になっているので「予想より速いな~」と思っていたのです。
しかし、セカンドマシンの「PC-9821 V7」で見ても、921600bpsまで選択可能なんですが、このPCは115200bpsまでしかサポートしてなかったと思うのです。デバイスマネージャーでも「通信ポート(COM1)115kbpsサポート」とかいてあります。

ただ、モデムの設定の時には115kbpsまでしか選択できないし・・・
なんかどれが本当なのかわからなくなってしまって・・・

お礼日時:-0001/11/30 00:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCOM1(RS232C)とUSB仮想COMポートの速度の比較

PCにあるCOM1(RS23C)とUSB仮想COM(CNV-USB-A や EZ-USBなど)と比較した場合、
速度的には、どちらの方が早いのでしょうか?
通信速度は、それぞれの機器に依存するとして、PCからの命令に対する応答速度など…
また、データの量によっても、どちらが有利不利などあるのでしょうか?
最近、USB仮想COMの機器をよく見るのですが、単純にPCに標準でCOM(RS232C)ポート
が無いからなのか、それともUSB仮想COMの方が、速度的に有利なのか疑問に思ったのです。

Aベストアンサー

ANo.2です。

"私の勝手なイメージなのですが、PC直接のRS232Cに比べUSBは、PCからの命令に対する反応速度? が遅いようなイメージがあったのですが、そういった事は無いのでしょうか?"
→ それは、USBの処理の仕方次第です。通常のキーボードやマウスは、ユーザーインタフェースなので優先度が低い処理として扱われますので、ラウンドロビンといって順繰りに処理を割り当てられています。それでも、人間の入力する速度からしたら高速でサーチするため、十分間に合います。それに対して、通信処理は優先度が高いので、割り込み処理を使ったりします。こちらは、通信処理が発生するたびに処理をするので、取りこぼしがない訳です。

質問者さんのイメージでは、この前者を持っておられるような感じがしますが、USB仮想COMは、Widowsでの扱いとは違うような気がします。通信処理として扱われているのであれば、後者ではないかと思います。

"USBは、接続をしてからデータの転送は、早いが接続までと接続が終わってから切断までの手順など、いろいろと手順が必要で、遅くなるとか聞いたことがありました。"
→ これもWindowsでの扱いのイメージですね。Windowsでは、通信プロトコルでネゴシエーションなどがあり、確立するまでの手順があり、その手順もプラグ&プレイが可能なようになっていて複雑です。USB仮想COMにおいて、どの程度実装されているかはわかりませんが、Windowsのような冗長な処理が必要とも思えません。

用途は、何でしょうか。WindowsのUSBポートの扱いとは、かなり違うように思うのですが、どうでしょう? 一括りにUSBと言っても、処理内容によって、制御が変わると思います。

ANo.2です。

"私の勝手なイメージなのですが、PC直接のRS232Cに比べUSBは、PCからの命令に対する反応速度? が遅いようなイメージがあったのですが、そういった事は無いのでしょうか?"
→ それは、USBの処理の仕方次第です。通常のキーボードやマウスは、ユーザーインタフェースなので優先度が低い処理として扱われますので、ラウンドロビンといって順繰りに処理を割り当てられています。それでも、人間の入力する速度からしたら高速でサーチするため、十分間に合います。それに対して、通信処理は優先度が高い...続きを読む

QWindows:RS232Cの設定可能なボーレート

USBシリアル変換ケーブルを使った場合の最高ボーレートは、
ケーブルの仕様または実力に依存するのでしょうか?(921Kbpsなど)

そういったケーブルを使用した場合、
Windowsデバイスマネージャに無い設定値(200Kbpsなど)といった
特殊なボーレート設定も可能でしょうか?

TeraTermを使って手打ちでボーレートを入れて通信したいと思っています。

Aベストアンサー

一般的なUSBシリアル変換ケーブルは、Windowsから、あたかもCOMポートに出力したかの様にドライバーが仲介しますので、WindowsのCOMポートのデバイスマネージャにない設定は出来ないと思います。

従って、最高ボーレートの制限も、ボーレートの設定も、COMポートのデバイスマネージャの範囲内ということになるかと思います。

仮に直接I/Oを制御したとしても、基本的には元のクロックを分周するだけなので、基本的には倍々での設定で、半端なレートには出来ないのと思います。


Windowsになると、だんだん中身に手が出せなくなりますよね。
どうしても任意のボーレートで通信ということになると、いっそ間にマイコンボードを介在させる方が良いのではないでしょうか…(秋月とかで売ってるH8とかの)


ご参考に。

QC# シリアル通信でデータ受信時の欠損について

Visualstudio 2013 を使用して C# で開発を行っています。

SerialPort Classを使用してデータの送受信をするプログラムを作成しているのですが、
非同期でデータを受信する際にどうしてもうまくデータを取得出来ません。

5Byteのデータは正常に取得できるのですが、
その直後にくる40Byteのデータは、真ん中あたりの10数Byteや最後の10数Byteしか取れません。


serialPort.DataReceived に登録したイベント関数の中身です。

--------------------------------------------------------------------------------------
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
bytesRead = 0;
// Initialize a buffer to hold the received data
byte[] buffer = new byte[this.serialPort.ReadBufferSize];

try
{
bytesRead = this.serialPort.Read(buffer, 0, buffer.Length);
if (true == serialPort.IsOpen)
{
serialPort.DiscardInBuffer();//受信バッファをクリアする
}

}
catch (Exception ex)
{
DataLog.Exception(ex);
}

//派生クラス用の処理
DeviceClassEventArgs _DeviceClassEventArgs = new DeviceClassEventArgs(buffer, bytesRead);
DeviceClassEvent(this, _DeviceClassEventArgs);
}
--------------------------------------------------------------------------------------

ネットの情報を参考に、
ReceivedBytesThreshold の値を期待するデータ量に逐一変えることで
とりあえず正常に取ることが出来たのですが、これでいいのでしょうか?
期待するデータ量がわからなかった場合は使えないのかなとも思います。

データが欠損してしまう理由、
上記の対処法以外の一般的な対処法など有りましたら教えて下さい。

その他参考になるページ等ありましたら教えていただけると大変助かります。

Visualstudio 2013 を使用して C# で開発を行っています。

SerialPort Classを使用してデータの送受信をするプログラムを作成しているのですが、
非同期でデータを受信する際にどうしてもうまくデータを取得出来ません。

5Byteのデータは正常に取得できるのですが、
その直後にくる40Byteのデータは、真ん中あたりの10数Byteや最後の10数Byteしか取れません。


serialPort.DataReceived に登録したイベント関数の中身です。

-------------------------------------------------------------------------------...続きを読む

Aベストアンサー

DataReceivedイベントが発生したときでも、
シリアルポートへの受信はまだ継続している可能性があるので
不用意にバッファクリアしてはいけない。
非同期の受信処理は、何かと難しいのです。

private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  bytesRead = 0;
  // Initialize a buffer to hold the received data
  byte[] buffer = new byte[this.serialPort.ReadBufferSize];

  try
  {
    //bytesRead = this.serialPort.Read(buffer, 0, buffer.Length);
    //if (true == serialPort.IsOpen)
    //{
    // serialPort.DiscardInBuffer();//受信バッファをクリアする
    //}

    // 受信バッファにデータがなくなるまで繰り返し読込む
    while (true)
    {
      if (0 == serialPort.BytesToRead)
      {
        break;
      }
      buffer[bytesRead] = (byte)serialPort.ReadByte();
      bytesRead++;
      System.Threading.Thread.Sleep(0);

      // シリアルポートの受信バッファには、
      // ・必要なブロックの途中から受信している。
      // ・次のブロックの先頭部分も受信されている。
      // 可能性があるので、ここで必要なブロックだけRead()できたことを確認する。
      if (必要なブロックが正常に読めたか確認する関数())
      {
        break;
      }
    }
  }
  catch (Exception ex)
  {
    DataLog.Exception(ex);
  }

  //派生クラス用の処理
  DeviceClassEventArgs _DeviceClassEventArgs = new DeviceClassEventArgs(buffer, bytesRead);
  DeviceClassEvent(this, _DeviceClassEventArgs);
}

DataReceivedイベントが発生したときでも、
シリアルポートへの受信はまだ継続している可能性があるので
不用意にバッファクリアしてはいけない。
非同期の受信処理は、何かと難しいのです。

private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  bytesRead = 0;
  // Initialize a buffer to hold the received data
  byte[] buffer = new byte[this.serialPort.ReadBufferSize];

  try
  {
    //bytesRead = this.serialPort.Read(buffer, 0, buffer.Le...続きを読む

QRS232C 調歩同期のビットレート誤差について

RS232C 調歩同期のビットレート誤差は何%程度まで許容できるのでしょうか?
また、目安とその理由について教えて下さい。

SH4のプログラムを組んでいます。
例えば、パソコンとRS232C(調歩同期)通信を行う際のビットレートの設定で、SH4側のビットレート誤差は何%以内にするべきでしょうか?
クロック同期の場合は、「なるべく1%以内になるように」とマニュアルに記載があるのですが。。。

Aベストアンサー

まずは
データ長8ビット
パリティなし
ストップビット1

だとすると、シリアルデータは全部で10ビットです。

スタートビットから同期し、各ビットの中央でデータをサンプリングするなら、10番目のビットが50%以上ずれるとアウトです。つまり5%誤差ですね。

しかし世の中そううまくいきません。コントロールICによって違いますが、ビットレートの8倍や16倍で各データをサンプリングします。1ビットを8回や16回チェックしてるんですね。

ビットがHかLかを判断するのもいろいろですが、中央部数回分(8回サンプルなら3~4回程度)を多数決原理で判断するのが多いようです。とすると、せいぜい2.5%となります。

これに、クロック源の誤差も加味すると2%くらいが限度です。



CPUクロックからビットレートを生成する場合、ビットレートにあわせた変な周波数のクロック源でなければ0%なんて無理ですよね。実際は1%以内なら気にしませんし、大丈夫ですよ。

QCOMポート通信をモニターしたい

現在、PCと組み込み系の端末との間でRS-232C通信をさせています。このRS-232C通信のTXとRXのデータのタイミングなどをモニターできるソフトはありませんでしょうか?

現在RS-232C通信をさせているのですが、組み込み系の端末側にはTCP-RS232C通信変換のモジュールを取り付けていて、PC側もTCP-RS232C変換させるソフトを使用しています。


TCP-RS232C通信変換のモジュールはWIZNET社製のWIZ110SRというのを使用しています。

PC側ではTCP-RS232C通信変換ソフトでWIZNET社製のWIZ VSPというソフトを使用して、TCPで受けたデータをRS-232Cに変換して受信プログラムソフトに転送しています。


このPC側の受信ソフトとTCPへ変換する間のCOMポートの通信をモニターできるようなソフトというものはありませんでしょうか?

どうぞ、ご教授頂きますようお願い致します。

Aベストアンサー

PC自体のCOMポート(USB-Serial変換でも)なら、ソフトでどうにかできる場合もあるでしょうが……

ご使用の機器の場合、PCからはネットワーク端末に見える…のではないでしょうか?
ドライバでCOMポートとして見えるのですか?
# 後者ならソフトで何とかできる…かも知れません。

こちらの組み込み系開発ではラインアイ社の機器を使用しています。
http://www.lineeye.co.jp/html/product_le2500.html
http://www.lineeye.co.jp/html/product_le3500.html
などですね。
http://www.lineeye.co.jp/html/product_LE-200PS.html
http://www.lineeye.co.jp/html/product_LE-150PS.html
でも用途によっては十分かも知れません。
# 組み込み開発に使うのであれば1台あった方が何かと便利です。
# それなりに高機能なので…値段も結構しますけどね。

Q仮想COMポートの仕組みについて

仮想COMポートの仕組みについて調査しています。

具体的には、仮想COMポートの仕組みを理解し、実際に実装ができるように調査しています。仮想COMポートの仕組みについて教えていただけないでしょうか。

また、仮想COMポートをC言語で実装する場合、参考となる文献や、Webサイトなどあれば教えていただけないでしょうか。

よろしくお願いします。

Aベストアンサー

仮想プリンタでも仮想ドライブでも何でもそうですが、実際のものとは別のものに置き換えるというのが大前提です。

>仮想COMポートの仕組みについて教えていただけないでしょうか。

というのでしたら、仮想COMポートに送られた信号を、別のものにする、別のものから渡されたデータを仮想COMポートから出力する。といったところでしょうか。

ここでいう「別のもの」というのが、仮想プリンタですとpdfなどの印刷イメージファイル、仮想CDROMドライブですとisoイメージ、仮想プライベートネットワーク(VPN)ですと、特殊なパケットといったところでしょうか。

つまり、いきなり仮想うんたらとかいきなり言われても、これぐらいしか説明できません。


>また、仮想COMポートをC言語で実装する場合、参考となる文献や、Webサイトなどあれば教えていただけないでしょうか。

普通のアプリか何かと勘違いされていませんか?
COMポートはハードウェアなんで、それを仮想化するとなると作らなければいけないのはドライバなんですけど(^^;;;

プラットフォームも何も書かないで、いきなりサンプルとか言われてもねぇ。

WindowsでしたらDDKにCOMポートのドライバのサンプル、あると思いますが。

仮想化なんてのは、入出力先を本物のデバイスではなく別のものにするだけなんですから。apple-orangeさんが何に置き換えるかはわかりませんが。

仮想プリンタでも仮想ドライブでも何でもそうですが、実際のものとは別のものに置き換えるというのが大前提です。

>仮想COMポートの仕組みについて教えていただけないでしょうか。

というのでしたら、仮想COMポートに送られた信号を、別のものにする、別のものから渡されたデータを仮想COMポートから出力する。といったところでしょうか。

ここでいう「別のもの」というのが、仮想プリンタですとpdfなどの印刷イメージファイル、仮想CDROMドライブですとisoイメージ、仮想プライベートネットワーク(VPN)...続きを読む

Qint型からchar型への変換

タイトル通り、int型からchar型への変換の仕方がわかりません!><
どうしたらいいのでしょうか?

Aベストアンサー

#include <stdio.h>


char buf[5];
int no;

no = 10;
sprintf(buf, "%d", no);

QCOMポートの同時オープン同時読み込み

お世話になります。RS232機器で同じ仕様の計測機器を
つなげて、同時に測定をしたいと考えています。
WindowsXPでVC++で作成します。
CreateFile,ReadFileで実現するかと思うのですが、
プログラミング上、まったく同一時刻に二つのCOMを
開くことは現実不可能でしょうか?
正確にいうと、同一時刻に一定量蓄積された2つのCOMバッファ
から同時にPCのメモリに展開するという処理です。

計測機器同士は、シンクロケーブルがありますので
ハードウェア的にタイミングを合わせて、データ出力してきます。
ということは、パソコン側では理論的にCOM1、COM2に接続された
機器からは、データが一定量蓄積される時間はともに一定時間
であるといえます。
逆にいうと、COM1、COM2からデータを同時にぬきとって
やらなければ、のちのちCOM1のバッファとCOM2のバッファ
でずれが生じてくるはずです。

たとえばDSPなんかですと、パイプ命令てのがあり
CreateFile("COM1"...) | CreateFile("COM2"...)
とすることで、2つの命令を同じ時刻にスタート可能だと
思います。(DSPにCreateFileのような命令はないですが)

また、スレッドを使うという考えもありましたが、自分自身、
スレッドに対する知識がとぼしくて・・・

こうした処理をする際、ソフトウェアでの処理というのは
事実上不可能に見えてきますが、実際はなにか回避策というか
解決策があるのでしょうか?

よろしくお願いいたします。

お世話になります。RS232機器で同じ仕様の計測機器を
つなげて、同時に測定をしたいと考えています。
WindowsXPでVC++で作成します。
CreateFile,ReadFileで実現するかと思うのですが、
プログラミング上、まったく同一時刻に二つのCOMを
開くことは現実不可能でしょうか?
正確にいうと、同一時刻に一定量蓄積された2つのCOMバッファ
から同時にPCのメモリに展開するという処理です。

計測機器同士は、シンクロケーブルがありますので
ハードウェア的にタイミングを合わせて、データ出力してきます。
...続きを読む

Aベストアンサー

方法1)
専用ケーブルを作成する。

●参考サイト
シリアルはWINで行こう(T接続の方法)
http://kencreate.ld.infoseek.co.jp/ita/debugc.htm


方法2)
スレッドを使って、WaitCommEvent()で受信を待つ。そして、PostMessageでイベントを発生させる。

●参考サイト
WindowsでRS232Cを使う(イベント駆動を使った通信の例)
http://members.jcom.home.ne.jp/0434383301/vc10.htm

ソース一式ダウンロードが可能です。
下記のようにすると、ReadFile、WriteFileで時間待ちせずに抜けてきます。

CreateFile(PortName[CommPort] ,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);

ReadFile(h_CommHandle,RecBuf.GetBuffer(Comstat.cbInQue),Comstat.cbInQue,&NoOfByte,&recop);

WriteFile(h_CommHandle,Msg,Msg.GetLength(),&NoOfByte,&sendop);

::PostMessage(vhWnd,WM_READ_END,0,0);

方法1)
専用ケーブルを作成する。

●参考サイト
シリアルはWINで行こう(T接続の方法)
http://kencreate.ld.infoseek.co.jp/ita/debugc.htm


方法2)
スレッドを使って、WaitCommEvent()で受信を待つ。そして、PostMessageでイベントを発生させる。

●参考サイト
WindowsでRS232Cを使う(イベント駆動を使った通信の例)
http://members.jcom.home.ne.jp/0434383301/vc10.htm

ソース一式ダウンロードが可能です。
下記のようにすると、ReadFile、WriteFileで時間待ちせず...続きを読む

QRS-232C ボーレートの許容誤差

マイコンのシリアルポート(調歩同期)で、
クロック周波数の都合上、どうしても、38400とか57600といったボーレートを正確に作り出せず、なんとか近づけても39062.5とか、56818.2といった数値になってしまいます。
どのくらいの誤差までが許容範囲なのでしょうか?

Aベストアンサー

石によってサンプリングポイント(データビットの)が異なるようですが 5%と言う意見と10%と言う意見があります いずれにせよ5%未満の誤差であれば 問題ないわけです それ以上ではフレーミングエラーを覚悟しなければなりません
なお この誤差は絶対としての誤差でなく 相手のシリアルポートのクロックに対してである事は言うまでもありません

Qエクセル STDEVとSTDEVPの違い

エクセルの統計関数で標準偏差を求める時、STDEVとSTDEVPがあります。両者の違いが良くわかりません。
宜しかったら、恐縮ですが、以下の具体例で、『噛み砕いて』教えて下さい。
(例)
セルA1~A13に1~13の数字を入力、平均値=7、STDEVでは3.89444、STDEVPでは3.741657となります。
また、平均値7と各数字の差を取り、それを2乗し、総和を取る(182)、これをデータの個数13で割る(14)、この平方根を取ると3.741657となります。
では、STDEVとSTDEVPの違いは何なのでしょうか?統計のことは疎く、お手数ですが、サルにもわかるようご教授頂きたく、お願い致します。

Aベストアンサー

データが母集団そのものからとったか、標本データかで違います。また母集団そのものだったとしても(例えばクラス全員というような)、その背景にさらならる母集団(例えば学年全体)を想定して比較するような時もありますので、その場合は標本となります。
で標本データの時はSTDEVを使って、母集団の時はSTDEVPをつかうことになります。
公式の違いは分母がn-1(STDEV)かn(STDEVP)かの違いしかありません。まぁ感覚的に理解するなら、分母がn-1になるということはそれだけ結果が大きくなるわけで、つまりそれだけのりしろを多くもって推測に当たるというようなことになります。
AとBの違いがあるかないかという推測をする時、通常は標本同士の検証になるわけですので、偏差を余裕をもってわざとちょっと大きめに見るということで、それだけ確証の度合いを上げるというわけです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報