Vai al contenuto
PLC Forum


Operazioni Real


Messaggi consigliati

Inserito:

Salve a tutti

Nei mesi recenti ho riscontrato alcuni problemi coi REAL Siemens S7 - 300;

Utilizzo la versione V5.5 con HF3, se utilizzo le variabili TEMP delle FC come appoggio, spesso sbaglia clamorosamente i calcoli, per cui dove possibile mi appoggio a degli MD;

In questo momento sto provando un sw di dosaggio con le seguenti operazioni:

U(

L DB230.DBD 10 //Actual loaded

L DB230.DBD 40 //Set minus queue

>=R

)

O DB230.DBX 116.4 //Stop immediate

SPBN C100

L 8

T DB230.DBB 0

C100: NOP 0

Se DB230.DBD10 = 240.0 e DB230.DBD 40 = 240.0 dovrei avere un risultato, nel caso entrare nella routinetta successiva, invece lo ottengo SOLO se metto DB23.DBD10 = ad almeno 240.01;

Sulle VAT DB230.DBD10 e' inserito esattamente come 240.0, mentre sulla supervisione, solo in lettura, mi appare come 240.000015; di li il problema.

Il sistema operativo del mio pc e' Windows XP SP3;

Sono io che alla mia non piu' verde eta' sbaglio qualcosa?

Un grazie anticipato a tutti


Inserita:
se utilizzo le variabili TEMP delle FC come appoggio, spesso sbaglia clamorosamente i calcoli

Io faccio larghissimo uso delle variabili TEMP, e non ho mai avuto problemi.

Dovresti postare un esempio dove hai riscontrato gli errori di cui parli.

Sulle VAT DB230.DBD10 e' inserito esattamente come 240.0, mentre sulla supervisione, solo in lettura, mi appare come 240.000015

Ma il valore 240.0, come viene assegnato a DB230.DBD10? E' il risultato di un calcolo?

Se è il risultato di un calcolo il valore reale potrebbe essere veramente 240.000015, anche se sulla VAT non vengono visualizzate tutte le cifre.

Lo stesso discorso vale per DB230.DBD40. Se è il risultato di un calcolo, il valore reale potrebbe essere, per esempio, 240.000016, da cui il risultato apparentemente errato della comparazione.

Inserita:

Ciao,

molto strana la cosa.......

anche io uso molto spesso real e variabili Temp ma non ho mai riscontrato questo problema!

Concordo con Batta, posta il codice che vediamo se ci sono stranezze ;)

Comunque in tanti anni di lavoro ho provato parecchie volte a dare la colpa al firmaware, al sistema operativo, ma poi mi accorgevo sempre ch il 99.9999% delle volte era colpa mia...................

Inserita:

Anche a me sembra strano, ma posso garantirvi che anche in altri sw, es. controllo assi, ho dovuto sostituire i TEMP, utilizzati da sempre, con degli MD oppure creare una DB con appoggi.

Comunque di seguito il codice "incriminato":

U DB250.DBX 52.0 //White included

L 0.000000e+000

SPBN B004

L DB250.DBD 2 //White actual weight

L DB250.DBD 6 //White initial tare

-R

ABS

B004: T DB250.DBD 10

Il peso attuale DB250.DBD2, normalmente letto attraverso vari passagi da celle di carico e' qui totalmente simulato in una VAT, utilizzando valori tondi.. 100.0, 120.0 160.0 etc.Kg

DB250.DBD 6 non e' altro che DB250.DBD2 memorizzato ad inizio ciclo;

Questo e' il codice dove avviene l'errore:

L DB250.DBB 0

L 6

==I

SPBN C100

SET

S DB250.DBX 52.1 //Start FWD

R DB250.DBX 52.2 //Stop REV

U(

L DB250.DBD 10 //Actual loaded

L DB250.DBD 40 //Set minus queue

>=R

)

O DB250.DBX 116.4 //Stop immediate

SPBN C100

L 8

T DB250.DBB 0

C100: NOP 0

DB250.DBD 40, set - coda (o volo che dir si voglia) e' anche qui un numero tondo,senza decimali e nelle prove la "coda" e' bloccata a zero.

Ho sollevato la discussione anche perche' alcuni colleghi mi hanno confermato la presenza di questi problemi giustificandoli in un possible errore dovuto al fatto che S7 puo' funzionare sia su 32 che su 64 bit.

Ho esaminato i sw riga per riga e posso garantire che questi valori non sono modificati in nessun altro punto, neppure attraverso puntatori, che potrebbero eventualmente sfuggire.

L'idea sarebbe cercare di capire che sta succedendo per porvi poi rimedio.

Grazie

PS. sul primo messaggio ho citato DB230, mentre sull'ultimo DB250; si tratta in realta' di 4 blocchi gemelli, ognuno riguardante un diverso dispositivo ma tutti afflitti dallo stesso problema.

Inserita:
Anche a me sembra strano, ma posso garantirvi che anche in altri sw, es. controllo assi, ho dovuto sostituire i TEMP, utilizzati da sempre, con degli MD oppure creare una DB con appoggi.

Comunque di seguito il codice "incriminato":

Ma le "TEMP" dove sono?

Ti posso assicurare che, se usate correttamente, le TEMP funzionano benissimo.

Se le hai dovute sostituire con MD o variabili di DB, significa che hai sbagliato qualcosa.

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