Vai al contenuto
PLC Forum


Istruzione Shr


Messaggi consigliati

GiancarloPirolo
Inserito:

Buongiorno,

sto facendo i primi passi con il TIA Portal V12 con una cpu 1215C.

Ho la necessita di monitorare la posizione del prodotto in linea con l'istruzione SHR, questa accetta in ingresso solo formati di memoria fino a Dint(32bit) io avrei la necessita di monitorare fino a 500bit.

Qualcuno gentilmente mi può dare qualche idea su come procedere?

Grazie


Inserita:

ciao

potresti farlo con il linguaggio scl

creare un array di 500 bit

e manipolarlo con ad esempio dei cicli for

esempio :

FOR #indice := 0 TO 499 DO
 
            #indice_appo           := 499 - #indice;
            #bit_500[#indice_appo] := #bit_500[#indice_appo - 1];
            
 
END_FOR;

questo in pratica muove il bit 498 nel bit 499, poi il 497 nel 498 e così via fino al bit zero nel bit 1

ovviamente è solo un esempio ma con questo sistema le possibilità sono molteplici

bisogna solo trovare quello giusto per la tua applicazione

magari dammi un pò di dettagli specifici

saluti da Valvolina

GiancarloPirolo
Inserita:

Ciao, grazie per la risposta

io ho praticamente una catena dove ci sono dei pezzi e devo fare uno shift di un numero non definito di bit perchè comunque può variare a seconda della grandezza dell'impianto, ipotiziamo 500 bit

a questo punto io voglio solo replicare la funzione dell'istruzione SHR cioè:

quando la catena gira un sensore legge le stazioni e con il fronte mi deve fare avanzare l'shr

se la fotocellula vede il pezzo presente sulla catena setta il bit "db_shr".bit[0]

come descrivevo sopra l'unico inconveniente è che la istruzione SHR può usare al massimo un Dint da 32bit

GiancarloPirolo
Inserita:

Stavo facendo una prova ma non ho tutto chiaro:

creo un FCxx

creo le variabili di scambio:

inout    Array    Array [0..1999] of Bool    
temp    indice_app    Int    
            indice_app    Int


FOR #indice := 0 TO 1999 DO
 
            #indice_app           := 1999 - #indice;
            #array[#indice_app] := #array[#indice_app - 1];

END_FOR;
GiancarloPirolo
Inserita:

come devo passare la variabile all'FC mi dice sempre che la variabile non è corretta

Inserita:

ciao

prima di tutto ho dichiarato la variabile nel blocco fc come IN_OUT

perchè il blocco oltre che leggerla deve poterla manipolare

poi ho creato un DB contenente una variabile di tipo array of bool di lunghezza congruente

con quella all'interno del blocco fc

ho richiamato il blocco FC in OB1

e ho messo nel parametro IN_OUT del blocco richiamato, il parametro creato nel db

tutto funziona correttamente

fammi sapere

saluti da Valvolina

GiancarloPirolo
Inserita:

Ho modificato così il ciclo for se no mi dava un avviso, così mi funziona bene

FOR #indice:= 4999 TO 0 BY -1 DO

#Array[#indice] := #Array[#indice - 1];

END_FOR;

  • 6 months later...
Inserita:

Ciao a tutti,

vorrei utilizzare l' istruzione for per settare dei bit creati su un db1:

for #temp_1 := 1 to 200 do db1.bit[temp_1] = true ;

il tutto messo su di un ob a schedulazione e per provare l' ho settato a 500 ms.

Pensavo che essendo richiamato ogni 500 ms mi settasse un bit per ogni ciclo ma non è cosi, ma allora il loop dell 'istruzione for viene eseguita in quanto tempo?

Grazie se qualcuno mi vuole rispondere.

Gianmario Pedrani
Inserita:

il ciclo for che hai creato non viene interrotto, ma finisce il suo corso e poi ritorna a eseguire il programma normale, quindi se lo inserisci in un ob schedulato ogni 500 ms lui eseguira tuttto il tuo for.

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