Vai al contenuto
PLC Forum


Option Handling & memoria ritentiva


richard duval

Messaggi consigliati

image.thumb.png.fb517f9e8cfa2bf3ca99e9925d1f7260.pngimage.thumb.png.1f09152eee8071e7e02e6b35840e4a1d.png

 

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


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

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

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

Una variabile ritentiva non perde valore ! Sempre che ci siano le spunte dove devono esserci .

 

image.thumb.png.af5802eee64eb6e445bf9f9df41b85e4.png

 

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

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

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

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

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: da dina_supertramp
Link al commento
Condividi su altri siti

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

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

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

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