Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/19:7/7
2024/05/18:20/24

2024/03/20より399/1409
人気モジュール
No.1: フォーラム 7
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット7

No.1:どっかの巡回ロボット6
No.2:Baidu巡回ロボット1

日曜日からの合計
メイン
   Physical Layer Protocol Implementation & Model Development
     node構造体への情報追加について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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さん

最後の部分に追加したところ正常に動作しました。
丁寧な解説ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT