Sari la conținut
ELFORUM - Forumul electronistilor

Placa achizitie: ModBus RTU (RS485) cu 8 iesiri digitale (iesire npn)


Vizitator Zithum

Postări Recomandate

Vizitator Zithum

Pentru ca am lucrat suficient de mult cu ModBus RTU / Eth, si pentru ca am dat de numeroase placi de achizitie (intrari/ iesiri/ analogice) cu iesire ModBus RTU la niste preturi astronomice, m-am hotarat sa-mi fac eu un set de asemenea placi de achizitie, cumva universale (dimensiune, conectori, etc.) prin care sa pot acoperii necesitatile, adica:

- intrari digitale;

- iesiri digitale;

- intrari analogice (curent, 4-20mA).

- intrari analogice (tensiune 0-10V sau 0-5V)

- intrari analogice - tranductori curent (0-50Aca)

- module speciale: ModBus RTU - serial (RS232/RS485)

- module speciale: interfatare imprimanta termina AP24;

- module speciale: interfatare module radio 869Mhz;

 

Cateva informatii despre protocolul modbus: http://modbus.org/specs.php

 

Softul il doresc sa fie cat mai unitar. Practic acelasi soft (prin comment-ul unor directive) sa se adapteze diverselor placi.

Controller folosit: PIC18F26K22 (2 porturi seriale, CAD pe PORTB, etc.).

 

Atasez ce am facut pana acum: schema si cablaj pentru RS485MB_DO8 (placa cu 8 iesiri digitale, comandate ModBus RTU).

Ca si principiu: alimentare 7..29Vcc (o sa se incalzeasca stabilizatorul 7805 la 29V alimentare), varistor pe intrare, dip-switch-uri pentru selectia adresei RS485 (max. 63), dip-switch pentru parametrii comunicatie (8/9bit, baudrate 9600, 19200, 57600 si 115200bps, cu paritate even sau none). A doua alimentare (pentru izolare galvanica). Optocuploare pentru iesire si led-uri de semnalizare.

Nu e optimizata la dimensiune.

Sper ca va place. O sa revin cu detalii curand.

RS485MB_DO8_v1.pdf

Link spre comentariu
  • Răspunsuri 14
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nickrvl

    3

  • Stefan

    1

  • bennyy

    1

Top autori în acest subiect

Imagini postate

Vizitator Zithum

Cateva poze cu cablajele si asamblarea finala. Distantiere de 25mm intre placi pentru a crea un sandwitch ce va contine mai multe module. Aceste module vor putea fi gestionate de un PC sau de un modul central. Practic creez un mic PLC dar cu comunicatia dintre carduri standardizata (ModBus). In acest fel, placile se pot folosii si independent pentru achizitii de date sau in echipamente industriale.

post-257061-0-53675200-1470905163_thumb.jpg

post-257061-0-01504600-1470905424_thumb.jpg

Link spre comentariu
Vizitator Zithum

Primele probe cu placa: comunicatie la 115200bps, 8bit data, 1 stop, timeout 250ms, interogare la 50ms. M-am cuplat la placa direct pe serial (am scos LTC485) si folosind http://en.radzio.dxp.pl/modbus-master-simulator/ (rmms) i-am dat bataie. Poze atasate. In scurt timp (dupa ce mai bibilesc la el) si codul sursa. Intre timp mai vreau sa fac si un program pe PC pentru gestiunea placilor de achizitie ...

Poza cu ecran laptop: program RMMS ruland, parametrii de comunicatie, numarul de interogari in partea de jos, valorile citite in stg. Am facut si un mic filmulet dar nu stiu cum pot sa-l postez aici (ocupa destul de mult).

 

post-257061-0-07783600-1470927156_thumb.jpg

post-257061-0-45962000-1470927158_thumb.jpg

Link spre comentariu
Vizitator Zithum

Pentru partea de soft: se vede ca am optat pentru un uC cu 2 porturi USART (pentru aplicatii in care avem nevoie si de al doilea port RS232/RS485) si cu CAD pe liniile PORTB.

La toate placile va fi o parte comuna (PORTA= adresa placii, PORTC = configurare comunicatie + comunicatie ModBus RTU, PORTB= intrari / iesiri). PORTB, in functie de tipul placii poate fi configurat ca intrare digitala, iesire digitala, intrare analogica sau intrerupere (pini RB0- RB2) pentru contoare de mare viteza sau alte aplicatii.

 

Softul este realizat in XC8 (MPLABX) si prezint mai jos header-ul programului principal cat si programul principal, cu observatiile:

 

- in header sunt definite mai multe tipuri de placi. Practic se "de-comenteaza" definitia tipului de placa pentru care se doreste compilarea programului (ex. #define RS485MB_AI4V /**< card with 4 analog inputs, 0-10V (type=4) */) si mai departe la compilare se incarca definitiile si functia de citire specifica. In cazul acesta se va include header-ul #include "rs485mb_ai4v.h" unde sunt definite variabilele si functiile proprii.

- procesorul ruleaza la 64MHz (ceas intern + PLL) pentru a avea un maxim de viteza. Pasul de executie al functiilor (pentru toate placile) este de 1ms. Practic unitatea de executie cea mai mica este de minim 1ms (cu exceptia cazurilor definite "fastest" in care operatiile de citire / scriere se executa la viteza maxima).

 

Pentru comunicatia ModBus, avem definit bufferul rx/tx (commBuffer[256]), 2 tabele pentru calculul CRC-ului (extern const UINT8 crcHighTable[256]; // crc high table; extern const UINT8 crcLowTable[256]; // crc low table), adresa placii (slaveAddress), configuratia comunicatiei (baud rate si 8/9 bit, in configReg) (acesti ultimi 2 registrii se seteaza conform dip-switch-urilor externi). 

Intreruperea la 1ms este folosita pentru a incrementa timer-ul sfarsit comunicatie (la 4ms de la stop receptie) cat si pentru a asigura o perioada de tact executie functie I/O.

Partea de receptie USART (ModBus) se gaseste tot in cadrul intreruperii (sunt 2 intreruperi: TMR1 @1ms si USART1_RX) care asigura incarcarea buffer-ului, resetarea comunicatiei in caz de receptie eronata sau bit de paritate gresit.

 

Programul in sine e simplu si apeleaza 2 functii principale: verificare receptie comunicatie si EvaluateIO (functie ce evalueaza intrarile/ iesirile si care e diferita in functie de definitia placii). 

 

Urmeaza: fisierele pentru citirea adresei si configuratiei si fisierele specifice fiecarui modul de achizitie in parte.

 

SS_PLC_main.ZIP

Link spre comentariu
Vizitator Zithum

Continuare: rutinele pentru citirea adresei hardware a dispozitivului, pentru citirea configuratiei comunicatie.

De asemeni, rutine placa DO8 (iesiri digitale x8, tip NPN).

 

Cateva cuvinte despre rutinele DO8:

- structura celorlalte module va fi similara cu a acestuia.

- avem cateva definitii standard: product type (un registru care va identifica tipul de placa). Acesta impreuna cu adresa placii ne va ajuta daca dorim sa facem un master cu configurare automata. Product serial si software version (idem pentru identificare). Registrul Output seteaza (LB) iesirile.

- mai avem definitia cu numarul maxim de registrii implementati.

Ca si rutine (aceleasi rutine dar cu un continut diferit le vom gasii si in fisierele celorlalte placi:

- InitIO: initializarea PORTB (in cazul de fata ca iesire).

- InitRegs: initializare tabela registrii cat si a variabilelor interne.

- EvaluateIO: aici setare PORTB in funtie de valoarea registrului output. Pentru alte placi aceasta functie va fi diferita ...

 

 

 

CFG.ZIP

DO8.ZIP

Link spre comentariu
  • 3 săptămâni mai târziu...
Vizitator Zithum

Am facut o aplicatie pe PC pentru comunicatia cu placile.

Cateva capturi de ecran atasate....

 

Comunica pe RS232 (merge si cu adaptor USB) si asigura si comutarea liniei RTS pentru a schimba directia in cazul in care se foloseste un montaj cu LTC485.

 

As vrea sa incarc kit-ul programului dar nu stiu cum (are cam 262MB). Daca ma puteti ajuta ... (dar sunt alergic la creerea de conturi, etc.).

 

O sa revin cu o scurta descriere a ceea ce face programul ...

post-257061-0-97329100-1473325247_thumb.jpg

post-257061-0-54268300-1473325248_thumb.jpg

post-257061-0-03166800-1473325249_thumb.jpg

post-257061-0-54089000-1473325249_thumb.jpg

post-257061-0-03979600-1473325250_thumb.jpg

post-257061-0-54348300-1473325250_thumb.jpg

post-257061-0-05663100-1473325251_thumb.jpg

Link spre comentariu
..................

 

As vrea sa incarc kit-ul programului dar nu stiu cum (are cam 262MB). Daca ma puteti ajuta ... (dar sunt alergic la creerea de conturi, etc.).

 

............................

Pe forum nu, pe un site de gazduire si link....

Link spre comentariu

Probabil executabilul ocupa asa mult deoarece are inclus si runtime-ul de LabView. Nu mai retin dar parca reusisem sa fac un exe mult mai mic si runtime-ul il instalam separat (link extern).

Imi place si acest proiect al tau si cand am ceva timp liber sigur o sa-ti cer ceva informatii, poate reusesc sa-l pun in practica ca o placuta demo.

Link spre comentariu
Vizitator Zithum

Probabil executabilul ocupa asa mult deoarece are inclus si runtime-ul de LabView. Nu mai retin dar parca reusisem sa fac un exe mult mai mic si runtime-ul il instalam separat (link extern).

Imi place si acest proiect al tau si cand am ceva timp liber sigur osa-ti cer ceva informatii, poate reusesc sa-l pun in practica ca o placuta demo.

Corect, programul e facut in LabWindows CVI ...

 

In momentul de fata sunt facute si testate urmatoarele module: DI8 (digital input), DO8 (digital output), AI4I (analog inputs - current 4-20mA), AI4V (analog inputs, voltage 0-10V sau 0-5V), AI4T (analog inputs, traductor curent 50A).

Mai am facute cablaje pentru RSxxx (placa conversie RS485 modbus la RS232 sau RS485 transparent (multiprotocol ...)), AP24prt (placa comanda imprimanta matriciala tip AP25-1200/ AP24 (able systems)).

 

Momentan am in lucru:

_RF: placa transceiver RF (869MHz)

_IR: placa emitator/receptor IR (RC5 protocol)

_CPU_V1: modul central (care va comanda celelalte placi... gen modul PLC) - cablajul e facut deja: include ceas de timp real cu baterie backup, eeprom, interfata afisaj 4x20caractere (sau altele), interfata RS232 (am de gand sa implementez un bootloader). 

 

Din pacate gasesc deosebit de dificil sa postez proiectul (kit de instalare, documentatie, etc.) ... si probabil o sa ma las pagubas ... sa vad cum stau cu timpul...

Link spre comentariu
Vizitator flueras

 

 

As vrea sa incarc kit-ul programului dar nu stiu cum (are cam 262MB). Daca ma puteti ajuta ... (dar sunt alergic la creerea de conturi, etc.).

 

 

Poti folosi Inno setup pentru crearea kitului de instalare. Este simplu de folosit.

Link spre comentariu
  • 6 luni mai târziu...

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări