¿Quién vive bien en un microcontrolador?



En qué año - contar, en qué tierra - adivinar, hacer preguntas. ¿Cuánto más rápido es ARM que AVR? ¿Qué protocolo Modbus es "más rápido"? ¿ASCII o RTU?



Por "velocidad", en este caso, nos referimos al número de ciclos de la máquina del procesador necesarios para ejecutar todas las acciones del protocolo.

El estudio de rendimiento se llevará a cabo en la biblioteca ModBus Slave RTU / ASCII , ampliamente conocida en círculos estrechos , portada a los microcontroladores ATMega48 y STM32L052. Enviaremos la información a través del protocolo Modbus al emulador del panel Weintek. Las pruebas se realizarán en un ejemplo de demostración . Además de los resultados de la prueba, el panel muestra los estados de los registros Modbus: entradas discretas, salidas discretas, registros para lectura y registros para lectura / escritura. El panel también calcula el número de errores en el intercambio de datos con el microcontrolador. La ventana de prueba se muestra en la figura.







Evaluaremos el rendimiento midiendo el tiempo de ejecución de la función de procesamiento de mensajes del protocolo. Mediremos el tiempo de ejecución utilizando el método obrero-campesino. Antes de iniciar la función, reiniciamos el temporizador de hardware, cuya frecuencia de conteo es igual a la frecuencia de reloj del microcontrolador, después de ejecutar la función, leemos los valores del temporizador y procesamos los resultados de la medición. Calculamos el valor mínimo, máximo y medio del tiempo de ejecución de la función de procesamiento de mensajes del 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;
    ...

      
      





Los resultados de la investigación se resumen en la tabla. La investigación se llevó a cabo con varias opciones de biblioteca:



  • ModBusUseTableCRC : utiliza el cálculo de la tabla CRC;
  • ModBusUseErrMes : utiliza mensajes sobre errores de protocolo lógico;


Y también con diferentes estrategias de optimización del compilador.

La biblioteca ModBus Slave RTU / ASCII admite, en algunos casos, una función importante: una pausa entre la recepción de una solicitud del Modbus Master y la respuesta del Modbus Slave. La investigación se realizó con valores de pausa de 2 milisegundos y 0 (es decir, sin pausa), estos valores se indican en la columna de la tabla "Pausa P / P". La columna "Tamaño" indica el tamaño del módulo, que incluye ambas funciones para procesar mensajes Modbus (ModBusRTU (), ModBusASCII ()).







En opinión del autor, lo más conveniente es evaluar el desempeño según el peor de los casos, es decir, según el tiempo máximo de ejecución de la función.



Habiendo reflexionado profundamente sobre los resultados de la investigación, se pueden sacar las siguientes conclusiones:



  1. ¡AVR no es tan lento! En promedio, es una vez y media más lento que ARM a la misma velocidad de reloj. Y en el caso de optimización en tamaño (por ejemplo, variantes 13 y 15) prácticamente se acerca a ARM.
  2. El protocolo ASCII, en comparación con RTU, no solo es más lento en la velocidad de transmisión, sino que también consume muchos más recursos del microcontrolador.
  3. El uso de mensajes sobre errores de protocolo lógico no afecta el rendimiento de ninguna manera.
  4. El método tabular para calcular el CRC le permite reducir el uso de recursos informáticos del microcontrolador en más de una vez y media.
  5. El uso de una pausa entre recibir una solicitud y transmitir una respuesta permite no solo evitar conflictos en el bus RS-485, sino también reducir la función de bloqueo del procesamiento de mensajes del protocolo Modbus.


¿Qué otras conclusiones se pueden sacar?



Proyecto en GitHub



Descarga en un archivo




All Articles