Vai al contenuto
PLC Forum


Gestione termoresistenza a 3 fili


Messaggi consigliati

Inserito:

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:

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:

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

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

Inserita: (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: da Project75
Inserita:
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.

Inserita:
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? 

Inserita:

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

Inserita:

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.

Inserita:
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? 

Inserita:

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

Inserita: (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: da batta
Inserita:
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: (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: da dina_supertramp
Inserita:
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: (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: da dina_supertramp
Inserita:
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: (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: da dina_supertramp
Mattia Spoldi
Inserita:

se vuoi farlo in scl questa è la cosa più semplice

 

temperatura_Real := int_to_real(%iw200<dichiarata come int>) * 10.0;  

Inserita:

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. 

Inserita:
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: (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: da Mattia Spoldi
dina_supertramp
Inserita: (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 😁!

 

 

anavalues.png

anavalues2.png

Modificato: da dina_supertramp
Inserita:

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:

esatto, conviene quasi sempre dichiararli in int e poi convertire in real

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