Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-23 14:45
POST ESCRITO EN ESPAÑOL
Se simuló un circuit transmisor de temperatura, el elemento primario (capteur) fue implementado mediante un potenciometro el cual varia el voltaje de entrada. Para enviar la información del sensor (Elemento Secundario), si implementó el protocolo MODBUS RTU, por medio de un puerto serial hacia una computadora que será el maestro.
Como maestro se elaboró un programa en labVIEW haciendo uso de la librería MODBUS que ya implementa. El esclavo es capaz de recibir las siguientes funciones del maestro:
- Fonction 0X01
- Fonction 0x02
- Fonction 0x03
- Fonction 0x04
- Fonction 0x05
- Fonction 0x06
Los registros implementados en el esclavo son:
- Direction MODBUS (16 bits)
- Vitesse de transmission (16 bits)
- Médicis de la température (16 bits)
- Erreur de bit (1 bit)
- Bit de sélection (1 bit) C o F
- Nivel maximo de medición (16 bits)
- Nivel minimo de medición (16 bits)
Fournitures
- LabVIEW
- Framboise Pi 3
- CAN MCP3008
- 1 Potenciomètre
- Pulls
- FTDI (FT232RL)
- Protoboard
Étape 1: Circuits
Circuit MCP3008 et Frambuesa Pi
Connexion Raspberry Pi 3 et FTDI:
- GND un GND
- TX un RX
- RX un TX
Étape 2: Esclavo MODBUS et Raspberry Pi 3B
Como primer pazo necesitas configurar e instalar tu sistema operativo en tu Raspberry Pi 3B. Sugiero instalar NOOBS desde la pagina oficial. Configurez le Raspberry Pi 3B pour utiliser le port sériel et le port SPI.
(Personalmente yo me conectó a mi raspi utilizando VNC Viewer para ello hay que activar el servidor VNC de la raspi)
Originalmente el valor del ADC representa que la temperature medida por el sensor esta en grados Celsius y al estar el bit de selección en 1 este valor se pasa a grados Fahrenheit.
Ya sabiendo todo esto, el esclavo MODBUS se realizó con Python haciendo uso de la librería Pyserial. Pour la simulation du transmisor se trabajo avec 4 listes:
- Bobines
- Registres d'entrée
- Registres de détention
- Entrées discrètes
Cada lista se hizo de 6 elements. Brève description des éléments de la liste:
- coils_lista[0] = bit de selección (si está en 0 significa que la unidad de medición es en Celsius caso contrario unidad de medición en Fahrenheit)
- discrete_input[0] = bit de error (este bit se enciende cuando el valor de temperatura esta fuera del rango establecido entre temperatura máxima y mínima)
- inputRegister_lista[0] = Valeur de l'ADC (capteur de température simulé par un potentiomètre) dépendant de la valeur du bit de sélection.
- holdingRegister_lista[0] = dirección de esclavo
- holdingRegister_lista[1] = valeur de température maximale
- holdingRegister_lista[2] = valeur de température minimale
- holdingRegister_lista[3] = vitesse de transmission.
El esclavo MODBUS a decisión personal cuenta con ciertos parámetros iniciales como lo son:
- Valeur de température maximale 500 Celsius
- Valeur de température minimale 200 Celsius
- Baudrate inicial de 9600
- Direction de l'esclavo 1
- Unidad de medición inicial en Celsius.
La logique appliquée est la suivante:
En primer lugar se buscó leer toda la trama MODBUS enviada por el maestro, esto se hizo en Python mediante el código:
En segundo lugar se buscó la función que el maestro solicitaba para luego validar si la cantidad de salidas pedidas por el maestro eran validas sino generar un código de excepción 3, seguido de validar si el maestro pedía una dirección implementada un código de genera y por ultimo realizar la instrucción pedida según el código de función leído.
Y así sucesivamente con el resto de funciones implementadas.
Para ultimo paso en cada función crear une lista y mandar uno por uno por el puerto serial la petición del maestro.
Aclaro que no valide si el CRC enviada al esclavo era el correcto pero si lo hice para el mensaje enviado al maestro. La función de CRC la adapte a mi código usando este link CRC MODBUS
Calculateur CRC
Codes d'exception MODBUS
Étape 3: Maestro LabVIEW (IHM)
La création d'un maestro que fuera de cierta manera amiable para un usuario final fue hecha por medio de labVIEW y su librería MODBUS la cual facilitaba la creación de un maestro MODBUS RTU.
Se elaboró una maquina de estados en labVIEW avec les options suivantes:
- init
- conectar: aquí está el API de crear un nouveau maestro modbus con la opción habilitada de SERIAL.
- escribir: aquí se utiliza la funcion write single holding register y write single coil
- leer: aquí se configuran los registros y coils de importancia para la lectura del maestro.
Étape 4: Máquina De Estados
continuación explicare detalladamente la configuración en cada opción:
connecteur:
Se utilizó el API de crear un nouveau maestro MODBUS seleccionando la opción de "New Serial Master", se crearon controles para configurar:
- Débit en bauds
- Parité
- Port série (ressource Visa)
- Type de série (RTU)
- ID de l'esclavo.
écrire:
En escribir solo me interesaba que el maestro pudiera cambiar la temperatura máxima y mínima, el bit de selección, asignarle una nueva dirección al maestro y por ultimo asignarle un nuevo Baudrate al esclavo por lo que inform ya sabia de antemano se en que direccion a la que el maestro accedería. Por lo que las funciones utilizadas fueron:
- Écrire en simple bobinage
- Écrire un seul registre d'exploitation.
lorgner:
En leer solo me interesaba la lectura del bit de error y el input register asociado a mi variable primaria.
Las funciones utilizadas fueron:
- Lire le registre d'entrée
- Lire Bobines.
Étape 5: Panneau avant
El panel frontal en labVIEW se trató lo mejor posible que fuera amigable para el usuario final. Por lo que se realizó lo siguiente:
Installez DMC GUI Suite pour labVIEW pour conserver une meilleure conception en utilisant les commandes et les indicateurs.
2 termómetros (1 pour indiquer la température en Celsius et otro pour indiquer la température en Fahrenheit).
Botón "Avertissement" que únicamente se enciende cuando el bit de error está encendido.
Botón para editar los rangos de temperatura a medir (para que únicamente haga el cambio al registro cuando se es presionado el botón) caso contrario siempre los estuviera modificando lo cual causaría un funcionamiento incorrecto.
Botón para editar la dirección del esclavo (para que únicamente haga el cambio al registro cuando se es presionado el botón)
Botón para editar el baudrate del esclavo (para que únicamente haga el cambio al registro cuando se es presionado el botón)
Un botón para "Excepciones" (Para que genere una excepción dependiendo de la función MODBUS seleccionada)
Étape 6: Archivo Python
En estos archivos està implementado el esclavo MODBUS (Transmisor de temperatura) junto con el archivo ADC para leer la variable de interés del sensor de temperature (Simulado en el canal 0 con un potenciometro).
Me quedo pendiente implementar las funciones 15 y 16.
Étape 7: IHM
Maître Modbus RTU
Este es el maestro implémenté en labVIEW. Hay cosas para mejorar, por ejemplo no pude corregir une error al conectar al primer intento, investigue y no encontré una solución para aplicarla.
Étape 8: Résultat final
Espero ayudar a algunas personas a comprender mejor the comunicación modbus RTU y unea implementación en labVIEW.
Conseillé:
IHM industrielle et Arduinos en MODBUS RTU : 4 étapes
IHM industrielle et Arduinos en MODBUS RTU : dans cette instructable, je vais décrire un exemple de communication entre une IHM industrielle (COOLMAY MT6070H, 150EUROS), un Arduino CLONE DIY (10EUROS) et un Arduino UNO (10EUROS). Le réseau fonctionnera sous un proto spécial et robuste et industriel
Digistump et Modbus RTU : 6 étapes
Digistump et Modbus RTU : Ceux qui ont vu mon instructable sur la communication entre Modbus RTU et un Raspberry Pi savent que je prévois un projet d'automatisation d'une serre. J'ai fait 2 petits PCB qui peuvent être placés dans une projectbox. Le lien vers les PCB, je vais incl
Communication Modbus TCP entre Arduino et appareils industriels : 3 étapes
Communication Modbus TCP entre Arduino et appareils industriels : une manière industrielle de contrôler une carte Arduino avec une IHM industrielle et de la relier à un réseau industriel avec une communication Modbus TCP
ESP32 Modbus Maître TCP : 7 étapes
ESP32 Modbus Master TCP : Dans cette classe, vous programmerez le processeur ESP32 pour qu'il soit Modbus TCP Master. Nous utiliserons deux appareils contenant ce processeur : Moduino ESP32 et Pycom. Les deux appareils s'exécutent dans l'environnement MicroPytthon. Notre esclave Modbus sera un ordinateur PC avec M
Thermostat Modbus ESP8266 avec contact : 5 étapes
ESP8266 Modbus Thermostat With Touch : je vais vous montrer dans cette instructable comment faire un beau thermostat à écran tactile avec prise en charge Modbus en option via RS485 avec ArduiTouch ESP et un ESP8266 (NodeMCU ou Wemos D1 Mini)