Inhaltsverzeichnis:

Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) - Gunook
Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) - Gunook

Video: Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) - Gunook

Video: Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) - Gunook
Video: Fx3u plc modbus with xy-Md02 Temperature & Humidity Sensor 2024, Juli
Anonim
Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3)
Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3)

POST ESCRITO EN ESPAÑOL

Se simuló a Circuito transmisor de temperature, el elemento primario (Sensor) fue mediante implementado a potenciometro el cual varia el voltaje de entrada. Para enviar la información del sensor (Elemento Secundario), si Implementierung des Protokolls von MODBUS RTU, von einem puerto seriellen Hacia una Computadora que será el maestro.

Como maestro se elaboró un programa en labVIEW haciendo uso de la libreria MODBUS que ya implementa. El esclavo es capaz de recibir las siguientes funciones del maestro:

  1. Funktion 0X01
  2. Funktion 0x02
  3. Funktion 0x03
  4. Funktion 0x04
  5. Funktion 0x05
  6. Funktion 0x06

Los registros implementados en el esclavo son:

  1. Direccionamiento MODBUS (16 Bit)
  2. Übertragungsgeschwindigkeit (16 Bit)
  3. Medición de la temperatura (16 Bit)
  4. Bit de Fehler (1 Bit)
  5. Bit de selección (1 Bit) C o F
  6. Nivel máximo de medición (16 Bit)
  7. Nivel minimo de medición (16 Bit)

Lieferungen

  • LabVIEW
  • Raspberry Pi 3
  • ADC MCP3008
  • 1 Potenziometer
  • Jumper
  • FTDI (FT232RL)
  • Protoboard

Schritt 1: Circuitos

Circuitos
Circuitos

Circuito MCP3008 und Frambuesa Mehr

Verbindung Raspberry Pi 3 und FTDI:

  1. GND ein GND
  2. TX und RX
  3. RX und TX

Schritt 2: Esclavo MODBUS En Raspberry Pi 3B

Como Primer muss konfiguriert und installiert werden, um das Betriebssystem und den Raspberry Pi 3B zu installieren. Sugiero instalar NOOBS desde la pagina oficial. Konfiguriere den Raspberry Pi 3B für die Nutzung von Puerto Serial und Puerto 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 Repräsenta que la temperatura media por el sensor ista en grados Celsius yal estar el bit de selección de 1 est valor se pasa a Grados Fahrenheit.

Ya sabiendo todo esto, el esclavo MODBUS se realizó con Python haciendo uso de la libreria Pyserial. Para la simulación del transmisor se trabajo con 4 listas:

  1. Spulen
  2. Eingaberegister
  3. Bestandsregister
  4. Diskrete Eingänge

Cada lista se hizo de 6 elementos. Breve descripción de los elementos de cada lista:

  • 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)
  • diskret_input[0] = bit de error (este bit se enciende cuando el valor de temperatura esta fuera del rangeo establecido entre temperatura máxima y mínima)
  • inputRegister_lista[0] = Wert des ADC (Sensor der Temperatur-Simulation von einem Potenziometer) abhängig von Wert von Bit-Auswahl.
  • holdingRegister_lista[0] = dirección de esclavo
  • holdingRegister_lista[1] = valor de temperatura máxima
  • holdingRegister_lista[2] = valor de temperatura minimo
  • holdingRegister_lista[3] = Übertragungsgeschwindigkeit.

El esclavo MODBUS a decisión personal cuenta con ciertos parámetros iniciales como lo son:

  • Valor de temperatura maxima 500 Celsius
  • Valor de temperatura minima 200 Celsius
  • Baudrate Initiale von 9600
  • Dirección de esclavo 1
  • Unidad de medición initial en Celsius.

La logica aplicada es la siguiente:

En Prime 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 pedia ada de una e 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 una 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

CRC-Rechner

Códigos de excepción MODBUS

Schritt 3: Maestro LabVIEW (HMI)

Maestro LabVIEW (HMI)
Maestro LabVIEW (HMI)
Maestro LabVIEW (HMI)
Maestro LabVIEW (HMI)

La Creación de a maestro que fuera de cierta manera amigable para a usuario final fue hecha por medio de labVIEW und SU-Librería MODBUS la cual facilitaba la Creación de un maestro MODBUS RTU.

Siehe elaboró una maquina de estados en labVIEW mit las siguientes opciones:

  • drin
  • Verbindung: aquí está el API de crear unevo maestro modbus con la opción habilitada de SERIAL.
  • escribir: aquí se utiliza la funcion Einzel-Halteregister schreiben y Einzelspule schreiben
  • leer: aquí se configuran los registros y coils de importancia para la lectura del maestro.

Schritt 4: Máquina De Estados

Máquina De Estados
Máquina De Estados
Máquina De Estados
Máquina De Estados
Máquina De Estados
Máquina De Estados

Continuación Explicare detalladamente la configuración en cada opción:

Konektar:

Se utilizó el API de crear unevo maestro MODBUS seleccionando la opción de "New Serial Master", secrearon controles para configurar:

  • Baudrate
  • Parität
  • Serieller Port (Visa-Ressource)
  • Serieller Typ (RTU)
  • ID del esclavo.

escribir:

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 a la que el maestro accedería. Por lo que las funciones utilizadas fueron:

  • Single-Coil schreiben
  • Schreiben Sie einzelne Bestandsregister.

leer:

En leer solo me interesaba la lectura del bit de error y el input register asociado a mi variable primaria.

Las funciones utilizadas fueron:

  • Eingangsregister lesen
  • Spulen lesen.

Schritt 5: Frontplatte

Frontblende
Frontblende

El panel frontal en labVIEW se trató lo mejor posible que fuera amigable para el usuario final. Por lo que se realizó lo siguiente:

Installieren Sie die DMC GUI Suite für labVIEW für die wichtigsten Einstellungen und Kontrollen und Anzeigen.

2 termómetros (1 für Temperaturanzeige in Celsius und otro für Temperaturanzeige in Fahrenheit).

Botón "Warnung" que únicamente se enciende cuando el bit de error está encendido.

Botón para editar los rangos de temperature a mediar (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 correcto.

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)

Schritt 6: Archivos Python

En estos archivos está implementado el esclavo MODBUS (Transmisor de temperature) 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.

Schritt 7: HMI

Master-Modbus-RTU

Este es el maestro implementado in labVIEW. Hay cosas para mejorar, por ejemplo no pude corregir un error al conectar al prime intentiono, investigue y no encontré una solución para aplicarla.

Schritt 8: Resultado Finale

Espero ayudar a algunas personas a comprender mejor la comunicación modbus RTU und una implementación en labVIEW.

Empfohlen: