Բովանդակություն:

Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) ՝ 8 քայլ
Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) ՝ 8 քայլ

Video: Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) ՝ 8 քայլ

Video: Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3) ՝ 8 քայլ
Video: Leyendo el sensor XY-MD02 con labview usando MODBUS RS485 2024, Հուլիսի
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ó un circuito transmisor de temperatura, el elemento primario (Sensor) fue implementado mediante un potenciometro el cual varia el voltaje de entrada. Սենսորային տեղեկատվության (Elemento Secundario) համար, որն իրականացնում է MODBUS RTU պրոտոկոլը, որն ուղղված է այն սերիական մեդիա համակարգին, որը կարող է ծառայել մաեստրոյի միջոցով:

Como maestro se elaboró un programa en labVIEW- ի միջոցով մենք կարող ենք օգտագործել անվճար MODBUS ծրագիրը: El esclavo es capaz de recibir las siguientes funciones del maestro:

  1. Ֆունկցիա 0X01
  2. Funվարճություն 0x02
  3. Ciվարճանք 0x03
  4. Funվարճություն 0x04
  5. Funվարճություն 0x05
  6. Ciվարճություն 0x06

Los registros implementados en el esclavo son:

  1. Direccionamiento MODBUS (16 բիթ)
  2. Velocidad de transmisión (16 բիթ)
  3. Medición de la temperatura (16 բիթ)
  4. Bit de error (1 բիթ)
  5. Bit selección (1 bit) C o F
  6. Nivel máximo de medición (16 բիթ)
  7. Nivel mínimo de medición (16 բիթ)

Պարագաներ

  • LabVIEW
  • Ազնվամորի Պի 3
  • ADC MCP3008
  • 1 պոտենցիոմետր
  • Ցատկողներ
  • FTDI (FT232RL)
  • Նախատախտակ

Քայլ 1: Շրջաններ

Շրջաններ
Շրջաններ

Circuito MCP3008 y Frambuesa Pi

Conexión Raspberry Pi 3 y FTDI:

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

Քայլ 2. Esclavo MODBUS En Raspberry Pi 3B

Como primer pazo necesitas configurar e instalar tu sistema operativo en tu Raspberry Pi 3B: Ներկայացրեք NOOBS- ի պաշտոնական էջը: Դուք պետք է կազմաձևեք Raspberry Pi 3B- ն ՝ օգտագործելով սերիական կամ 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- ն ներկայացնում է ջերմաստիճանի միջին ջերմաստիճանը, որն օգտագործվում է ըստ սենսորների և աստիճանների `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 simulación del transmisor se trabajo con 4 listas:

  1. Կծիկներ
  2. Մուտքային գրանցամատյաններ
  3. Գրանցամատյանների պահում
  4. Դիսկրետ մուտքեր

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

  • coils_lista [0] = bit selección (si está en 0 indica que la unidad de medición es en Celsius caso contrario unidad de medición en Fahrenheit)
  • discrete_input [0] = bit de error (est bit bit enciende cuando el valor de temperatura esta fuera del rango establecido entre temperatura máxima y mínima)
  • inputRegister_lista [0] = Valor del ADC (սենսորային ջերմաստիճանի սիմուլադոյի կամ հզորության համար) կախված է սելեկցիայից:
  • HoldRegister_lista [0] = էսկլավոյի ուղղորդում
  • HoldRegister_lista [1] = ջերմաստիճանի բարձր ջերմաստիճան
  • HoldRegister_lista [2] = ջերմաստիճանի բարձր ջերմաստիճան
  • HoldRegister_lista [3] = փոխանցման արագություն:

El esclavo MODBUS որոշումը անձնական cuenta con ciertos parámetros iniciales como lo son:

  • Valor de temperatura máxima 500 elsելսիուս
  • Valor de temperatura mínima 200 elsելսիուս
  • Baudrate inicial de 9600
  • Ուղղորդություն դեպի էսկլավո 1
  • Unidad de medición inicial en Celsius:

La lógica aplicada es la siguiente:

En primer lugar se buscó leer toda la trama MODBUS enviada por el 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 իրականացում 2 ներդրումային զարգացում 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 crea 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 menaje enviado al maestro. CRC función de CRC la adapte a mi código usando este link CRC MODBUS

CRC հաշվիչ

Códigos de excepción MODBUS

Քայլ 3. Maestro LabVIEW (HMI)

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

La creación de un maestro que fuera de cierta manera amigable para un usuario final fue hecha por medio de labVIEW y su librería MODBUS- ի հիմնական ստեղծումը MODBUS RTU- ի կողմից:

Se elaboró una maquina de estados en labVIEW con las siguientes opciones:

  • ինիտ
  • conectar: aquí está el API de crear un nuevo maestro modbus con la opción habilitada de SERIAL.
  • escribe
  • տես:

Քայլ 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

շարունակական բացատրություն detalladamente la configuración en cada opción:

conectar:

Օգտագործեք API- ն, որը ստեղծում է MODBUS- ի նոր մոդելը, որը ընտրում է «Նոր սերիական վարպետ» գործառույթը, կազմաձևման համար անհրաժեշտ է վերահսկել դրանք.

  • Բոդրա
  • Հավասարություն
  • Սերիական նավահանգիստ (վիզայի ռեսուրս)
  • Սերիայի տեսակը (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 Baudrate al esclavo por lo que ya sabia de antesano en quecc տեղեկատվություն a la que el maestro accedería. Por lo que las funciones utilizadas fueron:

  • Գրեք մեկ կծիկ
  • Գրեք մեկ հոլդինգի գրանցում:

leer:

En leer solo me interesaba la lectura del bit de error y el մուտքի գրանցում asociado a mi variable primaria.

Las funciones utilizadas fueron:

  • Կարդացեք մուտքագրման գրանցամատյանը
  • Կարդացեք Coils:

Քայլ 5: Առջևի վահանակ

Առջևի վահանակ
Առջևի վահանակ

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

Տեղադրեք DMC GUI Suite- ը labVIEW- ի համար ՝ նշելով մեր հսկողության և ցուցումների վերահսկումը:

2 termómetros (1 para indicar la temperatura en Celsius y otro para indicar la temperatura en 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 (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 wrongo.

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)

«Excepciones» պարագայի համար (Para que genere una excepción დამოკიდությունը կախված է գործառույթից MODBUS- ի ընտրվածից)

Քայլ 6: Archivos 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 ջերմաստիճանի (Simulado en el canal 0 con un potenciometro):

Me quedo pendiente implementar las funciones 15 y 16.

Քայլ 7: HMI

Վարպետ Modbus RTU

Este es el maestro implementado en labVIEW. Hay cosas para mejorar, for ejemplo no pude corregir un error in conectar al primer purposeo, investigate y no encontré una solución para aplicarla.

Քայլ 8: Արդյունքների եզրափակիչ

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

Խորհուրդ ենք տալիս: