Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Posizione Bit In Una Word


Messaggi consigliati

Inserito:

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.


Inserita:

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 4

L 0

<> I

M005: S A 1.0

pigroplc

Inserita:

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

Inserita:

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 QUI

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

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