Vai al contenuto
PLC Forum


Multiplexer in AWL


lock

Messaggi consigliati

Il mio problema è riuscire ad implementare in AWL un multiplexer software che, data in ingresso una WORD con un valore compreso tra 0 e 31, riesca a valorizzare opportunamente un DOUBLE, ovvero "alzare" in esso il bit corrispondente.

Esempio:

nella WORD c'è il valore 17 (0000000000010001)

il multiplexer deve riuscire ad alzare il 17° bit del DOUBLE

nel DOUBLE si deve dunque verificare questa situazione:

(00000000000000010000000000000000)

Ho anche un altro problema: non so come effettuare una operazione di elevamento a potenza, sempre utilizzando AWL.

Grazie in anticipo a tutti quanti vorranno rispondere.

Lock.

Link al commento
Condividi su altri siti


Federico Milan

Provo a farlo al momento al limite correggi evventuali errori :D

hai una word giusto ? e la word deve puntarti al bit di una double, bene è banalissimo ecco, ipotiziamo che la word sia in un DB20.DBW0, e la funzione abbia una variabile temporanea che chiamo Punt_Double di tipo double. Diciamo che in DB20.DBW 2 ci sia l'indirizzo al quale si vuole realizzare il multiplexer ...

L DB20.DBW2 // Carico l'indirizzo della DWORD ...

ITD // trasformo indouble

L DW#16#10 //

*D // Trasformo il numero in puntatore

L DB20.DBW0 // Carico l'offset del bit interessato

ITD //

+D //

T Punt_Double //

// quindi se DBW0 = 5 e DBW2 = 2

oppure

AUF DB123

SET

=DBX[Punt_Double] // DBX5.2

In effetti non mi sembra che esisti un comando di elevamento a potenza ...

se hai numeri interi usa la tecnica di shift e somme :) ... se hai numeri reali potresti divertirti con le propietà dei logaritmi :)

exp(a*log(B)) = b^a :)

ciao

Link al commento
Condividi su altri siti

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