richard duval Inserito: mercoledì alle 13:52 Segnala Share Inserito: mercoledì alle 13:52 Salve a tutti, lavoro da poco con l'ambiente di sviluppo Siemens TIA Portal. sto cercando di realizzare piccolo programma con PLC con CPU della seria 1200 di preciso la 1215C DC/DC/DC, per gestire la presenza o no dei dispositivi sulla rete Profinet del PLC lasciando la scelta di abilitarli da HMI. sto usando la funzione D_ACT_DP di Siemens con mode 2 e 0 per attivazione/disattivazione e lettura dello stato dopo esecuzione del comando. il FB D_ACT_DP richiede un stop and start della CPU dopo ogni cambio di commando, più o meno ho visto che funziona fin tanto che faccio lo stop/Run manualmente. qui le mie preoccupazione: 1- C'è un modo per fare un stop and start della cpu con del codice utente ? (ho dato un occhiata a quello che propone la . di Tia Portal ma non ho trovato niente tranne ( FB STP che porta la CPU in modalità stop), quindi immagino di no, anche perché in Stop il programma smette di funzionare quindi vera impossibile rifare le start con lo stesso codice. accetto suggerimenti per gestire la cosa.) 2- ho pensato gestire la cosa spegnendo e ascendendo di nuovo l'alimentazione, però incontro un problema con le mie memorie ritentive, perdono i loro valori quando ritorna la CPU ritorna sotto tensione. Guadando online diagnostics mi salta fuori l'errore nella foto allegato e non saprei come risolverlo. ringrazio per l'attenzione che porrete al mio problema e sono aperto a suggerimenti. Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: mercoledì alle 14:28 Segnala Share Inserita: mercoledì alle 14:28 Per gestire o meno dei dispositivi profinet basta controllare se gli stessi ti ritornano errore quando li interroghi. L'idea di accendere o spegnere o mandare in stop la cpu non la vedo corretta come approccio. La cpu dovrebbe sempre stare in run, a meno che "spegni" la macchina/impianto a cui appartiene. Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: mercoledì alle 15:56 Segnala Share Inserita: mercoledì alle 15:56 1 ora fa, drn5 ha scritto: Per gestire o meno dei dispositivi profinet basta controllare se gli stessi ti ritornano errore quando li interroghi. L'idea di accendere o spegnere o mandare in stop la cpu non la vedo corretta come approccio. La cpu dovrebbe sempre stare in run, a meno che "spegni" la macchina/impianto a cui appartiene. Condivido quanto dice drn5. Per diagnosticare stazioni profinet c'è la diagnostica di sistema, vedi qui: Application (siemens.com) Inoltre, se usi device Profinet di terze parti, li puoi anche diagnosticare tramite i telegrammi con cui ci parli. Link al commento Condividi su altri siti More sharing options...
richard duval Inserita: mercoledì alle 17:27 Autore Segnala Share Inserita: mercoledì alle 17:27 Grazie per il vostro feedback, i dispositivi sulla rete Profinet funzionano correttamente. il problema è sulla variabile ritentiva che uso per disattivare il dispositivo x sulla mia rete che perde il suo valore dopo che spengo e accendo l'alimentazione finche la ritentiva perde valore, la funzione D_ACT_DP non ha effetto sul dispositivo X che voglio disattivare una parte del codice è la seguente: Aux ENABLE CFI140-37 --> è la mia var ritentiva che viene scritto a HMI (True/False) mi serve che mantenga il suo valore come settato a HMI prima di togliere l'alimentazione se faccio start and stop della CPU dall'ambiente Tia portal il codice funziona corretamente. IF "400- CFI_WEIGHING_DB"."Aux ENABLE CFI140-37" THEN #"Aux mode" := 1; ELSE #"Aux mode" := 2; END_IF; #Return_val := D_ACT_DP(REQ := TRUE, MODE := #"Aux mode", LADDR := "CFI140-37~IODevice", BUSY => #Busy); // read the status of CFI140-37 after enabled/diseabled command #Return_status := D_ACT_DP(REQ := TRUE, MODE := 0, LADDR := "CFI140-37~IODevice", BUSY => #Busy); IF #Return_status = 1 THEN "200- MACHINE COMUNICATION"."Generic I/O CFI140-37 Weigh Cell Present/not present" := TRUE; END_IF; IF #Return_status = 2 THEN "200- MACHINE COMUNICATION"."Generic I/O CFI140-37 Weigh Cell Present/not present":= FALSE; END_IF; Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: mercoledì alle 18:27 Segnala Share Inserita: mercoledì alle 18:27 Una variabile ritentiva non perde valore ! Sempre che ci siano le spunte dove devono esserci . Casomai ci sarà una qualche condizione nel codice del plc o del pannello che alla riaccensione la resetta. Link al commento Condividi su altri siti More sharing options...
batta Inserita: mercoledì alle 19:00 Segnala Share Inserita: mercoledì alle 19:00 Mi associo alle risposte precedenti e torno a ripetere la domanda che era implicita nella risposta di @drn5: perché disabiliti il dispositivo Profinet? Questo si fa solo se quel dispositivo può essere scollegato fisicamente dalla rete, affinché non venga segnalato come errore. È il tuo caso? Sul perché dell'errore di perdita dati ritentivi, difficile dare una risposta senza essere collegati alla CPU. Lavoro con S7-1200/1500 da quando sono nati, e non mi è mai capitato. Una cosa che dovbresti sistemare nel codice, è il richiamo della funzione per leggere lo stato del dispositivo. La funzione D_ACT_DP lavora in modo asincrono, e la sua esecuzione potrebbe richiedere più di un ciclo di OB1. Prima di richiamare la lettura dello stato, dovresti assicurarti che l'elaborazione del precedente richiamo sia stata completata. Link al commento Condividi su altri siti More sharing options...
richard duval Inserita: giovedì alle 09:08 Autore Segnala Share Inserita: giovedì alle 09:08 Si è il mio caso, voglio lasciare la possibilità di disattivare i dispositivi che non potranno essere accessibile fisicamente senza evitando che la CPU vada in errore. ho commentato la parte di codice in cui faccio uso della funzione Asincrono, e ho notato che in realtà sono tutte le mie variabili ritentive che perdono valori dandomi lo stesso problema citato prima nella diagnostica. non è che la CPU possa avere qualche problemi, anche se mi sembra funzionare bene? Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: giovedì alle 09:24 Segnala Share Inserita: giovedì alle 09:24 12 minuti fa, richard duval ha scritto: ho notato che in realtà sono tutte le mie variabili ritentive che perdono valori dandomi lo stesso problema citato prima nella diagnostica. non è che la CPU possa avere qualche problemi, anche se mi sembra funzionare bene? Riesci a postare uno screen delle variabili? Simile a quello postato in precedenza da @drn5 Dove si possa vedere come sono state configurate, è davvero strano che perdano il valore se ritentive... Link al commento Condividi su altri siti More sharing options...
richard duval Inserita: giovedì alle 09:44 Autore Segnala Share Inserita: giovedì alle 09:44 una db è ottimizzata e l'altra no Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: giovedì alle 10:58 Segnala Share Inserita: giovedì alle 10:58 (modificato) DB ottimizzata, accesso simbolico, variabile "Aux ENABLE CFI104-37", è a ritenzione, DEVE ritenere il valore, a prescindere da run/stop, on/off, ecc. Se non ritiene il valore è perchè viene scritta da qualcuno/qualcosa (programma utente, device esterni, ecc.) DB non ottimizzata, accesso assoluto, le variabili sono tutte ritentive, vale quanto detto sopra, devono tenere il valore, se non lo mantengono qualcuno le scrive. (Le DB non ottimizzate, ergo ad accesso assoluto, ergo "old style" hanno la ritenzione sul DB, non sulla variabile, quindi o tutto il DB è ritentivo oppure non lo è) Difference between standard and optimized block access - ID: 67655611 - Industry Support Siemens Modificato: giovedì alle 11:02 da dina_supertramp Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: giovedì alle 11:03 Segnala Share Inserita: giovedì alle 11:03 Quella è l'interfaccia del blocco (FBx) che usi? Per come hai descritto quello che vuoi fare, personalmente io farei un DB in cui mettere quei dati che li dentro sono statici. Poi nella chiamata al FBx gli passerei quelli del DB per il device che interroghi. In InOut. Niente Static dentro FBx. Almeno non quellli che caratterizzano il device richiamato. Sono static nel blocco quindi non ritentivi a livello PLC. Almeno non dopo uno spegnimento cpu. Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: giovedì alle 11:05 Segnala Share Inserita: giovedì alle 11:05 In questo momento, drn5 ha scritto: Niente Static dentro FBx. Almeno non quellli che caratterizzano il device richiamato. Sono static nel blocco quindi non ritentivi a livello PLC. Almeno non dopo uno spegnimento cpu. Non avevo notato fosse un interfaccia di blocco.....you are right @drn5 ! Link al commento Condividi su altri siti More sharing options...
batta Inserita: giovedì alle 11:28 Segnala Share Inserita: giovedì alle 11:28 21 minuti fa, dina_supertramp ha scritto: Se non ritiene il valore è perchè viene scritta da qualcuno/qualcosa (programma utente, device esterni, ecc.) Il problema è che gli esce errore di perdita dati ritentivi (vedi primo post). È sulla causa di questo errore che si deve indagare. In quanto ai dati ritentivi di un DB di istanza, mai avuto problemi. Chi l'ha detto che non si possono avere dati ritentivi nei DB di istanza? Le dichiari ritentive nella FB, e diventano ritentive nel DB di istanza. È una pratica normalissima e corretta. Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: giovedì alle 12:01 Segnala Share Inserita: giovedì alle 12:01 28 minuti fa, batta ha scritto: Chi l'ha detto che non si possono avere dati ritentivi nei DB di istanza giusto.. ho detto una caz..a. Link al commento Condividi su altri siti More sharing options...
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