Vai al contenuto
PLC Forum


Gestire Una Rete RS485


walterword

Messaggi consigliati

non voglio chiedervi come scrivermi codice in C per gestire una rete RS485 , magari basata su modbus o altro , ma solo cercare di mettere a fuoco quali sono le mosse e le fasi principali per poter

implementare quanto descritto sopra.

Facciamo finta che ho creato un master e 3 slaves (appena ricevero il materiale li faro da zero , compreso pcb)

Se uso il processore embedded NIOS II ho a disposizione quanti DMA voglio o per lo meno quanti l'FPGA mi permette di sintetizzare .

Pero voglio stare basso , per questione di costi , montaggi e performances , e allora opto

per un bel PIC16877A o 452 .

Per gli slaves opto per un PIC16F876A , per ogni slave .

Premetto di utilizzare il compilatore CCS ( :D ).

a questo punto nel mio master instanzio un tipo predefinito di dati e da questo 3 strutture .

Una struttura per ogni slave .

Nei rispettivi slave una struttura , uguale ovviamente a quella del master .

A questo punto come si potrebbe ragionare ?

Gli slaves raccolgono dei dati digitali ed analogici che essi siano ingressi o uscite intorno

a qualche decina di bytes .

il master decide con chi parlare e cosa volere , nel senso se leggere o scrivere .

Conoscendo il protocollo modbus potrei realizzare una tabella di comunicazione nel master ,

quindi un array di strutture .

Tramite gli interrupt di byte ricevuto piuttosto che spedito gestire il tutto .

Solo che pero non saprei come muovermi

Vorrei che il discorso rimanesse ad un livello di astrazione abbastanza alto , senza esempi di codice

o considerazioni a basso livello riguardo gli hw dei micro .

Sarebbe interessante poter ragiornarci sopra e stilare un flow chart o disegno che

interpreti il discorso , anche a parole in base ai passi da compiere.

Perche vorrei rimanere astratto ?

Perche cosi potrei capire il funzionamento senza addentrarmi nelle specifiche di un compilatore piuttosto che

di un micro .Piu avanti vorrei ampliare per poter gestire da fpga una rete del genere , tramite dma , uart

ect .

Tra l'altro sono gia in possesso dei file vdhl e verilog per descrivere una uart hw , ma vorrei farlo in maniera piu espansa e parametrizzabile .

Ma questo piu avanti

Cosa ne dite ?

Come affrontereste la mia problematica ?

grazie per coloro risponderanno seriamente

ciao

walter

Link al commento
Condividi su altri siti


Ciao,

io per la mia tesina sto lavorando con una rete in RS485 che assomiglia a quello che vuoi realizzare tu: ho un master con pic 18F4550 ed alcuni slaves con 16F876 o 16F84; gli slave sono sensori o attuatori (tipo PWM o ON-OFF).

La rete è di tipo polling quindi il master è l'unico che può iniziare una trasmissione, per evitare collisioni ma anche perchè non ho motivo di fare in altri modi più complessi. Ogni nodo è identificato da un tipo, ovvero il master invia un comando a tutti gli indirizzi possibili in cerca dei nodi connessi nella rete, il nodo che ha l'indirizzo richiesto risponde comunicando di che nodo si tratta (sensore di temperatura, umidità, lampada, motore ecc.). Quindi ogni slave ha un indirizzo univoco ed il master esegue una "scansione" del bus.

A questo punto il master sapendo quali nodi sono presenti può gestire le richieste che arrivano via LAN (ho scritto uno stack TCP/IP [molto scarno] + server HTTP [ancora + scarno] interfacciato con il famoso ENC28J60). Il protocollo di comunicazione è piuttosto semplice: indirizzo, flag, lunghezza, dati ed un checksum. I nodi rispondono sempre ad una richiesta con dei dati o con un ACK o segnalando un errore nel checksum; così facendo il master si assicura che i comandi siano sempre eseguiti.

devo dire però che a livello astratto non mi sono sprecato molto, semplicemente a seconda del tipo di nodo ho dello subroutines che inviano dei frame appositi, per il momento non ho usato strutture o array, anche se penso che userò un array semplicemente per salvare l'indirizzo e il tipo dei nodi rilevati dalla scansione.

ciauz

Modificato: da BitBerzerkir
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...