Project75 Inserito: 26 gennaio Segnala Inserito: 26 gennaio Buon pomeriggio, ho un modulo SM1231 AI8xRTD per gestire delle temperature con delle termoresistenze a 3 fili, mi sembra che il modulo restituisce un valore di temperatura moltiplicato per 10, come gestireste questi valori, nel senso quale stringa (SCL) utilizzereste per normalizzare il valore che restituisce il modulo? Le sonde dovrebbero leggere valori positivi tranne due che dovrebbero leggere in negativo fino a circa -20°C. Grazie mille
dina_supertramp Inserita: 26 gennaio Segnala Inserita: 26 gennaio Stai già usando un modulo per termoresistenze, se vuoi leggere la temperatura ti basta dividere per 10 il valore letto sulla PEW (manuale di sistema s7-1200 e/o guida in linea del TIA). Microsoft Word - S71200_SM_1231_RTD_Product_info_it-IT.doc Tornando al discorso scalature: O ti fai da solo le formule per normalizzare e scalare le analogiche oppure puoi usare i blocchetti messi a disposizione dal TIA: NORM_X e SCALE_X
dina_supertramp Inserita: 26 gennaio Segnala Inserita: 26 gennaio Manuale di sistema s7-1200 s71200_system_manual_en-US.pdf - S7-1200 Programmable controller - ID: 109977302 - Industry Support Siemens Pagina 1246 e poi da pagina 1253 in poi Brevemente per i moduli SM: Il modulo ha risoluzione a 16 bit (15 di valore + 1 di segno), cioè: Sulla PEW potrai leggere valori che vanno da -32768 a +32767 (range totale) con campo nominale da -27648 a +27648 (questi sono i valori utili) 1) Normalizzi il valore, cioè prendi quello che leggi sul canale analogico e lo normalizzi su una retta che va da 0 ad 1. 2) Scali il valore, cioè prendi il valore appena normalizzato tra 0 ed 1 e lo scali su valori ingegneristici utili, ad esempio -20°C / 100°C
batta Inserita: 26 gennaio Segnala Inserita: 26 gennaio 5 minuti fa, dina_supertramp ha scritto: Sulla PEW potrai leggere valori che vanno da -32768 a +32767 (range totale) È un modulo RTD, dà direttamente la lettura in decimi di grado Celsius. 1 ora fa, Project75 ha scritto: come gestireste questi valori, nel senso quale stringa (SCL) Non c'è niente da gestire, hai già la lettura della temperatura in decimi di grado. Se vuoi portarla su una Real, dividi per 10.
Project75 Inserita: 26 gennaio Autore Segnala Inserita: 26 gennaio (modificato) Intanto grazie a tutti per le risposte, non ho fisicamente il modulo rtd quindi vorrei capire, una cosa, su un ingresso 4-20ma io leggo un valore che va da 0 a 27648, sull'ingresso del modulo rtd quanto leggo? Leggo un valore che va da -32768 a + 32768? Modificato: 26 gennaio da Project75
acquaman Inserita: 26 gennaio Segnala Inserita: 26 gennaio 1 ora fa, batta ha scritto: È un modulo RTD, dà direttamente la lettura in decimi di grado Celsius. Cone detto Batta, direttamente la lettura in decimi di grado. es se la temperatura misurata è 27.8 °C, leggerai il valore di 278.
Project75 Inserita: 26 gennaio Autore Segnala Inserita: 26 gennaio 21 minuti fa, acquaman ha scritto: Cone detto Batta, direttamente la lettura in decimi di grado. es se la temperatura misurata è 27.8 °C, leggerai il valore di 278. Quindi non ho bisogno di scalare, giusto? E se la temperatura è - 20°C leggerò -200?
Project75 Inserita: 27 gennaio Autore Segnala Inserita: 27 gennaio Ovviamente per leggere il valore negativo non posso utilizzare una word per l'ingresso, ma dovrei a questo punto utilizzare una int o addirittura una real cosi mi legge la virgola, voi come impostereste la variabile d'i ngresso? ?
drn5 Inserita: 27 gennaio Segnala Inserita: 27 gennaio Quel canale rtd sta in 16 bit, usare una Word o un int non fa differenza, di sicuro non un real. In un real ( float o come preferisci chiamarlo) c'è lo puoi mettere dopo che lo hai letto fosse solo per dividerlo per 10.
Project75 Inserita: 27 gennaio Autore Segnala Inserita: 27 gennaio 2 ore fa, drn5 ha scritto: Quel canale rtd sta in 16 bit, usare una Word o un int non fa differenza, di sicuro non un real. In un real ( float o come preferisci chiamarlo) c'è lo puoi mettere dopo che lo hai letto fosse solo per dividerlo per 10. Ma c'è differenza tra word e int, perché a volte mi trovo a parlare con persone che dicono che è meglio leggerli in int e altri dicono che è meglio in word, quale sarebbe la lettura corretta? In tutti e due i casi credo che non ci sia problema per leggere, nel caso di temperature, i valori in positivo e in negativo, giusto?
drn5 Inserita: 27 gennaio Segnala Inserita: 27 gennaio Nel tuo questo caso specifico il tuo canale RTD sarà una cosa tipo AW100 (%IW100) quindi quando lo leggi e lo depositi in una vatiabile col segno , ipotizzando una temperatura di 20,4°C , in un caso sarà -204, nell'altro senza segno sarà 32972. il segno - alza il 15° bit quindi quando il valore letto diventa negativo somma al valore assoluto 32768. Vado di fretta e forse sono stato confuso nella spiegazione...
batta Inserita: 27 gennaio Segnala Inserita: 27 gennaio (modificato) 16 ore fa, Project75 ha scritto: Leggo un valore che va da -32768 a + 32768? No, quelli sarebbero valori che indicherebbero un errore (ed eventualmente i limiti sarebbero -32768..+32767). A memoria non ricordo i limiti di lettura dei moduli RTD, ma è segnato sul manuale (che, chissà perché, solo pochi lo leggono), e dipende dal tipo di sonda utilizzato. 37 minuti fa, Project75 ha scritto: Ma c'è differenza tra word e int, perché a volte mi trovo a parlare con persone che dicono che è meglio leggerli in int e altri dicono che è meglio in word Sono sempre variabili a 16 bit, solo che INT si intende con valore decimale, mentre WORD si intende in esadecimale. Significa che se hai una INT con valore decimale 100, la stessa variabile dichiarata come Word leggerai 64 in esadecimale, ma sono solo due modi diversi di interpretare lo stesso valore. Valore che potresti rappresentare anche in ottale (144) o in binario (0000 0000 0110 0100). Sono solo modi diversi di rappresentare lo stesso valore. Nel caso di lettura della temperatura, a mio avviso è più corretto dichiarare gli ingressi analogici come INT, così una temperatura di 20 °C leggerai 200, e non HexC8. Modificato: 27 gennaio da batta
Project75 Inserita: 27 gennaio Autore Segnala Inserita: 27 gennaio 32 minuti fa, batta ha scritto: Nel caso di lettura della temperatura, a mio avviso è più corretto dichiarare gli ingressi analogici come INT, così una temperatura di 20 °C leggerai 200, e non HexC8. Dichiarando int una temperatura di 20°C leggo 200, men tre se è - 20°C leggerò - 200?
dina_supertramp Inserita: 27 gennaio Segnala Inserita: 27 gennaio (modificato) 22 minuti fa, Project75 ha scritto: Dichiarando int una temperatura di 20°C leggo 200, men tre se è - 20°C leggerò - 200? Si, purché tu stia usando il modulo SM RTD e che tu abbia dichiarato correttamente il tipo di termoresistenza usata nella configurazione hardware del modulo. Perchè appunto i moduli termoresistenze e termocoppie ti fanno già la scalatura. Se invece usi normali moduli di ingressi in tensione / corrente ti devi fare tu le scalature appropriate. Modificato: 27 gennaio da dina_supertramp
Project75 Inserita: 27 gennaio Autore Segnala Inserita: 27 gennaio 1 ora fa, dina_supertramp ha scritto: Si, purché tu stia usando il modulo SM RTD e che tu abbia dichiarato correttamente il tipo di termoresistenza usata nella configurazione hardware del modulo. Perchè appunto i moduli termoresistenze e termocoppie ti fanno già la scalatura. Ok, grazie mille, Mentre per il decimale della lettura in int, una volta diviso per 10, l'ho trasformo in real, giusto?
dina_supertramp Inserita: 27 gennaio Segnala Inserita: 27 gennaio (modificato) 37 minuti fa, Project75 ha scritto: Ok, grazie mille, Mentre per il decimale della lettura in int, una volta diviso per 10, l'ho trasformo in real, giusto? Si. Io preferisco prima convertire in REAL e poi fare le operazioni, come la divisione per 10 in questo caso. 240 INT = 240.0 REAL / 10.0 = 24.0 °C Tipi di dato che stai trattando: Int = Integer = Numero interno a 16 bit con segno (15 di valore + 1 di segno) Real = Reale = Numero reale in virgola mobile a 32 bit (23 di mantissa + 8 di esponente + 1 di segno) (come da norma IEEE 754) Modificato: 27 gennaio da dina_supertramp
Project75 Inserita: 27 gennaio Autore Segnala Inserita: 27 gennaio 20 minuti fa, dina_supertramp ha scritto: Si. Io preferisco prima convertire in REAL e poi fare le operazioni, come la divisione per 10 in questo caso. 240 INT = 240.0 REAL / 10.0 = 24.0 °C Tipi di dato che stai trattando: Int = Integer = Numero interno a 16 bit con segno (15 di valore + 1 di segno) Real = Reale = Numero reale in virgola mobile a 32 bit (23 di mantissa + 8 di esponente + 1 di segno) (come da norma IEEE 754) Grazie mille davvero gentilissimo. Quindi in definitiva conviene prima trasformare in real, sia se letto in word che in int, e poi fare le dovute scalature se eventualmente servono, giusto?
dina_supertramp Inserita: 27 gennaio Segnala Inserita: 27 gennaio (modificato) 22 minuti fa, Project75 ha scritto: Grazie mille davvero gentilissimo. Quindi in definitiva conviene prima trasformare in real, sia se letto in word che in int, e poi fare le dovute scalature se eventualmente servono, giusto? Se devi fare calcoli matematici è utile avere dati manipolabili per "fare i conti" come INT e REAL. Es. divisione per numeri interi (INT) (te la faccio semplice senza tirare in ballo le aree di memoria) 8 / 3 = 2 Es. numeri reali (REAL) 8.0 / 3.0 = 2,66666666666666666....verso l'infinito e oltre.... Se non devi fare conti o non ti interessa vedere un valore interpretabile per come ci hanno insegnato a leggere i numeri decimali puoi lasciare tutto dichiarato come dato base (Byte, Word, DWord) Modificato: 27 gennaio da dina_supertramp
Mattia Spoldi Inserita: 27 gennaio Segnala Inserita: 27 gennaio se vuoi farlo in scl questa è la cosa più semplice temperatura_Real := int_to_real(%iw200<dichiarata come int>) * 10.0;
Project75 Inserita: 27 gennaio Autore Segnala Inserita: 27 gennaio Il mio dubbio era che : se ho una sonda che mi rileva un valore di 30.3°C, se dichiaro la mia %IW come int perdo il valore decimale , quindi leggo 30°C, mentre se %IW è in word leggo corretto quindi 30.3°C, invece, da quello che ho capito non è così, quindi la mia %IW o la dichiaro int o word, una volta trasformata in real leggerò 30.3°C anche se leggendo in int vedrò 30°C, giusto? Spero di essermi spiegato... grazie mille a tutti.
acquaman Inserita: 27 gennaio Segnala Inserita: 27 gennaio 45 minuti fa, Mattia Spoldi ha scritto: temperatura_Real := int_to_real(%iw200<dichiarata come int>) * 10.0; Diviso 10 non per. 14 minuti fa, Project75 ha scritto: Il mio dubbio era che : se ho una sonda che mi rileva un valore di 30.3°C, se dichiaro la mia %IW come int perdo il valore decimale , quindi leggo 30°C, mentre se %IW è in word leggo corretto quindi 30.3°C, invece, da quello che ho capito non è così, quindi la mia %IW o la dichiaro int o word, una volta trasformata in real leggerò 30.3°C anche se leggendo in int vedrò 30°C, giusto? Spero di essermi spiegato... grazie mille a tutti. No, tra word e int cambia solo il formato di visualizzazione, comunque la dichiari se la temperatura rilevata è 33,3 tutte e due i formati ti daranno un valore 333, ma uno espresso in esadecimale l'altro in intero. Per fare la conversione in reale devi dichiararlo come intero, oltre che è più corretto formalmente.
Mattia Spoldi Inserita: 27 gennaio Segnala Inserita: 27 gennaio (modificato) la sonda che rileva 30,3°, ti farà vedere un valore sull'ingresso RTD che sarà 303, andrebbe dichiarato come INT, perchè in teoria potresti avere valori negativi (int va da circa -32000 a circa + 32000), se lo dichiari UINT o WORD(da 0 a circa 65000), non vedresti più l'eventuale valore negativo, ma vedresti una "sparata" verso i 65000. es sonda / valore su int / valore su word o uint 0° / 00 / 00 0.1° / 01 / 01 10.5° / 105 / 105 -15.2 / -152 / 65.383 quindi, se leggi su int, avrai dei valori congrui al processo, se leggi su uint/word, potresti avere dei problemi ricordati comunque che i valori -32768 e +32767 dovrebbero indicano un errore(guarda il manuale della scheda per essere sicuro) consiglio spassionato, leggi su int e usa la formula che ti ho scritto sopra poi controlli anche i 2 valori di errore o in alternativa metti degli allarmi sui limiti del processo es, il tuo valore di processo può andare da -10° a 120° , fai un controllo che se sei sotto i -15 o sopra i 125° dai un'allarme e fermi tutto 6 minuti fa, acquaman ha scritto: Diviso 10 non per. porca miseria, mi è proprio scappato il *, è da dividere per 10 non da moltiplicare, come giustamente fa notare @acquaman Modificato: 27 gennaio da Mattia Spoldi
dina_supertramp Inserita: 27 gennaio Segnala Inserita: 27 gennaio (modificato) 5 minuti fa, Mattia Spoldi ha scritto: ricordati comunque che i valori -32768 e +32767 dovrebbero indicano un errore(guarda il manuale della scheda per essere sicuro) @Project75 manuale sempre alla mano 😁! Modificato: 27 gennaio da dina_supertramp
Project75 Inserita: 27 gennaio Autore Segnala Inserita: 27 gennaio Quindi in definitiva le %IW conviene dichiararli int, indipendentemente se il modulo è RTD o analogico 0-10V/0-4/20mA, cosi eventualmente, se servono, si possono convertire in REAL, oltre ad essere piu leggibili, almeno questo è quello che ho dedotto dalle info postate.....
Mattia Spoldi Inserita: 27 gennaio Segnala Inserita: 27 gennaio esatto, conviene quasi sempre dichiararli in int e poi convertire in real
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