CITAZIONE
Walterword dice:
...non vorrei complicarti la vita
ma se queste due dword le vedi come 64 bit
magari in un array di booleani????
puoi spostare come vuoi a destra a sinistra
sopra sotto...in awl con i puntatori
...
Secondo me ha ragione, potresti fare un FC più o meno così
CODICE
//Variabili da inserire nella tendina:
INPUT Impulso : BOOL; // Ingresso attivazione scorrimento
TEMP #IndiceLoops: INT
//Fine variabili da inserire nella tendina:
UN #Impulso
BEB
AUF DB10 // Supponiamo di creare il registro in DB10 DBB20...27
LAR1 P#20.0 // Imposta AR1 per puntare al bit DBX20.0
L 64 // <--NR. DI BIT DEL REGISTRO
L1: T #IndiceLoops
U DBX[AR1,P#0.0] // Legge stato bit nnn.n
R DBX[AR1,P#0.0] // (se a 1 lo resetta)
+AR1 P#0.1 // Incrementa AR1 per puntare al bit successivo
= DBX[AR1,P#0.0] // Imposta il bit successivo (nnn.n+1)
L #IndiceLoops // Finchè #IndiceLoops > 0
LOOP L1 // decrementa #IndiceLoops e Salta a L1
BE
Oppure (meglio) ti crei un FB con la sua DB d'istanza nella quale memorizzi l'array di bit
CODICE
//Variabili da inserire nella tendina:
INPUT Impulso : BOOL; // Ingresso attivazione scorrimento
INPUT NrBits : INT; // Quantità di bit del registro
TEMP IndiceLoops : INT; // Indice loops
STAT Bit : ARRAY [0 .. 99 ] OF BOOL // Array di 100 Bits del registro
//Fine variabili da inserire nella tendina:
UN #Impulso
BEB
L #NrBits // <--NR. DI BIT DEL REGISTRO (imposti valore 0-99 quando richiami l'FB)
L1: T #IndiceLoops
U DBX[AR1,P#0.0] // Legge stato bit nnn.n
R DBX[AR1,P#0.0] // (se a 1 lo resetta)
+AR1 P#0.1 // Incrementa AR1 per puntare al bit successivo
= DBX[AR1,P#0.0] // Imposta il bit successivo (nnn.n+1)
L #IndiceLoops // Finchè #IndiceLoops > 0
LOOP L1 // decrementa #IndiceLoops e Salta a L1
BE
In questo modo, nel resto del programma puoi interrogare i bit così:
U "NomeDB".Bit[n]Spero di non aver sbagliato la sintassi in quanto l'ho scritta col blocco note e non con Step 7.
Ciao