Vai al contenuto
PLC Forum


Step 5 Comprensione Programma In Awl


gorgino

Messaggi consigliati

Ciao

non conosco molto il siemens e devo convertire un programma scritto in AWL ne scrivo una parte.

mi interessa capire come funzionano gli ACCU1 e ACCU2 in questo parte di programma.

C DB10 ( apro il data block 10)

L PW168 (carico in ACCU1 la PW168 ingresso analogico 4..20ma )

L KM 01111111 11111000 (carco in ACCU1 la costante)

AW ( AND ACCU1 costante con ACCU2 PW168 per mascherare i primi tre bit di diagnostica, il risultato va in ACCU1)

SRW 3 ( shift verso destra i primi tre bit e risultato in ACCU1)

T DW20 (Trasferisco ACCU1 in DW20)

T DW90 (Trasferisco ACCU2 contenente PW168 in DW90)

ADD KF -512 (sommo -512 ad ACCU1)

L KB 0 (carico KB 0 in ACCU1)

<F (se ACCU1 è minore ACCU2 jump a M001)

JC =M001 (se è ok vul dire che il mio segnale è inferiore a 4 ma )

TAK (inverte ACCU1 con ACCU2 cosi ho in ACCU1 il valore purificato del segnale analogico)

M001 FDG (converte in virgola mobile)

se ho capito bene questo serve per leggere il segnale analogico 4..20ma che corrisponde in units a 512..2560

ho compreso bene?

Link al commento
Condividi su altri siti


Sembra proprio di sì, ma con qualche errore.

Prima di tutto bisognerebbe capire cosa si legge in PW168.

Se in PW168 si leggesse già un valore 512..2560, non si spiegherebbero le successive istruzioni ANDW e SHIFT a dx di tre bit

SRW 3 ( shift verso destra i primi tre bit e risultato in ACCU1)

SRW 3 non fa scorrere a destra i primi tre bit, ma fa scorrere a destra di tre bit tutta la parola. Non è la stessa cosa.

Di fatto, la mascheratura con "01111111 11111000" potrebbe non servire, perché i tre bit a destra vengono eliminati con lo shift. L'unico dubbio rimane sull'utilità di mascherare il bit tutto a sinistra.

T DW90 (Trasferisco ACCU2 contenente PW168 in DW90)

L'istruzione "T" trasferisce sempre il contenuto dell'accumulatore 1 e non modifica gli accumulatori.

In DW90 quindi viene scritto il valore dell'accumulatore 1, e non dell'accumulatore 2).

Se in DW90 vuoi scrivere il valore di PW168, ti consiglio di spostare l'istruzione subito dopo a:

L PW168 (carico in ACCU1 la PW168 ingresso analogico 4..20ma )

<F (se ACCU1 è minore ACCU2 jump a M001)

È proprio il contrario: se ACCU2 < ACCU1 salta a M001.

Nel momento della comparazione, in ACCU2 dovremmo avere il valore di PW168 (corretto con shift a dx di tre bit) al quale viene sommato l'offset di -512, mentre in ACCU1 c'è zero.

La comparazione e il successivo salto quindi, sembrano servire per limitare il valore minimo a zero ma, secondo me, vanno corrette cambiando "<F" in ">=F", oppure "JC" in "JCN"

Link al commento
Condividi su altri siti

grazie per le correzioni

sulla mascheratura penso che sia necessaria per ottenere il valore corretto dal ingresso analogico

se i primi tre bit sono di diagnostica e l'ultimo del segno come vedo dal manuale della scheda 460-4.

Link al commento
Condividi su altri siti

sulla mascheratura penso che sia necessaria per ottenere il valore corretto dal ingresso analogico

se i primi tre bit sono di diagnostica e l'ultimo del segno come vedo dal manuale della scheda 460-4.

Male non fa, quindi meglio lasciarla.

La mascheratura dei tre bit a destra (quelli di diagnostica) è però inutile perché, con lo shift a destra di tre bit, questi bit vengono comunque persi.

Per il bit del segno, dipende dal tipo di ingresso analogico. Visto che si toglie l'offset di 512, penso si tratti di un segnale 4-20 mA. Il canale analogico potrà quindi leggere, in condizioni normali, solo valori positivi.

Potrebbe leggere valori negativi solo in caso di trasduttore non collegato (con segnale = 0 potrebbe leggere, per errore di misura, un piccolo valore negativo) o collegato in modo errato.

La mascheratura del bit del segno potrebbe, in questo caso, risultare addirittura dannosa, perché ti porterebbe a leggere un valore completamente errato.

Solo per fare un esempio, un valore binario 11111111 11111111 (pari a -1), se azzero il bit del segno non diventa +1 (che sarebbe comunque già un errore), ma addirittura diventa +32767.

Considerando poi che, con lo shift a destra il bit del segno perde il valore di "bit del segno" e diventa un normale bit (al suo posto entra uno zero), un eventuale controllo sul segno del valore letto dal canale analogico andrebbe fatto prima di mascherature e shift.

Da non dimenticare poi che, per la normalizzazione dei valori letti dai canali analogici, in S5 c'è la funzione apposita: FB250 "RLG:AE".

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