Luca Bab Inserita: 27 novembre 2006 Segnala Inserita: 27 novembre 2006 Scusa , ma le soluzioni piu' semplici no ???i bit di allarmi li tiri su o giu' da programma PLC ,quindi fai anche molto presto a tirati su una memoria quando sono piu' di 2 .del tipo : il primo allarme tira su una M , il secondo un'altra , il terzo attiva la M di piu' di 2 ( ovviamente quando scendono devono fare al contrario )CiaoLuca
mynameisrex Inserita: 27 novembre 2006 Segnala Inserita: 27 novembre 2006 Sì, però per ciascun allarme devi compiere un'operazione specifica, anzi due : una quando ON e una quando OFF. La soluzione di Siemens scoperta da Vince73 mi sembra ottima...
Luca Bab Inserita: 27 novembre 2006 Segnala Inserita: 27 novembre 2006 Sicuramente valida , non stavo a criticarepero' ho esperienza sulle librerie siemens e cerco di usarle il minimo possibile ,non perche' non funzionano , ( anzi.......) ma perche' di solito utilizzano risore esagerate per la funzione svolta ( prova a usare un fifo standard da libreria o a fartelo da solo )Quindi preferirei come soluzione alternativa , farmi un puntatore parametrizzato , che ad ogni scansione controlla tutti i bit e se ne trova 2 ad uno mi setta una M .ciaoLuca
Cesare Nicola Inserita: 27 novembre 2006 Autore Segnala Inserita: 27 novembre 2006 OK, le funzioni standard occupano parecchie risorse, ma parecchie quanto? Tutto va messo in relazione al proprio programma, o no? Onestamente non saprei valutare quanto incida FC99, o chi per esso, nel mio programma. E quando si dice "risorse", si intende tempo di ciclo o spazio fisico in memoria (o entrambi)? Anch'io a volte cerco di evitarle, ma in questo caso la soluzione FC99 mi sembra così efficace che mi fa proprio gola. Boh! Ci penserò su.Ciao
Federico Milan Inserita: 27 novembre 2006 Segnala Inserita: 27 novembre 2006 Ciao, se hai bisogno di velocità, e devi solo sapere quando almeno 2 bit sono a 1 allora potresti usare un metodo iterativo (quasi come un classico metodo dividi et impera) molto banale:Hai 32 Bit:Passo 1: dividi in due parole da 16 bit se le due parole sono diverse da zero finisci qui!Passo 2: Prendi la parola divrsa da zero e la dividi in due byte, se i due byte sono diversi da zero finisci!Passo 3: Prendi il byte diverso da zero, e lodividi in 2 nible, se i due nible sono diversi da zero finisci!PAsso 4: Prendi il nible diverso ... a questo punto è semplicissima la verifica!Si potrebbe risparmiare qualcosa, ad esempio dividendo la doppia parola in 4 byte eseguire operazioni in parallelo in quanto: Se hai due byte diversi da zero hai almeno due bit a 1.Altrimenti si prendo il byte diverso da zero e si fanno le oportune verifiche!Ovviamente questa ultima ipotesi diviene comoda se si deve poi sapere anche quli bit sono a 1.ciao e buon divertimento
Luca Bab Inserita: 27 novembre 2006 Segnala Inserita: 27 novembre 2006 quando si dice "risorse", si intende tempo di ciclo o spazio fisico in memoria (o entrambi)? io intendo entrambi , ovviamente lo devi rapportare al tuo programma e ai tuoi problemi ,ma secondo me e' da prendere come standard di fare sempre un programma che risparmia risorse il piu' possibile , poiche' oggi hai spazio e velocita' nella tua CPU , ma domani.........................ciaoLuca
STEU Inserita: 29 novembre 2006 Segnala Inserita: 29 novembre 2006 Compilati questo sorgente dovrebbe funzionareL'input allarmi è l'indirizzo della doppia parola di allarmil'output more è l'indirizzo del bit che va a 1 se hai piu' di un bit a 1FUNCTION FC 8 : VOID TITLE = VERSION : 0.1 VAR_INPUT allarmi : DWORD; END_VAR VAR_OUTPUT more : BOOL; END_VAR VAR_TEMP appoggio : DWORD; cont : INT; fisso : INT; indice : DWORD; END_VAR BEGIN NETWORK TITLE = L L#0; T #cont; L #allarmi; T #appoggio; L P##appoggio; T #indice; CLR ; = #more; L 32; ini: T #fisso; U L [#indice]; SPB inc; SFT: L #appoggio; TAD ; SRD 1; TAD ; T #appoggio; L #fisso; LOOP ini; BE ; inc: L #cont; L 1; +I ; T #cont; L 2; >=I ; = #more; SPBN SFT; END_FUNCTION
Cesare Nicola Inserita: 30 novembre 2006 Autore Segnala Inserita: 30 novembre 2006 Compilati questo sorgente dovrebbe funzionareTogli il "dovrebbe": funziona benissimo! Ottima soluzione, questa sì che la preferisco ad FC99.GrazieCiao
STEU Inserita: 1 dicembre 2006 Segnala Inserita: 1 dicembre 2006 Per Luca babpero' ho esperienza sulle librerie siemens e cerco di usarle il minimo possibileHai ragione per gli SFC e SFB ma FC 99 e fc standard in genereNon mi stupirei che prenda ancora meno risorse del mio programmino.
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