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




Codifica Bcd - codifica BCD per soli 4 bit


Messaggi consigliati

barbato giuseppe
Inserito:

salve!

dovrei modificare un quadro senza troppo stravisarlo .

su un byte di ingresso ho due selettori a 4 posizioni (uno per una linea e l'altro per un'altra linea),parliiamo di un solo selettore.

il selettore mi dava la possibilità di gestire una linea in 4 modalità diverse scegliendo ad uno aud uno gli ingressi.

le cose sono cambiate e dovrei dare la possibilità alla linea di lavorare in 8-9 modalità diverse.

i colleghi hanno comprato dei selettori a codifica BCD .

posso montare 2 selettori BCD su un byte di ingresso e come faccio da programma a scegliere i quattro bit che mi servono per ogni linea?

l'istruzione l eb 0

itb

t mb 100 è errata ?

anche perchè dovrei fare dei confronti

vi ringrazio in aticipo


Inserita:

fai la conversione dell'intera word e poi prendi solo il byte che ti serve

barbato giuseppe
Inserita:

a me servono 4 bit alla volta per ogni byte di ingresso

Inserita:

Ciao Peppe, prova questo:

 
      L     EW     1                    // Legge lo stato della input word 1 (input byte 1 + input byte 2)
      L     2#1111                      //Carica il valore bianrio con TRUE solo nei primi 4 bit del primo byte
      UW                                //Esegue l'and tra la word ingresso ed il valore binario
      T     MW    10                    //Trasferisce il risultato dell'operazione nella word 10 

      L     EW     1                    // Legge lo stato della input word 1 (input byte 1 + input byte 2)
      L     2#11110000                  //Carica il valore bianrio con TRUE solo gli ultim 4 bit del primo byte
      UW                                //Esegue l'and tra la word ingresso ed il valore binario
      T     MW    12                    //Trasferisce il risultato dell'operazione nella word 12

Dovrebbe funzionare così , lo stato del primo bite della word ingressi canale 1 , mascherato (solo lo stato dei primi 4 bit) si trova nella MW10

lo stato del primo bite della word ingressi canale 1 , mascherato (solo lo stato degli ultimi 4 bit) si trova nella MW12.

Ciao

Ivan

barbato giuseppe
Inserita:

forse non mi sono spiegato o non mi sono fatto capire

devo codificare su 8 ingressi 4 bit in bcd per una linea e altri 4 bit in bcd per l'altra linea

Inserita: (modificato)

Ciao Peppe , m i sembra che tu ti sia spiegato bene, alla tua domanda:

a me servono 4 bit alla volta per ogni byte di ingresso

Il codice che ti ho postato, esegue la mascheratura a 4 bit della word (perche le operazioni logiche a bit del 300 sono solo a word).

Poi prendi il valore contenuto nella MW10 o MW 12 ed esegui la conversione da BCD ad intero.

L MW12 //carica il valore della MW10
ITB       //converte da BCD ad intero
TMW12  //scrive il risultato della conversione in MW10

Nella word 12 troverai il risultato convertito in intero del codice BCD degli ultimii 4 BIT del primo byte della input word 1 che ti dato di esempio.

Ciao

Ivan

Modificato: da kamikaze
Inserita:

Supponiamo che tu abbia cablato i tuoi ingressi come segue:

- prima cifra BCD su ingressi E0.0-E0.1-E0.2-E0.3

- seconda cifra BCD su ingressi E0.4-E0.5-E0.6-E0.7

Potresti risolvere il problema nel seguente modo:

Per poter convertire da BCD a INT il valore codificato negli ingressi da E0.0 a E0.3 devi mascherare gli ingressi da E0.4 a E0.7.

Per fare ciò esegui un AND tra il byte EB0 ed il valore esadecimale "F", che in binario è "0000 1111".

Poi converti da BCD a INT. Il risultato, da 0 a 9, lo puoi scrivere in un solo byte.

      L     EB     0                    //Carica byte ingressi EB0
      L     B#16#F                      //Maschera per eliminare ingressi da E0.4 a E0.7
      UW    
      BTI                               //Converte da BCD a INT
      T     MB   100                    //Trasferisci in MB100 valore da 0 a 9 codificato in ingressi da E0.0 ad E0.3
Per poter convertire da BCD a INT il valore codificato negli ingressi da E4.0 a E0.7 devi eliminare gli ingressi da E0.0 a E0.3. Per fare ciò esegui uno shift a destra di 4 bit. I 4 bit meno significativi andranno persi, ed al loro posto ti troverai lo stato degli ingressi da E0.4 a E0.7 Poi converti da BCD a INT. Il risultato, da 0 a 9, lo puoi scrivere in un solo byte.
      L     EB     0                    //Carica byte ingressi EB0
      SRW   4                           //Shift a dx di 4 bit. Da E0.0 a E0.3 vanno persi e rimangono da E0.4 a E0.7
      BTI                               //Converte da BCD a INT
      T     MB   101                    //Trasferisci in MB100 valore da 0 a 9 codificato in ingressi da E0.4 ad E0.7

barbato giuseppe
Inserita:

salve

l'ultimo esempio di Batta funziona ma io nel frattempo avevo provato così

allego file

ditemi se va bene anche così

Inserita:

Il tuo metodo funziona, ma direi che si può migliorare.

Se proprio vuoi costruire la codifica dei 4 ingressi, potresti fare così:

      L     0
      UN    E      0.0
      SPB   _001
      +     1
_001: UN    E      0.1
      SPB   _002
      +     2
_002: UN    E      0.2
      SPB   _003
      +     4
_003: UN    E      0.3
      SPB   _004
      +     8
_004: T     MB   200
In questo modo con poche e semplici istruzioni converti i 4 ingressi in esadecimale, con valore da 0Hex a FHex (0-15 in decimale). Altro metodo:
      U     E      0.0
      =     M    200.0
      U     E      0.1
      =     M    200.1
      U     E      0.2
      =     M    200.2
      U     E      0.3
      =     M    200.3

Alla fine in MB200 trovi un valore da 0 a 15 (in decimale). Ovviamente i merker M200.4-M200.5-M200.6-M200.7 non li puoi usare per altri scopi, e devono tassativamente essere a zero.

barbato giuseppe
Inserita:

ok ti ringrazio Batta

alla prossima

Inserita:

      L     EB     0                    //Carica byte ingressi EB0
      L     B#16#F                      //Maschera per eliminare ingressi da E0.4 a E0.7
      UW    
      BTI                               //Converte da BCD a INT
      T     MB   100                    //Trasferisci in MB100 valore da 0 a 9 codificato in ingressi da E0.0 ad E0.3
      L     EB     0                    //Carica byte ingressi EB0
      SRW   4                           //Shift a dx di 4 bit. Da E0.0 a E0.3 vanno persi e rimangono da E0.4 a E0.7
      BTI                               //Converte da BCD a INT
      T     MB   101                    //Trasferisci in MB100 valore da 0 a 9 codificato in ingressi da E0.4 ad E0.7

Puoi anche togliere le istruzioni BTI perchè su soli 4 bit la codifica BCD e binaria si equivalgono.

  • 1 year later...
Inserita:

Ciao a tutti... ho comprato da un negozio che chiudeva una certa quantita' di placche , deviatori e prese della serie Delta della Siemens.Non riesco a trovare i supporti..mi hanno detto che ormai e' una serie fuori produzione..Vorrei saperne di piu' e se almeno le placche si possono utilizzare per qualche altra serie di altra marca.

Vi ringrazio in anticipo..Ciao

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