![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
te-ueda | 投稿日時: 2016/7/8 18:04 |
半人前 ![]() ![]() 登録日: 2016/4/18 居住地: 投稿: 38 |
送受信パケットの中止と再開 お世話になります。
関東在住の研究者です。 送受信パケットの中止と再開について質問させてください。 IEEE802.15.4を用いたセンサーネットワークについてシミュ レーションしています。 phy.cppにて30単位でエネルギーをため込み150までたまったら 送受信を許可。送受信1回ごとに50のエネルギーを使用し、 エネルギーがゼロになったら送受信を中止しエネルギーが 150になるまで不許可とし150になったら再び送受信を再開 するというアルゴリズムを組み込んでいます。 エネルギー量に応じて送受信可能か不可能かのStatusを示す energypermitは簡単に状態を0,1で示せるのですが、上位層 802.15.4_macの送受信状態とどのように結びつければよいか 悩んでいます。802.15.4_macで送信処理、再送処理、 packet dropが走っている中で今は送信可能だよ、 不可能だよと教える手段がわかりません。 (そもそもphyで止めておくのはよろしくない?) お知恵を拝借いただけないでしょうか? |
hiro | 投稿日時: 2016/7/9 18:45 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: 送受信パケットの中止と再開 PHYからMACに対して状態変化を通知する関数があります。
そのものズバリ MAC_ReceivePhyStatusChangeNotification という関数です。 802.15.4の場合は、Phy802_15_4ReportExtendedStatusToMac 関数が使ってます。 詳し内容は、QualNet-6.1-Programmer'sGuide.pdf の 4.5.4 MAC Layer APIs and Inter-layer Communication や 4.6.4 Physical Layer APIs and Inter-layer Communication が 参考になります。 このあたりは具体的に実装(改造)するモデルというか、考え方に 依存します。 実際の実機を想定して、送受信禁止(中止)状態はそもそもPHYに 信号が届いてもPHYが眠っているので信号が捨てられる、とする。 それとも、PHYは生きていて最低限信号のON/OFFだけは検知可能 (Wireless Wake On Lan)にする。 などいろいろ考え方はあると思います。 |
te-ueda | 投稿日時: 2016/7/10 6:36 |
半人前 ![]() ![]() 登録日: 2016/4/18 居住地: 投稿: 38 |
Re: 送受信パケットの中止と再開 おやすみのところ、ありがとうございます。
もともと、phy.cppだけに手を入れて実現しようと考えていました。 MACが送信中でも再送中でもMACは動くままに任せて、PHYは電源容量が 0になれば送受信ストップし、電源容量が150になれば送受信を再開させるというものです。 もしこの考えで良ければ、(MACへ状態変化を通知せずに) 送信ストップは、 Phy802_15_4TransmissionEnd(node, phyIndex) 送信再開は Phy802_15_4StartTransmittingSignal( node, phyNum, msg, duration, useMacLayerSpecifiedDelay, delayUntilAirborne); で行うことで良いのでしょうか? また、受信側はどうすればよいのでしょうか? お手数ですがご連絡いただけますを幸いです。 |
hiro | 投稿日時: 2016/7/10 15:08 |
長老 ![]() ![]() 登録日: 2005/7/16 居住地: 投稿: 452 |
Re: 送受信パケットの中止と再開 そもそも802.15.4がスリープモードを持っているのを忘れてました。
スリープモードに入る処理と、そこから復帰する処理が参考になると思います。 QualNetの作りそのものではなく、802.15.4のプロトコルについて 深く理解しているわけではないので、的外れだったらすみません。 実機だとPHYへの電源供給を止めればそこで止まりますが、 シミュレーションの場合には色々と手順が必要になります。 まず送信開始時(Phy802_15_4StartTransmittingSignal)に 送信を止めるための仕込を行っています。 色々計算してから、最終的には一定時間後に送信を止める MESSAGE_Send(node,endMsg,delayUntilAirborne+duration+1); の部分です。 これを何とか取り消さなければ(MESSAGE_Cancelしなければ)だめなので、 phy_802_15_4.cppを見ていたのですが、 Phy802_15_4TerminateCurrentTransmissionという関数がありますね。 どこで使われているのか調べると MACでFORCE_TRX_OFF という 状態を管理しているので、これを手掛かりにするとよいかもしれません。 受信の場合も、 Phy802_15_4SignalArrivalFromChannel で 一番最初に if ((phy802_15_4->mode != PHY_TRX_OFF)) しているので、 PHYの状態としてPHY_TRX_OFFも手掛かりになると思います。 他の部分で phy802_15_4->mode != PHY_TRX_OFF でチェックしている場所をみると、 PHY_TRX_OFFの場合は本来処理すべき処理を全く行わない作りになってますね。 |
te-ueda | 投稿日時: 2016/7/12 16:54 |
半人前 ![]() ![]() 登録日: 2016/4/18 居住地: 投稿: 38 |
Re: 送受信パケットの中止と再開 お休みのところ、ありがとうございます。
いただきましたヒントを手掛かりに、 紆余曲折の末、phy_802_15_4.cppの中にあるPhy802_15_4ActivationNode とPhy802_15_4DeactivationNodeでON/OFFを行うように設定し、現在、プログラムを確認中です。 今後とも、よろしくお願いいたします。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |