〜 シンプル通信(Rs-232c)のリファレンス 〜

プロパティ
プロパティ名 意味 設定値 説明
Password
(PARAMで表記する場合は、"ライセンスキー")
ライセンスキー ライセンスキー ベクターにて、送金すると、ライセンスキーが得られます。
このプロパティに、そのライセンスキーを設定すると、制限が解除されます。
Pro版では無効なプロパティです。
Ver バージョン コントロールのバージョンを返します。
シェアウェア版は、Share。Pro版は、Pro。
シリアルポート(Rs-232C)に関する項目
Port シリアルポートの番号 1,2,その他 Windowsで対応するポートを設定できます。
Bps ボーレート 256000,128000,115200,
57600,56000,38400,
19200,14400,9600,
4800,2400,1200,600,
300,110
シリアルポートのボーレートを設定します。
115200bpsより高速な設定に関しては、設定は可能ですが、一般的に動作しません。
また、実行時には、このプロパティに、110から256000までの任意の値を設定できます。ただし、動作は保証できません。
Bit ビット 8,7,6,5 シリアルポートのビットを設定します。
Parity パリティ 0(ノンパリティ)
1(奇数パリティ)
2(偶数パリティ)
3(マーク)
4(スペース)
シリアルポートのパリティを設定します。
StopBit ストップビット 0(1ビット)
1(1.5ビット)
2(2ビット)
シリアルポートのストップビットを設定します。
Flow フロー制御 0(なし)
1(DTR・DSR)
2(RTS・CTS)
4(Xon・Xoff)
シリアルポートのフロー制御を設定します。
バイナリモードの場合、(Xon・Xoff)は使用できません。
コントロールに関する項目
ReadMode 受信モード 0(イベント)
1(ポーリング)
受信データの受け取りをイベントで行うのか、ポーリングで行うのかを設定します。
ポーリングに設定した場合、イベントは発生しません。受信データは、Readメソッドを用いて取得します。
イベントに設定した場合、イベントが発生しますので、受信データは、イベント内で取得します。
WriteMode 送信モード 0(送信完了を待たない)
1(送信完了を待つ)
送信完了を待たない設定(0)の場合、Write(Write)メソッドを実行すると、すぐに制御が返ります。
送信完了を待つ設定(1)の場合、送信完了まで制御が返りません。そのため、フロー制御を行っていると、送信が終了せず、プログラムが停止しているように見えることがあります。その場合、WriteTimeOutプロパティの設定を変更することにより、タイムアウト時間を変更できますので調整してください。
送信完了タイミングは、OnEventイベントにより、知ることができます。
WriteTimeOut 送信タイムアウト時間(ミリ秒) 0〜1000000
(デフォルト100)
送信できない場合にタイムアウトで制御を返すまでの時間です。
ただし、送信時の正確なタイムアウト時間は、
WriteTimeOut+(データを送信するのに必要な時間×2)
です。
このプロパティは、フロー制御を行う場合に、意味を持ちます。一般的な用途では、フロー制御を行う場合でも、変更する必要はありません。
BinaryMode バイナリモード 0(テキスト)
1(バイナリ)
一般的には、テキストモードを利用します。
Header
(PARAMで表記する場合は、"Head")
ヘッダ 0(なし)
1(STX)
バイナリモードでは無効です。
ポーリングモードでは無効です。
詳細は下記を参照してください。
Terminator
(PARAMで表記する場合は、"Term")
ターミネータ 0(なし)
1(ETX)
2(CR)
3(CR+LF)
バイナリモードでは無効です。
ポーリングモードでは無効です。
ターミネータを設定する場合、1回の受信データは、5000バイト以内に収まるようにしてください。
詳細は下記を参照してください。

<ヘッダ・ターミネータの意味>
この2つのプロパティは、データを受信する場合に効果があります。
ヘッダに(STX)、ターミネータに(ETX)を設定した場合の例

データが以下のように送られてきたとします。
A,B,C,(STX),D,E,F,(ETX),G,(STX),H,
この場合、OnCom(Res)イベントでは、A,B,CとGは破棄され、(STX),D,E,F,(ETX)がResに値として入ります。 つまり、ヘッダからターミネータまでの値がResに入ります。
また、Hは、次に(ETX)が送られるまで保持され、この時点ではイベントは発生しません。 Hは、(ETX)が送られてきたときに、(STX),H,(ETX)として、Resに入り、イベントが発生します。
(注意)
ターミネータを設定した場合、データが送られても、ターミネータが送られるまでイベントが発生しません。そのため、ターミネータが、いつまでも送られないと一時的にデータを蓄えているバッファに収まりきらなくなり、エラーが発生します。このエラーは、OnErrorイベントで知ることができます。バッファのサイズは、5000バイトに固定です。

メソッド
メソッド名 意味 引数値 戻り値 説明
Open() as Boolean
OpenS() as Boolean
ポートを開く - 正常: True
エラー: False
ポートを開き、通信を開始します。
ポートを開けない場合、falseを返します。
OpenSは、Openの特別なものです。
ライセンスキー(Password)が設定されていない場合、
Openを実行すると、シェアウェアの確認ダイアログが
表示されますが、OpenSでは、この表示はありません。
しかし、ライセンスキーが設定されていない場合、
使用期限が過ぎると使用できなくなるのは共通です。
OpenSは、試用期間中に、ダイアログ表示を行いたくない場合や、ASPでの利用の場合に、使います。
Close ポートを閉じる - - ポートを閉じます
Write(Data as string) as Boolean データの送信 送信データ 正常: True
エラー: False
Falseが返る場合、通信ポートが開かれていないか、エラーが発生しています。未送信のデータをキャンセルし、新しく送信する場合には、InitWriteCmdを実行します。

バイナリモードの場合
 BinaryModeプロパティを1に設定し、バイナリモードとした場合、バイナリデータを送信することができます。
 バイナリデータを"01fE41"のように16進数の文字列に変換して、Writeメソッドに渡すことにより、バイナリデータを送信できます。
例 Write "01fe41"
この場合、01,fe,41の3バイトが送信されます。
(注意)
00〜0fまでを表すとき、最初の0を忘れずに付けてください。
"F"のように1文字の場合、0として、送信してしまいます。また、"123"とした場合、"12"までしか送信されません。
WriteB(Data as long) as Boolean バイトデータの送信 1バイトの送信データ 正常: 値
エラー: -1
このメソッドは、BinaryModeプロパティが0、つまり、テキストモードでも実行できます。
ECF(Mode as integer) 通信の拡張機能 モード
Mode 機能
1 XOFF文字を受信したときのように送信を行います
2 XON文字を受信したときのように送信を行います
3 RTS信号をON
4 RTS信号をOFF
5 DTR信号をON
6 DTR信号をOFF
8 Break信号をON
9 Break信号をOFF
- 通信の拡張機能を使用します。
このメソッドは、Openを実行し、通信状態にあるときしか意味を持ちません。
ClsBuffer バッファのクリア - - ターミネータを設定した場合、ターミネータを受信するまで、データは一時的にバッファに蓄えられます。このメソッドは、このバッファをクリアします。
InitWriteCmd() 送信バッファのクリア - - 送信完了を待たない設定(WriteModeが0)の時に有効です。
前回のWriteコマンドで送信したデータが、バッファに残っている場合、それをクリアし、新しくデータが送信できるようにします。
Wait(TimeOut as Long) 指定時間待つ ミリ秒 - 指定時間(TimeOutミリ秒)待ちます
OutBufferLen() as Long 未送信データ長 - 未送信データ長 未送信データの長さをLongで返します
ポーリングモード(ReadMode=1)でのみ有効なメソッド
Read() as String 受信データの取得 - 受信データ 受信データを取得します。
テキストモードでは、受信データを文字列として取得します。
バイナリモードでは、バイナリデータを16進数文字列に変換して取得します。
InBufferLen() as Long 受信データ長 - 受信データ長 受信データの長さを返します
CommError() as Long エラー情報の取得 - 0 エラーなし
-1 受信バッファを越えた
このメソッドを呼び出すと、エラー値は0に初期化されます。
イベントモードでは、常に0を返します。イベントモードでは、OnErrorイベントを用いてください。
無効なメソッド(過去との互換性のために残っている)
ReadyWrite() as Boolean - - 実行可能: True
実行不可: False
現在、未使用。無条件にTrueを返します。
(ver1.3までは、以下の機能を持ちました)
送信、つまり、Writeコマンドが実行可能であるかを調べます。

イベント
ReadModeプロパティがイベントの設定(0)の場合にイベントが発生します。
イベント名 意味 引数値 説明
OnCom(Res as String) データ受信 データを受信したときに、イベントが発生し、受信したデータは、Resに入ります。
このイベント内で、長い処理を行うと、この関数を実行中に、再びイベントが発生し、動作が不安定になります。
例:危険な記述
Private Sub Rs1.OnCom(Res)
 for i = 0 to 1000000 ・・・この関数を実行中に、次のイベントが発生し2重に実行されてしまいます。
 next
End Sub

また、コマンド送信後の構文にブレークポイントを設定し停止させると、再開してもイベントが発生しません。
上記の例では、For文にブレークポイントを設定すると、データを受信しても、次のイベントが発生しません。

バイナリモードの場合
BinaryModeプロパティを1に設定し、バイナリモードとした場合、バイナリデータを受信することができます。この場合、受け取ったデータは、"01FeA0"のように、16進数で表現されます。この例では、01,FE,A0の3バイトを意味します。
ポーリングモードでは、イベントが発生しませんので、Readメソッドを使用して受信します。
OnError(lErr) エラー発生 エラー番号 エラーが起きると、イベントが発生します。
エラー番号意味
-10受信バッファがオーバーフロー

現在、受信バッファがオーバーフローを起こしたときのみ、発生します。この受信バッファは、ターミネータを受信するまでのデータを蓄えておくバッファを意味します。5000バイトのバッファを越えるとエラーが発生します。
ポーリングモードでは、イベントが発生しませんので、CommErrorメソッドを使用します。
OnEvent(No as Long) イベント発生 イベント番号 特定のイベントが発生した時に、このイベントが発生します。
イベント番号意味
1送信完了
送信完了時に、このイベントが発生します。WriteModeプロパティを0(送信完了を待たない)に設定した場合、送信完了のタイミングを利用する場合に使用します。


<ポーリングとイベント>
 受信の仕方をポーリングと、イベントの2つの方法から選択できます。
 イベント方式は、データが送られた場合、イベントが発生し、受信データを受け取る方法です。デフォルトは、この方式となっています。
 この方法の利点は、受信を待つループや、タイマーなどを必要とせず、また、CPUを効率的に利用できることにあります。一方で、記述する部分が、送信と受信とで分かれるため、プログラムが分かりにくくなります。また、スクリプトによってはイベントが発生しないため、受信できない場合もあります。サンプルプログラムは、この方式を利用していますので、参考にしてください。
 ポーリング方式は、シリアルポートの状態を一定時間ごとに調べる方法です。シリアル機器との通信を簡単に調べたい場合や、スクリプトがイベントを利用できない場合に利用します。

Rs.ReadMode = 1  ポーリングモードに設定
Rs.Open  ポートのオープン
Rs.Write "SEND START"  データの送信
Rs.Wait 1000 一定時間待つ
Rec = Rs.Read  データの受信
Rs.Close ポートのクローズ

<送信完了を待つ、待たない>
 送信時には、送信完了を待つ設定と、待たない設定があり、デフォルトでは、送信完了を待ちます。まず、次のプログラムをご覧ください。

Rs.Open ポートのオープン
Rs.Write "SEND START DATA1,DATA2" データの送信
Rs.Close ポートのクローズ
 このコードを送信完了を待つ設定で行うと、問題なくデータは送信されます。しかし、送信完了を待たない設定の場合、データは途中で途切れる場合があります。これは、Writeコマンドが送信完了を待たずに制御を返すため、送信途中でポートが閉じられて、後のデータが送信できないためです。
 送信完了を待たない設定で、このようなプログラムを記述する場合、Closeの前に、適当な待ち時間を設定するなどの工夫が必要です。
Rs.Open ポートのオープン
Rs.Write "SEND START DATA1,DATA2" データの送信
Rs.Wait 1000 一定時間待つ
Rs.Close ポートのクローズ
 送信完了を待たない設定の利点は、効率的なプログラムを記述できることにあります。送信完了までの待ち時間を他の処理に使えるわけです。上記の例では、全く意味がありませんが、プログラムの開始時にポートを開き、終了時にポートを閉じるプログラムであれば、効果があります。
 送信完了を待つ設定の場合に注意が必要なのは、フロー制御を行っている場合です。通信相手が通信を処理できずに、パソコン側が待つ状態になったとき、一定時間、プログラムが止まってみえることになります。
 送信完了のタイミングは、OnEventイベントで知ることができます。