Diferència entre revisions de la pàgina «30 / 5 / 2020 - Tecnologías IoT, Hands on y MVP»
m (→Modbus RTU) |
m (→Modbus RTU) |
||
Línia 8: | Línia 8: | ||
= Temario (30 / 5 / 2020) = | = Temario (30 / 5 / 2020) = | ||
== Modbus RTU == | == Modbus RTU == | ||
+ | === Dispositivo WP8028ADAM === | ||
+ | [https://binefa.cat/blog/?p=275 Modbus RTU usando Python y Qt] en el [https://www.aliexpress.com/item/2028359405.html dispositivo industrial WP8028ADAM 8DI/8DO] | ||
+ | |||
+ | Communication Parameters ( factory default ): 9600, N, 8,1 | ||
+ | |||
+ | [[Image:04modbusWP8028ADAM.png|center|Input Acquisition]] | ||
+ | |||
+ | |||
+ | |||
+ | Digital input signal acquisition command : | ||
− | [ | + | [[Image:02modbusWP8028ADAM.png|center|Input Acquisition]] |
+ | |||
+ | Data read "C2", is converted into a binary number " 11000010 " , from left to right correspond to the state of 8 digital input signals DI_08-DI_01 , that DI_08, DI_07, DI_02 input , no input other channels | ||
+ | |||
+ | |||
+ | The digital output signal control commands ( multiple control ) : | ||
+ | [[Image:03modbusWP8028ADAM.png|center|Output Control]] | ||
− | + | Written data "A4" is converted into a binary number " 10100100 " , from left to right correspond to eight digital output signal status DO_08-DO_01 , that DO_08, DO_06, DO_03 there is output , no other channel output , after the module receives the correct command , make the appropriate action based on the command and response command sent back to the host , indicating successful communication | |
+ | === Placa IoT-02 === | ||
[[Bibliotecas en Python necesarias para ejecutar el ejemplo de programa para leer y escribir a ModBus RTU]] | [[Bibliotecas en Python necesarias para ejecutar el ejemplo de programa para leer y escribir a ModBus RTU]] | ||
Revisió del 11:02, 28 maig 2020
Contingut
Conceptos previos (29 / 5 / 2020)
- Modbus TCP
- OPC-UA
- Combinaciones entre simuladores, sensores y actuadores (Sistemas ciber-físicos)
Temario (30 / 5 / 2020)
Modbus RTU
Dispositivo WP8028ADAM
Modbus RTU usando Python y Qt en el dispositivo industrial WP8028ADAM 8DI/8DO
Communication Parameters ( factory default ): 9600, N, 8,1
Digital input signal acquisition command :
Data read "C2", is converted into a binary number " 11000010 " , from left to right correspond to the state of 8 digital input signals DI_08-DI_01 , that DI_08, DI_07, DI_02 input , no input other channels
The digital output signal control commands ( multiple control ) :
Written data "A4" is converted into a binary number " 10100100 " , from left to right correspond to eight digital output signal status DO_08-DO_01 , that DO_08, DO_06, DO_03 there is output , no other channel output , after the module receives the correct command , make the appropriate action based on the command and response command sent back to the host , indicating successful communication
Placa IoT-02
Código en Python para la lectura ModBus RTU (en GitHub) de la placa IoT-02 programada con un código ModBus RTU maestro (en GitHub).
Actualización del firmware
Nuevas necesidades
El Firmware usado el 23/5/2020 ( IoT-02_mqtts_09 en GitHub ) puede manejar correctamente los temas MQTT mientras las peticiones tengan un intervalo mínimo de tiempo entre ellas.
En la clase de hoy vamos a estresar la placa IoT-02 haciéndole peticiones de temas (topics) cada segundo. Debido a la latencia de la red, es muy probable que algunas peticiones sean recibidas casi al mismo tiempo. ¿Y qué pasa si recibimos órdenes simultáneamente? Si las órdenes simultáneas son muy seguidas habrá dos procesos simultáneos de acceso al bus I2C, provocando la lectura errónea del sensor I2C.
Fuente de las imágenes de las señales I2C
El tiempo de una comunicación I2C, en la foto de la señales en la pantalla del osciloscopio, es de 150 microsegundos (el tiempo dependerá de la velocidad del dispositivo I2C maestro).
Tecnologías añadidas
Uso de FreeRTOS
No hace falta añadir ninguna biblioteca para usar FreeRTOS en el ESP32. Ya viene por defecto en el IDE de Arduino configurado fara funcionar con el ESP32.
FreeRTOS. Real-time operating system for microcontrollers
Multitasking on ESP32 with Arduino and FreeRTOS
Uso de Mutex. IoT-02_freeRTOS_04
Uso de un mutex para asegurar que la lectura del bus I2C se completa antes de requerir otra lectura. El mutex da exclusividad al primer proceso que lo solicita. Es una manera típica de sincronizar tareas ejectutándose en paralelo.
Terminal serie con la salida del firmware' IoT-02_freeRTOS_04 (en GitHub):
/home/jordi/Arduino/IoT-02_freeRTOS_04/IoT-02_freeRTOS_04.ino Task 1 (0) --> T: 25.12 Task 2 (0) --> T: 25.12 Task 2 (1) --> T: 25.12 Task 1 (1) --> T: 25.12 Task 2 (2) --> T: 25.12 Task 2 (3) --> T: 25.13 Task 1 (2) --> T: 25.14 Task 2 (4) --> T: 25.14 Task 2 (5) --> T: 25.14 Task 1 (3) --> T: 25.15 Task 2 (6) --> T: 25.15 Task 2 (7) --> T: 25.16 Task 1 (4) --> T: 25.16 Task 2 (8) --> T: 25.16 Task 2 (9) --> T: 25.17 Task 1 (5) --> T: 25.17 Ending task 2 Task 1 (6) --> T: 25.17 Task 1 (7) --> T: 25.18 Task 1 (8) --> T: 25.18 Task 1 (9) --> T: 25.19 Ending task 1
En la tarea task 1 se bloquea el acceso al bus I2C (lectura de temperatura) en cada llamada:
for ( int i = 0; i < 10; i++ ) { xSemaphoreTake(xMutex, portMAX_DELAY); Serial.print("Task 1 ("); Serial.print(i); Serial.print(") --> "); vReadTemperature(); xSemaphoreGive(xMutex); vTaskDelay(xDelay); } Serial.println("Ending task 1");
En la tarea task 2 se bloquea el acceso al bus I2C (lectura de temperatura) leyendo de dos en dos:
for ( int n = 0; n < 5; n++) { xSemaphoreTake(xMutex, portMAX_DELAY); for ( int i = 0; i < 2; i++ ) { Serial.print("Task 2 ("); Serial.print(nC); Serial.print(") --> "); vReadTemperature(); vTaskDelay(xDelay); nC++; } xSemaphoreGive(xMutex); }
Bibliotecas (libraries)
Nuevo firmware
IoT-02_mqtts_freeRTOS_json_12.zip IoT-02_mqtts_freeRTOS_json_12 en GitHub
JavaScript encastado en HTML
Enlace con la herramienta de gestión de MAC via web. Código de la herramienta de gestión de MAC via web
Conexión InfluxDB con NodeRED
Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2019-2020
Introducción a Grafana
Uso de Grafana en el VPS del Máster de Industria 4.0 el curso 2019-2020
Ejercicio
Lectura de la LDR, temperatura, presión y humedad de la placa IoT-02 y graficarlas con Grafana.
Uso de bots
Bot de Telegram
Bot de Mastodon
No todas las instancias de Mastodon facilitan la instalación de bots. Para hacer los primeros pasos os recomiendo esta instancia pensada para hospedar bots de Mastodon.
Ejemplo de bot de Mastodon para hacer lecturas de sensores cada hora.
Getting credentials for the Mastodon API with Mastodon.py, step by step