biondo Inserito: 17 settembre 2010 Segnala Inserito: 17 settembre 2010 Salve a tutti, sono alle prese con un semplice calcolo (semplice....sembra una parola grossa !!!) di percentuale su un vecchio plc CPM2A.Ho un numero totale di pezzi DM0 e DM01 (2wd BCD)Ho un DM10 pezzi scarto totali (1 wd BCD)devo eseguire un calcolo BCD per avere la percentuale di scartiquindi (scarti*100)/tot.pezzi.Il problema è che in BCD sia con moltiplicazione che divisione ottengo solo un numero intero e invece il cliente vorrebbe visualizzare anche i decimaliper esempio scarti = 54 tot.pezzi = 127 % (54*100)/127 = 42,51 io riesco solo a visualizzare 42 con resto 66 !!che istruzioni devo usare ? e se i pezzi tot superano #9999 come viene gestito ?Avete qualche suggerimento dall'alto della Vs. esperienza con il BCD ??Grazie infinite !!!!!!!!!
amed Inserita: 17 settembre 2010 Segnala Inserita: 17 settembre 2010 Il tuo plc non prevede l'utilizzo dei numeri in virgola mobile, quindi mi sembra che ci sia solo una soluzione (potresti anche far fare le operazioni al videoterminale se c'è).Se vuoi anche i centesimi moltiplichi per 100 il contenuto della doppia word DM0-DM1 e della word Dm10, fai i calcoli e il risultato è in centesimi. In questo caso in valore massimo che puoi scrivere nella DM0 e DM1 da 99999999 diventa 999999.Se vuoi solo i decimi moltiplichi per 10 il contenuto della doppia word DM0-DM1 e della word Dm10, fai i calcoli e il risultato è in decimi. In questo caso in valore massimo che puoi scrivere nella DM0 e DM1 da 99999999 diventa 9999999.Ciao
biondo Inserita: 17 settembre 2010 Autore Segnala Inserita: 17 settembre 2010 il mio problema è che moltiplicando con numeri alti, mi trovo come risultato ,per esempio con in DM20 #5 e e nel sucessivo DM21 #4000 ......per via della moltiplicazione BCD , come faccio poi a dividere questo risultato per i pezzi totali ?come istruzione ho solamente DIV .......come devo giostrarmi con quoziente e resto ??Grazie
amed Inserita: 17 settembre 2010 Segnala Inserita: 17 settembre 2010 devi usare MULL (moltiplicazione tra doppi canali:32 bit) e DIVL (divisione tra doppi canali: 32 bit). Negli operandi si mette solo la prima DM (M=, DM10,..)Nel doppio canale DM0-1 hai i pezzi prodotti), In DM10-11 i pezzi scartati.Con un bit di 1°ciclo e 2 MOW metti #100 in DM2 e #0000 in Dm03. Nel doppio canale DM2-3 hai la costante #100 da moltiplicare per DM0-1 DM10-1.Dopo con MULL e DIVL calcola i valore percentuale che è espresso in centesimi. Non ti serve altro. Ciao.
amed Inserita: 17 settembre 2010 Segnala Inserita: 17 settembre 2010 Dimenticavo. Prima che il contenuto di DM0-1 e DM10-11 diventi proppo alto bisogna azzerarne il contenuto. Ciao
biondo Inserita: 17 settembre 2010 Autore Segnala Inserita: 17 settembre 2010 Grazie Amed ma purtroppo il CPM2A non supporta le operazioni in doppia word ha solo il MUL (moltiplicazione 1 wd 16 bit in BCD) e il DIV divisione 1 wd 16 bit in BCD....... quindi devo trovare un qualche trucco per moltiplicare 2 mie 2 wd dove ho una parte piu' significativa e una meno significativa..... Qualche suggerimento ?
amed Inserita: 19 settembre 2010 Segnala Inserita: 19 settembre 2010 Secondo ti stai sbagliando di grosso. Davatia a mec'è un CPM2A che mi conferma che ti sbagli. Uso un CX-Programmer abbastanza recente (Ver 7.2). Ho fatto un programma di prova e funziona. Per trovare le operazioni matematiche "lunghe" in BDC devi fare: trova istruzioni > istruzioni matematiche > Matematica BCD.Ciao
biondo Inserita: 20 settembre 2010 Autore Segnala Inserita: 20 settembre 2010 Hai ragione....... non usavo i DM come la funzione vuole, non accetta costanti, prima devi caricarle in DM e poi usarli nella funzione.Grazie 10000Ciao
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora