Vai al contenuto
PLC Forum


Contametri


Messaggi consigliati

Inserito:

Buongiorno a tutti,

Sono nuovo del mondo della programmazione s7-200 e sono alle prese con un problemino:

ho la necessità di aggiungere un contametri su una mia macchina sulla variabile VW100 (che poi visualizzerò sul tp177A) devo visualizzare un numero che può variare da 1 a 999999,

ho a disposizione un impulso ogni giro che devo moltiplicare per la circonferenza del mio rullo di traino(generalmente 100mm ma può variare da 70-80-90).

La soluzione che pensavo era:

Quando ho un fronte positivo del mio impulso questo mi incrementa la variabile VW36

moltiplico tramite MUL_I VW36 x VW44 (valore della circonferenza,100)

divido tramite DIV_I per 1000 e ottengo così VW100 che mi da il valore in metri.

Purtroppo mi sfugge qualcosa........ :senzasperanza:

ho provato anche altre varianti ma nella migliore delle ipotesi riesco a contare fino a 3200 circa ,

Ho un po di confusione sui interi,doppi interi o magari dovrei usare qualcosa di diverso ??

RinGrazio in anticipo a chi mi saprà aiutare..

Alberto


Inserita:

Se usi istruzioni su word , e il calcolo e' fatto in millimetri , e la rappresentazione su display deve visualizzare un numero che può variare da 1 a 999999 , e' ovvio che non puoi contare fino a 999999 perche superi il limite per le word .

Usa le doppieword per il calcolo e poi una volta diviso per 1000 (sempre con istruzioni in doppiaword) ottieni i metri che potranno certamente arrivare a 999999 ....

tratto dai manuali siemens :

W (parola) numeri interi : senza segno da 0 a 65535 , con segno da -32768 a +32767

D (doppia parola) numeri interi : senza segno da 0 a 4294967295 , con segno da -2147483648 a +2147483647

Bye

Inserita:

Un chiarimento,

le operazioni di moltiplicazione e divisione le devo fare con i mol_DI e div_DI e anche l'incremento con inc_dw??

ho un po' di confusione al riguardo

La sequenza giusta potrebbe essere:

Quando ho un fronte positivo del mio impulso questo mi incrementa la variabile Vd36

moltiplico tramite MUL_DI Vd36 x Vd44 (valore della circonferenza,100)

divido tramite DIV_DI per 1000 e ottengo così Vd100 che mi da il valore in metri.

Non c'è bisogno di usare i numeri reali vero??

Scusa ma sono alle prime armi e sto imparando....

Grazie dell'aiuto

Inserita:

Io nel PLC farei solo l'incremento su DWORD.

La conversione da mm a metri la farei fare al pannello operatore, abilitando la funzione di scalatura (cambio di scala lineare).

In ogni caso, se proprio vuoi fare la conversione nel PLC, non ha senso prima moltiplicare per 100 e poi dividere per 1000: basta dividere per 10.

Inserita:

Per rispondere ad albyivers devo dire che la risoluzione ottenibile con le doppie parole intere è 1 mm ( puoi impostare 100 o 101 mm ) e visto che imposti la circonferenza in 100 mm , ogni 10 impulsi hai un 1 metro teoricamente , ma se in realtà la circonferenza era 100,9 mm avrai percorso 1 metro e 9 millimetri

--> quasi 1 % di errore massimo ... ma l' 1% su 999999 metri sul tuo touch TP177A ( circa 1000 km :o ) non è poco ....

Puoi anche misurare accuratamente la circonfererenza e approssimare x difetto o eccesso all'intero più vicino .... tutto dipende da quello che in realtà serve

Personalmente io ho a che fare con gente a cui se chiedo un semplice dato mi rispondono :

Ah... , io sò solo che nei tubi passa l'acqua e nei fili la corrente ... di più non sò ...

Per cui le mie finezze nel plc sai dove vanno a finire ?

Certo che per avere una macchina che visualizza sul touch 999999 metri , non risenti molto della crisi economica .... :superlol:

Forse ora capisci a cosa servono gi interi , i doppi interi e i reali ....

Bye

Inserita:

per Zanellatofabio:

ad ogni modo dici che i miei passaggi per ricavare i metri sono corretti?

Quando ho un fronte positivo del mio impulso questo mi incrementa la variabile Vd36

moltiplico tramite MUL_DI Vd36 x Vd44 (valore della circonferenza,100)

divido tramite DIV_DI per 1000 e ottengo così Vd100 che mi da il valore in metri.

So che l'1% è tanto ma diciamo che è una misura molto approssimativa quella che mi chiedono.

Per Batta

Oggi il mio valore di riferimento è 100, domani potrebbe essere 95 o altro, percui penso che sia meglio

far impostare il valore della circonferenza e poi il plc dai suoi calcoli darà il valore richiesto.

(sempre che la mia formula sia corretta?cosa ne dici?)

Saluti e grazie delle risposte

Alby <_<

Inserita:

io sono daccordo con zanellatofabio, non hai una precisione decente cosi facendo, ma se dici che per l applicazione va bene, la formula è corretta, è il sistema con il micro che non è tanto all altezza di ''contare in metri''... in quanto si ha il riferimento solo su un giro ma se il rullo completa il giro fermandosi al 90% il micro non ti incrementa la vd...ma comunque quasi un giro completo è stato compiuto :)

Per le operazioni, non ho capito cosa ti serve sinceramente...se cambi la circonferenza cioe cambia il diametro del rullo sostanzialmente, nella moltiplicazione dell incremento di rivoluzione del micro per la circonferenza, sara sempre un numero intero, a meno che la circonferenza per questioni meccaniche sia es 95,4mm ma se è un intero sempre allora fai la moltiplicazione in doppio intero.

per quanto riguarda poi la divisione diviso 1000 per l equivalenza da mm in m puoi trasformare il risultato della moltiplicazione circonferenza* rivoluzioni da doppio intero in real, poi fai la divisione diviso 1000.0 in real. il risultato lo arrotondi con il box round tanto hai detto che tanta precisione non occorre e lo mandi al touch screen...come doppio intero.

Inserita: (modificato)
Oggi il mio valore di riferimento è 100, domani potrebbe essere 95 o altro, percui penso che sia meglio

In questo caso forse ti conviene fare un calcolo in virgola mobile, piuttosto che una moltiplicazione ed una divisione con doppi interi.

In questo modo avresti la possibilità di impostare qualsiasi circonferenza, e non solo circonferenze intere.

E' vero anche che qualsiasi numero decimale è trasformabile in frazione ma, così facendo, potresti trovarti a dover impostare numeri che (apparentemente) non hanno nessuna attinenza con la conversione (piccola divagazione: anche i numeri periodici sono tutti trasformabili in frazione, con un procedimento molto semplice).

Se il numeratore raggiunge valori elevati, si deve prestare attenzione a non superare, nel calcolo intermedio, il limite massimo della variabile DINT.

Tanto per fare un po' di conti, il valore massimo di una variabile DINT senza segno è 4.294.967.295. Per poter avere come risultato finale 999.999 il divisore della tua operazione non dovrebbe superare il valore di:

4.294.967.295 / 999.999 = 4294.

Nel semplice esempio che segue il divisore è 10000!

Per evitare questo rischio, si dovrebbe fare prima la divisione. Il risultato però verrebbe troncato.

Per continuare con l'esempio di Fabio, se la circonferenza effettiva fosse 100,9mm per lavorare con numeri interi dovresti trasformare 100,9 in 1009/10.

Per la conversione completa il calcolo diventerebbe:

Lunghezza = N_Giri * 1009 / 10 / 1000 ==> Lunghezza = N_Giri * 1009 / 10000

A questo punto, forse diventa più comodo fare i calcoli in virgola mobile, mantenendo solo il conteggio dei giri come DINT, mentre le altre variabili saranno di tipo REAL

Esempio:

- sul fronte di salita incremento il conteggio dei giri (DINT)

- converto da DINT a REAL

- moltiplico * 0,1009 (per restare in tema con l'esempio precedente)

- metto il risultato in una variabile di tipo REAL che andrò a leggere col pannello operatore

Unico limite se lavori con il formato REAL a 32 bit, è che mantiene la precisione dell'ultima cifra solo fino a 16777216 (2^24). Oltre questo limite vedresti un valore approssimato (ma comunque corretto), con incrementi a gradini.

Essendo questo valore ben oltre al limite massimo di cui hai bisogno, non mi farei problemi.

Dimenticavo...

Se lavori con numeri interi di circonferenza, anziché incrementare ogni volta di un giro e poi moltiplicare per la circonferenza, potresti direttamente incrementare del valore della circonferenza ed evitare la moltiplicazione.

Avresti così direttamente un conteggio in mm, da poter leggere direttamente da pannello operatore.

Per visualizzare il valore in metri e non in mm, ti basta fare la scalatura nel pannello operatore. Scalatura che comunque rimarrebbe sempre fissa, non vincolata alla circonferenza effettiva.

Modificato: da batta

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