Taula de continguts:

Simulació transmissora de temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps
Simulació transmissora de temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps

Vídeo: Simulació transmissora de temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps

Vídeo: Simulació transmissora de temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps
Vídeo: Aprendiendo a leer sensor de humedad-temperatura SHT20 por protocolo MODBUS (RTU) usando Python 2024, Desembre
Anonim
Simulació transmissora de temperatura Modbus (Labview + Raspberry Pi 3)
Simulació transmissora de temperatura Modbus (Labview + Raspberry Pi 3)

POST ESCRITO EN ESPAÑOL

Es simulà un circuit transmissor de temperatura, l’element primari (Sensor) va ser implementat mitjançant un potenciometre el qual varia el voltatge d’entrada. Per enviar la informació del sensor (Elemento Secundario), si implementó el protocolo MODBUS RTU, per mitjà d’un port serial cap a una computadora que serà el mestre.

Com mestre es va elaborar un programa en labVIEW fent ús de la biblioteca MODBUS que ja implementa. L'esclau és capaç de rebre les següents funcions del mestre:

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

Els registres implementats en l'esclavo son:

  1. Direcció de MODBUS (16 bits)
  2. Velocitat de transmissió (16 bits)
  3. Medició de la temperatura (16 bits)
  4. Bit d'error (1 bit)
  5. Bit de selecció (1 bit) C o F
  6. Nivell màxim de medició (16 bits)
  7. Nivell mínim de medició (16 bits)

Subministraments

  • LabVIEW
  • Raspberry Pi 3
  • ADC MCP3008
  • 1 Potenciometro
  • Saltadors
  • FTDI (FT232RL)
  • Protoboard

Pas 1: Circuits

Circuits
Circuits

Circuito MCP3008 y Frambuesa Pi

Connexió Raspberry Pi 3 i FTDI:

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

Pas 2: Esclavo MODBUS a Raspberry Pi 3B

Com primer paquet que necessiteu configurar i instal·lar el vostre sistema operatiu al vostre Raspberry Pi 3B. Suggeriu instal·lar NOOBS des de la pàgina oficial. Luego configurar tu Raspberry Pi 3B per poder utilitzar el port serial i el port SPI.

(Personalmente yo me conectó a mi raspi usando VNC Viewer per a ell que activar el servidor VNC de la raspi)

Originalment el valor del ADC representa que la mesura de la temperatura pel sensor aquesta en graus Celsius i al estar el bit de selecció en 1 aquest valor es passa a graus Fahrenheit.

Ja sabent tot això, l’esclau MODBUS es va realitzar amb Python fent ús de la biblioteca Pyserial. Per a la simulació del transmissor es treballa amb 4 llistes:

  1. Bobines
  2. Registres d’entrada
  3. Tenint registres
  4. Entrades discretes

Cada llista se hizo de 6 elementos. Breve descripció dels elements de cada llista:

  • coils_lista [0] = bit de selecció (si està en 0 significa que la unitat de medició és en Celsius cas contrari unitat de medició en Fahrenheit)
  • discrete_input [0] = bit d'error (aquest bit s'encén quan el valor de temperatura està fora del rang establert entre temperatura màxima i mínima)
  • inputRegister_lista [0] = Valor del ADC (sensor de temperatura simulado per un potenciometro) dependiendo del valor de bit de selección.
  • holdingRegister_lista [0] = direcció d'esclau
  • holdingRegister_lista [1] = valor de temperatura màxima
  • holdingRegister_lista [2] = valor de temperatura mínima
  • holdingRegister_lista [3] = velocitat de transmissió.

L'esclau MODBUS a decisió personal compte amb paràmetres inicials com a son:

  • Valor de temperatura màxima 500 Celsius
  • Valor de temperatura mínima 200 Celsius
  • Baudrate inicial de 9600
  • Dirección de esclavo 1
  • Unitat de medició inicial en centígrads.

La lògica aplicada és el següent:

En primer lloc es va buscar tota la trama MODBUS enviada pel mestre, això es va fer en Python mitjançant el codi:

En segon lloc es va buscar la funció que el mestre va sol·licitar per després validar si la quantitat de salades pedides pel mestre eren valides fins a generar un codi d’excepció 3, seguit de validar si el mestre va pediar una direcció implementada fins a generar un codi d’excepció 2 i per últim realitzar la instrucció pedida segons el codi de funció deixat.

I així sucesivament amb el resta de funcions implementades.

Para ultimo paso en cada función crear una lista y mandar uno por uno por el puerto serial la petición del mestre.

Aclaro que no valide si el CRC enviada a l’esclau era el correcte però si el hice per al missatge enviat al mestre. La funció de CRC s'adapta al meu codi utilitzant aquest enllaç CRC MODBUS

Calculadora CRC

Codis d'excepció MODBUS

Pas 3: Mestre LabVIEW (HMI)

Mestre LabVIEW (HMI)
Mestre LabVIEW (HMI)
Mestre LabVIEW (HMI)
Mestre LabVIEW (HMI)

La creació d’un mestre que fora de cierta manera amigable per a un usuari final va ser aquí per mitjà de labVIEW i la seva biblioteca MODBUS la qual cosa va facilitar la creació d’un mestre MODBUS RTU.

Es va elaborar una màquina d'estats en labVIEW amb les següents opcions:

  • init
  • connectar: aquí està l’API de crear un nou mestre modbus amb l’opció habilitada de SERIAL.
  • escriure: aquí s'utilitza la funció escriure registre de registre únic i escriure una sola bobina
  • llegeix: aquí es configuren els registres i bobines d’importància per a la lectura del mestre.

Pas 4: màquina d'estats

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ó expliquem detalladament la configuració en cada opció:

connectar:

Utilitzeu l'API per crear un nou mestre MODBUS seleccionant l'opció de "New Serial Master", crear controls per configurar:

  • Velocitat de transmissió
  • Paritat
  • Port sèrie (recurs Visa)
  • Tipus de sèrie (RTU)
  • ID del esclavo.

escriure:

En escribir solo me interesaba que el mestre pudiera canviar la temperatura màxima i mínima, el bit de selecció, assignar una nova direcció al mestre i per últim assignar un nou Baudrate a l'esclavo per lo que ya sabia de antemano en que direcciones se encontraba la información a la que el mestre accedeix. Per lo que les funcions utilitzades van ser:

  • Escriu una sola bobina
  • Escriviu Registre de participació única.

veure:

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

Les funcions utilitzades van ser:

  • Llegiu el registre d’entrada
  • Llegiu Bobines.

Pas 5: Tauler frontal

Panell frontal
Panell frontal

El panel frontal en labVIEW es va tractar el millor possible que fos amigable per a l’usuari final. Per lo que es va realitzar el següent:

S'ha instal·lat DMC GUI Suite per a labVIEW per tenir un millor disseny en quant a controls i indicadors.

2 termómetros (1 para indicar la temperatura en Celsius y otro para indicar la temperatura en Fahrenheit).

Botó "Warning" que únicament s'encén quan el bit d'error està encès.

Botó per editar els rangs de temperatura a medir (per a que únicament es faci el canvi al registre quan es presiona el botó) cas contrari sempre que l’estuviera modifiqui el que causaria un funcionament incorrecte.

Botó per editar la direcció de l’esclau (per a que únicament faci el canvi al registre quan es presiona el botó)

Botó per editar el baudrate de l’esclau (per a que únicament faci el canvi al registre quan es presiona el botó)

Un botó per a "Excepcions" (Per a què genere una excepció depenent de la funció MODBUS seleccionada)

Pas 6: Archivos Python

En aquests fitxers està implementat l’esclau MODBUS (Transmisor de temperatura) junt amb l’arxiu ADC per llegir la variable d’interès del sensor de temperatura (Simulat en el canal 0 amb un potenciometre).

Me quedo pendiente implementar las funciones 15 y 16.

Pas 7: HMI

Màster Modbus RTU

Aquest és el mestre implementat en labVIEW. Hi ha coses per millorar, per exemple no es pot corregir un error al connectar-lo al primer intent, investigar i no trobar una solució per aplicar-la.

Pas 8: Resultat final

Espero ajudar a algunes persones a comprendre millor la comunicació modbus RTU i una implementació en labVIEW.

Recomanat: