Vai al contenuto
PLC Forum


Comunicazione Plc S7-400 Internal


Suabrina

Messaggi consigliati

Buongiorno a tutti,

stò cercando di utilizzare il blocco I_PUT per una comunicazione interna tra 2 CPU installate sullo stesso rack in multicomputing (voglio copiare un db da una cpu all'altra nel più rapido modo possibile).

Il blocco mi richiede IOID e LADDR, ma sinceramente non sò dove andare a leggere questi 2 valori..

Qualcuno ha già utilizzato questi comandi per questo tipo di scambio dati?

Grazie

Link al commento
Condividi su altri siti


Salve,

Il blocco mi richiede IOID e LADDR, ma sinceramente non sò dove andare a leggere questi 2 valori..

immagino avrai già dato una lettura a quello che dice l'aiuto in linea [F1]??.

IOID:

Identificazione dell'area di indirizzamento dell'unità partner:

B#16#54 = Ingresso periferia (PE)

B#16#55 = Uscita periferia (PA)

Se si tratta di un'unità mista, va indicata l'identificazione dell'area dell'indirizzo più basso. Per gli indirizzi uguali indicare B#16#54.

In parole semplici apri la configurazione hardware, nella CPU dove vuoi effettuare la scrittura subito dopo appare sempre l'interfaccia di comunicazione MPI/DP. Osserva l'indirizzo assegnato, se ricade nella colonna Indirizzo E, allora devi assegnare a IOID B#16#54.

Se l'indirizzo invece ricade nella colonna Indirizzo A, allora devi assegnare a IOID B#16#55.

Nel caso in cui sia per Indirizzi E ed A fossero assegnati gli stessi valori allora devi indicare B#16#54.

Nel caso in cui gli indirizzi fossero diversi devi prendere il più basso dei due, e a seconda se questo cade negli indirizzi E o A assegni il relativo corrispondente. B#16#54 per ingressi, oppure B#16#55 per uscite.

Per quanto concerne invece il parametro LADRR questo è l'indirizzo logico dell'unità partner.

Nel caso di un'unità mista va indicato l'indirizzo minore tra i due.

Quindi anche in questo caso come detto pocanzi per IOID, nella configurazione hardware, guarda sempre inella CPU dove vuoi effettuare la scrittura, subito dopo appare sempre l'interfaccia di comunicazione MPI/DP, osserva l'indirizzo assegnato.

Se per esempio l'indirizzo è 4095 dovrai inserire in Hex il valore W#16#FFF nel parametro LADDR.

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Forse avrai già notato, che il trasferimento massimo per ogni istruzione I_PUT è di 76byte, cioè 39 Word max.

Ora non so se il tuo DB rientra in questi limiti, se così non fosse devi pensare di inviare più "pacchetti" di dati.

Modificato: da cagliostro
Link al commento
Condividi su altri siti

E' decisamente più chiaro... quindi questa comunicazione è in tutto e per tutto una MPI? (Senza utilizzo delle porte MPI..)

Con i suoi limiti di velocità.. o sbaglio?

Grazie, ora provo subito

Link al commento
Condividi su altri siti

No, non è proprio così.

Innanzitutto anche se I_PUT ed I_GET possono essere utilizzate come nel tuo caso per passare dei dati da e verso delle CPU residenti nello stesso rack, queste funzioni permettono lo scambio dati verso altri partner mediante utilizzo della sola rete Profibus.

Le corrispondneti funzioni per lo scambio in MPI, sono invece le X_GET ed X_PUT.

Un'altra tecnica di scambio dati ciclica, che può avvenire anche per CPU inserite nello stesso rack attraverso trasmissione MPI, è quella dei dati globali che viene impostata per mezzo di NETPRO.

Con i suoi limiti di velocità

Se intendi la velocità di trasmissione, nel tuo caso impiegando sistemi S7-400, la velocità di comunicazione se necessario può essere impostata fino a 12M anche per le reti MPI. Ovviamente questa scelta, nel caso di una rete MPI, va fatta considerando che anche gli altri partner tipicamente (OP,TP, etc, etc,) abbiano la possibilità di sostenere questa velocità.

Inoltre la scelta della velocità, andrà fatta anche in funzione della lunghezza della rete. Come ben sai esistono delle limitazioni a questo proposito.

Link al commento
Condividi su altri siti

Ho provato a fare come mi hai indicato, ma quando setto il request mi da uno status 8090, che nemmeno nell'. riesco a trovare..

Hai per caso qualche idea?

Ma devo modificare qualcosa a livello hardware?

Grazie

Link al commento
Condividi su altri siti

che nemmeno nell'. riesco a trovare..

Devi solo cercare meglio, se selezioni con il mouse la funzione I_PUT, e poi schiacci F1 che è l'aiuto in linea, ti si apre una pagina di informazioni, a fine pagina troverai "informazione di errore",

quindi clikka su "Informazione di errore delle SFC......"Visualizzerai quindi i codici di errore riportati nel RET_VAL e le possibili cause dell'anomalia.

Ad ogni modo riporto quanto estratto dalla guida in linea:

8090 L'indirizzo di destinazione indicato del partner di comunicazione non è valido, p. es.:

-IOID errato

-presenza indirizzo di base errato

-indirizzo MPI (> 126) errato.

Quando si menziona all'indirizzo di base errato, penso si faccia riferimento al parametro LADDR.

Controlla quindi nuovamente le impostazioni come suggerito.

Per il merker di clock non so se si tratta di un test che stai facendo, ma se vuoi attivare una comunicazione continua, basta impostare il comando CONT sempre ad On, quindi una volta attivato il comando di richiesta REQ, anche una sola volta, la comunicazione continuerà a ciclare.

Se non risolvi, prova ad allegare un'immagine della tua configurazione hardware, come nel mio precedente post, e se ti è possibile pure la parte in cui viene chiamata la I_PUT, giusto per dare un'occhiata ai parametri impostati.

Link al commento
Condividi su altri siti

Ciao ho caricato le immagini che tu mi hai chiesto e verificato i codici ma mi sembra tutto corretto verificando i tuoi consigli.

Grazie

Link al commento
Condividi su altri siti

Allora,

se ho ben interpretato vuoi scrivere i primi 6 byte del DB3090 della CPU "Calcoli" verso lo stesso DB della CPU "Cascata".

Adesso non chiedermi il perchè, ma prova anzichè mettere il 3FFC in LADDR il 3FFB cioè 16379 al posto di 16380.

Poi se pensi di mantenere la comunicazione ciclica per mezzo di CONT=1, eviterei una volta richiamato il REQ, di attivarlo e disattivarlo a tempo per mezzo del m10.7.

Attiva e disattiva una sola volta il REQ al resto ci pensa CONT che è sempre ad ON.

Dai un'occhiata eventualmente anche a questo link

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Si la direzione dello scambio è quella..

ho provato a fare le modifiche che tu mi hai segnalato ma non cambia il risultato (8090).

Ho modificato anche il segnale di REQ mettendolo a 1 solo la prima volta.

Ora provo a leggere dal link che mi hai inviato se c'è qualche notizia in più..

Grazie

Link al commento
Condividi su altri siti

Salve,

la parte di comunicazione DP/MPI delle 2 CPU immagino sia selezionata come rete MPI.

Il mio è solo un sospetto, ma poichè anche nel link che ti ho girato , ma anche consultando altra documentazione e faq dal sito Siemens Automation and Drive, la I_PUT e la I_GET sono da utilizzare con interfaccia DP, potresti provare a scegliere l'indirizzo 16381 anzichè il 16380.

Inoltre credo che entrambe le CPU debbano essere connesse sia nella configurazione hardware di S7 che fisicamente alla stessa rete Profibus, sempre che questo non sconvolga la vostra architettura di sistema.

A questo punto ho seri dubbi che se le CPU non sono realmente connesse frà di loro alla stessa rete, lo scambio dei dati non può transitare direttamente per il Bus del backplane.

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Le due porte che stavo cercando di usare sono entrambe MPI (2) e (3) rispettivamente non connesse fisicamente in quanto su una c'è collegato un pannello operatore..

Ora potrei provare a collegarle.. ma mi dici di provare a configurarle DP?

Se si domani dovrei riuscire a fare un test..

Grazie per la disponibilità.

(Siemens Hotline latita...)

Link al commento
Condividi su altri siti

Allora, prova a collegare fisicamente le due porte MPI e di metterle nella configurazione hardware sotto la stessa rete, poi effettua il test.

Ma temo che la cosa non funzionerà, però fatto questo con le porte collegate in modalità MPI, a questo punto puoi utilizzare la funzione X_PUT.

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Le 2 porte (1 per cpu) configurate in MPI sono già connesse sulla stessa rete in net pro (forse perchè servono per lo scambio GDATA che è già attivo..).

Domani provo con una connessione fisica e X_PUT

Link al commento
Condividi su altri siti

Ho provato a fare la modifica a distanza e già con l'X_PUT il sistema sembra essere più "pimpante" ora almeno la flag di busy si alza e il RET_val oscilla tra 7001 7002 e 80c3 che cercando nell'. si riferisce alla non connessione fisica delle porte. Domani provo e ti faccio saper.

Grazie di tutto

Link al commento
Condividi su altri siti

Collegato il tutto fisicamente e ora lo scambio dati avviene.

Ho messo un counter nell'OB38 (5ms) e ho visto che al max con impianto fermo ho 5 cicli di OB38 => 25ms .

Sai per caso a che dimensione di dati trasmessi posso arrivare ? 67byte come per l'I_PUT ?

Grazie

Link al commento
Condividi su altri siti

Salve,

per quanto concerne la SFC68 X_PUT, esiste una contraddizione nei manuali SIemens.

Ovvero, se tu guardi nell'aiuto in linea (F1) dell'omonima funzione di cui sopra, nella spiegazione del parametro SD si parla di una ricezione massima di 76byte.

Se consulti invece il manuale della comunicazione in lingua inglese, nella configurazione che stai testando in questo momento, lo scambio massimo è di 84byte. Quindi per aver conferma del dato esatto fai prima a provare con una scrittura su di un'area avente 84byte e vedi se il RET_VAl ti restiuisce qualche codice di errore ed effettivamente se tutti i byte del DB vengono correttamente scritti.

Ti allego comunque a seguire tre immagini estratte dal manuale in inglese dove si tratta dei limiti del sistema con l'applicazione da te utilizzata, quindi MPI, CPU sullo stesso rack ed utilizzo della X_PUT.

immagine1fj.png

immagine2cpn.png

immagine3hy.png

Link al commento
Condividi su altri siti

:thumb_yello:

82 byte, ne mancano due stando ai limiti messi in tabella per la S7 basic communication, ma sè non è un problema per te........

Mentre se hai osservato, nell'ultima tabella per S7-400 come da tua configurazione hardware, utilizzando i GData di cui parlavi nei precedenti post, l'area di scambio massima viene fissata a 64bytes.

Buon lavoro......

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