ドキュメンテーション

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

制御ピンの使用

シリアル ポート制御ピンのプロパティ

シリアル ポート信号とピン割り当て」で説明するように、9 ピン シリアル ポートには 6 つの制御ピンがあります。以下の表は、シリアル ポート制御ピンに関連するプロパティを示しています。

制御ピン プロパティ

プロパティ名説明

DataTerminalReady

DTR ピンの状態

FlowControl

使用するデータ フロー制御法

PinStatus

CD、CTS、DSR、および RI ピンの状態

RequestToSend

RTS ピンの状態

接続されているデバイスの存在の通知

DTE と DCE は、CD、DSR、RI、および DTR の各ピンを頻繁に使用してシリアル ポート デバイス間で接続が確立されたかどうかを示します。接続が確立されると、データの書き込みや読み取りを開始できます。

PinStatus プロパティを使用して、CD、DSR、および RI の各ピンの状態を監視できます。DataTerminalReady プロパティを使用して、DTR ピンの状態を指定または監視できます。

次の例は、2 つのモデムが互いに接続されている場合に、これらのピンがどのように使用されるかについて示しています。

    メモ:    ここで紹介するすべての例は、Windows® 32 ビット プラットフォームに基づいています。その他の対応プラットフォームの詳細は、「シリアル ポート オブジェクトの概要」を参照してください。

例 — 2 つのモデムの接続

この例では、同じコンピューターから 2 つのモデムを相互に接続し、コンピューターとモデム間の接続、およびモデム間の接続に対する通信状態を監視する方法について説明します。最初のモデムは COM1 に接続され、2 番目のモデムは COM2 に接続されます。

  1. シリアル ポート オブジェクトの作成 — モデムの電源を入れた後、シリアル ポート オブジェクト s1 が最初のモデム用に作成され、シリアル ポート オブジェクト s2 が 2 番目のモデム用に作成されます。

    s1 = serial('COM1');
    s2 = serial('COM2');
  2. デバイスへの接続 — s1 および s2 がモデムに接続されます。ReadAsyncMode プロパティに対する既定値は continuous であるため、データはモデムから読み取り可能になるとすぐに入力バッファーに非同期的に返されます。

    fopen(s1)
    fopen(s2)

    DataTerminalReady プロパティの既定値は on であるため、コンピューター (データ端末) はモデムとのデータ交換の準備ができています。PinStatus プロパティを使用して Data Set Ready ピンの値を調べることにより、モデム (データセット) はコンピューターと通信可能であることを確認できます。

    s1.Pinstatus
    ans = 
        CarrierDetect: 'off'
          ClearToSend: 'on'
         DataSetReady: 'on'
        RingIndicator: 'off'

    両方のモデムはオブジェクトに接続される前に電源が入っているため、DataSetReady フィールドの値は on です。

  3. プロパティの構成 — 両方のモデムは、ボー レート 2400 ビット/秒とキャリッジ リターン (CR) 終端子に構成されます。

    s1.BaudRate = 2400;
    s1.Terminator = 'CR';
    s2.BaudRate = 2400;
    s2.Terminator = 'CR';
  4. データの書き込みと読み取り — atd コマンドを最初のモデムに書き込みます。このコマンドは、電話の受話器を取る動作に匹敵し、モデムに書き込む準備をします。

    fprintf(s1,'atd')

    ata コマンドを 2 番目のモデムに書き込みます。このコマンドは、モデムを "応答モード" にします。これによって、最初のモデムに接続されます。

    fprintf(s2,'ata')

    2 つのモデムがそれらの接続を取り決めた後、PinStatus プロパティを使用して Carrier Detect の値を調べることで接続状態を確認します。

    s1.PinStatus
    ans = 
        CarrierDetect: 'on'
          ClearToSend: 'on'
         DataSetReady: 'on'
        RingIndicator: 'off'

    2 番目のモデムによって返される説明のメッセージを読むことで、モデム間の接続を確認します。

    s2.BytesAvailable
    ans =
        25
    out = fread(s2,25);
    char(out)'
    ans =
    ata
    CONNECT 2400/NONE

    DataTerminalReady プロパティを off に構成することで、2 つのモデム間の接続を切断します。Carrier Detect ピンの値を調べることで、モデムが切断されていることを確認できます。

    s1.DataTerminalReady = 'off';
    s1.PinStatus
    ans = 
        CarrierDetect: 'off'
          ClearToSend: 'on'
         DataSetReady: 'on'
        RingIndicator: 'off'
  5. 切断とクリーンアップ — オブジェクトをモデムから切断し、メモリおよび MATLAB® ワークスペースからオブジェクトを削除します。

    fclose([s1 s2])
    delete([s1 s2])
    clear s1 s2

データ フローの制御:ハンドシェーキング

データ フロー制御または "ハンドシェーキング" は、送信中のデータ損失を防ぐために DCE と DTE 間の通信に使用される方法です。たとえば、コンピューターが処理される前に限られた量のデータしか受信できないと仮定します。この制限に達すると、データの送信を中止するためにハンドシェーキング信号が DCE に送信されます。コンピューターがより多くのデータを受信できる場合は、他のハンドシェーキング信号が DCE に送信されてデータの送信を再開します。

デバイスがサポートしている場合は、次のいずれかの方法でデータ フローを制御できます。

    メモ:   デバイスをハードウェア ハンドシェーキングとソフトウェア ハンドシェーキング用に同時に構成することは可能ですが、MATLAB はこの動作はサポートしません。

FlowControl プロパティを使用してデータ フロー制御方法を指定できます。FlowControlhardware である場合は、データ フローの制御にハードウェア ハンドシェーキングが使用されます。FlowControlsoftware である場合は、データ フローの制御にソフトウェア ハンドシェーキングが使用されます。FlowControlnone の場合、ハンドシェーキングは使用されません。

ハードウェア ハンドシェーキング

ハードウェア ハンドシェーキングは、特定のシリアル ポート ピンを使用してデータ フローを制御します。ほとんどの場合、これらは RTS ピンと CTS ピンです。これらのピンを使用したハードウェア ハンドシェーキングは、「RTS ピンと CTS ピン」に説明されています。

FlowControlhardware である場合、RTS ピンと CTS ピンは DTE と DCE によって自動的に管理されます。PinStatus プロパティを使用して CTS ピンの値を返すことができます。RequestToSend プロパティを使用して RTS ピンの値を構成または返すことができます。

    メモ:    デバイスの中には、ハンドシェーキング用に DTR ピンと DSR ピンを使用するものがあります。ただし、これらのピンは通常、システムが通信準備を完了していることを示すために使用され、データ送信の制御には使用されません。MATLAB では、ハードウェア ハンドシェーキングは常に RTS ピンと CTS ピンを使用します。

デバイスが標準的な方法でハードウェア ハンドシェーキングを使用しない場合は、RequestToSend プロパティを手動で構成する必要があります。この場合は、FlowControlnone に構成する必要があります。FlowControlhardware である場合は、指定する RequestToSend 値は与えられません。ピンの動作を指定するには、デバイスのドキュメンテーションを参照してください。

ソフトウェア ハンドシェーキング

ソフトウェア ハンドシェーキングは、特定の ASCII 文字を使用してデータ フローを制御します。Xon および Xoff (または XON および XOFF) と呼ばれるこれらの文字を、以下の表に説明します。

ソフトウェア ハンドシェーキング文字

文字整数値説明

Xon

17

データ送信を再開

Xoff

19

データ送信を中止

ソフトウェア ハンドシェーキングの使用時に、制御文字は通常のデータと同じ方法で送信ライン上で送信されます。そのため、TD、RD、および GND の各ピンのみが必要になります。

ソフトウェア ハンドシェーキングの主な欠点は、数値データがデバイスに書き込まれているときに Xon 文字または Xoff 文字を書き込めないことです。これは、数値データに 17 または 19 が含まれることがあり、制御文字とデータを区別できないためです。ただし、データをデバイスから非同期的に読み取っているときは、TD ピンと RD ピンを使用しているため、Xon または Xoff を書き込むことができます。

例: ソフトウェア ハンドシェーキングの使用

例 — バイナリ データの読み取り」で説明した例を使用してソフトウェア フロー制御を使用すると仮定します。そのためには、ソフトウェア フロー制御用にオシロスコープとシリアル ポート オブジェクトを構成しなければなりません。

fprintf(s,'RS232:SOFTF ON')
s.FlowControl = 'software';

データ送信を中止するには、数値 19 をデバイスに書き込みます。

fwrite(s,19)

データ送信を再開するには、数値 17 をデバイスに書き込みます。

fwrite(s,17)
この情報は役に立ちましたか?