ユーザーアプリケーションの開発
FL-net通信処理の流れ
FL-net通信ライブラリを使用したFL-net通信処理の流れは、下図のとおりです。
ライブラリ関数
FL-net通信ライブラリのすべての関数は、スレッドセーフです。ユーザーアプリケーションは、任意のスレッドから任意のタイミングで関数を呼び出すことができます。
ネットワークの識別
本製品は、2つのFL-netネットワークに同時に参加できるようになっていて、それぞれのネットワークはネットワークID(0または1)で識別します。FL-net通信ライブラリの多くの関数は、第一引数でネットワークIDを指定します。
ノード設定
ユーザーアプリケーションを実行するノード(パソコン)のネットワークパラメータは、付属のFL-net Utilityで設定します。ユーザーアプリケーションのコードでネットワークパラメータを設定する必要はありません。
FL-net Utilityを使わずに、ユーザーアプリケーションのコードでネットワークパラメータを設定することもできます。その場合は、BflSaveSettings関数を使用します。BflSaveSettingsは、ネットワークパラメータを設定すると同時にWindowsのレジストリに設定値を保存します。BflSaveSettings関数で保存した設定値は、BflLoadSettings関数で読み込むことができます。
FL-netネットワークへの参加
他ノードと通信するには、BflOpen関数を使用してFL-netネットワークに参加します。FL-net(OPCN-2)の仕様により、ノードが参加を要求してから参加状態になるまでに数ミリ秒以上かかります。BflOpen関数は、FL-net通信エンジンに参加を要求すると直ぐに制御を戻します。BflOpen関数から正常復帰しても、その時点で参加状態になっているとは限りません。ノードが参加状態になると、FL-net通信ライブラリがユーザーアプリケーション定義のStatusProcコールバック関数を呼び出して通知します。
状態変更の通知
BflOpen関数の第2引数は、状態変更の通知を受けるユーザーアプリケーション定義のStatusProcコールバック関数のポインタを指定します。自ノードの参加/離脱、エラーが発生した時、または他ノードが参加/離脱した時に、FL-net通信ライブラリがこのコールバック関数を呼び出してユーザーアプリケーションに通知します。通知を受けたユーザーアプリケーションは、BflGetOwnNodeInfo関数、BflGetNodeInfo関数、またはBflGetNodeList関数を使用してノード状態を取得します。
コモンメモリの読み書き
コモンメモリを読み込むにはBflRead系関数、書き込むにはBflWrite系関数を使用します。コモンメモリの領域指定とアドレッシング方法の違いにより、BflRead系関数、BflWrite系関数それぞれに6種類の関数が用意されています。コモンメモリは、ノードの参加状態に関わらず、任意のタイミングで読み書きできます。
メッセージの送信
要求メッセージまたは透過形メッセージを送信するにはBflSend系関数、応答メッセージを送信するにはBflReply系関数を使用します。メッセージ送信関数は、FL-net通信エンジンにメッセージの送信を要求すると直ぐに制御を戻します。関数から正常復帰しても、その時点で送信先にメッセージが届いているとは限りません。メッセージの送信処理が完了すると、FL-net通信ライブラリがユーザーアプリケーション定義のコールバック関数を呼び出して通知します。
メッセージの通知
BflOpen関数の第3引数は、メッセージ送信完了または受信の通知を受けるユーザーアプリケーション定義のコールバック関数を設定したテーブルのポインタを指定します。メッセージの送信処理が完了した時、または他ノードからメッセージを受信した時に、FL-net通信ライブラリがテーブルに設定したコールバック関数を呼び出してユーザーアプリケーションに通知します。メッセージの送信処理が完了した時はOnEndSend関数、他ノードから要求メッセージを受信した時はOnReceiveRequest系関数、他ノードに送信した要求メッセージに対する応答メッセージを受信した時はOnReceiveReply系関数、透過形メッセージを受信した時はOnReceiveUserMessage関数を呼び出します。
FL-netネットワークからの離脱
他ノードとの通信を終了するには、BflClose関数を使用してFL-netネットワークから離脱します。但し、実際に自ノードがFL-netネットワークから離脱するのは、BflOpen関数を呼び出したすべてのアプリケーションがBflClose関数を呼び出した時です。FL-net通信エンジンは、複数のアプリケーションに対応できます。そのため、すべてのアプリケーションがBflClose関数を呼び出すまでは、FL-netネットワークからの離脱処理を行いません。
BflClose関数を呼び出さないでユーザーアプリケーションを終了しても問題ありません。FL-netネットワーク参加状態のままユーザーアプリケーションが終了した時は、FL-net通信エンジンが適切に離脱処理を行います。