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




Dubbi Su Formato Any


Messaggi consigliati

Inserito:

Buongiorno a tutti.

In questi giorni mi dibatto con la gestione di un parametro attuale passato ad un parametro formale di tipo ANY. Mi chiedevo se tralasciando la parte relativa all'estrazione del tipo di area e di lunghezza ciò che ho scritto come codice sembra secondo voi corretto o se per caso esiste una via + semplice. Mi riferisco per l'esattezza all'estrazione dell'indirizzo contenuto parte nel byte 7 e nel byte 8 -9.

A me sinceramente sembra così complicato!!!

VAR_INPUT

DB_Dati : BLOCK_DB ;

INPUT : ANY ;

INDICE : INT ;

END_VAR

VAR_OUTPUT

output : ANY ;

ERR : BYTE ;

END_VAR

VAR_TEMP

..................

END_VAR

BEGIN

NETWORK

TITLE =

..................................

//Qui viene ricostruito l'indirizzo in formato Byte.Bit fornito al parametro

//formale ANY e convertito, (moltilicando #Byte per 8 e aggiungendo il valore

//della variabile #Bit), per essere caricato in AR1.

//

L P##INPUT;

LAR1 ;

//Estraggo i bit di peso 15-14-13 dell'inidirizzo Byte

L B [AR1,P#7.0];

SLW 13;

T #_Byte;

//Estraggo 16 bit che contengono parte dell'inidirizzo Byte

// e l'inidirizzo Bit

L W [AR1,P#8.0];

PUSH ;

// Estraggo i bit dell'indrizzo Bit e salvo

UW W#16#7;

T #_Bit;

TAK ;

// Sposto di peso i restanti bit dell'indirizzo Byte sulla posizione 12 - 0

// Per poterne interpretare il giusto valore

SRW 3;

// Sommo il risultato al valore salvato per ricostruirne il totale

L #_Byte;

+I ;

// Moltiplico per 8 per generare il formato compatibile con AR1

SLD 3;

LAR1 ;

// Sommo gli eventuali bit di offset per puntare un indirizzo a bit

L #_Bit;

+D ;

// Finalmente carico il risultato in AR1

LAR1 ;

U M [AR1,P#0.0];

Grazie a chiunque ci darà un occhio


Inserita:

L P##InputAny

LAR1

L D [AR1,P#6.0]

LAR1

U M [AR1,P#0.0]

= A 1.0

Se ho inteso bene il tuo quesito.

Io farei così... il sesto byte del puntatore any lo perdi nell'interrogazione prima dell'assegnazione qquindi non hai bisogno di pulirlo.

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