Cuprins:

Simulare Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps
Simulare Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps

Video: Simulare Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps

Video: Simulare Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3): 8 Steps
Video: temperature and humidity sensor with PLC modbus communication 2024, Iulie
Anonim
Simulare Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3)
Simulare Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3)

POST ESCRITO EN ESPAÑOL

Se simulează un circuit transmisor de temperatură, elementul primar (Sensor) a fost implementat printr-un potențiometru care poate varia tensiunea de intrare. Pentru a trimite informația senzorului (Elemento Secundario), și a implementat protocolul MODBUS RTU, pentru mediu de un port serial către o calculatoare care va fi maestrul.

Como maestro se elaboró un programa en labVIEW haciendo uso de la librería MODBUS care ya implementa. El esclavo este capabil să primească următoarele funcții ale maestrului:

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

Los registros implementados en el esclavo son:

  1. Direcționare MODBUS (16 biți)
  2. Viteza de transmisie (16 biți)
  3. Meditarea temperaturii (16 biți)
  4. Bit de eroare (1 bit)
  5. Bit de selecție (1 bit) C o F
  6. Nivel maxim de mediție (16 biți)
  7. Nivel minim de mediție (16 biți)

Provizii

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

Pasul 1: Circuitos

Circuitos
Circuitos

Circuito MCP3008 și Frambuesa Pi

Conexión Raspberry Pi 3 și FTDI:

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

Pasul 2: Esclavo MODBUS En Raspberry Pi 3B

Como primer pazo necesitas configurar e instalar tu sistema operativo en tu Raspberry Pi 3B. Sugerează instalarea NOOBS de pe pagina oficială. Luego configurează-ți Raspberry Pi 3B pentru a putea utiliza portul serial și portul SPI.

(Personalmente me me conectó a mi raspi using VNC Viewer for ello hay that activar the server VNC de la raspi)

Originalmente el valor del ADC reprezintă că temperatura măsură pentru senzorul este în grados Celsius și al fi el bit de selecție în 1 este valor se pas a grados Fahrenheit.

Ya sabiendo todo esto, el esclavo MODBUS se realizează cu Python haciendo uso de la librería Pyserial. Pentru simularea transmisorului se lucrează cu 4 liste:

  1. Bobine
  2. Registrele de intrare
  3. Ținând registre
  4. Intrări discrete

Cada lista se face de 6 elemente. Breve descriere a elementelor de fiecare listă:

  • coils_lista [0] = bit de selecție (dacă este în 0 înseamnă că unitatea de mediție este în Celsius caz contrar unitate de mediție în Fahrenheit)
  • discrete_input [0] = bit de error (este bit se înțelege când valoarea de temperatură este în afara rangului stabilit între temperatura maximă și minimă)
  • inputRegister_lista [0] = Valor del ADC (sensor de temperatura simulado por un potenciometro) dependent de valoarea de bit de selecție.
  • holdingRegister_lista [0] = direcție de esclavo
  • holdingRegister_lista [1] = valor de temperatura máxima
  • holdingRegister_lista [2] = valor de temperatura mínima
  • holdingRegister_lista [3] = viteză de transmisie.

El esclavo MODBUS a decision personal account with ciertos parámetros initiales as lo son:

  • Valor de temperatura maximă 500 Celsius
  • Valor de temperatura mínima 200 Celsius
  • Baudrate inițial de 9600
  • Dirección de esclavo 1
  • Unitatea de mediție inițială în Celsius.

La lógica aplicată este următorul:

În primul loc se caută leer toată trama MODBUS enviată de maestrul, asta se face în Python prin codul:

În al doilea loc se caută funcția pe care maestrul a solicitat-o pentru apoi valida și cantitatea de salide pedide pentru maestrul erau valide, dar generează un cod de excepție 3, urmărit de validare, iar maestrul pedie o direcție implementată, dar generează un cod de excepție 2 y por ultimo realizează instrucțiunea pedidă conform codului de funcție leído.

Y así sucesivamente cu restul funcțiilor implementate.

Pentru ultimul pas în fiecare funcție crearea unei liste și mandar unul pentru unul pentru portul serial la petiția maestrului.

Aclaro că no valide si el CRC enviada al esclavo era el correcto pero si lo hice para el mensaje enviado al maestro. Funcția CRC adaptează codul meu folosind acest link CRC MODBUS

Calculator CRC

Coduri de excepție MODBUS

Pasul 3: Maestro LabVIEW (HMI)

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

La crearea unui maestru care afară de ciertă mod amigabil pentru un utilizator final a fost aici pentru mediu de labVIEW și su libreria MODBUS la care a facilitat crearea unui maestru MODBUS RTU.

Se elaborează o mașină de produse în labVIEW cu următoarele opțiuni:

  • init
  • conectează-te: aici ești API-ul pentru a crea un nou maestru modbus cu opțiunea abilitată de SERIAL.
  • scrie: aici se utilizează funcția write single holding register și write single coil
  • leer: aici se configurează registrele și bobinele de importanță pentru lectura lecturii maestrului.

Pasul 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

continuare explică detaliat configurarea în fiecare opțiune:

conectar:

Se folosește API-ul pentru a crea un nou maestru MODBUS selectând opțiunea de "New Serial Master", pentru a crea controlul pentru configurare:

  • Baudrate
  • Paritate
  • Port serial (resursă viză)
  • Tip de serie (RTU)
  • ID del esclavo.

scrie:

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 antemano en que direcciones se encontraba la información a la care maestrul accesează. Pentru ceea ce funcțiile utilizate au fost:

  • Scrieți o singură bobină
  • Scrie un registru de exploatație unic.

leer:

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

Funcțiile utilizate au fost:

  • Citiți Registrul de intrare
  • Citiți bobine.

Pasul 5: Panoul frontal

Panoul frontal
Panoul frontal

El panel frontal en labVIEW se tratează cel mai bine posibil, care să fie amigabil pentru utilizatorul final. Pentru ceea ce a realizat următorul:

Se instalează DMC GUI Suite pentru labVIEW pentru a avea un design mai bun în comandă și indicatoare.

2 termometri (1 pentru indicarea temperaturii în Celsius și altul pentru indicarea temperaturii în Fahrenheit).

Botonul „Avertisment” care doar se înțelege când bitul de eroare este încins.

Botón para editar los rangos de temperatura a medir (para que únicamente haga el cambio al registro cuando se presionado el botón) caz contrar mereu estuviera modificând ceea ce cauzează un funcționare incorect.

Boton pentru editare la direcția esclavului (pentru care numai să facă schimbarea la registru când se presionează butonul)

Botón para editar el baudrate del esclavo (pentru care numai să facă schimbarea la registru când este presionat butonul)

Un buton pentru "Excepții" (Pentru a căror genere o excepție depinde de funcția MODBUS selectată)

Pasul 6: Archivos Python

În aceste fișiere este implementat esclavul MODBUS (Transmisor de temperatura) împreună cu arhivul ADC pentru leer variabilă de interes a senzorului de temperatură (Simulat în canalul 0 cu un potențiometru).

Me quedo pendiente implementa funcțiile 15 și 16.

Pasul 7: HMI

Master Modbus RTU

Este es maestro implementado en labVIEW. Hay cosas para mejorar, por ejemplo no pude corregir un error al conectar la primer intento, investigate și nu am găsit o soluție pentru a aplica.

Pasul 8: Rezultatul final

Sper să ajut câteva persoane să înțeleagă mai bine comunicarea modbus RTU și o implementare în labVIEW.

Recomandat: