Самое естественное место для отслеживания энергии - это ФИЗИЧЕСКИЙ (phy
) агент. Предполагая, что вы используете HalfDuplexModem
phy
в UnetSim, я бы создал его подкласс и проконтролировал бы TxFrameNtf
и RxFrameNtf
, переопределив метод send()
. Затем я бы добавил соответствующий атрибут energy
, чтобы отслеживать использование энергии.
Пример Groovy кода:
import org.arl.fjage.Message
import org.arl.unet.sim.HalfDuplexModem
class MyHalfDuplexModem extends HalfDuplexModem {
float energy = 1000 // change to whatever initial energy your node has
@Override
boolean send(Message m) {
if (m instanceof TxFrameNtf) energy -= 10 // change according to your model
if (m instanceof RxFrameNtf) energy -= 1 // change according to your model
return super.send(m)
}
}
Наконец, в DSL-моделировании вы можете заменить HalfDuplexModem
по умолчанию вашей настроенной версией:
modem.model = MyHalfDuplexModem