GiancarloPirolo Inserito: 15 giugno 2013 Segnala Inserito: 15 giugno 2013 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
valvolina Inserita: 15 giugno 2013 Segnala Inserita: 15 giugno 2013 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: 15 giugno 2013 Autore Segnala Inserita: 15 giugno 2013 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: 15 giugno 2013 Autore Segnala Inserita: 15 giugno 2013 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: 15 giugno 2013 Autore Segnala Inserita: 15 giugno 2013 come devo passare la variabile all'FC mi dice sempre che la variabile non è corretta
valvolina Inserita: 16 giugno 2013 Segnala Inserita: 16 giugno 2013 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: 17 giugno 2013 Autore Segnala Inserita: 17 giugno 2013 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;
damitisi Inserita: 13 gennaio 2014 Segnala Inserita: 13 gennaio 2014 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: 13 gennaio 2014 Segnala Inserita: 13 gennaio 2014 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.
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