TCPを通したシミュレーションとの交信
System Modelerシミュレーションは,実行中のシミュレーションがデータを読み取ったり書き込んだりするためのインターフェースに使えるプロトコルを使う.Wolfram System Modeler–Simulation Control Session (WSM–SCS)とWolfram System Modeler–Simulation Data Session (WSM–SDS)という,2つのセッションのネットワークプロトコルが使われる.以下の図はその設定を表す.
プロトコルは,パラメータと入力変数の両方を設定し,それぞれの統合ステップから(出力)変数を取り出すことを可能にする.リアルタイムのシミュレーションを行う場合には,シミュレータへのXMLの入力ファイルを設定して,シミュレータのサンプル比を決める固定の刻み幅で単一のステップソルバを使う.必要ならば,シミュレータがコンピュータのリアルタイムクロックと同期化するようにオプションを与えることができる.
WSM–SCS/WSM–SDS
System Modeler–Simulation Control Sessionは,開始と終了のコマンドを発し,入力変数値を設定することで,実行中のシミュレーションのサーバを制御するために使われる.プロトコルは,TCP,およびヘッダとペイロードからなるメッセージ上で実行される.
System Modeler–Simulation Data Sessionは,実行中のシミュレーションサーバからシミュレーションデータを受け取るために使われる.SDSセッションは,変数のサブスクリプションを設定するのに使われるSCSセッションとペアで使われなければならない.
WSMCOMパケット
それぞれのパケットは,パッケージのタイプおよびペイロードの長さを示すヘッダからなる.
WSMCOMヘッダ
ヘッダには,どのプロトコルを使うか,どのタイプのパッケージが送られるか,パケット特定のデータ,ペイロードの長さについての情報が含まれる.
ビット | |||
0-7 | プロトコルバージョン | 1 | |
8-15 | パケットタイプ | 1 - HELLO_SCS 2 - HELLO_SDS 3 - CMD 4 - CMD_REPLY 5 - CMD_ERROR 6 - SDS_OUTPUT_DATA 8 - SDS_INPUT_DATA | |
16-31 | パケット特有 | ||
32-63 | ペイロードの長さ |
HELLO_SCSパケット
クライアントは,HELLO_SCSパケットを送信することで,SCSセッションを開始する.ペイロードは空でなければならない.開始に成功すると,サーバはCMD_REPLYパケットを返し,ペイロードは{SESSION_ID_SCS}になる.失敗した場合には,サーバはCMD_ERRORパケットを返し,ペイロードは問題の説明になる.
HELLO_SDSパケット
クライアントは,HELLO_SDSパケットを送信することで,SDSセッションを開始する.ペイロードは,対応するSCSセッションに与えられたSESSION_ID_SCSでなければならない.成功すると,サーバはCMD_REPLYパケットを返し,ペイロードは{SESSION_ID_SDS}になる.失敗すると,サーバはCMD_ERRORパケットを返し,ペイロードは問題の説明になる.
シミュレーションが始まった後,サーバは対応するSCSセッションのサブスクリプション設定に従って,SDS_OUTPUTパケットを各時間ステップごとにクライアントにストリームし始める.SDSセッションは,サーバにコマンドを送るのに使うことはできない.
CMDパケット
クライアントは,CMDパケットを送ることによって,サーバにインタラクティブなコマンドを送信する.ペイロードはこのコマンドを含まなければならない.成功すると,サーバはCMD_REPLYパケットを返し,ペイロードにはコマンドの結果が含まれる.失敗すると,サーバはCMD_ERRORパケットを返し,ペイロードは問題の説明になる.コマンドのリストについては,このセクションを参照されたい.
CMD_REPLYパケット
サーバは,CMD_REPLYパケットをHELLO_SCS,HELLO_SDS,CMDのいずれかのパケットに対する返答として送る.
CMD_ERRORパケット
サーバは,結果としてサーバのエラーをもたらすHELLO_SCS,HELLO_SDS,CMDのいずれかのパケットに対する返答としてCMD_ERRORパケットを送る.ペイロードには問題の説明が含まれる.
CMD_REPLYとCMD_ERRORのペイロード
CMD_REPLYとCMD_ERRORのパケットにおけるすべてのペイロードは常に,{}に囲まれた配列としてフォーマットされる.配列内の要素は,コンマで区切られる.有効な配列要素は以下の通りである.
例:文字列の値を持つ文字列:{"var1","var2","var3"}
例:ネストした配列,文字列,および数:{{"var1",1.0},{"var2",2.0}}
SDS_OUTPUT_DATAパケット
SDSセッションがHELLO_SDSパケットを送ることによって開始された場合には,サーバは,それぞれのソルバステップの後で,サブスクリプションの変数値を持つSDS_OUTPUT_DATAパケットを送り始める.パケットヘッダ内のビット16-23がサブスクリプションIDである.
ペイロードは,バイナリ形式(double)のサブスクリプション変数すべての値からなる.
SDS_INPUT_DATAパケット
クライアントは,SDSセッション上でSDS_INPUT_DATAパケットを送り,すべての入力変数を設定することができる.ペイロードは,getInputVariableNames()で示される順序で,すべての入力変数についてバイナリ形式 (double)の値からなっていなければならない.
SCSのインタラクティブなコマンド
インタラクティブなコマンドはすべて,SCSセッションでCMDパッケージとして送られる.
getInputVariableNames()
getModelName()
getOutputVariableNames()
getParameterNames()
getStateDerivativeVariableNames()
getStateVariableNames()
getVariableNames()
getAlgebraicVariableNames()
setSubscription({"var1", "var2", "var3", ...})
対応するSDSセッションのサブスクリプションを設定する.SDSセッションで受け取ったパケットを認識するのに使われたSUBSCRIPTION_ID を返す.
setInputValues({"var1", value1, "var2", value2, ...})
入力変数値を設定する.新しい値は,次のソルバステップで使われる.
getTime()
suspendSimulation()
continueSimulation()かterminateSimulation()のコマンドが発されるまで,シミュレーションを停止する.
continueSimulation()
suspendSimulation()コマンドの後でシミュレーションを継続する.
startSimulation()
startSimulation()コマンドが発されるまでシミュレーションの開始を待つように設定されている場合に,シミュレーションを開始する.
stopSimulation()
現行のソルバステップが終ったときに,シミュレーションを終了する.
setParameterValues({"var1", value1, "var2", value2, ...})
パラメータ値を設定する.新しい値は,次のソルバステップで使われる.