Vai al contenuto
PLC Forum


Shiftare dati con S-7 1200


luca_82

Messaggi consigliati

Ciao a tutti, mi trovo per la prima volta in un Plc a dover fare dei calcoli e non trovo sulla lista delle istruzioni, parlando del linguaggio Kop quella che mi possa essere utile....In sostanza nell'arco delle 8 ore di produzione di una macchina devo monitorare il tempo  ciclo, quindi una variabile time, senza però sostituire il valore precedente. La mia idea era quella di creare un DB con un array di variabili Time e nel momento in cui devo memorizzare il tempo ciclo con un move copio quel valore sul primo valore dell'Array per poi shiftarlo di una posizione. Così facendo ogni volta che devo memorizzare il tempo ciclo mi posso appoggiare sul primo valore dell'array senza perdere quelli memorizzati in precedenza, trovandomi così tutti i valori corrispondenti alle 8 ore...!! Una volta fatto questo dovrò poi fare la media di tutti i valori per effettuare altre operazioni......

Qualcuno con più esperienza sa dirmi se quello che ho pensato è fattibile e soprattutto risolvibile con il linguaggio Kop? 

stò lavorando su un S 7 1200, quindi non posso usare l'AWL!!
Ringrazio tutti, grazie in anticipo.

Link al commento
Condividi su altri siti


Dunque, quando devi registrare il nuovo dato devi prima fare uno shift di tutti i dati già registrati e poi scrivere il nuovo valore nella prima locazione dell'array. Giusto?

Per farlo in KOP potresti utilizzare l'istruzione FILL (devi usare blocchi "non ottimizzati") e procedere come segue:

- richiami una prima volta FILL per copiare i dati del tuo array dalla locazione 0 fino alla penultima locazione dell'array e li parcheggi in un'area di memoria a tuo piacere.

- richiami una seconda volta FILL per copiare i dati parcheggiati e scriverli nel tuo array a partire dalla locazione 1 fino all'ultima.

- In questo modo hai spostato tutti i dati, e ora puoi scrivere il nuovo dato nella locazione 0.

 

Sempre in KOP potresti anche fare un loop per spostare i dati con un MOVE, ma diventa un po' macchinoso.

La strada, a mio avviso, più semplice? un ciclo FOR in SCL. 

Link al commento
Condividi su altri siti

Innanzitutto Batta grazie di avermi aiutato! Considerando che ogni ciclo pressa è 30 di circa 30 secondi e li devo memorizzare per 8 ore avrei bisogno di un Array di quasi 1000 variabili cerca... Se applico la soluzione che mi hai consigliato in Kop devo replicare due DB ognuno di 1000 variabili, ed uno lo uso solo di appoggio momentaneo, giusto?

Certo l'SCL è un linguaggio strutturato e solitamente ti semplificano la vita, ma lo posso usare per una CPU 12124C con Tia portal V13 SP1 professional?

Perchè se provo a commmutare il linguaggio di programmazione ho solo il Kop ed il Fup, quindi mi viene questo dubbio!!

Semmai potrei usarlo, posso trovare nel sito qualche manuale del linguaggio SCL così almeno vedo come potrei scriverlo?

Grazie di nuovo.

Link al commento
Condividi su altri siti

Con quello che hai puoi usare SCL. Seleziona il linguaggio SCL al momento della creazione del blocco,

Un esempio di shift da 1024 posizioni nel DB di nome "POS" contenente l'oggetto h dichiarato come: Array[0..1023] of Real ( tu userai Time)
 

149b219ab0678ea9d3a779cbe77babcc.jpg

 

 

chiama il blocco su impulso. per far scorrere di un posto, infine metterai il nuovo dato nella posizione zero

Link al commento
Condividi su altri siti

se vuoi usare il KOP c'è anche la funzione Field Write che ti permette di scrivere un determinato valore in un array in funzione di un indice.

c'è anche il Poke Block che ti permette di spostare dati tra DB o all'interno dello stesso DB in funzione di un indice.

Link al commento
Condividi su altri siti

Quote

se vuoi usare il KOP c'è anche la funzione Field Write che ti permette di scrivere un determinato valore in un array in funzione di un indice.

c'è anche il Poke Block che ti permette di spostare dati tra DB o all'interno dello stesso DB in funzione di un indice.

 

Sì, è corretto. Con alcune limitazioni, però.

L'istruzione FIELD_WRITE, a mio avviso, se si lavora con array, non offre nulla di più di una semplice istruzione MOVE alla quale si passano variabili indicizzate (con FIELD_WRITE scrivo l'indice dell'array come parametro della funzione anziché tra parentesi quadre).

 

Più interessante è l'istruzione POKE_BLK, che però si può usare solo in AWL (quindi non per il 1200) e in SCL.

La funzione è comunque molto interessante, perché permette di dichiarare come sorgente e destinazione anche aree sovrapposte, quindi è possibile fare uno SHIFT in un solo passaggio.

A dire il vero, ho provato ho provato a fare la stessa cosa anche con l'istruzione FILL e funziona. Non c'è quindi bisogno di appoggiare i dati ad un altro DB e richiamare due volte FILL per fare uno shift di variabili.

Vedi esempio:

EsempioShiftConFill.jpg

Link al commento
Condividi su altri siti

per usare il poke block in KOP ho creato un fc in SCL che dopo richiamo nel kop quando serve, in ogni caso mi sembra che ci si possa sbizzarrire abbastanza a seconda delle abitudini e conoscenze..

Link al commento
Condividi su altri siti

Quote

per usare il poke block in KOP ho creato un fc in SCL che dopo richiamo nel kop quando serve, in ogni caso mi sembra che ci si possa sbizzarrire abbastanza a seconda delle abitudini e conoscenze..

Sono completamente d'accordo. Le strade per ottenere lo stesso risultato sono varie. Basta scegliere quella che più si adatta al particolare scopo da svolgere e ai propri gusti.

Link al commento
Condividi su altri siti

Grazie a tutti!! Effettivamente si ho molte possibilità.....Considerando che poi una volta scadute le otto ore devo riprendere tutti i dati che ho memorizzato sull'array, sommarli e farne una media credo proprio che cercgerò di capire come funziona l' SCL e cercherò di usarlo. Mi sembra di aver capito che per fare calcoli è più che utile, quindi non posso fare a meno di conoscerlo....!!

Buona giornata a tutti!!!

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