Vai al contenuto
PLC Forum


Come poter cancellare il contenuto di una stringa


TravelMen

Messaggi consigliati

15 ore fa, leleviola ha scritto:

quello a cui fai riferimento tu batta non è un FIFO ma la gestione indicizzata di una pila di operandi che non fanno affatto uno scroll di dati ma ne fai l'analisi del dato puntando ogni volta a un operando indicizzandolo

Allora non è un FIFO nemmeno quello delle librerie Siemens. Scaricati la libreria LGF, ci sono tante cosette utili da studiare. Anche il registro FIFO.
Io generalmente non utilizzo la funzione della libreria, ma una mia versione semplificata, che però sfrutta lo stesso principio.
Cio' che conta, è che il primo dato che entra sia poi il primo ad uscire. Perché dovrei farlo per forza inserendo i dati in una pila e con uno scroll di tutti i valori?
Ci sono due indici: uno per il dato che entra ed uno per il dato che esce. Ogni volta che inserisco un dato, incremento l'indice di ingresso e il numero di valori. Ogni volta che estraggo un dato, incremento l'indice di uscita (in realtà è leggermente diverso, ma il concetto è questo). Quando gli indici superano il limite del numero di elementi, ripartono dal primo elemento. Un paio di controlli per verificare la coerenza degli indici, se il regiistrio è vuoto oppure se è pieno, ed è fatta, senza dover, magari, fare lo scroll di mille strutture ad ogni inserimento o ad ogni estrazione di un dato.
Il registro viene riempito in modo circolare, ed in modo circolare viene estratto il dato.

 

2 ore fa, seragno ha scritto:

Si sta andando OT....

Si, siamo OT, ma l'argomento stringa mi pare esaurito.
 

Link al commento
Condividi su altri siti


4 ore fa, batta ha scritto:

Allora non è un FIFO nemmeno quello delle librerie Siemens. Scaricati la libreria LGF, ci sono tante cosette utili da studiare. Anche il registro FIFO.
Io generalmente non utilizzo la funzione della libreria, ma una mia versione semplificata, che però sfrutta lo stesso principio.
Cio' che conta, è che il primo dato che entra sia poi il primo ad uscire. Perché dovrei farlo per forza inserendo i dati in una pila e con uno scroll di tutti i valori?
Ci sono due indici: uno per il dato che entra ed uno per il dato che esce. Ogni volta che inserisco un dato, incremento l'indice di ingresso e il numero di valori. Ogni volta che estraggo un dato, incremento l'indice di uscita (in realtà è leggermente diverso, ma il concetto è questo). Quando gli indici superano il limite del numero di elementi, ripartono dal primo elemento. Un paio di controlli per verificare la coerenza degli indici, se il regiistrio è vuoto oppure se è pieno, ed è fatta, senza dover, magari, fare lo scroll di mille strutture ad ogni inserimento o ad ogni estrazione di un dato.
Il registro viene riempito in modo circolare, ed in modo circolare viene estratto il dato.

 

Si, siamo OT, ma l'argomento stringa mi pare esaurito.
 

Scusami batta ma quello che dici tu non è un FIFO ma una gestione indicizzata di una pila di dati visto che dalla gestione dell'ultimo passi al primo, ti faccio un esempio banale di cosa è un FIFO, tanto per portare un esempio, Si può esemplificare con un dispenser di prodotti in un supermercato, in cui gli articoli vengono introdotti dall'alto ed il cliente li preleva dal basso, permettendo la rotazione di tutti i prodotti; o più semplicemente una serie di persone che disposte in fila indiana attendono di essere servite al bancone di una biglietteria. Questo è un FIFO. Ne ho appena realizzato uno dove un robot preleva da una pila di rotoli di stoffa accumulati in sequenza il rotolo accumulato più in alto, dal basso vengono impilati sempre i nuovi rotoli in arrivo, ogni rotolo ha un codice Qrcode identificativo del rotolo che viene letto ogni volta che il rotolo entra da sotto nella pila di dati, poi ogni volta che il robot preleva il rotolo posto più in alto nella pila di rotoli prelava il Qrcode specifico di quel rotolo perciò ogni Qrcode entra dal basso e esce dall'alto come in un FIFO

Modificato: da leleviola
Link al commento
Condividi su altri siti

4 ore fa, leleviola ha scritto:

Si può esemplificare con un dispenser di prodotti in un supermercato, in cui gli articoli vengono introdotti dall'alto ed il cliente li preleva dal basso

Questa è la rappresentazione più classica di un FIFO, ed è quella che spinge a fare lo scroll di tutti i dati quando si estrae un dato. Se si tratta di pochi dati, il sistema è leggermente più semplice da gestire, e mi può anche stare bene. Se le dimensioni del FIFO diventano considerevoli, non vedo perché dovrei fare lo scroll di migliaia di dati ogni volta che viene estratto un dato. Ripeto, l'unica cosa che conta, per poterlo definire FIFO, è che il primo dato che entra sia il primo ad uscire. FIFO significa questo, e non conta il procedimento per ottenerlo. Per dire, potrei anche inserire il nuovo dato in una posizione casuale. Importante è che si rispetti l'ordine quando il dato viene estratto.
Ti faccio un esempio. Mi occupo abbastanza spesso di impasti, nel settore alimentare. La vasca con il prodotto impastato spesso viene messa a riposare per un certo tempo prima di essere inviata alle spezzatrici. Io gestisco il tutto incrementando il tempo, per ogni vasca, da quando è stato completato l'impasto. Ogni vasca si porta sempre dietro i dati dell'impasto, e questo tempo (che continua ad incrementarsi), anche nel caso vengano effettuati spostamenti di vasche con comandi manuali. Quando prendo la vasca dall'impastatrice, la deposito in una postazione libera qualsiasi. Quando devo prelevare una vasca dopo il tempo di riposo, semplicemente interrogo i tempi, e prelevo la vasca più vecchia. Anche questo è un FIFO. Nessuno dice che il FIFO debba per forza essere una pila di dati.
 

Link al commento
Condividi su altri siti

 

Quote

o più semplicemente una serie di persone che disposte in fila indiana attendono di essere servite al bancone

Non è detto. È un FIFO anche se le persone prendono il biglietto con il numero, e si vanno a sedere, in un posto qualsiasi, in attesa del loro turno. Non è necessario che si dispongano in ordine, e nemmeno che si scambino la sedia ogni volta che un cliente viene servito.

Modificato: da batta
Link al commento
Condividi su altri siti

la tua è una visione indicizzata di un insieme di dati ma ad ogni entrata di nuovo dato devi nuovamente indicizzare la poszione di ogni dato già presente e quindi spostarne al nuovo indice il valore della posizione all'interno della pila di dati, tutto dipende dalla quantità di dati che ogni singolo elemento della pila di dati ha e quindi evitarti lo spostamento di tutti i dati verso l'uscita. Visione indicizzata semplice ma da valutare al contesto in cui si deve lavorare

Link al commento
Condividi su altri siti

Salve,

 

anche se l'argomento stringa come da precedente post può considerarsi esaurito, volevo  solamente intervenire per correggere l'acronimo di LIFO trattato sempre in questa discussione:

 

"LIFO <===> Last In Last Out, che tradotto in italiano standard significa: l'ultimo dato che entra è anche l'ultimo dato che esce. Uno stack o pila o catasta è un classico esempio di LIFO, ad esempio."

 

LIFO = Last In First Out, cioè l'ultimo dato ad entrare, sarà anche il primo ad uscire.

 

Saluti.

Link al commento
Condividi su altri siti

1 ora fa, cagliostro ha scritto:

volevo  solamente intervenire per correggere

 

Hai perfettamente ragione e, vista l'ora in cui ho scritto, non posso nemmeno invocare l'attenuante di un risveglio incompleto. Il diabolico è che nononostante la tua correzione, rileggendo lo scritto, inizialmente non riuscivo a capire il perchè, tanto ero convinto di di aver scritto "...Last In First Out..". Sarà l'alzhaimer incipiente o la demenza senile. 🥴

Link al commento
Condividi su altri siti

9 ore fa, leleviola ha scritto:

ma ad ogni entrata di nuovo dato devi nuovamente indicizzare la poszione di ogni dato già presente

Anche nel FIFO "classico" devi usare un indice per sapere dove inserire il nuovo dato. Indice che verrà incrementato ad ogni inserimento, e decrementato ad ogni estrazione.
L'unica cosa che cambia è l'estrazione del dato che, nel sistema che torno a chiamare "classico", fa riferimento sempre alla stessa locazione e, per mantenere fissa questa locazione, serve lo scroll di tutti i dati. Nell'altro modo, non venggono spostati i dati, ma devo solo gestire un secondo indice per l'estrazione del dato. Non devo "indicizzare la posizione di ogni dato presente", ma solo la locazione che contiene il dato da estrarre. In definitiva, si gestisce un indice in più, ma si evita un inutile scroll che, nel caso di registri lunghi, implica un lavoro oneroso. Si lavora su un registro circolare anziché su una pila. Questa è lìunica differenza.
Che poi, per praticità, in realtà gestisco un indice che mi dice dove inserire il dato (incrementato ad ogni inserimento, e che riparte dal primo elemento se si raggiunge il limite), e un indice che mi dice quanti dati ci sono nel registro (incrementato ad ogni inserimento dato e decrementato ad ogni estrazione). Questo indice risulta comodo per controllare se il registro è vuoto, oppure se è pieno. La locazione dove estrarre il dato sarà semplicemente la differenza tra i due indici.


Fare lo scroll di tutti i dati, se il registro è lungo, e magari composto da strutture complesse, il tempo di esecuzione potrebbe diventare rilevante.
Con i PLC attuali si è persa l'abitudine di ottimizzare il codice. Io stesso, nelle comuni operazioni, non me ne occupo più di tanto, ma quando si deve lavorare su molti dati, la differenza si nota.
Per esempio, tempo fa mi sono trovato a sviluppare una funzione "sort". Tra le varie opzioni, ho optato per il metodo "bubble sort", che non è il più efficienete in assoluto, ma è il più semplice da implementare. Si risolve con due cicli FOR, uno dentro l'altro. All'inizio sono partito confrontando due locazioni adiacenti e scambiando ogni volta i dati tra loro se non erano già nell'ordine corretto. Tutto funzionava. Poi ho dato un'occhiata in Internet, ed ho visto che si poteva fare di meglio: ricercare la locazione col valore inferiore (o superiore, a seconda dell'ordinamento desidetrato), ed effettuare un solo scambio di dati ad ogni cicclo FOR interno. Inutile dire che questo metodo, ad un controllo dei tempi di esecuzione della funzione, si è rivelato più efficiente.


Penso comunque che le nostre due visioni siano oramai chiare.

Link al commento
Condividi su altri siti

batta è chiaro ciò che dici però se devo controllare la pila di dati o l'operatore deve controllare a video la pila di dati l'uso del FIFO classico con lo scoll di dati si rende comunque necessario per semplificare anche la sola visualizzazione di tutta la pila di dati, il fatto che il calcolo faccia perdere tempo il tutto dipende dalla quantità di dati che si deve controllare e comunque il calcolatore sta li apposta a svolgere la sua funzione cioè eseguire lo scroll di dati, comunque batta non è questione di visioni ma di ottimizzazione del sistema in base alle esigenze che si ha, se si ha da fare lo scroll di dati di una pila di Qrcode derivanti dalla gestione di un magazzino di dati di 5 unità è più semplice demandare al calcolatore lo scoll dei dati se invece si ha da fare lo scoll di decine e decine di dati è ovvio che probabilmente sia più utile non fare ogni volta lo scroll dei dati impilati

Modificato: da leleviola
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...