Jump to content
PLC Forum

belarturo

Numeri con la virgola

Recommended Posts

belarturo

Buonasera ringrazio il forum in anticipo x i preziosi aiuti.Ho un plc omron cj1m cpu21.Dovrei contare dei fogli in entrata di una cesoia e contare i fogli in uscita e fin qua tutto bene vorrei fare anche la percentuale del numero di scarti.In breve io cosa faccio come logica conto in ingresso e moltiplico per il numero di tagli e ottengo il numero di strisce totali x taglio,poi da questo risultato sottraggo quelli contati in uscita e ottengo le strisce scartate.poi uso la funzione divisone in virgola mobile f(457) e poi moltiplico x 100 con la funzione f(456).Il mio problema che mi trovo numeri che non coincidono ai calcoli inoltre la cpu é interfacciata con un pannello weintek mt8073ie e sul pannello leggo valori non esatti ho provato anche a settare la il formato numerico del pannello in 32 bcd-bit,

32bit-float,32bit-signed,32bit-unisigned niente grazie 

Link to post
Share on other sites

Ctec

Considera innanzi tutto che i numeri in virgola mobile occupano 32bit, cioè 2 word. Pertanto, quando definisci una variabile in un indirizzo (per esempio D200) devi considerare che occupa due word (D200 e D201), pertanto attenzione alle sovrapposizioni. Poi è bene che tu definisca il tipo giusto alla variabile (REAL) altrimenti rischi che il valore contenuto sia giusto, ma ti viene mostrato invece come DINT o altro.

Per il pannello, per vedere valori in virgola mobile, devi settare la variabile come 32bit-float. Il resto sono altre notazioni che ti darebbero visualizzazioni falsate.

Casomai posta il pezzo di programma che lo analizziamo meglio.

Link to post
Share on other sites
Ctec

Un errore è sicuramente qui:

image.png.e9a44e9318891238712521d915c6bf69.png

Dove hai messo il moltiplicatore 100 in formato binario (#100), che come virgola mobile avrà un valore sballatissimo.

Per indicare una costante float (virgola mobile) devi scriverla con la virgola: +100,0 che informa il compilatore che non è un indirizzo e non è un valore decimale.

Prendete poi l'abitudine a scrivere i programmi in simbolico, non con indirizzi assoluti (quindi assegnate un nome e un tipo). Nel primo caso, il CSprogrammer mostrerà il contenuto della variabile nel formato indicato dal tipo, invece che nel secondo nella notazione generale specificata nel CX (spesso decimale se non addirittura esadecimale). Questo non vale solo per Omron, ma oramai per qualsiasi sistema di programmazione.

Link to post
Share on other sites
Ctec

Altro errore: D906 e D908 sono dei valori interi, che poi passi alle istruzioni floating point così come sono. Non va bene, vanno prima convertite da intero a float, e poi usate in virgola mobile. Se ho un po' di tempo, ti faccio un esempio, magari simbolico.

Link to post
Share on other sites
Ctec

C'è anche un errore negli incrementi, hai usato ++B che utilizza la notazione BCD, invece dell'intera INT. Quindi ho preferito rifarti il tutto con i tipi e i simboli:

image.thumb.png.570cab28d4a21d3022a66a6c89383a6b.png

 

Come vedi esegue e i valori sono congruenti.

Ho definito per comodità i seguenti simboli:

image.png.7ce07fd386005e7feb471539f0665bef.png

 

Spero di esser stato chiaro.

Il problema della notazione numerica è sempre grande, molti sbagliano su questo (ogni tanto mi annodo pure io...).

Poi i PLC non hanno il casting automatico che converte automaticamente nel formato adatto...

Link to post
Share on other sites
belarturo

Grazie ho allegato la parte del programma in questione chiedo scusa non ho mai allegato niente ho allegato il tutto in pdf grazie 

Link to post
Share on other sites
belarturo

Buona sera grazie mille l'errore che dovevo convertire tutto in virgola mobile e poi settare la moltiplicazione +100 l'ho provata al simulatore funziona x il formato numerico al weintek setto 32bit-float 

Link to post
Share on other sites
lelos

ciao

perché non usi il testo strutturato ST ?

Sarebbe più facile

 

 

Link to post
Share on other sites
Ctec
18 ore fa, lelos ha scritto:

perché non usi il testo strutturato ST ?

Certo, Lelos, io faccio normalmente così. Ma visto che ci sono problemi nelle notazioni, e il non utilizzo dei simboli mi hanno fatto desistere dal consigliarlo.

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