#scheduler #scheduling #energy #sleep-mode #unetstack
#планировщик #планирование #энергия #спящий режим #unetstack
Вопрос:
У меня есть два вопроса:
- Мы хотим рассмотреть очень низкий рабочий цикл передачи в нашей подводной сенсорной сети, поскольку на практике именно энергопотребление в режиме прослушивания и в режиме ожидания будет определять срок службы нашей сети. Я заметил команды планировщика в новой версии UnetStack Simulator версии 3.2.0, addsleep , showsleep и т. Д., Я скачал последнюю версию симулятора, я пытался использовать эти команды, но это не сработало, я пытался работать как в оболочке, так и внутри скриптов groovy,и попытался импортировать org.arl.unet.планировщик, но ни одна из команд планировщика не работала и продолжала получать ошибки. Например, я попытался использовать это: addsleep 20.s.позже, но симулятор не распознает «позже», также получены ошибки при использовании import org.arl.unet.планировщик.
Интересно, может ли кто-нибудь помочь мне в этом, например, в том, как использовать команду addsleep.
- Другой вопрос: помимо потребления энергии при передаче и приеме, наш модем потребляет 2,5 мА от источника питания 5 В во время прослушивания начала пакета и может переходить в спящий режим и потреблять около 0,24 мА от источника питания 5 В, с возможностью пробуждения и возврата в режим прослушивания через программируемое время точка. Итак, мой вопрос в том, есть ли способ учесть энергию, потребляемую при прослушивании в режиме ожидания и сне, в простой энергетической модели? Мы реализовали очень простую модель энергопотребления, что-то вроде следующего (нашел этот пример в stackoverflow):
класс MyHalfDuplexModem расширяет HalfDuplexModem {
плавающая энергия = 1000
@Переопределить логическую отправку (сообщение m) { если (m экземпляров TxFrameNtf) энергия — = 10
, если (m экземпляров RxFrameNtf) энергия — = 1
возврат super.send(m) }}
Как добавить энергию, потребляемую при прослушивании в режиме ожидания и в режиме сна, в приведенный выше код? нужно ли нам использовать что-то вроде WakeFromSleepNtf ()
Спасибо и любая помощь очень ценится. Marwa
Ответ №1:
Служба планировщика обычно зависит от оборудования, поскольку требуется взаимодействие с конкретным одноплатным компьютером (SBC), чтобы перевести его в состояние сна и разрешить его пробуждение. На модемах это обычно агент драйвера модема.
HalfDuplexModem
Моделируемый модем не предоставляет эту услугу, и поэтому он не будет работать из коробки. Поскольку HalfDuplexModem
в него не встроена модель энергопотребления, «сон» для него мало что значит. Если бы вы хотели смоделировать сети, в которых узлы спали и потребляли меньше энергии во время сна, можно было бы расширить HalfDuplexModem
для реализации службы ПЛАНИРОВЩИКА. Сервис довольно простой, всего 4 сообщения ( AddScheduledSleepReq
, RemoveScheduledSleepReq
, GetSleepScheduleReq
и WakeFromSleepNtf
). Ваша реализация может отслеживать энергию, используемую каждым узлом, в зависимости от того, находится ли он в режиме сна, прослушивания или передачи, поскольку вы можете отслеживать расписание сна и, следовательно, знать, сколько времени узел бодрствовал / спал.
Команды addsleep
и т. showsleep
Д. — Это просто удобные ярлыки в расширении оболочки, Которые используют вышеуказанные 4 сообщения для выполнения фактической работы. Они включаются в командной оболочке путем загрузки SchedulerShellExt
, и вы можете просто использовать сообщения непосредственно от агентов или в сценариях моделирования.
Комментарии:
1. Спасибо, Мандар. Да, служба ПЛАНИРОВЩИКА выглядит просто, я думаю, понимаю, как она работает, и как использовать ее сообщения, и время сна и т. Д. Тем не менее, я попытался расширить HalfDuplexModem, чтобы включить его службы, но я не смог найти подходящий метод для переопределения. Например: @Override Message ProcessRequest (сообщение msg) работает только для запроса дейтаграммы, нет? Я пытался использовать его, но он не работает для сообщений планировщика. Кажется, мне нужно внедрять методы и параметры с нуля? Будет здорово, если вы предложите способы расширения модема, какие методы я должен рассмотреть. Большое спасибо
2. Для UnetAgents
processRequest()
вызывается для каждого сообщения, которое имеет performativeREQUEST
(поэтому следует вызыватьAddScheduledSleepReq
,RemoveScheduledSleepReq
иGetSleepScheduleReq
). Вызываются перформативныеQUERY
вызовыprocessQuery()
и для всех других сообщенийprocessMessage()
.