Vai al contenuto
PLC Forum


Funzione Find Max E Find Min - Come funzionano?


marcocusa

Messaggi consigliati

Salve ,scusate ancora il disturbo ma ho trovato scarsa ,se non nulla, informazione su queste due fuzioni e dal manuale non c'ho capito un H.

Problema:io monitorizzo un tastatore analogico con l' istruzione SCL(66) a questo punto dovrei trovare il valore massimo ed il calore minimo

di tutte le letture in 10 seconti .Come fare ? le istruzioni max e Min soddisfano i miei bisogni? Come si usano? Grazie a Tutti

Ps Utilizzo un CQM1 Cpu 43 con sceda AD042

Link al commento
Condividi su altri siti


Sono andato a rivedere, perché è una vita che non uso più i CQM1.

L'uso di MAX e MIN non è difficile, cercano rispettivamente il massimo e il minimo in una tabella di massimo 999 canali.

Tutti i valori devono essere espressi in binario, con o senza segno.

Supponendo che tu abbia salvato la tua tabella di valori a partire da DM100, e che tu abbia 10 valori (una per secondo), e che tu voglia il massimo in DM50 e il minimo in DM51, diventano:

[MAX #0010 DM100 DM50] per il massimo di valori senza segno, [MAX #8010 DM100 DM50] per il massimo di valori con segno

[MIN #0010 DM100 DM51] per il minimo di valori senza segno, [MIN #8010 DM100 DM51] per il minimo di valori con segno

Ovviamente, devi in fase di acquisizione dati "spalmare" le letture fatte nelle word da DM100 a DM109. Attenzione anche che la SCL converte un binario in un BCD mediante scalatura, per cui i valori da mettere in tali word, prima di calcolare massimo e minimo, sarebbe opportuno convertirle in binario con una BIN, specialmente se i dati sono con segno. Altra cosa, sia MAX che MIN sono funzioni estese, e quindi devono essere "caricate" nel PLC prima dell'uso.

Spero di essere stato abbastanza chiaro.

Link al commento
Condividi su altri siti

Grazie CTEC spiegato cosi e molto chiaro, domani provo.Le funzioni estese le ho abilitate.

Un altra curiosità conosci una funzione per riempire tutte le DM con i dati provenienti dalla lettura,ammettendo che possano essere parecchi?

Link al commento
Condividi su altri siti

Eh, qui te la devi cavare con la programmazione. Non c'è nulla, per quanto ne sappia, neppure su PLC superiori.

In pratica, a quel che ho capito devi fare una specie di log a tempo fisso tipo 10 letture una ogni secondo, devi farti una routine che ogni secondo prende la lettura, la scala (SCL), e la "parcheggia" in un buffer (le DM100-109 del mio esempio), e soprattutto punta poi alla memoria successiva.

Pertanto devi usare i puntatori, o meglio l'indirizzamento indiretto. Se non sai di che parlo, vedi il cap. 4.8 del manuale W364-IT-01 (è quello del CQM1H, quello del CQM1 non lo trovo più...).

In due parole, assumendo che il valore scalato lo abbiamo in DM80 e utilizziamo la DM90 come puntatore, cioè come un registro che contiene l'indirizzo di un altro registro, dovrai fare prima di tutto le inizializzazioni:

[at]MOV #100 DM90 (mettendo #100 in DM90 si punterà alla memoria DM100)

poi ogni secondo, magari utilizzando un timer oppure un interrupt:

[at]MOV DM80 *DM90 (sposta il contenuto di DM80, quindi il valore scalato, nella memoria puntata da DM90, cioè inizialmente DM100)

[at]INC DM90 (incrementa di 1 la DM90, per cui si punta alla memoria successiva, cioè DM101 e così via)

Al termine del decimo ciclo, chiamerai le MAX e MIN come indicato prima.

Ho indicato le istruzioni impulsive ([at] davanti) in modo che vengano eseguite solo una volta. Va bene se lanci il processo con un timer, no se li metti in un interrupt.

Spero ancora di non averti incasinato la vita...

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