Índice:

Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3): 8 etapas
Simulación Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3): 8 etapas
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 simula um circuito transmisor de temperatura, o elemento primário (Sensor) é implementado mediante um potenciômetro el cual varia el voltaje de entrada. Para enviar a informação do sensor (Elemento Secundario), se implementado o protocolo MODBUS RTU, por meio de uma porta serial, um computador que será o maestro.

Como o maestro se elabora um programa em labVIEW haciendo o uso da biblioteca MODBUS que você implementa. El esclavo es capaz de recibir las siguientes funciones del maestro:

  1. Función 0X01
  2. Função 0x02
  3. Função 0x03
  4. Função 0x04
  5. Função 0x05
  6. Função 0x06

Los registros implementados en el esclavo son:

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

Suprimentos

  • LabVIEW
  • Raspberry Pi 3
  • ADC MCP3008
  • 1 Potenciômetro
  • Jumpers
  • FTDI (FT232RL)
  • Protoboard

Etapa 1: Circuitos

Circuitos
Circuitos

Circuito MCP3008 e Frambuesa Pi

Conexión Raspberry Pi 3 y FTDI:

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

Etapa 2: Esclavo MODBUS En Raspberry Pi 3B

Como primer pazo necesitas configurar e instalar o sistema operativo no Raspberry Pi 3B. Sugiero instalar NOOBS from la pagina oficial. Luego configurar tu Raspberry Pi 3B para poder utilizar o porto serial e porto SPI.

(Pessoalmente, você pode conectar um mi raspi utilizando o VNC Viewer para ativar o servidor VNC de la raspi)

Originalmente, o valor do ADC representa que a temperatura medida pelo sensor está nos graus Celsius e al estar o bit de seleção em 1 este valor se passa a grados Fahrenheit.

Ya sabendo fazer tudo esto, o esclavo MODBUS se realiza com Python haciendo o uso da biblioteca Pyserial. Para a simulação do transmisor, consulte o trabalho com 4 listas:

  1. Bobinas
  2. Registros de entrada
  3. Registros de retenção
  4. Entradas Discretas

Cada lista se inicial de 6 elementos. Breve descrição dos elementos de cada lista:

  • coils_lista [0] = bit de seleção (si está em 0 significa que a unidade de medicina é em Celsius caso contrario unidade de medicina em Fahrenheit)
  • discrete_input [0] = bit de error (este bit se enciende cuando o valor de temperatura esta fuera del rango estabelecido entre temperatura máxima e mínima)
  • inputRegister_lista [0] = Valor del ADC (sensor de temperatura simulado por um potenciômetro) dependente do valor de bit de seleção.
  • holdingRegister_lista [0] = dirección de esclavo
  • holdingRegister_lista [1] = valor de temperatura máxima
  • holdingRegister_lista [2] = valor de temperatura mínimo
  • holdingRegister_lista [3] = velocidad de transmisión.

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

  • Valor de temperatura máximo de 500 Celsius
  • Valor de temperatura mínima 200 Celsius
  • Baudrate inicial de 9600
  • Dirección de esclavo 1
  • Unidade de medicina inicial em Celsius.

La lógica aplicada es la siguiente:

No primer lugar se buscou ler todo o trama MODBUS canalizado pelo maestro, esto se hizo en Python mediante el código:

Em segundo lugar se buscou a função que o maestro solicitaba para luego validar se a cantidad de salidas pedidas por el maestro eran validas sino gerar um código de exceção 3, seguido de validar se o maestro pedía uma direção implementar a sino gerar um código de exceção 2 e, por último, realizar a instrução pedida segundo o código de função leído.

Y así sucesivamente con el resto de funciones implementadas.

Para o último passo em cada função, crie uma lista e mande um por um para o porto de série da solicitação do maestro.

Aclaro que no valide si el CRC enviado al esclavo era el correcto pero si lo hice para a mensagem enviada al maestro. A função de CRC para adaptar um mi código usando este link CRC MODBUS

Calculadora CRC

Códigos de exceção MODBUS

Etapa 3: Maestro LabVIEW (HMI)

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

A criação de um maestro que pode ser feito por meio de uma manera amigável para um usuário final fue hecha por meio de labVIEW e sua biblioteca MODBUS o cual facilita a criação de um maestro MODBUS RTU.

Veja uma maquina de estados em labVIEW con las siguientes opciones:

  • iniciar
  • conectar: aquí está a API de criar um novo modbus maestro com a opção habilitada de SERIAL.
  • escribir: aquí se utiliza la funcion write single holding register y write single coil
  • leer: aquí se configuran los registros y bobinas de importancia para la lectura del maestro.

Etapa 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 detalhadamente la configuración en cada opción:

conectar:

Use a API de criação de um novo mestre MODBUS selecionando a opção "New Serial Master", defina os controles para configurar:

  • Taxa de transmissão
  • Paridade
  • Porta serial (recurso Visa)
  • Tipo de série (RTU)
  • ID del esclavo.

escribir:

En escribir solo me interesaba que o maestro pudiera cambiar a temperatura máxima e mínima, o bit de seleção, atribuir uma nova direção ao maestro e por último atribuir um novo Baudrate al esclavo por lo que você sabia de antemano en que dires se encontrava a informação a la que el maestro accedería. Por lo que as funções utilizadas:

  • Escreva bobina única
  • Escreva um único registro de retenção.

olhar malicioso:

En leer solo me interesaba a leitura do bit de erro e o registro de entrada associado a uma variável primária.

Las funciones utilizadas funções:

  • Ler registro de entrada
  • Leia bobinas.

Etapa 5: painel frontal

Painel frontal
Painel frontal

O painel frontal em labVIEW é tratado o melhor possível que pode ser amigável para o usuário final. Por lo que se realizó lo siguiente:

Se instalou DMC GUI Suite para labVIEW para ter um mejor diseño en cuanto a controles e indicadores.

2 termómetros (1 para indicar a temperatura em Celsius e outro para indicar a temperatura em Fahrenheit).

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

Botón para editar los rangos de temperatura a medir (para que unicamente 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 a direção do esclavo (para que unicamente haga el cambio al registro cuando se es presionado el botón)

Botón para editar a taxa de baudrate del esclavo (para que unicamente 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)

Etapa 6: Archivos Python

En estos arquivos está implementado o esclavo MODBUS (Transmisor de temperatura) junto com o arquivo ADC para ler a variável de interés do sensor de temperatura (Simulado no canal 0 com um potenciômetro).

Me quedo pendiente implementar las funciones 15 e 16.

Etapa 7: HMI

Master Modbus RTU

Este é o maestro implementado em labVIEW. Hay cosas para mejorar, por ejemplo no pude corregir un error al conectar al primer intento, investigue y não encontré una solução para aplicarla.

Etapa 8: Resultado Final

Espero ayudar a algunas personas a comprender mejor la comunicación modbus RTU e uma implementação em labVIEW.

Recomendado: