Ospite drei Inserito: 15 febbraio 2006 Segnala Inserito: 15 febbraio 2006 Ciao a tutti.In una rete di tipo S7-Connections con un PC di supervisione che fa anche da master di rete e 3 nodi S7-200, vengono aggiunti altri 6 nodi S7-200 e un S7-300. Il 300 viene aggiunto esclusivamente perchè i nuovi nodi 200 comandano via profibus alcuni inverter. Dal 300 leggo e scrivo vari dati nei 6 nodi 200 con le funzioni X_PUT e X_GET, la rete è impostata ad una velocità di 187.5 Kbit/s, e come struttura del software ho preso ampiamente spunto da uno degli esempio della simens installati con lo Step7. Tutto funziona, ma ad una velocità non esaltante, quando da un 200 do un comando ad un inverter il comando viene ricevuto in circa 2-2,5 secondi. Considerando che sulla stessa rete ci girano i pacchetti del master e quelli del 300 questa "velocità" è giustificata oppure normalmente dovrebbe essere più veloce la comunicazione?Spero di essermi spiegato bene.Grazie a tutti.
Gaetano Inserita: 19 febbraio 2006 Segnala Inserita: 19 febbraio 2006 No non è chiaro , gli inverter che hai aggiunto sono comandati localmente dal s7200 in USS o cosa ?Oppure il 300 (in questo caso 31x 2dp) fa da 'concentratore - ponte' tra una rete MPI e una rete profibus ?Se così fosse devi anche considerare le risorse di comunicazione della cpu che hai usatoe se i collegamenti che utilizzi sono superiori a quelli possibili non puoi tenere la comunicazione sempreattiva ma gestirla dinamicamente il che comporta comunque un sovratempo per la creazione-cancellazione del collegamentoSaluti
Ospite drei Inserita: 21 febbraio 2006 Segnala Inserita: 21 febbraio 2006 Il 300 fa da ponte tra la rete pc <-> 200 e la rete profibus dp degli inverter..La comunicazione viene chiusa tutte le volte perchè altrimenti mi rimane occupata da alcuni nodi, ed altri non non riescono a comunicare. Comunque ho telefonato all'assistenza Siemens ed un loro tecnico che questa "velocità" è normale. Ti risulta?Ciao e grazie.
Gabriele Corrieri Inserita: 21 febbraio 2006 Segnala Inserita: 21 febbraio 2006 Ciaoquanto è la frequenza di scansione dei dati su S7-200? (ossia, ogni quanti ms interroghi lo stesso S7-200)Ciao
Ospite drei Inserita: 21 febbraio 2006 Segnala Inserita: 21 febbraio 2006 (modificato) Quando finisce lo scambio dati con un 200 (che sia in lettura od in scrittura) ne inizia un'altro. La fine della comunicazione mi viene data del flag di delle funzioni X_PUT X_GET. Ogni volta che finisce una comunicazione incremento un indice che mi permette di saltare alla prossima funzione di comunicazione.Ciao, Andrea Modificato: 21 febbraio 2006 da drei
Gabriele Corrieri Inserita: 21 febbraio 2006 Segnala Inserita: 21 febbraio 2006 Ciao AndreaQuando finisce lo scambio dati con un 200 (che sia in lettura od in scrittura) ne inizia un'altro.La fine della comunicazione mi viene data del flag di delle funzioni X_PUT X_GET. Ogni volta che finisce una comunicazione incremento un indice che mi permette di saltare alla prossima funzione di comunicazione.spero che tu capisca che hai detto poco o niente ... il mio scopo è di capire ogni quanto tempo riesci a rileggere o riscrivere il 200.Hai la rete con 9 S7-200, parti icon l primo XGET, poi XPUT .... nono XGET, nono XPUT, quando ritorni a leggere e scrivere il primo S7-200 quansi mS sono passati?Altro discorso ... la tua rete mi pare un po' affollata, ci sono 11 dispositivi, di cui 2 master (PC e S7-300) controlla che gli indirizzi siano contigui senza buchi, lascia solo 0,1 e 2 liberi e parti dal 3 fino al termine dei nodi, controlla che gli HSA (high station address sia al valore prossimo al numero massimo di indirizzo (13) in tutti i device), controlla ogni quanto interviene il PC di supervisione in rete, se interviene spesso (leggendo dati che non necessitano di letture rapide) ruba banda ad altri pacchetti, spero che tu conduca le prove senza PG online in quanto saresti il terzo master di rete e rallenteresti la rete e non poco, da ultimo prova a vedere il tempo di reazione della CPU S7-300, ossia provando a lavorare con i comandi dagli I/O locali quanto tempo impiega ad azionare gli inverters.Ciao
Ospite drei Inserita: 22 febbraio 2006 Segnala Inserita: 22 febbraio 2006 (modificato) Hai ragione, ti chiedo scusa. Allego la sorgente del blocco che gestisce la comunicazione in modo da rendere più chiaro il funzionamento del programma:FUNCTION "Write_Read" : VOID TITLE = VERSION : 0.1 VAR_TEMP Init_Get : BOOL; END_VAR BEGIN NETWORK TITLE = //Interrogazione, quale SFC à attiva al momento? // ID13 L MW 50; //SFC X_GET con indirizzo 16 è attiva? L 1; ==I ; SPB m001; //Salto a SFC X_GET L MW 50; //SFC X_PUT con indirizzo 16 è attiva? L 2; ==I ; SPB m002; //Salto a SFC X_PUT L MW 50; //SFC X_ABORT con indirizzo 16 è attiva? L 3; ==I ; SPB m003; //Salto a SFC X_ABORT // ID15 L MW 50; //SFC X_GET con indirizzo 16 è attiva? L 7; ==I ; SPB m007; //Salto a SFC X_GET L MW 50; //SFC X_PUT con indirizzo 16 è attiva? L 8; ==I ; SPB m008; //Salto a SFC X_PUT L MW 50; //SFC X_ABORT con indirizzo 16 è attiva? L 9; ==I ; SPB m009; //Salto a SFC X_ABORT //ID16 L MW 50; //SFC X_GET con indirizzo 16 è attiva? L 10; ==I ; SPB m010; //Salto a SFC X_GET L MW 50; //SFC X_PUT con indirizzo 16 è attiva? L 11; ==I ; SPB m011; //Salto a SFC X_PUT L MW 50; //SFC X_ABORT con indirizzo 16 è attiva? L 12; ==I ; SPB m012; //Salto a SFC X_ABORT //ID17 L MW 50; //SFC X_GET con indirizzo 16 è attiva? L 13; ==I ; SPB m013; //Salto a SFC X_GET L MW 50; //SFC X_PUT con indirizzo 16 è attiva? L 14; ==I ; SPB m014; //Salto a SFC X_PUT L MW 50; //SFC X_ABORT con indirizzo 16 è attiva? L 15; ==I ; SPB m015; //Salto a SFC X_ABORT // ID18 L MW 50; //SFC X_GET con indirizzo 16 è attiva? L 16; ==I ; SPB m016; //Salto a SFC X_GET L MW 50; //SFC X_PUT con indirizzo 16 è attiva? L 17; ==I ; SPB m017; //Salto a SFC X_PUT L MW 50; //SFC X_ABORT con indirizzo 16 è attiva? L 18; ==I ; SPB m018; //Salto a SFC X_ABORT BEA ; NETWORK TITLE =Legge i dati dei nodi // ID13 m001: CALL "X_GET" ( REQ := "Dati_ID13".flagStartLettura,// Attiva lettura CONT := FALSE, DEST_ID := W#16#D,// Indirizzo da cui leggere VAR_ADDR := P#DB1.DBX3000.0 BYTE 2,// Puntatore all'area da leggere dal PLC remoto RET_VAL := "Dati_ID13".StatoLettura,// Stato della lettura BUSY := "Dati_ID13".flagStatoLettura,// 1 = Lettura non ancora teminata RD := "Dati_ID13".Letture.RD1_Segnali);//Area in cui scrive i dati letti dal PLC // Esito della lettura U "Dati_ID13".flagStatoLettura; FN M 100.0; SPB m101; BEA ; // ID15 m007: CALL "X_GET" ( REQ := "Dati_ID15".flagStartLettura,// Attiva lettura CONT := FALSE, DEST_ID := W#16#F,// Indirizzo da cui leggere VAR_ADDR := P#DB1.DBX350.0 BYTE 26,// Puntatore all'area da leggere dal PLC remoto RET_VAL := "Dati_ID15".StatoLettura,// Stato della lettura BUSY := "Dati_ID15".flagStatoLettura,// 1 = Lettura non ancora teminata RD := P#DB1.DBX12.0 BYTE 26);//Area in cui scrive i dati letti dal PLC // Esito della lettura U "Dati_ID15".flagStatoLettura; FN M 100.2; SPB m107; BEA ; // ID16 m010: CALL "X_GET" ( REQ := "Dati_ID16".flagStartLettura,// Attiva lettura CONT := FALSE, DEST_ID := W#16#10,// Indirizzo da cui leggere VAR_ADDR := P#DB1.DBX350.0 BYTE 26,// Puntatore all'area da leggere dal PLC remoto RET_VAL := "Dati_ID16".StatoLettura,// Stato della lettura BUSY := "Dati_ID16".flagStatoLettura,// 1 = Lettura non ancora teminata RD := P#DB2.DBX12.0 BYTE 26);//Area in cui scrive i dati letti dal PLC // Esito della lettura U "Dati_ID16".flagStatoLettura; FN M 100.4; SPB m110; //Salto all'incremento del merker di comunicazione BEA ; // ID17 m013: CALL "X_GET" ( REQ := "Dati_ID17".flagStartLettura,// Attiva lettura CONT := FALSE, DEST_ID := W#16#11,// Indirizzo da cui leggere VAR_ADDR := P#DB1.DBX320.0 BYTE 12,// Puntatore all'area da leggere dal PLC remoto RET_VAL := "Dati_ID17".StatoLettura,// 1 = Lettura non ancora teminata BUSY := "Dati_ID17".flagStatoLettura,// Stato della lettura RD := P#DB3.DBX12.0 BYTE 12);//Area in cui scrive i dati letti dal PLC // Esito della lettura U "Dati_ID17".flagStatoLettura; FN M 100.6; SPB m113; BEA ; // ID18 m016: CALL "X_GET" ( REQ := "Dati_ID18".flagStartLettura,// Attiva lettura CONT := FALSE, DEST_ID := W#16#12,// Indirizzo da cui leggere VAR_ADDR := P#DB1.DBX320.0 BYTE 12,// Puntatore all'area da leggere dal PLC remoto RET_VAL := "Dati_ID18".StatoLettura,// Stato della lettura BUSY := "Dati_ID18".flagStatoLettura,// 1 = Lettura non ancora teminata RD := P#DB4.DBX12.0 BYTE 12);//Area in cui scrive i dati letti dal PLC // Esito della lettura U "Dati_ID18".flagStatoLettura; FN M 101.0; SPB m116; BEA ; NETWORK TITLE =Scrive i dati nei nodi // ID13 m002: CALL "X_PUT" ( REQ := "Dati_ID13".flagStartScrittura,// Attiva scrittura CONT := FALSE, DEST_ID := W#16#12,// Indirizzo in cui scrivere VAR_ADDR := P#DB1.DBX3010.0 BYTE 4,// Puntatore all'area da scrivere dal PLC remoto (VB3010 per 2 Words) SD := P#DB5.DBX64.0 BYTE 4,// Area in cui legge i dati da scrivere RET_VAL := "Dati_ID13".StatoScrittura,// Stato della scrittura BUSY := "Dati_ID13".flagStatoScrittura);// 1 = scrittura non ancora teminata U "Dati_ID13".flagStatoScrittura; FN M 100.1; SPB m102; BEA ; // ID15 m008: CALL "X_PUT" ( REQ := "Dati_ID15".flagStartScrittura,// Attiva scrittura CONT := FALSE, DEST_ID := W#16#F,// Indirizzo in cui scrivere VAR_ADDR := P#DB1.DBX300.0 BYTE 24,// Puntatore all'area da scrivere dal PLC remoto SD := P#DB1.DBX64.0 BYTE 24,// Area in cui legge i dati da scrivere RET_VAL := "Dati_ID15".StatoScrittura,// Stato della scrittura BUSY := "Dati_ID15".flagStatoScrittura);// 1 = scrittura teminata U "Dati_ID15".flagStatoScrittura; FN M 100.3; SPB m108; BEA ; // ID16 m011: CALL "X_PUT" ( REQ := "Dati_ID16".flagStartScrittura,// Attiva scrittura CONT := FALSE, DEST_ID := W#16#10,// Indirizzo da cui leggere VAR_ADDR := P#DB1.DBX300.0 BYTE 24,// Puntatore all'area da scrivere dal PLC remoto (VB300 per 4 Words) SD := P#DB2.DBX64.0 BYTE 24,// Area in cui legge i dati da scrivere RET_VAL := "Dati_ID16".StatoScrittura,// Stato della scrittura BUSY := "Dati_ID16".flagStatoScrittura);// 1 = scrittura non ancora teminata U "Dati_ID16".flagStatoScrittura; FN M 100.5; // S M 150.2 // Fine comunicazione con indirizzo 16 SPB m111; BEA ; // ID17 m014: CALL "X_PUT" ( REQ := "Dati_ID17".flagStartScrittura,// Attiva scrittura CONT := FALSE, DEST_ID := W#16#11,// Indirizzo in cui scrivere VAR_ADDR := P#DB1.DBX300.0 BYTE 10,// Puntatore all'area da scrivere dal PLC remoto (VB300 per 4 Words) SD := P#DB3.DBX64.0 BYTE 10,// Area in cui legge i dati da scrivere RET_VAL := "Dati_ID17".StatoScrittura,// Stato della scrittura BUSY := "Dati_ID17".flagStatoScrittura);// 0 = scrittura teminata U "Dati_ID17".flagStatoScrittura; FN M 100.7; SPB m114; BEA ; // ID18 m017: CALL "X_PUT" ( REQ := "Dati_ID18".flagStartScrittura,// Attiva scrittura CONT := FALSE, DEST_ID := W#16#12,// Indirizzo in cui scrivere VAR_ADDR := P#DB1.DBX300.0 BYTE 10,// Puntatore all'area da scrivere dal PLC remoto (VB300 per 4 Words) SD := P#DB4.DBX64.0 BYTE 10,// Area in cui legge i dati da scrivere RET_VAL := "Dati_ID18".StatoScrittura,// Stato della scrittura BUSY := "Dati_ID18".flagStatoScrittura);// 1 = scrittura non ancora teminata U "Dati_ID18".flagStatoScrittura; FN M 101.1; SPB m117; BEA ; NETWORK TITLE =Abort delle comunicazioni // Chiude la comunicazione con indirizzo 13 m003: CALL "X_ABORT" ( REQ := "Dati_ID13".flagStartScrittura, DEST_ID := W#16#D, RET_VAL := MW 200, BUSY := M 110.0); // Finito abort indirizzo 13 UN M 110.0; SPB m103; BEA ; // Chiude la comunicazione con indirizzo 15 m009: CALL "X_ABORT" ( REQ := "Dati_ID15".flagStartScrittura, DEST_ID := W#16#F, RET_VAL := MW 202, BUSY := M 110.1); UN M 110.1; SPB m109; BEA ; // Chiude la comunicazione con indirizzo 16 m012: CALL "X_ABORT" ( REQ := "Dati_ID16".flagStartScrittura, DEST_ID := W#16#10, RET_VAL := MW 204, BUSY := M 110.2); UN M 110.2; SPB m112; BEA ; // Chiude la comunicazione con indirizzo 17 m015: CALL "X_ABORT" ( REQ := "Dati_ID17".flagStartScrittura, DEST_ID := W#16#11, RET_VAL := MW 206, BUSY := M 110.3); UN M 110.3; SPB m115; BEA ; // Chiude la comunicazione con indirizzo 18 m018: CALL "X_ABORT" ( REQ := "Dati_ID18".flagStartScrittura, DEST_ID := W#16#12, RET_VAL := MW 208, BUSY := M 110.4); // Finito abort indirizzo 18 UN M 110.4; SPB m118; BEA ; NETWORK TITLE =Incrementa puntatore per comunicazione m101: L 2; //Incremento durante l'elaborazione di X_GET T MW 50; BEA ; m102: L 3; //Incremento durante l'elaborazione di X_PUT T MW 50; BEA ; m103: L 7; T MW 50; //Incremento durante l'elaborazione di X_ABORT BEA ; m107: L 8; //Incremento durante l'elaborazione di X_GET T MW 50; BEA ; m108: L 9; //Incremento durante l'elaborazione di X_PUT T MW 50; BEA ; m109: L 10; T MW 50; //Incremento durante l'elaborazione di X_ABORT BEA ; m110: L 11; //Incremento durante l'elaborazione di X_GET T MW 50; BEA ; m111: L 12; //Incremento durante l'elaborazione di X_PUT T MW 50; BEA ; m112: L 13; T MW 50; //Incremento durante l'elaborazione di X_ABORT BEA ; m113: L 14; //Incremento durante l'elaborazione di X_GET T MW 50; BEA ; m114: L 15; //Incremento durante l'elaborazione di X_PUT T MW 50; BEA ; m115: L 16; T MW 50; //Incremento durante l'elaborazione di X_ABORT BEA ; m116: L 17; //Incremento durante l'elaborazione di X_GET T MW 50; BEA ; m117: L 18; //Incremento durante l'elaborazione di X_PUT T MW 50; BEA ; m118: L 1; // Da abilitare in cantiere //m118: L 7 // Da togliere in cantiere T MW 50; //Incremento durante l'elaborazione di X_ABORT BEA ; END_FUNCTIONI vari flag tipo "Dati_ID13".flagStartLettura", o "Dati_ID17".flagStartLettura" sono sempre ad ON. Le funzioni di Abort in realtà non si attivano mai (il flag di funzionamento rimane sempre ad OFF) quindi esco da quella parte di codice senza aspettare la conclusione del suo "lavoro".I 200 in rete hanno degli indirizzi che vanno dal 10 al 20 (compresi alcuni che verranno montati in futuro), l'HSA è imposato al valore di default , ma se serve lo metto a 21. Le prove le ho fatte sia con il PG attaccato che senza PG, da quando lancio un comando per un inverter a quando questo lo riceve passa un tempo variabile che comunque non supera 2 - 2,5 secondi.Il PC di supervisione affolla non poco la rete perchè deve fare delle letture continue di varie aree da tutti i plc in rete per effettuare visualizzazioni e letture di eventuali allarmi.Grazie mille, ciao. Modificato: 22 febbraio 2006 da drei
Gabriele Corrieri Inserita: 22 febbraio 2006 Segnala Inserita: 22 febbraio 2006 Ciaobeh ... cidenti ... con 150 byte (se non ho perso i conti) scambiati di continuo più la supervisione che scassa l'anima ... 2 o 2,5 secondi credo che ci stiano dentro.Le migliorie non è che si possono inventare su due piedi: o limi tutto il limabile sui dati scambiati, come quantità intendo, come frequenze di scambio le devi fare "rolling" altrimenti peggiora ancora, oppure se hai le cpu bi-porta, ti appoggi a quelle, oppure terza chance è di montare un EM277 su ogni cpu S7-200, e a quel punto saranno anche loro slaves profibus, a quel punto tiri la rete PB anche a 12mbit e leggi gli slaves 200 e scrivi gli inverter e viceversa tutto solo sul 300, che bontà sua, dovrebbe reggere lo sforzo, consentendoti tempi di comando e feedback molto più veloci.Ciao
Ospite drei Inserita: 24 febbraio 2006 Segnala Inserita: 24 febbraio 2006 E pensa che ci devo infilare alri 3 200 con almento 30 byte...Solo per curiosità, una rete come questa per quale quantità di dati viene usata normalmente?Grazie mille per i suggerimenti, ciao.
Gabriele Corrieri Inserita: 24 febbraio 2006 Segnala Inserita: 24 febbraio 2006 Ciao30 byte cadauno? Cidenti, 240byte Non è che c'è un numero di unità o di byte, è sempre in relazione a quello che si vuole ottenere, in un processo lento, 2 o anche 5 secondi possono essere trascurabili, in un processo veloce si guarda anche ai millisecondi, e in secondo luogo è in relazione alla rete com'è strutturata, un master solo sicuramente fa meno fracasso di due che si contendono il bus, un master che legge sporadicamente fa meno fracasso di uno che legge a ripetizione.Se comunque quando avrai la rete al completo vorrai segnalare la soluzione adottata in modo da permettere anche ad altri una valutazione sui limiti e le possibili soluzioni.Ciao
irpick Inserita: 24 febbraio 2006 Segnala Inserita: 24 febbraio 2006 Non sarebbe meglio ripensare il tutto?
Ospite drei Inserita: 9 marzo 2006 Segnala Inserita: 9 marzo 2006 (modificato) Sarebbe sicuramente meglio riprogettare tutto ma non è possibile. Quando ho saputo che tipo di rete era stata progettata ormai avevano già comprato tutto e montato 2 quadri. Comunque ci ho lavorato un po' e snellito la rete di un 30% dei byte che usavo. Ora non ho tutto i plc per provare (sono gia stati quasi tutti mandati in cantiere) ma dovrei aver guadagnato qualcosa in termini di velocità. Modificato: 9 marzo 2006 da drei
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora