Quem vive bem em um microcontrolador?



Em que ano - conte, em que terra - adivinhe, perguntas feitas. Quanto mais rápido é o ARM do que o AVR? Qual protocolo Modbus é "mais rápido"? ASCII ou RTU?



Por "velocidade", neste caso, queremos dizer o número de ciclos da máquina processadora necessários para executar todas as ações do protocolo.

O estudo de desempenho será realizado na biblioteca ModBus Slave RTU / ASCII , amplamente conhecida em círculos estreitos , portada para os microcontroladores ATMega48 e STM32L052. Iremos enviar informações através do protocolo Modbus para o emulador de painel Weintek. O teste será feito em um exemplo de demonstração . Além dos resultados dos testes, o painel exibe os estados dos registradores Modbus: entradas discretas, saídas discretas, registros para leitura e registros para leitura / escrita. O painel também calcula o número de erros na troca de dados com o microcontrolador. A janela de teste é mostrada na figura.







Avaliaremos o desempenho medindo o tempo de execução da função de processamento de mensagens do protocolo. Mediremos o tempo de execução pelo método operário-camponês. Antes de iniciar a função, zeramos o timer do hardware, cuja freqüência de contagem é igual à freqüência do clock do microcontrolador, depois de executar a função, lemos os valores do timer e processamos os resultados da medição. Calculamos o valor mínimo, máximo e médio do tempo de execução da função de processamento de mensagens do protocolo Modbus.



while(1)
    {
    TIM6->CNT=0;
    ModBusRTU();
    //ModBusASCII();
    tcurent=TIM6->CNT;
    if(tcurent<tmin)tmin=tcurent;
    if(tcurent>tmax)tmax=tcurent;
    avg32=avg32-(avg32>>16)+tcurent;
    tavg=avg32>>alfa;
    ...

      
      





Os resultados da pesquisa estão resumidos na tabela. A pesquisa foi realizada com várias opções de biblioteca:



  • ModBusUseTableCRC - Use o cálculo da tabela CRC;
  • ModBusUseErrMes - Use mensagens sobre erros de protocolo lógico;


E também com diferentes estratégias de otimização de compiladores.

A biblioteca ModBus Slave RTU / ASCII suporta, em alguns casos, uma função importante - uma pausa entre o recebimento de uma solicitação do Modbus Master e a resposta do Modbus Slave. A pesquisa foi realizada com valores de pausa de 2 milissegundos e 0 (ou seja, sem pausa), esses valores estão indicados na coluna da tabela “Pausa P / P”. A coluna "Tamanho" indica o tamanho do módulo, que inclui ambas as funções de processamento de mensagens Modbus (ModBusRTU (), ModBusASCII ()).







Na opinião do autor, o mais conveniente é avaliar o desempenho no pior caso, ou seja, no tempo máximo de execução da função.



Depois de pensar profundamente sobre os resultados da pesquisa, as seguintes conclusões podem ser tiradas:



  1. AVR não é tão lento !!! Em média, é uma vez e meia mais lento que o ARM na mesma velocidade de clock. E no caso de otimização de tamanho (por exemplo, variantes 13 e 15), ele praticamente se aproxima do ARM.
  2. O protocolo ASCII, em comparação com o RTU, não é apenas mais lento na velocidade de transmissão, mas também ocupa muito mais recursos do microcontrolador.
  3. O uso de mensagens sobre erros lógicos do protocolo não afeta o desempenho de forma alguma.
  4. O método tabular de cálculo do CRC permite reduzir o uso dos recursos computacionais do microcontrolador em mais de uma vez e meia.
  5. O uso de uma pausa entre o recebimento de uma solicitação e a transmissão de uma resposta permite não só evitar conflitos no barramento RS-485, mas também reduzir a função de bloqueio de processamento de mensagens do protocolo Modbus.


Que outras conclusões você pode tirar?



Projeto no GitHub



Baixar em um arquivo




All Articles