Vai al contenuto
PLC Forum


Scalatura alternativa ad FC105


Messaggi consigliati

SETTANTASETTE
Inserito:

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! 


Inserita:

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.

 

Inserita:

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:

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

 

 

219w0o2.jpg

  • 3 weeks later...
Inserita:

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.

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