ユーザーアプリケーションの開発
FL-net通信処理の流れ
FL-net通信.NETクラスライブラリを使用したFL-net通信処理の流れは、下図のとおりです。
FLnetクラス
FL-net通信機能は、FLnetクラスに集約されています。FLnetクラスのすべてのメソッドは、スレッドセーフです。ユーザーアプリケーションは、任意のスレッドから任意のタイミングでFLnetクラスのメソッドを呼び出すことができます。
ネットワークの識別
本製品は、2つのFL-netネットワークに同時に参加できるようになっていて、それぞれのネットワークはネットワークID(0または1)で識別します。ネットワークIDは、FLnet.NetworkIDプロパティで指定します。
ノード設定
ユーザーアプリケーションを実行するノード(パソコン)のネットワークパラメータは、付属のFL-net Utilityで設定します。ユーザーアプリケーションのコードでネットワークパラメータを設定する必要はありません。
FL-net Utilityを使わずに、ユーザーアプリケーションのコードでネットワークパラメータを設定することもできます。その場合は、FLnet.SaveSettingsメソッドを使用します。SaveSettingsは、ネットワークパラメータを設定すると同時にWindowsのレジストリに設定値を保存します。SaveSettingsメソッドで保存した設定値は、FLnet.LoadSettingsメソッドで読み込むことができます。
FL-netネットワークへの参加
他ノードと通信するには、FLnet.Openメソッドを使用してFL-netネットワークに参加します。FL-net(OPCN-2)の仕様により、ノードが参加を要求してから参加状態になるまでに数ミリ秒以上かかります。Openメソッドは、FL-net通信エンジンに参加を要求すると直ぐに制御を戻します。Openメソッドから正常復帰しても、その時点で参加状態になっているとは限りません。ノードが参加状態になると、FLnet.StatusChangedイベントハンドラを呼び出して通知します。
状態変更の通知
自ノードの参加/離脱、エラーが発生した時、または他ノードが参加/離脱した時に、FLnet.StatusChangedイベントハンドラを呼び出してユーザーアプリケーションに通知します。通知を受けたユーザーアプリケーションは、FLnet.GetNodeInfoメソッド、またはFLnet.GetNodeListメソッドを使用してノード状態を取得します。
コモンメモリの読み書き
コモンメモリを読み込むにはFLnet.Read系メソッド、書き込むにはFLnet.Write系メソッドを使用します。コモンメモリの領域指定とアドレッシング方法の違いなどで、Read系メソッド、Write系メソッドそれぞれに10種類のメソッドが用意されています。コモンメモリは、ノードの参加状態に関わらず、任意のタイミングで読み書きできます。
メッセージの送信
要求メッセージまたは透過形メッセージを送信するにはFLnet.Send系メソッド、応答メッセージを送信するにはFLnet.Reply系メソッドを使用します。メッセージ送信メソッドは、FL-net通信エンジンにメッセージの送信を要求すると直ぐに制御を戻します。メソッドから正常復帰しても、その時点で送信先にメッセージが届いているとは限りません。メッセージの送信処理が完了すると、FLnet.SendEndedイベントハンドラを呼び出して通知します。
メッセージの受信
他ノードからメッセージを受信した時は、FLnetクラスのイベントハンドラを呼び出してユーザーアプリケーションに通知します。他ノードから要求メッセージを受信した時はFLnet.RequestReceived系イベントハンドラ、他ノードに送信した要求メッセージに対する応答メッセージを受信した時はFLnet.ReplyReceived系イベントハンドラ、透過形メッセージを受信した時はFLnet.UserMessageReceivedイベントハンドラを呼び出します。
FL-netネットワークからの離脱
他ノードとの通信を終了するには、FLnet.Closeメソッドを使用してFL-netネットワークから離脱します。但し、実際に自ノードがFL-netネットワークから離脱するのは、FLnet.Openメソッドを呼び出したすべてのアプリケーションがFLnet.Closeメソッドを呼び出した時です。FL-net通信エンジンは、複数のアプリケーションに対応できます。そのため、すべてのアプリケーションがCloseメソッドを呼び出すまでは、FL-netネットワークからの離脱処理を行いません。 Closeメソッドを呼び出さないでユーザーアプリケーションを終了しても問題ありません。FL-netネットワーク参加状態のままユーザーアプリケーションが終了した時は、FL-net通信エンジンが適切に離脱処理を行います。