SETTANTASETTE Inserito: 7 marzo 2016 Segnala Inserito: 7 marzo 2016 Buongiorno, ho un numero real su cui devo effettuare una scalatura ed, ovviamente, la classica FC105 non è idonea, accettando come parametro in ingresso un INT (o WORD) a 16 bit. Esiste una funzione simile adatta ad un numero REAL? Thanks P.S. Pensavo che reperire informazioni sui Microcontrollori ARM di Renesas fosse difficile, ma vedo che Siemens supera tutti!
ken Inserita: 7 marzo 2016 Segnala Inserita: 7 marzo 2016 la scalatura è una proporzione, niente di più. ci puoi mettere poi dei limiti o altre cose ma alla fine sarà sempre e solo un proporzione. ti puoi costruire tu un fc parametrizzato.
JumpMan Inserita: 9 marzo 2016 Segnala Inserita: 9 marzo 2016 In linguaggio strutturato si può fare così: Error := (Imin = Imax); Trim BOOL VAR_INPUT Taglia uscita per mantenerla nel range m REAL VAR q REAL VAR In REAL VAR_INPUT Valore in ingresso Imin REAL VAR_INPUT Valore minimo per il dato di ingresso Imax REAL VAR_INPUT Valore massimo per il dato di ingresso Omin REAL VAR_INPUT Valore minimo per il dato di uscita Omax REAL VAR_INPUT Valore massimo per il dato di uscita Out REAL VAR_OUTPUT Valore in uscita Error BOOL VAR_OUTPUT Errore parametri Error := (Imin = Imax); If Error THEN Out := REAL#0.0; ELSE IF Trim THEN IF In < Imin THEN Out := Omin; ELSE IF In > Imax THEN Out := Omax; ELSE m := (Omax-Omin)/(Imax-Imin); q := Omin-m*Imin; Out := m * In + q; END_IF; END_IF; ELSE m := (Omax-Omin)/(Imax-Imin); q := Omin-m*Imin; Out := m * In + q; END_IF; END_IF; Questo blocco che ho scritto per MotionWorks (simile al codesys) fa una scalatura del valore In compreso tra Imin e Imax ottenendo il valore Out compreso tra Omin e Omax. Il parametro di ingresso Trim se TRUE limita l'uscita Out tra Omin e Omax, se FALSE l'uscita non è limitata e prosegue per la retta calcolata anche oltre i limiti Omin e Omax (questo succede ovviamente se In supera i limiti Imin e Imax). m e q sono parametri locali interni. Se non ti serve il Trim sono 3 istruzioni in croce.
SETTANTASETTE Inserita: 10 marzo 2016 Autore Segnala Inserita: 10 marzo 2016 @Ken: Si, lo sapevo. Volevo sapere se c'era una "scatoletta" già pronta senza dover reinventare la ruota. @JumpMan: Ottimo, sarebbe stato quello il "qualcosa" che mi serviva". comunque ho risolto banalmente, e come costume di questo forum, posto la soluzione. Il problema era un dato proveniente da un blocchetto CFC di tipo F_CH_AI, il cui OUTPUT è di tipo REAL (uscita V_DATA) per cui la scalatura era necessaria su questo dato, contrariamente al classico FC105 che pesca una PEW di tipo INT. Alla fine la soluzione era insita all'interno dello stesso blocco (non è che la documentazione di Siemens sia poi così chiarissima eh...), infatti inserendo i parametri di ingresso VHRANGE e VLRANGE (vedi immagine), si ottiene esattamente la scalatura necessaria.
DesmoGiec Inserita: 30 marzo 2016 Segnala Inserita: 30 marzo 2016 In alternativa si può usare unscale. Analogamente a scale, inserisci il tuo riferimento in real con la scalatura a te congeniale, e ti ritorna una sorta di riferimento analogico, in modo da poterlo riutilizzare con lo scale. A me è tornato utile in un sistema di controllo di pressione differenziale, ove il valore reale dello strumento (0 ~ 97.9mbar) lo uso come riferimento reale per verificare l'integrità del sistema per il reparto manutentivo. (con scale genero la pressione differenziale in mbar dal rif.) Usando unscale, scalando su valori di depressione "utili" alla produzione (20 ~ 97.9 mbar), riesco a scalare poi una percentuale di rendimento visualizzabile su hmi a partire dai 20mbar e non dall'originale 0 usando l'out generato precedentemente dal primo scale.
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