!!!Qualnetのページ [Qualnet - Wikipedia|http://ja.wikipedia.org/wiki/Qualnet] [Japan Qualnet Comm wiki|http://simweb.kke.co.jp/qualnet/forum/modules/pukiwiki/] !!インストール *[[ライセンスサーバのセットアップ|qualnet_server]] *[クライアント環境のセットアップ|http://www.morino.ce.shibaura-it.ac.jp/internal_only/wiki/m108001/wiki.cgi?page=QualNet] !!アーキテクチャ !基本イベントドリブン イベントディスパッチャに登録されたイベントをif判定して実行していく。 !メッセージ処理 内部でのやりとりにMessageという構造体を用いている。ノード間の通信に用いるパケットとは別なので注意。 !!フロー !ノード毎に各レイヤ(アプリ〜物理)までのイベントを処理する。 !パケットの流れ ,レイヤ,↑,↓ ,Application,,APP_ProcessEventから ,Trasnport, ,Network,NetworkIpReceivePacketFromMacLayer,SendToUDP/SendToTCP ,Mac, ,Phy, !パケット操作 [[送信制御など|qualnet_packet]] !!GUI !ノードの設置 Toolset>Devicesから選択、フィールドをクリックして追加、ダブルクリックで設定を開く。ArchitectモードでカーソルをSelectモードにする必要がある。 !アプリケーションの設定 Toolset>Applicationsから選択、その状態でノードをクリックするとノードにクライアントを追加。アプリケーションのアイコンをダブルクリックで設定を開く。 このとき、ArchitectモードでかつカーソルはSelectモードである必要がある。 !ノード・アプリケーションの自動設定 ノードは[シナリオ名].nodes、アプリケーションは[シナリオ名].appファイルに記述されているため、これらを書き換えることでGUIを使用せずに書き換えられる。ただ、いくつか問題もある。 :文字コードの問題:UTF8でテキストを保存して読み込ませると、QualnetのGUI読み込んだときに頭に邪魔なものが追加される。UTF8(BOMなし)で保存すれば問題はおきない。ノードを追加する作業は、上位〜下位までのレイヤのさまざまな設定が必要となるため、GUI側でやってしまう方がよい。バッチ処理化する場合は、ノードの設置はGUIで済ませておき、座標やアプリケーションの設定のみ後から編集する。 :読み込みのタイミング:上記の設定ファイルを書き換えただけでは反映されないどころか、エラーになる模様。一度GUI側で読み込んで保存することで解決する。(単にデータ形式のミスである可能性もある・・・調査中)。.configで読み込む.nodesや.appを変更することは可能? !!コーディング !基本 :命名規則:基本的にはキャメル(単語の区切りは大文字) *ローカル変数は先頭小文字 *構造体やプリプロセッサなどは_区切り *Eventから呼ばれるものはLayerが付く(ex:AppMCbrLayerServerなど) *アプリケーションは送信側が〜Client、受信側が〜Server :アドレスの取得:アドレスはuint型になっているため自分で変換する。IO_ConvertIpAddressToStringで文字列に変換可能だが、型としてAddress,NodeAddressなどいくつか紛らわしいものがあるので注意。 msg...受信メッセージ UdpToAppRecv *info; info = (UdpToAppRecv *) MESSAGE_ReturnInfo(msg); char addressSrc[20]; IO_ConvertIpAddressToString(&info->sourceAddr, addressSrc); printf(" %20s ",addressSrc); !アドオン *[[ノード系|Programming_qualnet_addon_node]] !機能別 *[[RTS/CTS|Programming_qualnet_rtscts]] *[[MCBR|Programming_qualnet_mcbr]] *[[無線メッシュ|Programming_qualnet_wifimesh]] !注意点 :構造体に変数を追加する場合:最初に定義されているメンバの後に追加する。 !!デバッグ !VisualStudioでのデバッグ(ステップ実行) :makeファイルの修正:Makefile-windows-vc8を修正 デフォルト(最適化オプション) #DEBUG = /Zi OPT = /Ox /Ob2 修正後(最適化させない) DEBUG = /Zi #OPT = /Ox /Ob2 :デバッグ用の空のプロジェクトの生成:VisualStudio上で作成 *[新規作成] -> [プロジェクト] *[VisualC++] -> [全般] -> [空のプロジェクト]で適当な場所に生成 *デバッグしたいソースファイルをプロジェクトに適当に突っ込む(node.cppを適当に) *編集用のプロジェクトで、一度cleanを行う。 :プロパティの設定: *新規作成したプロジェクトの[プロジェクト] -> [プロパティ]を開く *[構成プロパティ] -> デバッグを選択し、以下のように設定 ,名称,パラメータ ,コマンド,C:\snt\qualnet\5.0\bin\qualnet.exe ,コマンド引数,実行するシナリオファイル名 ,作業ディレクトリ,実行するシナリオファイルのあるディレクトリパス ,アタッチ,いいえ ,デバッガのタイプ,自動 ,環境, ,マージ環境,はい ,SQLデバッグ,いいえ :実行: *新規作成した方のプロジェクトで実行(ビルドするか聞かれるが、いいえでよい) *breakpointは機能する *アセンブリなど、特定の操作に入ると動作が停止する場合がある !!コードの書き換え デバッグ用には ""Z:\research\qualnet\qualnet_src\bin\qualnet.exe を用いる CBRでは複数経路通信、帯域制御などが行われている !注意 windows7のcmdではsambaサーバ上のファイルを実行できないようなので、コマンドプロンプトでは無くWindowsPowerShellを用いて実行してください 上記のqualnet.exeがあるディレクトリへ移動し引数としてScenario.configを与えると実行できます !!Q&A :時間が取得できない:%lldで表示する。 :IPアドレスが取得できない:unsigned int なので、一度文字列に変換する。 :ビルド時にqualnet.exeなんたらとエラーが出る:qualnetを起動している :ビルド時に警告が3つ出る:もう一度ビルドすれば消える。 :ビルド結果が反映されない:リビルドが確実。 :シナリオファイルが消える:タスクが終わってない状態でQualnetを終了させるとシナリオファイルが消える場合がある。 :実行時にassert〜と表示されて停止する:原因不明? リビルドするとなおったりなおらなかったり… 一度PCを再起動してみるといいかもしれない :fatal error U1077 'copy' return code '0x1':なんかよくわからんけど手動でコピーするとおk :〜のファイルが破損している:初期状態のファイルからコピーしてくる