Nesus Inserito: 8 marzo 2012 Segnala Share Inserito: 8 marzo 2012 (modificato) Ho un piccolo problema del quale non riesco a venirne a capo in pratica con un modulo AI acquisisco un valore di temperatura che varia da 14000 bit a 21000 bit che sostanzialmente equivalgono a circa 0°C --> 100°C prendendo un valore a caso in questo range per esempio 16000 dovrei moltiplicarlo per un coefficiente calcolato: 0.014438964 e sottrarre un offset di 199.1505113. è un calcolo semplice che però non riesco a capire come lo interpreta nel programma visto che ci son in gioco numeri interi e numeri a virgola mobile io ho provato così L PEW 350 // valore dell'esempio a 16000 L 0.014438964 // coefficiente calcolato *R T MD 100 // in teoria dovrebbe dare 231.023424 L MD 100 L -199.1505113 // +R T MD 104 //in teoria 31.8729127 grazie in anticipo! Modificato: 8 marzo 2012 da Gabriele Riva Inserito tag Code Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 8 marzo 2012 Autore Segnala Share Inserita: 8 marzo 2012 (modificato) Trovato la soluzione!!!! L 15600 T MD 32 L MD 32 DTR T MD 220 L 1.443896e-002 T MD 36 L MD 220 L MD 36 *R T MD 210 L MD 210 L -1.991505e+002 +R T "md_out_temp_cuscin_4" Modificato: 8 marzo 2012 da Gabriele Riva Inserito tag Code Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 8 marzo 2012 Segnala Share Inserita: 8 marzo 2012 (modificato) Senza scomodare tutte quelle MD di appoggio, che poi magari rischi di sovrapporre in altri punti del programma, puoi fare anche così: L 15600 DTR L 1.443896e-002 *R L -1.991505e+002 +R T "md_out_temp_cuscin_4" p.s. io non uso mai md/mw per appoggiare calcoli altrimenti devi tenerne traccia o rischi di fare casini. casomai crea una o più variabili locali TEMP e nominale p.es. wTemp1, wTemp2 , dTemp1, rTemp1 ecc. ecc. oppure dagli un nome coerente, sempre usando le TEMP se ti servono solo localmente, oppure MD/MW/DBW/DBD se il contenuto ti serve anche altrove, risulterà tutto più leggibile. Modificato: 8 marzo 2012 da Gabriele Riva Inserito tag CODE Link al commento Condividi su altri siti More sharing options...
Gabriele Riva Inserita: 8 marzo 2012 Segnala Share Inserita: 8 marzo 2012 JumpMan, il codice lo devi inserire con il tag codice, quando inserisci il codice evidenzialo e clicca sul tag: Ho corretto tutti i messaggi precedenti. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 9 marzo 2012 Segnala Share Inserita: 9 marzo 2012 Ad essere pignoli, mancherebbe un'istruzione. Prima di convertire il dato da DINT a REAL con l'istruzione DTR, sarebbe corretto convertire il dato da INT a DINT con l'istruzione ITD. Nel caso dell'esempio non cambia nulla perché il valore INT è compreso tra 0 e 32767. Se il valore in formato INT fosse negativo, allora la conversione da INT a DINT diventerebbe indispensabile. Oppure si dovrebbe inserire il dato direttamente come DINT usando la sintassi L L#15600. Visto però che il dato di origine in realtà sarà la lettura di un canale analogico, consiglio molto vivamente di non omettere la conversione da INT a DINT. Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 9 marzo 2012 Autore Segnala Share Inserita: 9 marzo 2012 (modificato) Grazie a tutti per le risposte ! jumpMan: ho provato ad utilizzare il codice che hai scritto ma in uscita mi non mi da i valori desiderati :/ come mai? batta : aggiungendo al codice di JumpMan la conversione ITD potrei scrivere anche: L 15600 ITD DTR L 1.443896e-002 *R L -1.991505e+002 +R T "md_out_temp_cuscin_4" i risultati delle singole istruzioni le appoggia nell'ACCU 2 e le riprende in automatico senza il bisogno che le richiami ogni volta? Modificato: 9 marzo 2012 da Nesus Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 9 marzo 2012 Autore Segnala Share Inserita: 9 marzo 2012 mi correggo jumpman... ora stranamente mi funziona.. a forza di salvare visto che stavo provando ad usare le variabili temporanee come mi hai detto mi si è aggiornato il valore giusto comunque molto utili le variabili temp comincerò ad utilizzarle più spesso! Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 9 marzo 2012 Segnala Share Inserita: 9 marzo 2012 comunque molto utili le variabili temp comincerò ad utilizzarle più spesso! un avvertimento, essendo locali queste perdono il loro valore all'uscita, quindi usale solo per appoggi temporanei. Non interrogare una temp prima di averla scritta, stai attento se hai dei salti e per qualche motivo vai a leggere una temp senza averla prima scritta, otterresti dei valori casuali. Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 9 marzo 2012 Segnala Share Inserita: 9 marzo 2012 JumpMan, il codice lo devi inserire con il tag codice lo so, ma ieri ho ottenuto questo: [color=#000000][font=helvetica, arial, sans-serif][size=2]L [/size][/font][/color][color=#006666][font=helvetica, arial, sans-serif][size=2]15600[/size][/font][/color][font=helvetica, arial, sans-serif][size=3] [indent=1][size=4] [color=#000000] T MD [/color][color=#006666]32[/color] [color=#000000] L MD [/color][color=#006666]32[/color] [color=#000000] DTR T MD [/color][color=#006666]220[/color] [color=#000000] L [/color][color=#006666]1.443896e-002[/color] [color=#000000] T MD [/color][color=#006666]36[/color] [color=#000000] L MD [/color][color=#006666]220[/color] [color=#000000] L MD [/color][color=#006666]36[/color] [color=#000000] [/color][color=#666600]*[/color][color=#000000]R T MD [/color][color=#006666]210[/color] [color=#000000] L MD [/color][color=#006666]210[/color] [color=#000000] L [/color][color=#666600]-[/color][color=#006666]1.991505e+002[/color] [color=#000000] [/color][color=#666600]+[/color][color=#000000]R T [/color][color=#008800]"md_out_temp_cuscin_4"[/color][/size][/indent][/size][/font] e poi dopo aver corretto tutto mi è sfuggito l'ITD. Comunque, Nesus, se carichi una costante puoi anche caricare direttamente un valore a 32 bit: L L#15600 e omettere l'ITD Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 9 marzo 2012 Segnala Share Inserita: 9 marzo 2012 (modificato) i risultati delle singole istruzioni le appoggia nell'ACCU 2 e le riprende in automatico senza il bisogno che le richiami ogni volta? Quando usi una istruzione di caricamento (L) la cpu sposta il valore di ACCU 1 in ACCU 2 e carica il valore dell'istruzione Load in ACCU 1, quindi se usi 2 L di fila hai il primo valore caricato in ACCU 2 e l'ultimo in ACCU 1 Se poi fai una operazione matematica, la cpu la esegue tra i 2 accumulatori e appoggia sempre il risultato in ACCU 1 se successivamente scrivi l'istruzione T la cpu prenderà sempre ACCU 1 (il risultato) e lo trasferirà, se invece usi un altro L, il risultato viene trasferito in ACCU 2 e il nuovo valore caricato in ACCU 1, quindi puoi proseguire con l'operazione successiva (tra il risultato precedente e il novo valore caricato). Spero di essere stato chiaro, ciao Modificato: 9 marzo 2012 da JumpMan Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 15 marzo 2012 Autore Segnala Share Inserita: 15 marzo 2012 (modificato) Tutto chiarissimo comunque non sono costanti quelle che carico ma valori che vengono da campo =) seguendo quel pezzo di codice semplificato funge alla grande Grazie ah p.s. riguardo al <tag> dava anche a me lo stesso problema che ha dato a Jumpman Modificato: 15 marzo 2012 da Nesus Link al commento Condividi su altri siti More sharing options...
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