Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Convertire Una Db Con Dati Bcd In Una Db Dati Interi


Messaggi consigliati

Inserito:

buongiorno,

Ho usato fc 84 e fc 85 per memorizare dei dati di consumo, fc 84 e fc 85 non mi permette di usare numeri interi dunque uso dei dati BCD che vengono memorizati in una DB, pero a me serve vedere questi dati in INT, ho cercato molto ma non ho trovato una soluzione, esite un FC ho qualcosa d'altro per convertire un intera db con dati BCD in una DB con dati in INT ?

Saluti a tutti e buon lavoro


Inserita: (modificato)

Mi servirebbe un chiarimento, perchè se io vado a cercare in Step7 la FC84 o la FC85 mi da per FC84 questo "16 Bit Binary Division" S5 CNVRT e per FC 85 "32 Bit Addition" sempre per S5 CNVRT a conferma di cio ti riporto la nota delle due FC da te indicate:

Questa operazione viene usata solo per convertire un programma S5 esistente in un programma S7 per l'S7-300/400.

Oppure ti riferisci a queste FC

FC85 => Restituisce il primo dato immesso in tabella (FIFO)

FC84 => Aggiungi dati alla tabella (ATT)

Se non fosse così allora le FC le hai create te per tanto non vedo dove sta il problema, oppure spiega meglio da dove sei partito e cosa devi realizzare.

<_<

Modificato: da TravelMen
Inserita:

mi riferisco a fc 85 fifo e a fc 84 att,

in pratica memorizzo ogno giorno il consumo di metano di un forno lo salvo in una db, poi lo trasfrisco con fc 84 e fc85 in un altra db per potere conservare il dato, pero fc 84 e fc 85 non accettano numeri INT prima devo convertirlo in BCD, fino li tutto bene, pero se io voglio vedere il consumo di un certo giorno nella mia db di memoria lo leggo solo in BCD e io vorrei vederlo in INT.

Saluti

Inserita:

Ok mi è chiaro ma se vedo l'aiuto della FC 84 che riporto:

La funzione "Aggiungi dati alla tabella" (ATT) consente di aggiungere il contenuto del parametro DATA nel primo indirizzo disponibile della tabella e di incrementare di uno il numero di dati immessi. La tabella è composta di parole. Questa funzione consente di inserire nelle tabelle dati da utilizzare per le funzioni FIFO e LIFO.

Si parla di "parole" ovvero word ma non trovo scritto che i dati in queste word debbano essere in BCD, forse sei costretto a scrivere in BCD perchè i tuoi dati sono in BCD, se invece ti riferisci alla forma W#16#FFFF si riferisce al fatto che il dato deve essere espresso in hex (esadecimale) ovvero devi definire un area di memoria (o DB) con tutti dati word e non INT.

Per quando poi riguarda la visualizzazione sarai te a decidere se visualizzare il dato sotto forma di numero Hex o dec.

Inserita:

faccio il mio conteggio del cosumo con numero INT, dunque per poter trasferirli con fc 84 fc 85 li converti in BCD, questi dati sono memorizati in una DB come Word

Dunque per potere stamparli, mi sono creato una VAT con tutti dati della mia Db, pero se faccio la visulizzazione in decimale non mi da il valore correto.

Devo dirti anche che non ho molto esperienza di PLC, sono a le prime arme.

Grazie

Inserita: (modificato)

allora secondo me nella funzione che calcola il consumo invece di salvarlo in una variabile dichiarata come INT lo salvi in una variabile definita come word, e poi quando li prelevi dalla FIFO gli appoggi su una variabile INT che poi vai a visualizzare, altrimenti se i dati li vedi attraverso la VAT non ci sono problemi quando inserisci la variabile da monitorare gli dici che te la faccia vedere sotto forma ad interno.

Per tanto la conversione in BCD, secondo me non serve a niente, meglio se ti concentri su valore che vai a visualizzare ovvero attento che una word può contenere un valore interno compreso tra -32767 e 32767 in valore assoluto da 0 a 65535 che in hex coincide va da W#16#0000 a W#16#FFFF.

Altrimenti di crei te la funzione che ti memorizza i dati in una struttura FIFO, se fai una ricerca nel forum l'argomento è stato trattato diverse volte.

Se vuoi maggiori info e aiuto non che da chiedere.

Buon divertimento

Modificato: da TravelMen
Inserita:

OK, intanto ci provo, ci sentiamo piu avanti

comunque tanto grazie per l'aiuto

SAluti

Inserita:

Saluti a tutti

_ per calcollare il mio consumo uso ADD_I (dunque devo usare per forza numeri INT)

_ per memorizare i miei dati in una DB, uso FC84 FC85 (dunque devo usare per forza delle word)

_ dunque devo convertire il mio numero INT

_ nella mia VAT se vado a vedere i dati inferiore a 999 come decimale mi da un valore errato, invece se visualizo i dati superiore a 999 in decimale sono giusti.

?????

forse sono io che faccio un po di casino con i tipi di dati ???

Grazie a tutti

Inserita: (modificato)

Devi per forza utilizzare questi blocchi per fare questo campionamento.

Perche no salvi direttamente i dati come Interi piuttosto.

Magari se ci dici di piu' come funziona questo automatismo, possiamo darti delle idee piu' mirate e semplici.

Modificato: da Savino
Inserita:

buongiorno

uso questi blocchi per potere avere sempre in memoria almeno gli ultimi due mesi di consumo, quando la mia DB e piena questi blocchi mi permette di eliminare il dato piu vecchio inserendo quello nuovo.

Visto che non ho molto esperienza con i plc uso i blocchi siemens, so che si potrebbe creare un blocco ad oc ma non saprei come farlo.

Comunque il programma funziona perfetamente ho solo il problema della visulisazione nella VAT, non riesco a ricavare il dato in INT.

Saluti e grazie

Inserita:
per calcollare il mio consumo uso ADD_I (dunque devo usare per forza numeri INT)

Non è vero che devi utilizzare "per forza" il formato INT.

Puoi risolvere in tre modi:

1) effettui l'operazione di somma in AWL

2) se vuoi proprio usare il KOP, vai in Strumenti --> Impostazioni, seleziona la scheda KOP/FUP e togli il segno di spunta da Controllo tipo di operandi. Ora puoi usare ADD_I anche con variabili dichiarate come WORD.

3) se vuoi mantenere il formato INT per le tue variabili, prima di dare in pasto la variabile alla funzione FC84, la appoggi ad una variabile locale dichiarata come WORD, effettuando un semplice trasferimento.

Esempio:

L DB10.DBW0 (variabile in formato INT)

T #VarAppoggio (variabile locale in formato WORD)

Puoi anche usare in KOP l'istruzione MOVE, che accetta praticamente tutti i formati.

In ogni caso non serve a nulla (anzi, crea solo danno) la conversione in BCD.

Le funzioni FC84-ATT e FC85-FIFO vogliono semplicemente una variabile di tipo WORD, che non significa BCD.

Altra possibilità: creare funzioni analoghe a FC84-FC85 con le caratteristiche a te più idonee. Se sai usare i puntatori, non è difficile.

Inserita:

Adesso mi e tutto un po piu chiaro, domani ci provo, sai non sono esperto di PLC ho molto da impararre

grazie tanto

vi faccio sapere

Inserita:

Tutto Ok, adesso funziona perfetamente,

Grazie a tutti per l'aiuto

Buon lavoro

Inserita:
Tutto Ok, adesso funziona perfetamente,

Potresti dire come hai soluzionato ... potrebbe sempre servire a qualcuno. ;)

Inserita:

Invece di usare INT nel mio conteggio, ho dichiarato le variabile in WORD, dunque tolto la converzione in BCD, e nella mia VAT riesco a leggere i valori in decimale.

Adesso voglio provare a fare un blocco parametrizato perche ho 6 contattori nel mio impianto, io ci provo.

poi si vedra !!!!

Saluti a tutti e di nuovo grazie per l'aiuto

Inserita:
Adesso voglio provare a fare un blocco parametrizato perche ho 6 contattori nel mio impianto, io ci provo.

Infatti secondo me sarebbe la migliore strada da prendere, se riesci a farlo in SCL meglio.

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