Vai al contenuto
PLC Forum


Modbus S7 1200 E Toshiba


fabiofz

Messaggi consigliati

Salve a tutti. Scrivo perché come dal titolo, sto preparando una gestione in modbus tra s7 1200 e 8 inverter toshiba vf ps1. Uso il Tia v12 e ho letto svariate volte la tua discussione dell'ottobre 2013 di Frank681 e Batta ma senza capirci molto. Mi spiego meglio. Il mio primo dubbio è: dovendo controllare costantemente il consumo di 3 dei motori collegati a questi inverter e sapendo che la comunicazione modbus é ciclica, é meglio che almeno la lettura della corrente la faccia in analogica? Poi chiedo, per configurare la porta devo richiamare MB_COMM_LOAD una volta sola per esempio con first scan o qualcosa di simile. In MB DB devo aggiungere il DB MB MASTER DB con tutte le sue cose tra qui l'indirizzo modbus dove andare a scrivere i miei dati. Ma se io ho 8 indirizzi modbus questo DB non dovrebbe cambiare ogni volta? oppure devo richiamare tante volte MB COMM LOAD tante volte quante sono i nodi modbus? ho guardato l?esempio sul sito Siemens ma é tra due CPU, e poi io ho piú nodi da controllare. Inoltre ho letto che dovrei creare un ciclo di scansione delle varie operazioni, praticamente una sequenza per svolgerle una ad una sia write che read e per questa scansione ho pensato a qualcosa di semplice tipo un contatore con incremento a clock. Ogni valore del contatore mi abilita una sequenza, più è veloce il clock più veloce la scansione. Controllando error uguale a 0 so sempre se la comunicazione è stata eseguita. Quindi non ho capito se ogni volta devo cambiare il DB in MB COMM LOAD ciclicamente tipo con MOVE o qualcosa cosi o cosa. Poi l'indirizzamento con i registri dell'inverter spero di averlo capito più o meno (dimenticavo, modulo CM1241 in 485) praticamente il 4 davanti non devo considerarlo perché identifica il modbus, ho capito bene? Se qualcuno può darmi qualche direzione, se ha qualche link in particolare di aiuto. Sto aspettando il modulo di comunicazione e uno degli inverter che mi arriveranno a breve per poi cominciare a fare qualche prova prima di avere i quadri finiti davanti.Ringrazio fin d'ora per il possibile aiuto. Qualsiasi cosa su cui poter studiarci su andrà benissimo. Ciao a tutti

Link al commento
Condividi su altri siti


MB_COMM_LOAD configura la porta del processore 485, ne hai uno solo quindi si esegue una sola volta. Va bene farlo con il FirstScan

Ma se io ho 8 indirizzi modbus questo DB non dovrebbe cambiare ogni volta? No, per ogni richiamo del MB_MASTER puoi usare lo stesso blocco dati di istanza, oppure puoi usare un solo richiamo, ma devi di volta in volta cambiare l'indirizzo a cui puntare MB_ADDR

tipo un contatore con incremento a clock va bene anche il ciclo con un contatore, devi dare un po' di tempo all'attesa della risposta.

praticamente il 4 davanti non devo considerarlo perché identifica il modbus No il 4 identifica il modo di accesso al dato (lettura di word) è vero che devi specificare anche a parte (MODE) ma puoi lasciarlo.

Link al commento
Condividi su altri siti

Esatto

Ciao ragazzi , ora sono fuori sede , lunedi' sera torno poi cedo se riesco di recuperare le mie prove con mb1 ma essendo modbus forse cambiano solo indirizzi di lettura ( forse ) , l'inizializzazione md_com_load la fai una sola volta se hai una sola scheda di comunicazione.

il principio di interrogazione è semplice essendo 485 un bus seriale interroghi primo inverter aspetti un certo tempo poi se non hai errori leggi valori dal db , se invece hai errori di lettura alzi allarme e passi a inverter sucessivo , l'idea di usare un ciclico non è male se non hai necessita veloci poi cambiare indirizzo di lettura con un valore in un db in partenza 1 , comparando il valore =1 leggi primo inverter , poi a lettorura completata incrementi valore a 2 , compari se = 2 leggi secondo inverter ecc.. ecc..

io uso una cosa simile per le comunicazioni modbus anche con altri moduli , poi dipende da quat parametri devi leggere , certo che in caso di caduta bus perdi tutte le letture , ma di contro non devi mettere fili e schede analogiche che poi devi scalare ecc..

spero di esserti stato di aiuto

Link al commento
Condividi su altri siti

Grazie ragazzi per le pronte risposte. Guaresc mi ha gia salvato in dicembre con una macchina pronta da spedire in messico con le out analogiche che non mi funzionavano...allora fatemi capire bene. Mb loab lo richiamo una volta sola e siamo ok ma quello che non mi é chiaro é come strutturare il resto, del tipo: richiamerò mb master in scrittura e lettura tante volte quanti i miei inverter. Ma su mb com load non capisco se ci devo caricare a scansione ogni volta un db master o come devo farlo. Poi per la scansione ogni valore del contatore corrisponde a una scrittura e una lettura uno ad uno. Un clock tipo 0,5 potrebbe andare bene? Quello di qui non sono molto sicuro é la lettura della corrente del primo inverter (280 kw) che non sará aggiornata fino al reiniziare della scansione e non sapendo molto bene quanto veloce poter effettuare la scansione, avevo pensato di lasciarlo in analogica. Pilota un motore da 250 kw a qui, raggiunto una certa soglia viene fermato il carico. Frank, ti avevo mandato un messaggio,ho letto le tue discussioni sull argomento e... Penso che avrò gli stessi problemi. Grazie ancora. A tutti.

Link al commento
Condividi su altri siti

Ciao

se ricordo bene avevo fatto si che tutte le letture andassero a finire in un unci DB per cui punti a quello e hai tutto , devo verificare , per il tempo metti la comunicazione in un ciclo a tempo magari 200ms così sei sicuro che venga sempre seguito ogni 200ms.

appena recupero l'esempio te lo giro ( sperando di ritrovarlo )

Link al commento
Condividi su altri siti

salve Frank. questo è un esempio di come l'ho pensato io. Primo problema: cosa metto in mb comm load in Db? secondo la finestra che si apre posso scegliere tra 12 che sono tutti gli mb master che richiamo nel programma...secondo problema: controllando la corrente dei motori vado a variare; settando determinate soglie ; il carico a loro sottoposto. Posso gestirle così o è meglio che almeno queste le vada a leggere in analogica cosi da avere una lettura costante e non una lettura ad "intervalli" determinati dalla scansione?(leggo la corrente del primo motore e poi non la leggo più finche non si aggiorna con il reinizio della scansione). Le mie conoscenze delle reti sono pessime anzi facciamo nulle , quindi qualsiasi cosa su qui studiarci un po su andrebbe bene. Nell'esempio mancano gli indirizzi delle word degli inverter perché sono fuori e non ho il manuale con me, cosi come il controllo delle word di stato delle varie scritture e letture. l'esempio è solo per capire se almeno sono sulla strada giusta per la comunicazione. grazie e ciao a tutti.


allego il resto..uguale per tutti gli inverter

Link al commento
Condividi su altri siti

Ciao

io nel parametro md_db ho MA_MASTER_DB che è un db creato in automatico qando si imb_master nel main , in pratica con mb_master nel main leggi e punti al mb_master_db inizializzato con first scan , per i parametri dell'inverter vi è un manuale thoshiba che spiega i parametri e la comunicazione 485 .

se non erro il mode 1 e in scrittura dovrebbe essere mode 0 la lettura , se non erro 40003 l'indirizzo di lettura e 8 la lunghezza in modo di leggere tutti i dati che hai preprogrammato come trasmissione nell'inverter , a proposito per l'inverter usi pcm001z per la programmazione ? Inoltre se non erro gli inverter thoshiba per default come tipo di trasmissione hanno thosiba non rtu.

spero di esserti stato utile

.

Modificato: da Frank681
Link al commento
Condividi su altri siti

ciao Frank

ho appena ricevuto il manuale Toshiba. i VF PS1 supportano protocollo Toshiba e parte del modbus rtu. dipende dal settaggio dei parametri F807 e F889. Gli altri inverter sono VFS11 che per quello che mi ha detto l'agente supportano anch'essi il modbus rtu....spero. Per programmarli non so ancora cosa userò, ho un incontro con i tecnici Toshiba appena rientrerò, più o meno tra 10 giorni e li mi mostreranno il software di programmazione e come programmarli e farli funzionare al meglio per le applicazionin richieste. Apparte questo, indirizzi e varie degli inverter che poi vedrò, il mio principale problema rimane con l'implementazione della comunicazione. Come hai detto tu, in mb db del com load devo mettere il db che si crea automaticamente all'inserire mb master. adesso, io nel mio programma richiamo 14 volte mb master e per ognuno si è creato un db suo. Anche se lo avessi richiamato solo tre volte, si sarebbere sempre creati tre db diversi, uno per ogni mb master. A questo punto il problema è quale dei 14 mettere perché o strutturamente il mio programma è sbagliato o non ne ho idea. in ogni caso se vado a scrivere o leggere su due indirizzi che non sono contigui devo per forza richiamare più volte mb master e la stessa cosa vale avendo più indirizzi modbus con qui comunicare. quindi automaticamente vengono a crearsi diversi MB mastre db e qui comincia il problema di non sapere cosa metter in mb comm load.

spero di essermi spiegato.

grazie a presto

Link al commento
Condividi su altri siti

Ciao conta che la comunicazione è una seriale per cui puoi ( devi ) usare un solo db_master , che è quello che trovi in oggetti tecnologici , viene usato da una comunicazione alla volta , il modulo invece mb_master di comunicazione rtu nel parametro DATA_PTR avraper ogni inverter un indirizzo db creato da te dove mettere i dati , io ho un unico db con n strutture una pe rogni inverter e al suo interno le word che leggo dall'inverter

Link al commento
Condividi su altri siti

Ciao Frank, scusa ma ne ho capito molto, mi sa che son duro... Hai detto che devo usare una sola volta mb master. Ma anche solo facendo una scrittura di una word e una lettura di una word lo uso giá due volte quindi ho gia due mb master db diversi e li al dover mettere mb master db in mb db del com load mi blocco; metto il db del master in scrittura o il db del master in lettura???... Tutto il resto ,indirizzi dell inverter, é sistemato( spero siano giusti ma con questi faccio presto ho i tecnici toshiba a disposizione). Se poi gli inverter sono 3 allora avrò minimo 6 mb master ( 1 in scrittura e uno in lettura il tutto per 3). L' unica cosa che mi viene da dire é richiamo mb master per scrittura e poi copio e incollo cambiandone i dati per ogni processo che devo fare.... Ma non mi sembra proprio la cosa giusta!!hanno tutti lo stesso numero!!!

Link al commento
Condividi su altri siti

Ciao

mb_master_Db è il db creato da mb_load che riferendosi ad una sola seriale è unico per cui a ogni modulo di lettura o scrittura tu assegni lo stesso db poichè è quello che si incarica della comunicazione , parametrizzi poi il modulo mb_master nel main o in un ob temporizzato tipo ob35

per scrivere o leggere i dati che vuoi ricevere o inviare da un diverso db , devo solo fare in modo che le letture o scritture avvengano un alla volta poichà la comunicazione è seriale.

Piu tardi se riesco facci oun esempio minimo di prova con un solo inverter ne ho solo uno per provare poi lo pubblico

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ciao. Allora se ho capito bene le cose dovrebbero essere cosi: richiamo mb com load una sola volta con first scan poi nel programma aggiungo mb master con il suo db che in questo caso lo chiamo db generale. Poi mi creo vari db chiamati db inverter 1, db inverter 2.... e cosi via per tutti e sei gli inverter che ho, praticamente identici a mb master db generale a divverenza che dentro ad ogni variabile metto i rispettivi dati di ogni inverter quindi numero del nodo, modo ecc....e ogni volta a scansione muove il db di ogni inverter dentro al mb master db generale. Spero di aver capito bene... L unico problema adesso é che i dati variant del ptr addres non esiste nei db che creo per ogni inverter. Qualche suggerimento in proposito¿ finchè l inverter con qui comunicare é 1 solo, non ci sono problemi, ma in questo caso sono 6 e cominciano i problemi. Grazie a tutti

Link al commento
Condividi su altri siti

Ciao

vedo se riesco a allegare due immaginette , ok per mb_load una sola volta poi nel ptr puoi anche usare un solo db dove internamente crei delle strutture una per ogni inverter magari nel mioesempio vedrai due strutture una in lettura e una in scrittura.

nei due file immagine della config

fammi sapere
:smile:
Modificato: da Frank681
Link al commento
Condividi su altri siti

  • 2 weeks later...

ciao Frank

dopo aver visto i tuoi esempi e averci pensato su, ho buttato giù qualcosa...o meglio ci ho provato. Visto che mb master devo usarlo solo una volta cosi da avere un solo mb master db da metter in mb comm load, ho pensato di procedere cosi: (allegherei il programma intero e cosi sarebbe più semplice ma non so come si fa)

-

Link al commento
Condividi su altri siti

- ho creato un db master con dentro req, mb addr, mode, data len, done, busy, error, status e data ptr. quest'ultimo con tipo dati Vref.

- poi ho creato un FB write con dentro come variabili static le stesse del db master generale

- stessa cosa con FB read

- richiamato mb master e in ogni variabile ho inserito le variabili di db master

- creato la scansione per la comunicazione con incremento di un contatore con clock 0.5 hz

- richiamo tante volte l FB write quanti sono gli inverter ogni volta assegnando un db diverso inquanto ogni db ha al suo interno le impostazioni di scrittura diverse per ogni inverter ( indirizzo modo ecc)

- stessa cosa faccio FB read

- ad ogni valore del contatore viene attivato o un fb write o un fb read che trasferisce al le impostazioni di scrittura o lettura direttamente al mb master

- per ultimo un db data inverter con dentro in varie struttura tutti i dati di tutti gli inverter sia di scrittura sia di lettura

- praticamente ogni inverter ha 2 db (quello che imposta i settaggi per la scrittura e quello che imposta i settaggi per la lettura)

Una cosa che ho notato differente sono gli indirizzi che mi hai detto. In scrittura io scrivo su FA e FA01 (comandi e frequenza 64000 e 64001) in lettura leggo fa FD00 a FD03 (64768 a 64771) visti su manuale 485 Toshiba modbus.

spero di essere sulla strada giusta che ne dici?

prossimamente lo testo. Mercoledì incontro con i tecnici Toshiba cosi potro dirti che sw mi faranno usare.

Link al commento
Condividi su altri siti

Ciao frank... Niente da fare non funziona niente e il bello è che non funziona nemmeno con un solo inverter. Ho guardato tutti gli esempi che ho trovato compreso il tu. Ne scrive nè legge. Ho provato anche la lettura a blocchi come da manuale toshiba da f875 in poi per 5 word ma niente. Mode 0 o 03 indirizzo con e senza 4 davanti. Niente da fare. C'erano anche i tecnici toshiba secondo loro era tutto giusto anche nel mio programma ma niente da fare. C 'è un modo per pingare diciamo in modbus l inverte? Almeno per vedere se il plc vede l inverter? Per il clock di scansione ho usato un clock 0,5 herz che dovrebbe andare bene penso. Si il software per gli inverte è quello che mi hai detto tu. Nei prossimi giorni faró altri tentativi e vedremo se avró fortuna

Link al commento
Condividi su altri siti

Errore da principiante.... Mai fidarsi di nessuno... Mi sono appena accorto che il collegamento della 485 è tra i poli 4 e 5, 8 la massa. Il quadrista ha collegato tutti i cavi modbus degli inverter con i poli 3,4 e 8. Avrei dovuto controllarli prima... La prossima settimana riprovo e vedremo se il problema era solo quello.

Link al commento
Condividi su altri siti

Ultimi ragguagli, finalmente scrive e legge da un inverter e la scansione funziona bene anche con clock 1,25 hz. L unica cosa che ancora no va è che se scrivo uno word alla volta bene altrimenti niente. Praticamente non posso scrivere da FA00 per 2 word (FA00 ed FA01) con una scrittura perche non va e ho provato a cambiare di tutto. Mode 1 indirizzi 464001 puntatore p#db2.dbx0.0 word 2 lenh 2... Ma niente da fare. Se faccio due operazioni di scrittura allora si. L errore che mi da è 8382 lunghezza dati errata pero cavolo se scrivo una word va e se ne scrivo due??!! Ho provato word interi reali uint niente da fare una alla volta scrive di più no. In scrittura sono 2 word per inverte che sono 6. In lettura stesso comportamento. Qualcosa non quadra decisamente.

Link al commento
Condividi su altri siti

Ciao a tutti, dopo le ultime prove di oggi sono giunto alla conclusione che o il mio mb master è difettoso o non capisco dove sia il problema o dove sbaglio. Ricapitolando devo scrivere 2 word in FA00 ed FA01 (indirizzi 64001 e 64002). Come si vede nella miniatura modbus 1 se faccio 2 operazioni di scrittura scrivendo ogni word al suo indirizzo funziona...ma è assurdo i due indirizzi sono contigui quindi non ha senso fare 2 scritture. Invece come si vede nella miniatura modbus se provo a scrivere entrambe con un unica operazione non funziona codice di errore 8382...ma se sono 2 word in 2 indirizzi!!!! ho provato di tutto (cambiare da word a int 4 davanti all'indirizzo e anche senza, modi funzione niente di niente). i dati da trascrivere sono su un db con array di 2 e 3 int. quelli di 2 per la scrittura, quelli di 3 per la lettura. La lettura ha lo stesso comportamento, una alla volta si, più di una no. Quindi, in questo modo per scrivere 2 word e leggerne 3 da un inverter(Toshiba VF S15) deve fare 5 operazioni tra scrittura e lettura...che per circa 18 inverter.....qualcuno ha qualche idea? o dove sbaglio? Ho finito le idee.

grazie a tutti in anticipo

post-158402-0-17019400-1407876599_thumb.

post-158402-0-94467500-1407877386_thumb.

Link al commento
Condividi su altri siti

Giuseppe Signorella

Dalle immagini da te allegate, non si capisce granché.Sono troppo piccole.

Ma quale codice funzione stai utilizzando per leggere e scrivere negli inverter?

O meglio ancora quali codici funzione accetta il tuo inverter?

Se ad esempio utilizzi il codice funzione

(06) Preset Single Register (scrittura di singolo registro) non ti viene permesso di scrivere due registri simultaneamente.
Quale errore ti viene restituito in status?
Link al commento
Condividi su altri siti

Ciao Giuseppe, scusa ma per stare dentro ai 40k ho dovuto fare cosi. Ti indico i dati inseriti: nel caso della scrittura di 2 word (che non funziona) mb adrr=8 , mode =1 , data addr 464001 , data len =2 data ptr P#db3.dbx0.0 int 2

Mentre nel caso delle 2 scritture singole (che funzionano) mb adrr=8 , mode=1 , data adrr=464001 , data len=1 , data ptr P#db3.dbx0.0 int 1 e poi mb adrr=8 , mode=1 , data addr=464002 , data len=1 data ptr P#db3.dbx2.0 int 1. il codice che mi da lo status è 8382 lunghezza dati errata. Nel mode ho provato a mettere anche 16, scrittura di 2 o più registri ma niente, come anche in lettura o provato a mettere 03 leggi 1-124 word per richiesta ma niente da fare. Poi te lo dico in tutta sincerità, è la prima volta che uso il modbus e non lo conosco molto. Ho visto l'esempio sul manuale del 1200, studiato la parte relativa e guardato un esempio di comunicazione tra 2 cpu sul sito Siemens. Mi sembrava di aver capito che il codice funzione sul TIA va in relazione al mode, al numero di registro e al data len, quindi impostati questi non devo fare altro...ma forse ho capito male giusto.

allego una tabella che ho trovato nel manuale rs485 Toshiba del VF S15.

post-158402-0-92657000-1407943672_thumb.

Link al commento
Condividi su altri siti

  • 3 years later...

Salve , 

Lo so  un post troppo vecchio ma io Iniziato adesso con plc S7-1200. 

Volevo Sapere se ha fatto comunicasione Con inverter VS-f15 o no. Devo provare io .. se mi poi aiutare. 

Grazie

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...