Vai al contenuto
PLC Forum


Calcolo del multiplo


stefano_PLC

Messaggi consigliati

Qualcuno conosce come calcolare in maniera automatica il multiplo di un numero? Esiste già questa funzione o qualcuno sa come crearle grazie.

Link al commento
Condividi su altri siti


Allora gestisco un azionamento rotativo e ogni volta che mi muovo mi salvo la posizione reale dell azionamento in una variabile, quando rilevo una differenza di posizionamento tra la variabile e la posizione reale che dovevo raggiungere, devo muoverla per farle raggiungere il primo multiplo successivo di 168 più vicino in base al suo valore.

esempio la variabile ha il valore 300 e doveva terminare il suo posizionamento al valore 336

come faccio a calcolare in maniera automatica il multiplo in base al valore della variabile?

Link al commento
Condividi su altri siti

Fai una divisione tra la posizione è 168. Arrotondi all'intero successivo, oppure tronchi il float all'integer più vicino e aggiungi 1, e poi moltiplichi per 168.

Ad esempio 278/168=1,65

A questo punto

a)tronchi i decimali e aggiungi 1

oppure

b) arrotondi all'intero successivo se hai la libreria matematica che te lo fa

Infine moltiplichi per 168

Link al commento
Condividi su altri siti

Come fare il multiplo di 168 avevo trovato un altra soluzione ogni volta che effettuo un moverelative per muovere il azionamento incremento di 1 un contatore, quindi 168 per quante volte ho mosso conosco il mio multiplo visto che un corretto funzionamento deve far coincidere variabile e multiplo, il problema maggiore è che il sensore dell' azionamento arriva massimo a contare a 4096° quindi il problema sorge da questo punto PERCHE' IL 24 MULTIPLO DI 168 E' 4032 quindi la 25 movimentazione avrà il reset del contatore dell' azionamento....ME NE STO ANDANDO NEL PANICO E NON RIESCO MANCO A SPIEGARE BENE IL PROBLEMA 

Link al commento
Condividi su altri siti

3 minuti fa, stefano_PLC ha scritto:

o arriva massimo a contare a 4096°

 

Devi gestire il trabocco del contatore.

 

Per prima cosa non fare un conteggio ed una moltiplicazione ma, ad ogni incremento sommi 168 al valore precedente.

Ad ogni lettura memorizzi il valore del contatore.

Se la lettura seguente è maggiore della vecchia la memorizzi senza altra azione.

Se invece è minore verifichi che la differenza sia > 256, se è maggiore hai traboccato; memorizzi la nuova quota e sottrai 4096 al tua somma.

 

9 minuti fa, stefano_PLC ha scritto:

.ME NE STO ANDANDO NEL PANICO E NON RIESCO MANCO A SPIEGARE BENE IL PROBLEMA 

 

Calma e gesso, altrimenti si annega nel classico bicchiere d'acqua; inoltre non usare le maiuscole per enfatizzare; scrivere a tutte maiuscole equivale a strillare, e questo è poco cortese nei confronti degli altri. Usa invece il grassetto o il sottolineato, ci sono i tasti in alto nella finestra di editing.

Link al commento
Condividi su altri siti

Stai usando interi o floating?

Comunque se ho capito bene dovresti fare:

Valore1=int (variabile / 168)

valore 2 = valore1 + 1

valore3 = valore2 * 168

valorefinale= valore3 - valore1

 

Ti ripeto se ho capito bene, non sei stato molto chiaro

 

Link al commento
Condividi su altri siti

3 ore fa, stefano_PLC ha scritto:

Allora gestisco un azionamento rotativo e ogni volta che mi muovo mi salvo la posizione reale dell azionamento in una variabile, quando rilevo una differenza di posizionamento tra la variabile e la posizione reale che dovevo raggiungere, devo muoverla per farle raggiungere il primo multiplo successivo di 168 più vicino in base al suo valore.

esempio la variabile ha il valore 300 e doveva terminare il suo posizionamento al valore 336

come faccio a calcolare in maniera automatica il multiplo in base al valore della variabile?

Ciao Stefano,

credo che, a parte la verifica dovuta (immagino a meno di un delta), io mi sarei fatta un'altra domanda... perchè non raggiunge la posizione di comando?!?

 

Per rispondere, invece, al tuo quesito avrei proceduto più o meno così

 

IF Pos_Obiettivo<Pos_Reale (a meno di un delta di posizionameno)

   {

     Temp=Round(Pos_Reale/168);

     Temp=Temp+1;

    Pos_Obiettivo=168*Temp;

}

Modificato: da dperla
Link al commento
Condividi su altri siti

2 ore fa, stefano_PLC ha scritto:

Come fare il multiplo di 168 avevo trovato un altra soluzione ogni volta che effettuo un moverelative per muovere il azionamento incremento di 1 un contatore, quindi 168 per quante volte ho mosso conosco il mio multiplo visto che un corretto funzionamento deve far coincidere variabile e multiplo, il problema maggiore è che il sensore dell' azionamento arriva massimo a contare a 4096°

Mi pare che sia il seguito di un'altra discussione.
Hai un asse rotante. Nell'oggetto tecnologico, devi attivare la funzione "modulo" e impostare il modulo a 360°.
Non arriverai mai a 4096. Il conteggio riparte da zero quando supera 359,999°.
Poi, con la funzione MC_MoveAbsolute imposti la quota di destinazione e decidi se la destinazione deve essere raggiunta andando avanti, indietro, o col percorso più breve.
Con MC_MoveRelative imposti di quanto ti devi spostare dalla posizione attuale, e in che direzione.
All'asse gli puoi dire di fare anche un milione di gradi, e li farà, fermandosi nella posizione corretta, senza bisogno di gestire overflow di conteggi. Fa tutto da solo.
 

Link al commento
Condividi su altri siti

grazie a tutti per le varie soluzioni. Cercherò di studiarle e capire bene come comportarmi grazie mille

Modificato: da stefano_PLC
Link al commento
Condividi su altri siti

17 ore fa, batta ha scritto:

Hai un asse rotante. Nell'oggetto tecnologico, devi attivare la funzione "modulo" e impostare il modulo a 360°.

 se imposto il modulo a 168° ogni movimentazione di valore 168° mi conterà come  un giro?  Quindi se effettuo una movimentazione di 168° verrà rapportata con il valore del modulo (168°) o realmente si muoverà sempre nella stessa maniera come se a modulo avessi impostato 360°?

intendo quantitivamente si muoverà degli stessi gradi ?

Modificato: da stefano_PLC
Link al commento
Condividi su altri siti

17 ore fa, batta ha scritto:

All'asse gli puoi dire di fare anche un milione di gradi, e li farà, fermandosi nella posizione corretta, senza bisogno di gestire overflow di conteggi. Fa tutto da solo.
 

Voglio effettuare queste verifiche perchè in caso di emergenza il freno dell'azionamento si dasabilita e quindi un operatore distratto potrebbe urtarlo e quindi si rischierebbe che nel successivo ciclo si blocchi tutto, quindi effettuo un controllo che mi confronti la posizione dove si è fermato dopo ogni movimento con la posizione al rientro che nella normalità dovrebbero combaciare perfettamente se cosi non fosse in base hai gradi di distacco o alla presenza pallet effettuerò varie soluzioni.

Link al commento
Condividi su altri siti

18 ore fa, dperla ha scritto:

 

IF Pos_Obiettivo<Pos_Reale (a meno di un delta di posizionameno)

   {

     Temp=Round(Pos_Reale/168);

     Temp=Temp+1;

    Pos_Obiettivo=168*Temp;

}

Grazie dell' aiuto ma non so neanche cosa stia scritto non conosco questa tipologia di linguaggio

Link al commento
Condividi su altri siti

2 ore fa, stefano_PLC ha scritto:

se imposto il modulo a 168° ogni movimentazione di valore 168° mi conterà come  un giro?

Non ho capito cosa intendi.
Il movimento reale dell'asse dipende da come hai configurato la meccanica, non da cosa imposti come modulo. Io ho ipotizzato un modulo di 360° perché, per un asse rotante, è la soluzione più frequente. Se il tuo ciclo è di 168°, puoi impostare un modulo di 168°. Non ho ancora capito bene cosa devi fare, quindi non ti so dire se questa è la soluzione migliore.
Il modulo, tanto per chiarire, non è prerogativa degli assi rotanti, lo puoi applicare anche ad un asse lineare. Per esempio, un tappeto che deve fare passi sempre uguali, o un trasportatore a facchini: potresti impostare il modulo pari al passo.

Link al commento
Condividi su altri siti

scusa per il ritardo nella risposta ma volevo impostare il modulo a 168 in modo tale che ogni volta che l azionamento effettua una rotazione di 168 mi conti un giro cosi facendo se ogni volta sto a 168 imposto quel punto come home senno lo compenso e lo imposto come home, dato che se la macchina va in avaria l azionamento perde il freno e si puo ruotare a mano per evitare di farlo lavorare in condizioni errate. Solamente a questo mi serviva capire se e possibile vincolare un giro anzi che 360 a 168

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