Vai al contenuto
PLC Forum


Costante Di Tempo Letta Da Un Ingresso Analogico


pupi

Messaggi consigliati

Ciao a tutti

Ho bisogno su un PLC S7 300 leggere il valore di un ingresso analogico (PWE288) e riportarlo in scala di tempi su di un temporizzatore, in modi che l'impostazione del tempo del temporizzatore sia data dall'ingrosso analogico (PEW288)

Qualcuno mi può aiutare?

GRAZIE

SALUTI

Link al commento
Condividi su altri siti


penso che tu debba utilizzare la FC105 per scalare la tua analogica, convertire il valore in intero e poi trasformarlo in BCD codificando la base tempo 10ms o 100ms o 1s o 10s utilizzando i bit X12 e X13 come mostrato nell'. di Step 7

L valore scalato // valore in formato INT della tua PEW288 scalato con la FC105

ITB // converti intero in BCD

L w#16#2000 // base tempo in secondi (in questo caso)

OW // esegui l'OR di word

T preset temporizzatore // otterrai il tuo preset

E' corretta la mia interpretazione del tuo problema?????

Link al commento
Condividi su altri siti

Ci sto provando ma senza risultato

Mi potresti aiutare ancora?

non riesco a gestire il fc105

Mi potresti dare il dettaglio dei parametri da inserire?

Grazie mille

Link al commento
Condividi su altri siti

Matteo Montanari

Utilizzo dei temporizzatori della CPU

La serie s7-300/400 lavora come la serie S5 in riferimento ai temporizzatori, volendo puoi inserire qualsiasi dato (000...999) che è il tuo tempo e poi la base dei tempi (millisecondi, secondi, minuti).

Dovresti fare una funzione che ti converta il tuo segnale analogico in un numero intero, con limiti da 0 a 999

per poi utilizzare la base dei tempi che ti interessa (con loperazione di OW (or logico).

Utilizzo dei temporizzatori IEC

Stesso discorso dei temporizzatori CPU, cambia solo il sistema di utilizzo ed il fatto che devi "sacrificare" una DB per ogni timer.

Utilizzo di una variabile come temporizzatore

La funzione di conversione del segnale analogico ti serve sempre ma in questo caso non hai solo una base dei tempi ma puoi utilizzare tutta la scala che preferisci. unico neo devi avere un clock con il quale incrementare il tuo "contatore/temporizzatore"

a questo punto confronti il contatore con la variabile dell'ingresso ed il gioco è fatto.

es:

//;

// Conteggio tempo con clock 0.1 secondi

//;

U #clock 0.1 secondi

SPBN Tmr1

L #ConteggioTimer1

L 1

+I

T #ConteggioTimer1

Tmr1: NOP 0

//;

// Azzeramento Conteggio tempo

//;

U #Conteggio1

SPBN Rst1

L 0

T #ConteggioTimer1

Rst1: NOP 0

//;

// Attivazione Bit Conteggio1

//;

L #ConteggioTimer1

L #TempoTimer1

>=I

= #Conteggio1

//;

a differenza dell'uso dei temporizzatori, questo rimane in memoria anche al mancare della tensione, e puoi variare il dato di confronto (la tua lettura del valore analogico) anche quando il contattore è già stato attivato, cosa impossibile con i normali temporizzatori.

Buon Lavoro

MATTEO

Link al commento
Condividi su altri siti

Matteo Montanari

Volendo puoi sostituire l'uso dell'fc105 con questa semplice funzione:

Lettura ingressi analogici con scalatura in numero reale (virgola mobile)

FUNCTION_BLOCK FB 95

TITLE =Analog input reader

AUTHOR : Keos

VERSION : 1.0

VAR_INPUT

PEW_input : WORD ; //Peripheral input

HIGH_range : REAL ; //High range for conversion

LOW_range : REAL ; //Low range for conversion

Offset : REAL ; //Offset added to readed value

END_VAR

VAR_OUTPUT

Output_value_read : REAL ; //Converted readed value

Output_value_offset : REAL ; //Converted readed value + offset value

Broken_cable : BOOL ; //Broken cable

Overflow : BOOL ; //Overflow

Over_limit : BOOL ; //Value over limit

Under_limit : BOOL ; //Value under limit

END_VAR

VAR_TEMP

Value_0_1 : REAL ; //Pew range 0->1

Pew_value : WORD ; //Memoria di appoggio

END_VAR

BEGIN

NETWORK

TITLE =

// RESET CONTROLS

SET ;

R #Broken_cable;

R #Overflow;

R #Over_limit;

R #Under_limit;

//;

// Limits confrontation

L #PEW_input;

L 32767;

==I ;

O( ;

L #PEW_input;

L W#16#8000;

==I ;

) ;

= #Broken_cable;

SPB chk;

TAK ;

L 32511;

>I ;

= #Overflow;

SPB chk;

TAK ;

L 27648;

>I ;

= #Over_limit;

SPB hl;

TAK ;

L 0;

<I ;

= #Under_limit;

chk: L 0;

U #Broken_cable;

O #Under_limit;

SPB load;

hl: L 27648;

U #Over_limit;

SPB load;

L #PEW_input;

load: T #Pew_value;

//;

// Integer to real conversion

L #Pew_value;

DTR ;

L 2.764800e+004;

/R ;

T #Value_0_1;

//;

// Scaled value

L #HIGH_range;

L #LOW_range;

-R ;

L #Value_0_1;

*R ;

L #LOW_range;

+R ;

T #Output_value_read;

L #Output_value_read;

L #Offset;

+R ;

T #Output_value_offset;

//;

// Out

SET ;

SAVE ;

END_FUNCTION_BLOCK

Srittura uscite analogiche da numero reale (virgola mobile)

FUNCTION_BLOCK FB 96

TITLE =Analog output writer

AUTHOR : Keos

VERSION : 1.0

VAR_INPUT

input : REAL ; //Analog input to write

input_max : REAL ; //High limit input

input_min : REAL ; //Low limit input

END_VAR

VAR_OUTPUT

output : WORD ; //Peripheral output

ov_pos : BOOL ; //Positive overflow

ov_neg : BOOL ; //Negative overflow

END_VAR

VAR_TEMP

range : REAL ;

outreal : REAL ;

END_VAR

BEGIN

NETWORK

TITLE =

// Positive overflow check

L #input;

L #input_max;

>R ;

= #ov_pos;

UN #ov_pos;

SPB M001;

L #input_max; // se overflow positivo,

T #input; // copia il valore max in input

SPA CALC;

//;

// Negative overflow check

M001: L #input;

L #input_min;

<R ;

= #ov_neg;

UN #ov_neg;

SPB CALC;

L #input_min; // se overflow negativo,

T #input; // copia il valore min in input

//;

// Range calculation

CALC: L #input_max;

L #input_min;

-R ; // converto il risultato in virgola mobile

T #range;

//;

// Analog calculation

L #input;

L #input_min;

-R ;

ABS ;

L #range;

/R ;

L 2.764800e+004;

*R ;

T #outreal;

//;

// Real to word format conversion

L #outreal;

TRUNC ; // converto a 32 bit

T #output; // trasferisco a 16 bit

//;

// Out

SET ;

SAVE ;

END_FUNCTION_BLOCK

Buon Lavoro

MATTEO

Link al commento
Condividi su altri siti

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