Sommario:

Trasmettitore di simulazione di temperatura Modbus (Labview + Raspberry Pi 3): 8 passaggi
Trasmettitore di simulazione di temperatura Modbus (Labview + Raspberry Pi 3): 8 passaggi

Video: Trasmettitore di simulazione di temperatura Modbus (Labview + Raspberry Pi 3): 8 passaggi

Video: Trasmettitore di simulazione di temperatura Modbus (Labview + Raspberry Pi 3): 8 passaggi
Video: Labview: Creare un sottoprogramma (subvi) e simulazione del controllo della temperatura 2024, Luglio
Anonim
Simulazione trasmettitore di temperatura Modbus (Labview + Raspberry Pi 3)
Simulazione trasmettitore di temperatura Modbus (Labview + Raspberry Pi 3)

POST ESCRITO EN ESPAÑOL

Se simuló un circuito transmisor de temperatura, el elemento primario (Sensor) fue implementado mediante un potenciometro el cual varia el voltaje de entrada. Per l'informazione del sensore (Elemento Secundario), si implementa il protocollo MODBUS RTU, per mezzo di un porto seriale 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. Funzione 0X01
  2. Funzione 0x02
  3. Funzione 0x03
  4. Funzione 0x04
  5. Funzione 0x05
  6. Funzione 0x06

Los registros implementados en el esclavo son:

  1. Direzione MODBUS (16 bit)
  2. Velocità di trasmissione (16 bit)
  3. Medicina della temperatura (16 bit)
  4. Bit di errore (1 bit)
  5. Bit di selezione (1 bit) C o F
  6. Nivel massimo di medicina (16 bit)
  7. Nivel mínimo de medición (16 bit)

Forniture

  • LabVIEW
  • Raspberry Pi 3
  • ADC MCP3008
  • 1 Potenziometro
  • ponticelli
  • FTDI (FT232RL)
  • Protoboard

Passaggio 1: circuiti

circuiti
circuiti

Circuito MCP3008 e Frambuesa Più

Conexión Raspberry Pi 3 e FTDI:

  1. GND a GND
  2. TX e RX
  3. RX e TX

Passaggio 2: Esclavo MODBUS in 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. Segui la configurazione di Raspberry Pi 3B per poter utilizzare il porto seriale e il porto 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 reppresenta que la temperatura 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. Para la simulazione del trasmettitore se trabajo con 4 liste:

  1. bobine
  2. Registri di ingresso
  3. Registri di partecipazione
  4. Ingressi discreti

Cada lista se hizo de 6 elementi. Breve descrizione degli elementi di 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)
  • 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] = Valor del ADC (sensor de temperatura simulado por un potenciometro) dependeendo del valor de bit de selección.
  • holdingRegister_lista[0] = dirección de esclavo
  • holdingRegister_lista[1] = valore di temperatura massima
  • holdingRegister_lista[2] = valore di temperatura minimo
  • holdingRegister_lista[3] = velocità di trasmissione.

El esclavo MODBUS a decisione personale cuenta con ciertos parámetros iniciales come lo son:

  • Valore di temperatura massima 500 Celsius
  • Valore di temperatura minimo 200 Celsius
  • Baudrate iniziale di 9600
  • Direzione di esclavo 1
  • Unidad de medición inicial en Celsius.

La logica si applica es la siguiente:

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 sollecitato para luego validar si la cantidad de salidas pedidas por el master eran validas sino general un codice di eccezione 3, seguido de validar si el maestro pedia una direzione implementata sino generar un codice di eccezione 3 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.

Per ultimo paso en cada función crear una lista e 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

Calcolatore CRC

Codice di eccezione MODBUS

Passaggio 3: Maestro LabVIEW (HMI)

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

La creazione di un maestro che fua di cierta manera amigable per un usuario finale fue hecha per medio de labVIEW e su libreria MODBUS la quale facilita la creazione di un maestro MODBUS RTU.

Se elaboró una macchina di stati in labVIEW con le seguenti opzioni:

  • dentro
  • collegare: ottenere l'API per creare un nuovo maestro modbus con l'opzione abilitata di 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.

Fase 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:

connettore:

Se si utilizza l'API per creare un nuovo maestro MODBUS selezionando l'opzione di "New Serial Master", si creano i controlli per configurare:

  • Baudrate
  • Parità
  • Porta seriale (risorsa per il visto)
  • Tipo di serie (RTU)
  • ID dell'esclavo.

iscritto:

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 assignarle un nuevo Baudrate al esclavo por lo que ya sabia de antemano en que direcciones se encontraba a la que el maestro accedería. Per lo que las funciones utilizadas fueron:

  • Scrivi single coil
  • Scrivere un unico registro di partecipazione.

leera:

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

Le funzioni utilizadas fueron:

  • Leggi il registro di input
  • Leggi bobine.

Passaggio 5: pannello frontale

Pannello frontale
Pannello frontale

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

Installa DMC GUI Suite per labVIEW per avere un miglior design e controllare i controlli e gli indicatori.

2 termometri (1 per indicare la temperatura in gradi Celsius e altri per indicare la temperatura in gradi Fahrenheit).

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

Botón para editar los rangos de temperatura a medir (per 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 selectionada)

Passaggio 6: Archivos Python

In questo archivio è stato implementato l'esclavo MODBUS (Trasmettitore di temperatura) in corrispondenza dell'archivio ADC per leggere la variabile di interesse del sensore di temperatura (Simulato nel canale 0 con un potenziometro).

Me quedo pendiente implementar las funciones 15 e 16.

Passaggio 7: HMI

Master Modbus RTU

Questo è il maestro implementato in labVIEW. Hay cosas para mejorar, por ejemplo no pude corregir un error al conectar al primer intento, investigue y no encontré una solución para aplicarla.

Fase 8: Risultato finale

Espero ayudar a algunas personas e comprender mejor la comunicazione modbus RTU e una implementazione in labVIEW.

Consigliato: