gorgino Inserito: 30 aprile 2013 Segnala Share Inserito: 30 aprile 2013 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 More sharing options...
batta Inserita: 30 aprile 2013 Segnala Share Inserita: 30 aprile 2013 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 More sharing options...
gorgino Inserita: 30 aprile 2013 Autore Segnala Share Inserita: 30 aprile 2013 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 More sharing options...
batta Inserita: 2 maggio 2013 Segnala Share Inserita: 2 maggio 2013 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 More sharing options...
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