fnc Inserito: 19 aprile 2009 Segnala Inserito: 19 aprile 2009 Salve a tutti,premetto che sono un neofita della programmazione plc, o comunque ho conoscenze remotissime...Vorrei individuare, all'interno di una word, la posizione dei bit ad 1. Per ora, giusto per iniziare, basta anche il primo bit.L'intenzione sarebbe quella di utilizzarlo per controllo allarmi, oppure per individuare il punto di arresto di una sequenza a passi.Ho scritto alcune righe di codice e chiederei, per cortesia, se qualcuno potesse correggere o cestinare completamente il tutto. U E 0.1 //start L MW 10 //MB da controllare L W#16#0 //controllo di almeno un bit a 1 OW SPB M000 SPA M005 //se tutti i bit a 0 "esce" M000: T DB1.DBW 2 // MW di appoggio R Z 1 L DB1.DBW 2 M003: SRW 1 SPB M002 ZV Z 1 SPA M003 M002: L Z 1 T DB1.DBW 4 M005: S A 1.0 //nessun bit a 1, segnala Ringrazio anticipatamente.
pigroplc Inserita: 19 aprile 2009 Segnala Inserita: 19 aprile 2009 forse l'uscita finale si accende a prescindere del numero di bit trovato, mentre nei commenti che hai messo è legata al risultato uguale a zero, casomai:....T DB1.DBW 4L 0<> I M005: S A 1.0 pigroplc
pigroplc Inserita: 19 aprile 2009 Segnala Inserita: 19 aprile 2009 Ti segnalo inoltre il fatto che un po di tempo fa' Batta, che è un virtuoso del codice, ha messo a disposizione una routine molto furba per il conteggio dei bit a 1 in una area ben definita....pigroplc
batta Inserita: 19 aprile 2009 Segnala Inserita: 19 aprile 2009 Ringrazio per i complimenti Se dicessi che non mi fanno piacere, sarei un ipocrita.La funzione per il conteggio dei bit a 1, la trovi QUIPer quanto riguarda il codice, come ti ha già fatto notare pigroplc, se vuoi solo controllare se in una word ci sono bit a 1 (ma non ti interessa sapere quali), ti basta una semplice comparazione.La tua istruzione in ogni caso è errata (anche questo giustamente già fatto notare da pigroplc), perché l'istruzione SPB effettua il salto se RLC=1. L'istrizione OW però non influenza il bit di stato RLC, ma solo A1 (A1=1 se risultato operazione <>0), A0 e OV, che vengono resettati.Quindi, se vuoi fare il salto solo se il risultato di OW<>0, devi usare l'istruzione SPN (salta se risultato <>0).Anche tutte le altre istruzioni mi pare non abbiano molto senso.Prova a vedere se l'esempio per il conteggio dei bit a 1 fa al caso tuo, o se comunque ti può servire come spunto per creare qualcosa di buono.Il codice scritto fino ad ora però, direi che è proprio da cestinare completamente.
fnc Inserita: 19 aprile 2009 Autore Segnala Inserita: 19 aprile 2009 Grazie a tutti,seguirò i vostri consigli
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