richard duval Inserito: 17 luglio 2024 Segnala Inserito: 17 luglio 2024 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.
drn5 Inserita: 17 luglio 2024 Segnala Inserita: 17 luglio 2024 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.
dina_supertramp Inserita: 17 luglio 2024 Segnala Inserita: 17 luglio 2024 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.
richard duval Inserita: 17 luglio 2024 Autore Segnala Inserita: 17 luglio 2024 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;
drn5 Inserita: 17 luglio 2024 Segnala Inserita: 17 luglio 2024 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.
batta Inserita: 17 luglio 2024 Segnala Inserita: 17 luglio 2024 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.
richard duval Inserita: 18 luglio 2024 Autore Segnala Inserita: 18 luglio 2024 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?
dina_supertramp Inserita: 18 luglio 2024 Segnala Inserita: 18 luglio 2024 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...
richard duval Inserita: 18 luglio 2024 Autore Segnala Inserita: 18 luglio 2024 una db è ottimizzata e l'altra no
dina_supertramp Inserita: 18 luglio 2024 Segnala Inserita: 18 luglio 2024 (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: 18 luglio 2024 da dina_supertramp
drn5 Inserita: 18 luglio 2024 Segnala Inserita: 18 luglio 2024 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.
dina_supertramp Inserita: 18 luglio 2024 Segnala Inserita: 18 luglio 2024 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 !
batta Inserita: 18 luglio 2024 Segnala Inserita: 18 luglio 2024 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.
drn5 Inserita: 18 luglio 2024 Segnala Inserita: 18 luglio 2024 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.
richard duval Inserita: 16 agosto 2024 Autore Segnala Inserita: 16 agosto 2024 Salve a tutti, mi ero dimenticato di aggiornare su questo mio problema sulle ritentivi. alla fine mi era un problema di PLC guasto ciononostante lo portavo in esecuzione. quello che voglio dire è che mantenendo il programma come era scritto e cambiando il PLC, mi funzionava tutto. grazie,
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