- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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
修正後(最適化させない)
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
:〜のファイルが破損している:初期状態のファイルからコピーしてくる