Mudanças entre as edições de "Desenvolvimento de experimentos para a disciplina de Avaliação de Desempenho de Sistemas da Engenharia de Telecomunicações"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 285: Linha 285:
 
{{collapse bottom}}
 
{{collapse bottom}}
  
=Semana 3=
+
=Semana 3 à 6 - Configuração do modo beacon-enabled e nonbeacon-enabled=
 +
 
 +
{{collapse top|'''Semana 3 à 6 - 03/07/2017 - 28/07/2017'''}}
 +
 
 +
Para configurar a camada MAC de acordo com o IEE802.15.4 é necessário utilizar a implementação deste padrão
 +
feita por Jan-Hinrich Hauer da Technical University Berlin. [http://www.tkn.tu-berlin.de/fileadmin/fg112/Papers/TKN154.pdf TKN15.4: An IEEE 802.15.4 MAC Implementation for TinyOS 2].
 +
 
 +
Utilizando as interfaces fornecidas pela TKN15.4 é possível configurar o MICAz para realizar transmissões sem o uso de beacons, com o uso destes e neste caso é possível utilizar a funcionalidade de GTS nos superframes.
 +
 
 +
Há uma complexidade considerável no entendimento destas interfaces. Por esta razão escolheu-se começar a desenvolver exemplos simples onde apenas um node envia beacons e não espera resposta alguma e, aos poucos, aumentar a complexidade destas aplicações. As aplicações mais recentes têm o potêncial de comunicação entre coordenador e device, inclusive de troca de mensagens, e debug via serial.
 +
 
 +
Todos os arquivos necessários para compilar as aplicações (Ver semana 2) abaixo podem ser encontrado no [https://github.com/AndreFWeber/Experimentos_TKN154 GitHub (Experimentos_TKN154)]
 +
 
 +
*Modo beacon-enabled (Slotted CSMA)
 +
 
 +
Na aplicação EnvioDeBeacons um node será programado como um coordenador de uma rede PAN
 +
802.15.4 com envio de beacons. Este beacon será enviado periodicamente de
 +
acordo com a variável BEACON_ORDER definida no arquivo app_profile.h de acordo
 +
com o padrão 802.15.4.
 +
 
 +
<pre>
 +
 
 +
/*
 +
Autor: André Felippe Weber
 +
Baseado nos trabalhos de Jan Hauer <hauer@tkn.tu-berlin.de>
 +
 
 +
Para debugar via serial basta aplicar o seguinte comando no terminal:
 +
 
 +
java net.tinyos.tools.PrintfClient -comm serial@/dev/ttyUSB1:57600
 +
 
 +
*/
 +
 
 +
#include "TKN154.h"
 +
#include "app_profile.h"
 +
#include "printf.h"
 +
 
 +
module EnviaBeaconsP
 +
{
 +
  uses {
 +
    interface Boot;
 +
    interface MLME_RESET;
 +
    interface MLME_START;
 +
    interface MLME_SET;
 +
    interface MLME_GET;
 +
    interface IEEE154TxBeaconPayload;
 +
    interface Leds;
 +
  }
 +
} implementation {
 +
 
 +
event void Boot.booted() {
 +
    call MLME_RESET.request(TRUE);
 +
  }
 +
 
 +
  event void MLME_RESET.confirm(ieee154_status_t status)
 +
  {
 +
    if (status != IEEE154_SUCCESS)
 +
      return;
 +
    call MLME_SET.phyTransmitPower(TX_POWER);
 +
    call MLME_SET.macShortAddress(COORDINATOR_ADDRESS);
 +
    call MLME_SET.macAssociationPermit(FALSE);
 +
    call MLME_START.request(
 +
                          PAN_ID,              // PANId
 +
                          RADIO_CHANNEL,        // LogicalChannel
 +
                          0,                    // ChannelPage,
 +
                          0,                    // StartTime,
 +
                          BEACON_ORDER,        // BeaconOrder
 +
                          SUPERFRAME_ORDER,    // SuperframeOrder
 +
                          TRUE,                // PANCoordinator
 +
                          FALSE,                // BatteryLifeExtension
 +
                          FALSE,                // CoordRealignment
 +
                          0,                    // CoordRealignSecurity,
 +
                          0                    // BeaconSecurity
 +
                        );
 +
  }
 +
 
 +
  event void MLME_START.confirm(ieee154_status_t status) {}
 +
 
 +
  event void IEEE154TxBeaconPayload.aboutToTransmit() {
 +
      call Leds.led1Off();
 +
      call Leds.led0On();
 +
  }
 +
  event void IEEE154TxBeaconPayload.setBeaconPayloadDone(void *beaconPayload, uint8_t length) { }
 +
 
 +
  event void IEEE154TxBeaconPayload.modifyBeaconPayloadDone(uint8_t offset, void *buffer, uint8_t bufferLength) { }
 +
 
 +
  event void IEEE154TxBeaconPayload.beaconTransmitted()
 +
  {
 +
    ieee154_macBSN_t beaconSequenceNumber = call MLME_GET.macBSN();
 +
    printf("Sequencia do beacon enviado: %hu ! \n", beaconSequenceNumber);
 +
    call Leds.led0Off();
 +
    call Leds.led1On();
 +
  } 
 +
}
 +
 
 +
</pre>
 +
 
 +
 
 +
 
  
 
*preparar o exemplo do Hello World (um nodo comanda outro nodo acender LED) com as seguintes opções:
 
*preparar o exemplo do Hello World (um nodo comanda outro nodo acender LED) com as seguintes opções:
Linha 293: Linha 390:
  
 
Vericar a possibilidade de executar com um nodo MICAZ e com PC usando hardware do ZigBEE
 
Vericar a possibilidade de executar com um nodo MICAZ e com PC usando hardware do ZigBEE
 +
 +
{{collapse bottom}}

Edição das 22h04min de 31 de julho de 2017

Sobre o projeto

Resumo do projeto

Nome do Orientador do Projeto: Eraldo Silveira e Silva

Nome do Bolsista do Projeto: André Felippe Weber

A disciplina de Avaliação de Desempenho de Sistemas da Engenharia de Telecomunicações tem como foco a avaliação de redes de telecomunicações usando as três abordagens clássicas: simulação, análise e experimentação. Este projeto visa o desenvolvimento de um conjunto de experimentos para a disciplina de Avaliação de Desempenho de Sistemas da Engenharia de Telecomunicações com fins de melhor adequar a disciplina ao perfil do profissional previsto no PPC, que prevê um foco no desenvolvimento de sistemas. Pretende-se usar a tecnologia de rede IEEE802.15.4, resgatando dispositivos (nodos MICAZ) já adquiridos anteriormente, para desenvolver experimentos que combinem a tríade: análise, simulação e experimentação, permitindo transitar entre ferramentas do tipo Cadeias de Markov para realizar predição de desempenho da rede, projeto de experimento real de avaliação de desempenho usando nodos MICAZ a e simulação da estrutura contemplando a questão de escalabilidade e extensibilidade de cenários.

Plano de trabalho

As seguintes atividades serão desenvolvidas no decorrer da bolsa, não necessáriamente na ordem em que são citadas.

1) Participação na definição preliminar dos experimentos. (2 semanas)

2) Preparação dos nodos MICAZ para uso na disciplina (4 semanas)

2.1- Estudo do Hardware e Software pré-instalado no nodo

2.2-Familiarização com a placa de captura de pacotes

2.3-Familiarização com a placa e software de programação

2.4-Estudo de sistemas operacionais e pilhas de protocolos alternativos

2.5-Seleção e instalação final do sistema nos nodos.

3) Seleção e implementação de modelos de referência MAC para CSMA-CA e IEEE802.15.4(6 semanas)

3.1-Estudo de cadeias de Markov

3.2-Seleção e verificação de modelos de Markov para CSMA-CA e IEEE802.15.4

4) Implementação dos cenários selecionados em (3) em um simulador de rede

5) Implementação de experimentos no MICAZ para reproduzir resultados em de (3)

6) Organização dos roteiros de experimentos e documentação adicional

7) Relatório Final

Horários do bolsista

Horários Segunda-Feira Terça-Feira Quarta-Feira Quinta-Feira Sexta-Feira
7:30 às 9:30 Bolsa Bolsa Bolsa COM2 PJI3
9:40 às 12:00 Bolsa Bolsa COM2 Bolsa Bolsa
13:30 - 15:30 ADS/SMU STC STC CRF SMU
15:40 - 17:40 ECO CRF SUS ADS Bolsa
18:00 - 19:30 Livre Livre Livre Bolsa Bolsa

Semana 1 - Hardware do MICAZ (versão 1) e TinyOS

Semana 1 - 19/06/2017 - 23/06/2017
  • Estudo do Hardware e Software pré-instalado no nodo
    • Hardware do MICAZ (versão 1)

Antes de iniciar o estudo do MICAz é interessante situar o ambiente para o qual ele foi criado. As redes de sensores sem fio (WSN - do inglês wireless sensor network) é uma rede composta por dispositivos autônomos (também conhecidos como Motes) espacialmente distribuídos com o intuito de monitorar fenômenos físicos e ambientais como temperatura, umidade, luz, etc. “Comparado com soluções cabeadas, as WSNs oferecem maiores facilidades de implementação e mais flexibilidade de dispositivos. Com a rapidez do desenvolvimento tecnológico dos sensores as WSNs virarão a tecnologia chave para IoT (internet das coisas)”.[1]

Um dos padrões mais respeitados no mundo do IoT e seguido pelos fabricantes do MICAz é o zigbee. A Zigbee Alliance, que foi formado por um grupo de empresas de tecnologia, decidiu criar um padrão que garantisse a interoperabilidade entre seus produtos. Para isso, utilizaram como base para o zigbee o padrão IEEE 802.15.4 que define as camadas física e de acesso ao meio objetivando o baixo custo de implementação e baixo consumo de energia. A camada MAC oferece acesso ao meio através do CSMA-CA e a camada física proporciona taxas de transmissão de no máximo 250 Kbps quando operando na faixa dos 2.4 GHz resultando em um raio de alcance que, em média, fica entre 10m e 75m em ambientes fechados. Sobre as camadas física e de acesso ao meio foram definidas as camadas de rede e de aplicação seguindo outras especificações da Zigbee Alliance, como por exemplo o uso da arquitetura de rede Mesh e a capacidade de autogerenciamento da rede.

O MICAz utilizado nesta bolsa é um transceiver RF produzido pela Crossbow technology que opera na faixa dos 2.4 GHz e é utilizado para criar redes WSN com baixo consumo de energia. Equipado com o microcontrolador de baixa potência ATmega128L, o MICAz é compatível com o MoteWorks (plataforma de desenvolvimento de redes WSN) diretamente de sua memória flash interna e vem com o TinyOS (Ver sessão Software) por padrão de fábrica. Outras características do MICAz podem ser encontradas no datasheet dele e na imagem abaixo que é um print do datasheet.

AFW bolsa MICAZDATASHEET.jpg


O sistema operacional TinyOS desenvolvido para sensores que compoẽm uma WSN e já vem por padrão no MICAz. Este sistema operacional é basicamente um escalonador de tarefas e possui em sua biblioteca alguns protocolo de rede, drivers para sensoriamento e ferramentas para aquisição de dados. Para criar e programar o TinyOS utilizou-se uma nova linguagem chamada nesC que é baseada no C, e por isso apresenta algumas semelhanças com essa linguagem (O manual de referência do nesC pode ser encontrado em [5]). O código abaixo, retirado da wiki do TinyOS, é um exemplo em nesC de como um driver para LEDs pode ser implementado:

 configuration Led {
   provides {
     interface LedControl;
   }
    uses {
     interface Gpio;
   }
 }
 implementation {
 
   command void LedControl.turnOn() {
     call Gpio.set();
   }
 
   command void LedControl.turnOff() {
     call Gpio.clear();
   }
 }

</syntaxhighlight>

Referências

[1] http://www.iec.ch/whitepaper/pdf/iecWP-internetofthings-LR-en.pdf

[2] http://www.openautomation.net/page/productos/id/22/title/MICAz-2.4-GHz

[3]http://disalw3.epfl.ch/teaching/signals_instruments_systems/ay_2011-12/exercises/lab06/SIS_11-12_lab06_assignment.pdf

[4]https://repositorio-aberto.up.pt/bitstream/10216/71311/1/000143823.pdf

[5]http://nescc.sourceforge.net/papers/nesc-ref.pdf


Semana 2 - IEEE 802.15.4e e Hello World

Semana 2 - 26/06/2017 - 30/06/2017

IEEE 802.15.4e

O Task group 4e foi criado para rever e adicionar melhorias e novas funcionalidades para a camada MAC do padrão IEEE 802.15.4 e atender requisições da indústria. Essas novidades visaram a melhoria na capacidade (escalabilidade) do sistema e diminuir a susceptibilidade do padrão à interferências de outros dispositivos que operam na mesma faixa de frequência que o IEEE 802.15.4 (868 MHz/915MHz/2.4).

Para isso o 4e introduziu alguma variações nos métodos de acesso ao meio da camada de enlace do 802.15.4. O DSME (Deterministic and Synchronous Multi-channel Extension) extende o superframe a aumenta a quantidade de canais de frequência disponíveis para transmissão. O LLDN (Low Latency Deterministic Network) foi criado para redes com topologia estrela. O TSCH (Timeslotted Channel Hopping), que utiliza técnicas de sincronização temporal para melhorar o consumo energético e saltos de frequência para diminuir a vulnerabilidade à interferências do meio é o método mais aclamado por usuários do 802.15.4e. Resultados da comparação entre o 802.15.4 e o 802.15.4e podem ser encontrados em [1] e mais informações sobre o TSCH em [2].

Referências: [1] On MAC Layer protocols towards internet of things: From IEEE802.15.4 to IEEE802.15.4e

[2] http://www.simonduquennoy.net/papers/duquennoy17tsch.pdf


Hello World com o MICAz

  • Criação do ambiente para compilação
    • Instalação do toolchain do tinyOS (Adaptado de tinyos-wiki):

1 - Baixe o código do TinyOS do repositório Git e o extraia:

$	wget http://github.com/tinyos/tinyos-release/archive/tinyos-2_1_2.tar.gz
$	tar xf tinyos-2_1_2.tar.gz

1a - Renomeie o diretório tinyos-release-tinyos-2_1_2 para tinyos-main

$	mv tinyos-release-tinyos-2_1_2 tinyos-main

2 - Crie um arquivo tinyos.env com o seguinte código, porém substituindo o campo <local-tinyos-path> com o caminho escolhido até o diretório tinyos-main (Incluindo o diretorio tinyos no caminho)criado no passo 1:

# Here we setup the environment
# variables needed by the tinyos 
# make system
 
export TOSROOT="<local-tinyos-path>"

export TOSDIR="$TOSROOT/tos"

export CLASSPATH=$CLASSPATH:$TOSROOT/support/sdk/java

export MAKERULES="$TOSROOT/support/make/Makerules"

export PYTHONPATH=$PYTHONPATH:$TOSROOT/support/sdk/python
 
echo "setting up TinyOS on source path $TOSROOT"

3 - Como super-usuário copie o arquivo tinyos.env para o diretório /etc/profile.d/:

$	sudo cp tinyos.env /etc/profile.d/


    • Instalação do uISP ( Micro In-System Programmer) - O uISP é o software padrão para programação da MoteWorks. (Adaptado de akhila12ca)

1 - Baixe o uISP aqui ou aqui

2 - Descompacte o arquivo e faça a instalação


$	tar -xvzf uisp.tar.gz

$	cd uisp

$	./bootstrap

OBS: Neste ponto pode ser necessário realizar a instalação do Automake. Se nenhum erro ocorreu no passo anterior (./bootstrap), então o seguinte comando (apt-get install) pode ser desconsiderado.

$	sudo apt-get install automake
$	./configure

$	make

$	sudo make install


    • Instalação do compilador para o TinyOS, o ncc:
$	sudo apt-get install tinyos-tools


    • Há um erro relacionado com o avr-gcc que solicita que dados sejam colocados no segmento read-only da memória sem que esse dado seja const. O seguinte patch corrige o erro:

tinyos-main - issue #136 ou Download alternativo

Para instála-lo, basta ir para o diretório tinyos-main e aplicar o seguinte comando:

$	patch -p1 < tinyos-atm128-const-fix.patch

Se após a aplicação deste patch o seguinte erro persistir:

/usr/src/tinyos/tos/chips/atm128/McuSleepC.nc:66:15: error: variable ‘McuSleepC__atm128PowerBits’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
   const_uint8_t atm128PowerBits[ATM128_POWER_DOWN + 1] = {

Então, como super usuário, edite o seguinte arquivo:

/usr/src/tinyos/tos/chips/atm128/McuSleepC.nc

E modifique a linha 66 adicionando a palavra const:

  const const_uint8_t atm128PowerBits[ATM128_POWER_DOWN + 1] = {
    • Compilando e instalando o programa na placa

Existem alguns programas exemplo no diretório "tinyos-main/apps/". O programa Blink será utilizado como exemplo:


cd Blink

Para compilar o programa para o MICAz basta digitar o seguinte comando:

 make micaz

Para passar o programa para a placa os seguintes comandos devem ser feitos:

 sudo chmod 666 /dev/ttyUSB0
 make micaz install mib510,/dev/ttyUSB0

 ou para recompilar e instalar com um só comando:

 make micaz reinstall mib510,/dev/ttyUSB0

Semana 3 à 6 - Configuração do modo beacon-enabled e nonbeacon-enabled

Semana 3 à 6 - 03/07/2017 - 28/07/2017

Para configurar a camada MAC de acordo com o IEE802.15.4 é necessário utilizar a implementação deste padrão feita por Jan-Hinrich Hauer da Technical University Berlin. TKN15.4: An IEEE 802.15.4 MAC Implementation for TinyOS 2.

Utilizando as interfaces fornecidas pela TKN15.4 é possível configurar o MICAz para realizar transmissões sem o uso de beacons, com o uso destes e neste caso é possível utilizar a funcionalidade de GTS nos superframes.

Há uma complexidade considerável no entendimento destas interfaces. Por esta razão escolheu-se começar a desenvolver exemplos simples onde apenas um node envia beacons e não espera resposta alguma e, aos poucos, aumentar a complexidade destas aplicações. As aplicações mais recentes têm o potêncial de comunicação entre coordenador e device, inclusive de troca de mensagens, e debug via serial.

Todos os arquivos necessários para compilar as aplicações (Ver semana 2) abaixo podem ser encontrado no GitHub (Experimentos_TKN154)

  • Modo beacon-enabled (Slotted CSMA)

Na aplicação EnvioDeBeacons um node será programado como um coordenador de uma rede PAN 802.15.4 com envio de beacons. Este beacon será enviado periodicamente de acordo com a variável BEACON_ORDER definida no arquivo app_profile.h de acordo com o padrão 802.15.4.


/*
 Autor: André Felippe Weber
 Baseado nos trabalhos de Jan Hauer <hauer@tkn.tu-berlin.de>

 Para debugar via serial basta aplicar o seguinte comando no terminal:

 java net.tinyos.tools.PrintfClient -comm serial@/dev/ttyUSB1:57600

*/

#include "TKN154.h"
#include "app_profile.h"
#include "printf.h"

module EnviaBeaconsP
{
  uses {
    interface Boot;
    interface MLME_RESET;
    interface MLME_START;
    interface MLME_SET;
    interface MLME_GET;
    interface IEEE154TxBeaconPayload;
    interface Leds;
  }
} implementation {

 event void Boot.booted() {
    call MLME_RESET.request(TRUE);
  }

  event void MLME_RESET.confirm(ieee154_status_t status)
  {
    if (status != IEEE154_SUCCESS)
      return;
    call MLME_SET.phyTransmitPower(TX_POWER);
    call MLME_SET.macShortAddress(COORDINATOR_ADDRESS);
    call MLME_SET.macAssociationPermit(FALSE);
    call MLME_START.request(
                          PAN_ID,               // PANId
                          RADIO_CHANNEL,        // LogicalChannel
                          0,                    // ChannelPage,
                          0,                    // StartTime,
                          BEACON_ORDER,         // BeaconOrder
                          SUPERFRAME_ORDER,     // SuperframeOrder
                          TRUE,                 // PANCoordinator
                          FALSE,                // BatteryLifeExtension
                          FALSE,                // CoordRealignment
                          0,                    // CoordRealignSecurity,
                          0                     // BeaconSecurity
                        );
  }

  event void MLME_START.confirm(ieee154_status_t status) {}

  event void IEEE154TxBeaconPayload.aboutToTransmit() { 
      call Leds.led1Off();
      call Leds.led0On();
  }
  event void IEEE154TxBeaconPayload.setBeaconPayloadDone(void *beaconPayload, uint8_t length) { }

  event void IEEE154TxBeaconPayload.modifyBeaconPayloadDone(uint8_t offset, void *buffer, uint8_t bufferLength) { }

  event void IEEE154TxBeaconPayload.beaconTransmitted() 
  {
    ieee154_macBSN_t beaconSequenceNumber = call MLME_GET.macBSN();
    printf("Sequencia do beacon enviado: %hu ! \n", beaconSequenceNumber);
    call Leds.led0Off();
    call Leds.led1On();
  }  
}



  • preparar o exemplo do Hello World (um nodo comanda outro nodo acender LED) com as seguintes opções:
    • CSMA/CA normal (beaconless)
    • Slotted CSMA
    • GTS

Vericar a possibilidade de executar com um nodo MICAZ e com PC usando hardware do ZigBEE