Vai al contenuto
PLC Forum


Numeri con la virgola


belarturo

Messaggi consigliati

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 al commento
Condividi su altri siti


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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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