外部インタフェース/API | ![]() ![]() |
接続されているデバイスの存在を知らせる
DTEとDCEは、CD, DSR, RI, DTRピンを使ってシリアルポートとデバイス間で接続が確立されたかどうかを示します。接続が確立されると、データの書き出しや読み込みを開始することができます。
PinStatus
プロパティを使ってCD, DSR, RIピンの状態をモニタすることができます。DataTerminalReady
プロパティを使ってDTRピンの状態を指定あるいはモニタすることができます。
つぎの例題は、2つのモデムが互いに接続されているときにこれらのピンがどのように利用されるかを示しています。
例題: 2つのモデムの接続
この例題は、同じコンピュータから2つのモデムを相互に接続し、コンピュータ-モデム、およびモデム-モデム間接続に対する通信の状態をモニタする方法を説明します。1つ目のモデムはCOM1に接続され、2つ目のモデムはCOM2に接続されます。
1. シリアルポートオブジェクトを作成します。 - モデムの電源を入れた後で、シリアルポートオブジェクトs1
が第一のモデムに対して作成され、シリアルポートオブジェクトs2
が第二のモデムに対して作成されます。
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
コマンドを第一のモデムに書き出します。このコマンドは、モデムを"off the hook"にします。これはマニュアルで受話器を離すことと等価です。
fprintf(s1,'atd')
ata
コマンドを第二のモデムに書き出します。このコマンドは、モデムを"answer mode"にします。これは、第一のモデムに接続させます。
fprintf(s2,'ata')
2つのモデムがそれらの接続を取り決めた後で、PinStatus
プロパティを使ってCarrier Detectの値を調べることによって、接続を確認することができます。
s1.PinStatus ans = CarrierDetect: 'on' ClearToSend: 'on' DataSetReady: 'on' RingIndicator: 'off'
第二のモデムで出力される説明のメッセージを読むことによって、モデム間接続を確認することができます。
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 clear s2
![]() | 制御ピンの使用法 | データフローの制御: ハンドシェイク | ![]() |