Спящий режим и рабочий цикл в UnetStack, а также добавление энергии, потребляемой при прослушивании в режиме ожидания, и спящих режимов в простую модель энергопотребления.

У меня есть два вопроса:

  1. Мы хотим учитывать очень низкий рабочий цикл передачи в нашей сети подводных датчиков, поскольку на практике именно энергопотребление в режиме прослушивания и в спящем режиме будет доминировать в продолжительности жизни нашей сети. Я заметил команды планировщика в новой версии UnetStack Simulator версии 3.2.0, addsleep , showsleep и т. д. Я скачал последнюю версию симулятора, попытался использовать эти команды, но это не сработало, я попробовал работать как в оболочке, так и внутри groovy-скриптов, и пытался импортировать org.arl.unet.scheduler, но ни одна из команд планировщика не работала и продолжала получать ошибки. Например, я пытался использовать это: addsleep 20.s.later, но симулятор позже не распознает, также получил ошибки для использования import org.arl.unet.scheduler.

Интересно, может ли кто-нибудь помочь мне в этом, например, как использовать команду addsleep.

  1. Другой вопрос: помимо потребления энергии при передаче и приеме, наш модем потребляет 2,5 мА от источника питания 5 В при прослушивании начала пакета и может переходить в спящий режим и потреблять около 0,24 мА от источника питания 5 В с возможностью пробуждения. и вернуться в режим прослушивания через запрограммированный период времени. Итак, мой вопрос: есть ли способ учесть энергию, потребляемую при праздном прослушивании и сне, в простой энергетической модели? Мы реализовали очень простую модель энергопотребления, что-то вроде следующего (нашел этот пример в stackoverflow):

    класс MyHalfDuplexModem расширяет HalfDuplexModem {

    энергия поплавка = 1000

    @Override boolean send(Message m) { if (m instanceof TxFrameNtf) energy -= 10
    if (m instanceof RxFrameNtf) energy -= 1
    return super.send(m) }

    }

Как добавить к приведенному выше коду энергию, затрачиваемую на прослушивание в режиме ожидания и сон? нам нужно использовать что-то вроде WakeFromSleepNtf()

Спасибо и любая помощь очень ценится. Марва


person Marwa Salayma    schedule 04.02.2021    source источник


Ответы (1)


Служба планировщика обычно зависит от аппаратного обеспечения, так как требует взаимодействия с конкретным одноплатным компьютером (SBC), чтобы перевести его в спящий режим и разрешить его пробуждение. В модемах это обычно агент драйвера модема.

Симулированный модем HalfDuplexModem не предоставляет эту услугу, поэтому он не будет работать из коробки. Поскольку HalfDuplexModem не имеет встроенной энергетической модели, сон не имеет для него большого значения. Если вы хотите смоделировать сети, в которых узлы спят и потребляют меньше энергии во время сна, можно было бы расширить HalfDuplexModem для реализации служба SCHEDULER. Сервис довольно простой, всего 4 сообщения (AddScheduledSleepReq, RemoveScheduledSleepReq, GetSleepScheduleReq и WakeFromSleepNtf). Ваша реализация может отслеживать энергию, используемую каждым узлом, в зависимости от того, спит ли он, слушает или передает, поскольку вы можете отслеживать расписание сна и, следовательно, знать, сколько времени узел бодрствовал/спал.

Команды addsleep, showsleep и т. д. — это просто удобные ярлыки в расширении оболочки, которые используют приведенные выше 4 сообщения для выполнения фактической работы. Они включаются в оболочке при загрузке SchedulerShellExt, и вы можете просто использовать сообщения непосредственно из агентов или в сценариях моделирования.

person Mandar Chitre    schedule 08.02.2021
comment
Спасибо Мандар. Да, служба SCHEDULER выглядит просто, я думаю, что понимаю, как она работает, и как использовать ее сообщения, и время ожидания и т. д. Однако я попытался расширить HalfDuplexModem, чтобы включить его службы, но я не смог найти подходящий метод для переопределить. Например: @Override Message processRequest(Message msg) работает только для запроса дейтаграммы, не так ли? Я пытался использовать его, но он не работает для сообщений планировщика. Кажется, мне нужно реализовать методы и параметры с нуля? Будет здорово, если подскажете способы удлинить модем, какие способы мне предстоит рассмотреть. Большое спасибо - person Marwa Salayma; 15.02.2021
comment
Для UnetAgents processRequest() вызывается для каждого сообщения с перформативным REQUEST (так должно вызываться для AddScheduledSleepReq, RemoveScheduledSleepReq и GetSleepScheduleReq). Перформативный QUERY вызывает processQuery(), а для всех остальных сообщений вызывается processMessage(). - person Mandar Chitre; 19.02.2021