Vai al contenuto
PLC Forum


Blocco Di Codice Per Puntatori - BLOCCO DI CODICE PER PUNTATORI


s7200

Messaggi consigliati

Scusate ma è un pò di tempo che "sbatto la testa" sui puntatori, credo di aver capito ma mi servirebbe una conferma, su questo blocco di codice per esempio:

U I0.0

FP M10.0

L 2

L MD0 ( INCREMENTO MD0 - PUNTATORE - )

+D

T MD0

AUF DB1

L DBW[MD0]

T MW100

In questo modo apro in successione la db1.dbw......., se md0 vale 2 aprirò db1.dbw2, se md0 vale 4 aprirò la db1.dbw4, se md0 vale 6 aprirò la db1.dbw6......

E' giusto ciò che affermo o mi sfuggito qualcosa?

Grazie a tutti per l' aiuto

Andrea

:rolleyes:
Link al commento
Condividi su altri siti


Le operazioni di caricamento e trasferimento sono RLC indipendenti, quindi il tuo incremento di MD0 avverrebbe ogni ciclo del PLC.

Condiziona con un salto ad etichetta (SPBN) l'incremento e funziona.

Ciao.

Link al commento
Condividi su altri siti

Ciao,

aggiungo, oltre a confermare ciò che dice Renzo,

che se sommi 2 sommi 2 bit, non due byte.

devi moltiplicare 2*8, oppure, per facilitare anche la lettura, caricare il puntatore direttamente.

u(

U I0.0

FP M10.0

)

u ...

u ... (condizioni di incremento puntatore)

spbn _001

L p#2.0

L MD0 ( INCREMENTO MD0 - PUNTATORE - )

+D

T MD0

_001: nop 0

Ciaoooo

Link al commento
Condividi su altri siti

X Vince73PLC:

Si, hai ragione deve shiftare a sinistra di 3 bit per mettelo in formato puntatore (= a moltiplicare per 8), oppure scomodare il registro puntatori AR1 o AR2 e appoggiarlo su MD0 per il ciclo successivo.

Link al commento
Condividi su altri siti

Grazie a tutti e due per le risposte ma non basta il fronte in salita per non far incrementare il puntatore ad ogni ciclo di scansione?

E per moltiplicare * 8 quindi shiftare qual'è il blocco di codice corrispondente? per caso tipo questo?:

U E0.0 ( CONDIZIONI DI INCREMENTO PUNTATORE)

FP M0.0

L 2

SLR 3

T MD100

AUF DB1

L DBW[MD100] ( Punto la dbw2)

E invece con il formato P#....... come diventa?

Grazie.

Ammetto che affrontare da solo per la prima volta questo argomento mi crea un po' di confusione anche se ho letto un po' di manuali.

Il mio fine e' quello di aprire in successione delle dbw con delle semplici operazioni matematiche; forse ero abituato fin troppo bene con il 200.

Grazie a tutti per l' aiuto ( ma vedrete, chi l'ha dura la vince!!)

Andrea

Link al commento
Condividi su altri siti

questo è l'esempio che hai postato all'inizio rivisto e corretto

U I0.0

FP M10.0

spbnb _001

L 2

L MD0 ( INCREMENTO MD0 - PUNTATORE - )

+D

T MD0

001: nop 0

AUF DB1

L MD0

SLD 3 // Shifto a sinistra di 3 il puntatore, oppure moltiplico per 8

LAR1

L DBW[AR1,p#0.0]

T MW100

// Ogni fronte di salita Di I0.0 incrementa il puntatore e poi apre la word corrispondente

Link al commento
Condividi su altri siti

Per 84Paolo

Grazie 1000, ma non è la stessa cosa scrivere:

AUF DB1

L MD0

SLD 3 // Shifto a sinistra di 3 il puntatore, oppure moltiplico per 8

T MD0

L DBW[MD0]

T MW100

ANZICHE':

AUF DB1

L MD0

SLD 3 // Shifto a sinistra di 3 il puntatore, oppure moltiplico per 8

LAR1

L DBW[AR1,p#0.0]

T MW100

// Ogni fronte di salita Di I0.0 incrementa il puntatore e poi apre la word corrispondente

E poi visto che l'operazione di incremento puntatore é sotto la condizione del fronte in salita di I0.0 e' propio necessaria la condizione di salto?

Modificato: da s7200
Link al commento
Condividi su altri siti

Non puo' funzionare perche' tu fai lo shift di MD0 e lo spalmi ancora su MD0 con il risultato che ogni volta che entri nello shift (ogni ciclo da come lo hai scritto) ti shifta di 3 posizioni, quindi lo fa giusto la prima volta, poi ti trovi shiftato di 3 posizioni quello che avevi gia' shiftato prima e sei a 6 posizioni e cosi' via.

Il salto a etichetta, ripeto, e' stato messo in quanto le operazioni di carica e trasferisci non dipendono dal RLC, quindi se c'e' il fronte carica esegue la somma e trasferisce, ma lo fa comunque anche se non c'e' nessun fronte,

Il salto ad etichetta condizionato invece (SPBN) ti condiziona l'entrata all'istruzione successiva solo se c'e' il fronte (RLC alto) altrimenti va al rientro del salto.

Ciao.

Link al commento
Condividi su altri siti

Ho omesso qualosa di importante pensando di condizionare il carica e trasferisci con l' RLC di fronte di I0.0 ( mentalità di chi usa S7 200 ); quanto al continuo SHIFTARE di MD0 è stata una svista piuttosto grave .........l' ansia del novellino!

Grazie delle osservazioni e comunque credo di aver capito il meccanismo.

Ciao

Andrea

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