名前空間
using Aoyama.Rs232;
プロパティ
プロパティ名 | 意味 | 型 | 設定値 | 説明 |
---|---|---|---|---|
Password | ライセンスキー | string | ライセンスキー | ベクターにて、送金すると、ライセンスキーが得られます。 このプロパティに、そのライセンスキーを設定すると、制限が解除されます。 |
シリアルポート(Rs-232C)に関する項目 | ||||
Port | シリアルポートの番号 | int | 1,2,他 | Windowsで対応するポートを設定できます。 |
Bps | ボーレート | int | 256000,128000, 115200,57600, 56000,38400, 19200,14400, 9600,4800,2400, 1200,600,300, 110, 他 |
シリアルポートのボーレートを設定します。 任意の値も設定できますが、その動作は保証できません。 また、115200bpsより高速な設定に関しては、設定は可能ですが、機器により動作しないことがあります。 |
Bit | ビット | int | 8,7,6,5 | シリアルポートのビットを設定します。 |
Parity | パリティ | ParityValue | none odd even mark space |
シリアルポートのパリティを設定します。 none(0: ノンパリティ) odd(1: 奇数パリティ) even(2: 偶数パリティ) mark(3: マーク) space(4: スペース) 例:rs232c1.Parity = ParityValue.none; |
StopBit | ストップビット | StopBitValue | one onePointFive two |
シリアルポートのストップビットを設定します。 one(0: 1ビット) onePointFive(1: 1.5ビット) two(2: 2ビット) 例:rs232c1.StopBit = StopBitValue.one; |
Flow | フロー制御 | HandshakeValue | none DtrDsr RtsCts XonXoff |
シリアルポートのフロー制御を設定します。 バイナリモードの場合、(Xon・Xoff)は使用できません。 none(0: なし) DtrDsr(1: DTR・DSR) RtsCts(2: RTS・CTS) XonXoff(4: Xon・Xoff) 例:rs232c1.Flow = HandshakeValue.none; (注)none以外に設定した場合、WriteModeプロパティが nowaitに設定されます。 |
コントロールに関する項目 | ||||
ReadMode | 受信モード | ReadModeValue | eventmode pollingmode |
受信データの受け取りをイベントで行うのか、ポーリングで行うのかを設定します。 eventmode(0: イベント) pollingmode(1: ポーリング) ポーリングに設定した場合、イベントは発生しません。受信データは、Readメソッドを用いて取得します。 イベントに設定した場合、イベントが発生しますので、受信データは、イベント内で取得します。 例:rs232c1.ReadMode = ReadModeValue.eventmode; |
WriteMode | 送信モード | WriteModeValue | nowait wait |
nowait(0: 送信完了を待たない) wait(1: 送信完了を待つ) 送信完了を待たない設定(0)の場合、Writeメソッドを実行すると、すぐに制御が返ります。 送信完了を待つ設定(1)の場合、送信完了まで制御が返りません。そのため、フロー制御を行っていると、送信が終了せず、プログラムが停止しているように見えることがあります。その場合、WriteTimeOutプロパティの設定を変更することにより、タイムアウト時間を変更できますので調整してください。 例:rs232c1.WriteMode = WriteModeValue.wait; (注) このプロパティは、ポートを開いた状態では変更できません。 Flowプロパティをnone以外に設定した場合、このプロパティは、自動的にnowaitに変更されます。waitモードで利用する場合は、Openメソッドを実行する直前に、Rs.WriteMode = WriteModeValue.wait;を挿入してください。これにより、強制的にwaitモードに変更されます。ただし、この場合、相手の機器が受信可能状態になっていないと、送信がタイムアウトで中止され、フロー制御が効かないことがあります。この場合は、WriteTimeOutプロパティで、タイムアウト時間を調整してください。 |
WriteTimeOut | 送信タイムアウト時間(ミリ秒) | long | 0~1000000 (デフォルト100) |
送信できない場合にタイムアウトで制御を返すまでの時間です。 ただし、0の場合は、タイムアウトせず、送信の完了を待ち続けます。 このプロパティは、送信モード(WriteModeプロパティ)が「送信完了を待つ」設定の場合のみ、有効です。 このプロパティは、一般的な用途では、変更する必要はありませんが、フロー制御を行う機器との接続において、タイムアウト処理を行う場合、タイムアウト時間を長くする必要がある場合があります。 |
BinaryMode | バイナリモード | BinaryModeValue | textmode binarymode |
一般的には、テキストモードを利用します。 textmode(0: テキスト) binarymode(1: バイナリ) 例:rs232c1.BinaryMode = BinaryModeValue.textmode; |
Header | ヘッダ | HeaderValue | none stx |
none(0: なし) stx(1: STX) バイナリモードでは無効です。 ポーリングモードでは無効です。 詳細は下記を参照してください。 |
Terminator | ターミネータ | TerminatorValue | none etx cr crlf lf |
none(0: なし) etx(1: ETX) cr(2: CR) crlf(3: CR+LF) lf(4:LF) バイナリモードでは無効です。 ポーリングモードでは無効です。 詳細は下記を参照してください。 |
Ver | バージョン | string | バージョン | バージョンを示します。Pro版は、文字列の最初にProが付きます。 |
<ヘッダ・ターミネータの意味>
この2つのプロパティは、データを受信する場合に効果があります。
ヘッダに(STX)、ターミネータに(ETX)を設定した場合の例
データが以下のように送られてきたとします。
A,B,C,(STX),D,E,F,(ETX),G,(STX),H,
この場合、Comイベントでは、A,B,CとGは破棄され、(STX),D,E,F,(ETX)がResに値として入ります。
つまり、ヘッダからターミネータまでの値がResに入ります。
また、Hは、次に(ETX)が送られるまで保持され、イベントは発生しません。
Hは、(ETX)が送られてきたときに、(STX),H,(ETX)として、Resに入り、イベントが発生します。
(注意)
ターミネータを設定した場合、データが送られても、ターミネータが送られるまでイベントが発生しません。そのため、ターミネータが、いつまでも送られないと一時的にデータを蓄えているバッファに収まりきらなくなります。しかし、現在、バッファはメモリが許す限り確保されるため、エラーは発生しません。
メソッド
メソッド名 | 意味 | 引数値 | 戻り値 | 説明 |
---|---|---|---|---|
Open() OpenS() |
ポートを開く | - | bool 型 正常: True エラー: False |
ポートを開き、通信を開始します。 ポートを開けない場合、falseを返します。 OpenSは、Openの特別なものです。 ライセンスキー(Password)が設定されていない場合、 Openを実行すると、シェアウェアの確認ダイアログが 表示されますが、OpenSでは、この表示はありません。 しかし、ライセンスキーが設定されていない場合、 使用期限が過ぎると使用できなくなるのは共通です。 OpenSは、試用期間中に、ダイアログ表示を行いたくない場合や、ASPでの利用の場合に、使います。 |
Close | ポートを閉じる | - | - | ポートを閉じます |
Write( byte[] Data) |
データの送信 | 送信データ | bool 型 正常: true エラー: false |
Falseが返る場合、通信ポートが開かれていないか、エラーが発生しています。未送信のデータをキャンセルし、新しく送信する場合には、ClsWriteBufferを実行します。 |
Write( string Data) |
データの送信 | 送信データ | bool 型 正常: true エラー: false |
Falseが返る場合、通信ポートが開かれていないか、エラーが発生しています。未送信のデータをキャンセルし、新しく送信する場合には、ClsWriteBufferを実行します。 バイナリモードの場合 BinaryModeプロパティをバイナリモード(binarymode)に設定した場合、バイナリデータを送信することができます。 バイナリデータを"01fE41"のように16進数の文字列に変換して、Writeメソッドに渡すことにより、バイナリデータを送信できます。 例 Write "01fe41" この場合、01,fe,41の3バイトが送信されます。 (注意) 00~0fまでを表すとき、最初の0を忘れずに付けてください。 "F"のように1文字の場合、0として、送信してしまいます。また、"123"とした場合、"12"までしか送信されません。 |
WriteB( byte Data) |
バイトデータの送信 | 1バイトの送信データ | bool 型 正常: true エラー: false |
このメソッドは、BinaryModeプロパティがテキストモード(textmode)でも実行できます。 |
ECF( int Mode) |
通信の拡張機能 | モード Mode 機能 1 XOFF文字を受信したときのように送信を行います 2 XON文字を受信したときのように送信を行います 3 RTS信号をON 4 RTS信号をOFF 5 DTR信号をON 6 DTR信号をOFF 8 Break信号をON 9 Break信号をOFF |
- | 通信の拡張機能を使用します。 このメソッドは、Openを実行し、通信状態にあるときしか意味を持ちません。 |
ClsReadBuffer | 受信バッファのクリア | - | - | ターミネータを設定した場合、ターミネータを受信するまで、データは一時的にバッファに蓄えられます。このメソッドは、このバッファをクリアします。 |
ClsWriteBuffer() | 送信バッファのクリア | - | - | 送信完了を待たない設定(WriteModeが nowait)の時に有効です。 前回のWriteコマンドで送信したデータが、バッファに残っている場合、それをクリアし、新しくデータが送信できるようにします。 |
Wait( long TimeOut) |
指定時間待つ | ミリ秒 | - | 指定時間(TimeOutミリ秒)待ちます |
OutBufferLen() | 未送信データ長 | - | long 型 未送信データ長 |
未送信データの長さをlong型で返します。 このプロパティは、送信モード(WriteModeプロパティ)が「送信完了を待たない」設定の場合のみ、有効です。 「送信完了を待つ」設定では、0を返します。 |
ポーリングモード(ReadMode=pollingmode)でのみ有効なメソッド | ||||
Read() | 受信データの取得 | - | string 型 受信データ |
受信データを取得します。 テキストモードでは、受信データを文字列として取得します。 バイナリモードでは、バイナリデータを16進数文字列に変換して取得します。 |
InBufferLen() | 受信データ長 | - | long 型 受信データ長 |
受信データの長さを返します |
CommError() | エラー情報の取得 | - | 0 エラーなし -1 受信バッファを越えた |
現在、動作しません。 このメソッドを呼び出すと、エラー値は0に初期化されます。 イベントモードでは、常に0を返します。イベントモードでは、OnErrorイベントを用いてください。 |
イベント
ReadModeプロパティがイベントの設定(0)の場合にイベントが発生します。
イベント名 | 意味 | 引数値 | 説明 | ||||
---|---|---|---|---|---|---|---|
Com( object sender, RecEventArgs e) |
データ受信 | string 型 e.RecValue |
データを受信したときに、イベントが発生し、受信したデータは、e.RecValueに入ります。 このイベント内で、長い処理を行うと、この関数を実行中に、再びイベントが発生し、動作が不安定になります。 例:危険な記述
また、コマンド送信後の構文にブレークポイントを設定し停止させると、再開してもイベントが発生しません。 上記の例では、For文にブレークポイントを設定すると、データを受信しても、次のイベントが発生しません。 バイナリモードの場合 BinaryModeプロパティをバイナリモード(binarymode)に設定した場合、バイナリデータを受信することができます。この場合、受け取ったデータは、"01FEA0"のように、16進数で表現されます。この例では、01,FE,A0の3バイトを意味します。 ポーリングモードでは、イベントが発生しませんので、Readメソッドを使用して受信します。 |
||||
Event( object sender, ComEventArgs e) |
イベント発生 | イベント番号 |
以下のイベントが発生します。
|
||||
OnError | エラー発生 | エラー番号 |
現在、動作しません。 エラーが起きると、イベントが発生します。 この受信バッファは、ターミネータを受信するまでのデータを蓄えておくバッファを意味します。5000バイトのバッファを越えるとエラーが発生します。 ポーリングモードでは、イベントが発生しませんので、CommErrorメソッドを使用します。 |
<ポーリングとイベント>
受信の仕方をポーリングと、イベントの2つの方法から選択できます。
イベント方式は、データが送られた場合、イベントが発生し、受信データを受け取る方法です。デフォルトは、この方式となっています。
この方法の利点は、受信を待つループや、タイマーなどを必要とせず、また、CPUを効率的に利用できることにあります。一方で、記述する部分が、送信と受信とで分かれるため、プログラムが分かりにくくなります。また、スクリプトによってはイベントが発生しないため、受信できない場合もあります。サンプルプログラムは、この方式を利用していますので、参考にしてください。
ポーリング方式は、シリアルポートの状態を一定時間ごとに調べる方法です。シリアル機器との通信を簡単に調べたい場合や、スクリプトがイベントを利用できない場合に利用します。
例
Rs.ReadMode = ReadModeValue.pollingmode; | ポーリングモードに設定 |
Rs.Open(); | ポートのオープン |
Rs.Write("SEND START"); | データの送信 |
Rs.Wait(1000); | 一定時間待つ |
string Rec = Rs.Read(); | データの受信 |
Rs.Close(); | ポートのクローズ |
<送信完了を待つ、待たない>
送信時には、送信完了を待つ設定と、待たない設定があり、デフォルトでは、送信完了を待ちます。まず、次のプログラムをご覧ください。
例
Rs.Open(); | ポートのオープン |
Rs.Write("SEND START DATA1,DATA2"); | データの送信 |
Rs.Close(); | ポートのクローズ |
Rs.WriteMode = WriteModeValue.nowait; | 送信完了を待たない(プロパティボックスで設定する場合は、この行は不要) |
Rs.Open(); | ポートのオープン |
Rs.Write("SEND START DATA1,DATA2"); | データの送信 |
Rs.Wait(1000); | 一定時間待つ |
Rs.Close(); | ポートのクローズ |
<送信完了を待たない場合の注意>
次のプログラムをご覧ください。これは、正常に動作します。
送信完了のチェック1の行をコメントにすると、データの送信2は、送信できずに、falseを返します。これは、データの送信1が完了していない間に、次の送信を行おうとしたために発生します。本コンポーネントでは、前回の送信が完了しないと、次の送信ができない仕様になっています。
送信完了のチェック2の行をコメントにすると、データの送信1は、途中で途切れることがあります。これも、データの送信2が完了していない間に、ポートを閉じてしまうためです。
例
Rs.WriteMode = WriteModeValue.nowait; | 送信完了を待たない設定にする |
Rs.Open(); | ポートのオープン |
Rs.Write("SEND START DATA1,DATA2"); | データの送信1 |
while(Rs.OutBufferLen() > 0){} | 送信完了のチェック1 |
Rs.Write("SEND DATA3"); | データの送信2 |
while(Rs.OutBufferLen() > 0){} | 送信完了のチェック2 |
Rs.Close(); | ポートのクローズ |