E, scrivo questo lungo incipit perché voglio farti osservare quanto nebbiosa e fumosa è la tua mente, (non so il resto). Leggendoti: sai programmare, ma non sai fare i calcoli... Ma allora cosa programmi? E poi leggendo tutto il resto. Sorgono solo molti dubbi. Dubbi che quanto mi sto accingendo a spiegare serva a qualcosa. Penso proprio di no.
Ora io cercherò di essere il più completo possibile, perché non interverrò più in questo thread. (Thread che ho creato perché come ti avevo scritto, il tuo discorso è fuori e molto dal precedente thread dove ti eri attaccato).
I PLC in generale nascono e sono ancora oggetti programmabili orientati ad una utenza non sempre all'altezza della situazione. Quando si svilupparono, le uniche persone che ne avrebbero fatto uso erano manutentori di natura elettomeccanica che vedevano solo quadri a relè, ragionavano in termini di autoritenute, timer e contatori e nulla sapevano di numeri interi, a virgola fissa od a virgola mobile. I PLC si sono dunque sviluppati con un linguaggio di programmazione assai semplice e semplificato. Fortunatamente oggi i linguaggi si sono evoluti, un poco standardizzati e sopratutto, sono stati introdotti e largamente diffusi linguaggi testuali, molto più pratici e veloci dei linguaggi grafici. Tuttavia i linguaggi grafici mantengono un loro ampia gamma di utenti e pertanto resistono all'età. Il LADDER è forse il più diffuso tra tutti, perché ricorda fin troppo bene lo schema elettrico. Non mi dilungo oltre.
Nella estrema semplificazione che si è fatta nello scrivere gli ambienti di sviluppo si è dovuto tenere conto di molti fattori, che hanno indotto scelte. Condivise o meno, quelle sono.
Raramente ti troverai davanti a linguaggi di programmazione evoluti: per ristrettezza di risorse e di memoria, all'interno di un PLC, contrariamente ai PC, tutti i dati numerici sono memorizzati e gestiti nella loro forma grezza: un byte, un intero, un doppio intero, un float, sono aree di memoria precise, ben definite, accessibili però, per la natura del PLC, da chiunque, in qualunque modo. Significa, in soldoni, che il programma utente non è in grado da solo di capire la natura del dato ed usarla al meglio. E' lo sviluppatore che deve sapere esattamente cosa sta facendo.
Fotunatamente vengono in aiuto molte limitazioni messe qua e la dagli sviluppatori dei compilatori. Limitazioni che fanno dei controlli di massima, peraltro però facilmente raggirabili.
Che cosa significa?
Parlando per il Siemens S7, che è il PLC che stai usando:
Significa che, assumento in via del tutto ipotetica una MW20 contenente un dato di tipo intero, lo dovrai usare nel programma sempre come intero, assumendo una ipotetica MD22 come un dato di tipo float, lo dovrai usare sempre e solo come tale.
Nel linguaggio KOP, (mi sembra di ricordare tu usassi quello), le operazioni matematiche sono per forza di cose funzioni elementari che si rappresentano come "box" elaborati secondo lo stato di RLC come se fossero delle bobine di uscita.
In primo luogo dovrai quindi sincerarti che il programam sia scritto in modo tale da attivare sempre tutti gli EN dei box desiderati e, facendo attenzione che le uscite ENO per la concatenazione orizzontale si interrompono se una funzione va in errore.
Ammesso dunque che tu scriva correttamente la parte logica del programma di calcolo, dovrai predisporre come minimo tre variabili di tipo REAL: due potranno essere di memoria temporanea, una magari di memoria globale come l'area M, oppure un dato di DB. A tua libera scelta con le CPU moderne. Con le più vecchie meglio se ti limiti all'uso dell'area M.
Assumiamo che tu abbia dichiarato nell'itestazione del blocco, le seguenti variabili
- Codice: Seleziona tutto
rLacc1 : REAL;
rLacc2 : REAL;
Ed una terza variabile dichiarata nell'area merker
- Codice: Seleziona tutto
rGquality AT %MD24 : REAL;
A questo punto, assumo che tu abbia già i due contatori di pezzi buoni e scarto che stanno contado, appoggianti sulle seguenti variabili:
- Codice: Seleziona tutto
ulGgps AT %MD16 : UDINT;
ulGbps AT %MD20 : UDINT;
La prima operazione da fare sarà quella di convertire il dato da DINT a REAL, e poi fare il calcolo:
Per i restanti calcoli basterà fare la stessa cosa, ricordando che la migrazione da un formato ad un altro deve sempre essere fatta utilizzando le conversioni, perché, appunto, come scrivevo, il firmware del PLC non conosce a priori il tipo di dato memorizzato nella RAM e non è in grado di fare conversioni a livello dei moderni linguaggi di programmazione per PC.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


