Vai al contenuto
PLC Forum


Creazione tramite funzione SCL di un oggetto che scompone una word in 16 bit.


ASCII Group

Messaggi consigliati

Sto cercando di creare, in STEP7, una funzione in linguaggio SCL per scomporre una variabile word (INT) in 16 bit booleani.

Tempo addietro lo feci in TIA14 utilizzando la seguente istruzione:

#WORD.%X0 := #BIT_0;

#WORD.%X1 := #BIT_1;

#WORD.%X2 := #BIT_2;

eccetera.......

 

 

La mia esigenza ora è di crearla in STEP7, come si fa?

P.S. allego immagine con la dichiarazione degli IN ed OUT 

Saluti e ringraziamenti anticipati

SCL.jpg

Link al commento
Condividi su altri siti


Mattia Spoldi

è un po' che non uso il 300 quindi non mi ricordo proprio benissimo le istruzioni, ma ti dovrebbe bastare scrivere

out_bit_01 := in_word and w#16#01;

out_bit_02 := in_word and w#16#02;

out_bit_03 := in_word and w#16#04;

e vai avanti così

 

Link al commento
Condividi su altri siti

4 ore fa, pigroplc ha scritto:

la funzione più semplice è quella dell'overlay cioè usando AT.

Assolutamente sì. Attenzione però allo scambio dei byte.

Link al commento
Condividi su altri siti

Credo si possa fare solo in SCL.
Un esempio di dichiarazione di variabili sovrapposte con AT in SCL con Simatic Manager:

VAR_TEMP
    // Variabili temporanee
    tmpWord: WORD;
    structBit AT tmpWord: STRUCT
        bit_00: BOOL;
        bit_01: BOOL;
        bit_02: BOOL;
        bit_03: BOOL;
        bit_04: BOOL;
        bit_05: BOOL;
        bit_06: BOOL;
        bit_07: BOOL;
        bit_08: BOOL;
        bit_09: BOOL;
        bit_10: BOOL;
        bit_11: BOOL;
        bit_12: BOOL;
        bit_13: BOOL;
        bit_14: BOOL;
        bit_15: BOOL;
END_STRUCT;
END_VAR

 

Come dicevo nel precedente post, si deve fare attenzione all'ordine dei byte. Con la dichiarazione dell'esempio, il primo bit della variabile "tmpWord" (quello a destra) sarà "structBit.bit_08".

Per fare in modo che il bit a destra sia bit_00, basta aggiustare la dichiarazione come segue:

VAR_TEMP
    // Variabili temporanee
    tmpWord: WORD;
    structBit AT tmpWord: STRUCT
        bit_08: BOOL;
        bit_09: BOOL;
        bit_10: BOOL;
        bit_11: BOOL;
        bit_12: BOOL;
        bit_13: BOOL;
        bit_14: BOOL;
        bit_15: BOOL;
        bit_00: BOOL;
        bit_01: BOOL;
        bit_02: BOOL;
        bit_03: BOOL;
        bit_04: BOOL;
        bit_05: BOOL;
        bit_06: BOOL;
        bit_07: BOOL;
END_STRUCT;
END_VAR

 

Modificato: da batta
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...