![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
okaz | 投稿日時: 2014/5/23 16:07 |
新米 ![]() ![]() 登録日: 2013/9/4 居住地: 投稿: 17 |
node構造体への情報追加について 周辺ノードからの受信電力を各ノードごとに保持させたいと考えています。
現在まで行ったことは以下の通りです ?node.h内のNode構造体内にRSSI[10]という領域を確保 ?phy_802_15_4.cpp>Phy_802_15_4Init関数内でRSSI配列へ初期値代入 ?phy_802_15_4.cpp>Phy_802_15_4SignalArrivalFromChannel関数内で 配列へ受信電力を保持。すべてを保持すると領域が足りなくなってしまうため同じノードからの電波強度は重複して保持しないよう、フィルタリングを行っています。 この方針でプログラムを記述したところ、コンパイルは正常にできるのですが、シミュレーターを動かすと、Qualnetの強制停止になってしまいました。 コンパイルはとおっているだけに原因の見当がつかない状態です。 何か思い当たるものがございましたら、アドバイスよろしくお願いします。 |
hiro | 投稿日時: 2014/5/23 20:21 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: node構造体への情報追加について さすがに、この情報だけではわからないです。
それ以前にコンパイルは通っても正しく動くとは限りません。 RSSI[10] = 0.0; これはコンパイルは通りますが、 実行すると強制停止の原因になります。 またnode.h において構造体の好きな場所に RSSI[10]を入れてよいわけではありません。 // Users should not modify anything above this line. という注釈があるはずです。 念のため再度記述しますがコンパイルが通るというのは、 文法として正しいことを確認するだけです。 実行して正しく動くことを保証するわけでは有りません。 英語を話していても使っている単語が間違っていると 意志疎通が出来ないのと同じです。 で、確認してほしいこと。 その1) QualNetの再構築 Windows環境なら、 nmake clean nmake Linux環境なら、 make clean make その2) どこで強制停止するか Windows環境もLinux環境もほぼ同じですが、 QualNet Developer Version 7.1 Kernel Version: 12.10 Build Number: 2013073118 Build Date: Jul 31 2013, 13:45:48 QUALNET_HOME = C:\snt\qualnet\7.1 Attempting license checkout (should take less than 2 seconds) ...Loading scenario default.config Partition 0, Node 1 (126.02, 88.53, 0.00). Partition 0, Node 2 (485.56, 214.68, 0.00). Partition 0, Node 3 (573.63, 235.98, 0.00). Partition 0, Node 4 (827.27, 167.89, 0.00). Partition 0, Node 5 (1048.79, 183.01, 0.00). Partition 0, Node 6 (1466.83, 217.64, 0.00). Partition 0, Node 7 (196.89, 539.60, 0.00). Partition 0, Node 8 (471.09, 389.96, 0.00). Partition 0, Node 9 (543.19, 589.41, 0.00). Partition 0, Node 10 (793.52, 386.05, 0.00). Partition 0, Node 11 (1055.68, 435.43, 0.00). Partition 0, Node 12 (1417.73, 323.01, 0.00). Partition 0, Node 13 (134.14, 752.24, 0.00). Partition 0, Node 14 (279.21, 734.21, 0.00). Partition 0, Node 15 (729.93, 687.28, 0.00). Partition 0, Node 16 (961.37, 782.57, 0.00). Partition 0, Node 17 (1044.94, 862.58, 0.00). Partition 0, Node 18 (1367.82, 831.06, 0.00). Partition 0, Node 19 (211.59, 937.06, 0.00). Partition 0, Node 20 (477.16, 1112.43, 0.00). Partition 0, Node 21 (601.99, 937.23, 0.00). Partition 0, Node 22 (754.95, 928.72, 0.00). Partition 0, Node 23 (1056.08, 944.93, 0.00). Partition 0, Node 24 (1497.84, 1013.94, 0.00). Partition 0, Node 25 (41.11, 1467.99, 0.00). Partition 0, Node 26 (347.09, 1352.53, 0.00). Partition 0, Node 27 (636.36, 1242.62, 0.00). Partition 0, Node 28 (889.49, 1295.64, 0.00). Partition 0, Node 29 (1065.34, 1331.96, 0.00). Partition 0, Node 30 (1357.63, 1257.87, 0.00). Initialization completed in 0.518 sec at 2014-05-23 19:57:06.153 ここまでの間で強制停止するのか。 それとも、実際に動き出して、 Current Sim Time[s] = 9.017437863 Real Time[s] = 0 Completed 1% Current Sim Time[s] = 18.070102853 Real Time[s] = 0 Completed 2% Current Sim Time[s] = 27.089501659 Real Time[s] = 0 Completed 3% Current Sim Time[s] = 36.111643538 Real Time[s] = 0 Completed 4% Current Sim Time[s] = 45.134725985 Real Time[s] = 0 Completed 5% Current Sim Time[s] = 54.158056612 Real Time[s] = 0 Completed 6% どこかで強制停止するのか。 Current Sim Time[s] = 891.026536652 Real Time[s] = 0 Completed 99% Current Sim Time[s] = 900.000000000 Real Time[s] = 0 Completed100% Events in Partition 0: 469347 (100%), 0 (0%) mobility (total: 100%) Executed 469347 events in: 1.1060 Sec それとも、全部終わってから強制停止するのか。 その3) 具体的な表示内容。 強制停止した時の表示されるメッセージなどを、 加工せず、そのまま教えて下さい。 その4) どこで強制停止しているのか。 Linux環境の場合、 ./main/Makefile の一部を書き換える。 DEBUG = -ggdb と変更。 make clean make シナリオディレクトリに移動して、 gdb $QUALNET_HOME/bin/qualent (gdb) のプロンプトが出たら、 run シナリオ.config しばらくすると、強制停止するので、 強制停止した時の表示されるメッセージなどを、 加工せず、そのまま教えて下さい。 Windows環境の場合は多少ややこしいので省略しますが、 具体的な状況がわからないので、私にはこれ以上の情報を 提供することが出来ないです。 |
okaz | 投稿日時: 2014/5/27 17:16 |
新米 ![]() ![]() 登録日: 2013/9/4 居住地: 投稿: 17 |
Re: node構造体への情報追加について >hiroさん
ご返信ありがとうございます。 その1) QualNetの再構築 正常に行えました。 その2) どこで強制停止するか Attempting licence checkout (should take less than 2 seconds)... success. Loading scenario シナリオ名.config この段階で停止してしまいます。 その3) 具体的な表示内容 「qualnet.exeは動作を停止しました。 問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策があり場合はWindowsから通知されます。」 以上のメッセージがポップアップで表示されます。 以下、具体的なプログラムです。 node.hの// Users should not modify anything above this line. より下の部分(PropChannel* propChannel;の真上)に double RSSI[10]; を記述。 phy_802_15_4.cpp>void Phy802_15_4Init関数内、「char buf[MAX_STRING_LENGTH];」の真下に配列の初期値代入のため、 int j=0; for(j=0;j<11;j++){ node->RSSI[j]=-200; } と記述しました。 |
hiro | 投稿日時: 2014/5/27 17:35 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: node構造体への情報追加について hiro> RSSI[10] = 0.0;
hiro> hiro> これはコンパイルは通りますが、 hiro> 実行すると強制停止の原因になります。 なので、 okaz> for(j=0;j<11;j++){ ではなくって、 for(j=0;j<10;j++){ としなければダメです。 |
okaz | 投稿日時: 2014/5/28 16:02 |
新米 ![]() ![]() 登録日: 2013/9/4 居住地: 投稿: 17 |
Re: node構造体への情報追加について >hiroさん
ご返信ありがとうございます。 配列の数と初期値の数を合わせ、クリーンビルド→ビルドを行ったところ、 先ほどと同じタイミングで動作停止となってしまいました。 また、コメントアウトをし、Phy802-15-4Init関数に書き込んだ部分を消したところ、正常に動作しました。 配列の初期値をPhy802-15-4Initで決めているのがいけないのでしょうか。 |
hiro | 投稿日時: 2014/5/29 15:21 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: node構造体への情報追加について 一般的には、Node構造体に情報を追加する場合は最後の方に追加します。
QualNetのバージョンにも依存すると思うけど、 // Users should not modify anything above this line. の真下ではなく、もう少し下に追加して下さい。 #ifdefが入っている場所であれば確実です。 例えば、#ifdef AGI_INTERFACE のブロックの次とか。 個人的には、一番最後が良いと思います。 蛇足ですが、Nodeには複数のPhyを定義することが出来ますよね。 今回は常に1個のPhyしか使わない前提であれば問題ないのですが、 今後複数のPhyを定義する場合は今の方法では管理できないです。 |
okaz | 投稿日時: 2014/6/2 7:38 |
新米 ![]() ![]() 登録日: 2013/9/4 居住地: 投稿: 17 |
Re: node構造体への情報追加について >hiroさん
最後の部分に追加したところ正常に動作しました。 丁寧な解説ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |