Jump to content
PLC Forum


stefano_PLC

Calcolo del multiplo

Recommended Posts

stefano_PLC

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

Share this post


Link to post
Share on other sites

Livio Orsini

Spiegati meglio.

Il multiplo di un numero lo si calcola con una moltiplicazione.

Share this post


Link to post
Share on other sites
stefano_PLC

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?

Share this post


Link to post
Share on other sites
pigroplc

giuro che non ho capito una mazza.

Mi viene in mente una moltiplicazione, ma evidentemente l'avresti già pensato te.

 

Share this post


Link to post
Share on other sites
NoNickName

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

Share this post


Link to post
Share on other sites
stefano_PLC

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 

Share this post


Link to post
Share on other sites
Livio Orsini
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.

Share this post


Link to post
Share on other sites
STEU

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

 

Share this post


Link to post
Share on other sites
dperla
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;

}

Edited by dperla

Share this post


Link to post
Share on other sites
batta
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.
 

Share this post


Link to post
Share on other sites
stefano_PLC

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

Edited by stefano_PLC

Share this post


Link to post
Share on other sites
stefano_PLC
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 ?

Edited by stefano_PLC

Share this post


Link to post
Share on other sites
stefano_PLC
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.

Share this post


Link to post
Share on other sites
stefano_PLC
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

Share this post


Link to post
Share on other sites
batta
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.

Share this post


Link to post
Share on other sites
stefano_PLC

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...