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




Puntatore In Scl


Messaggi consigliati

Inserito:

Ragazzi volevo chiedere come si gestisce un puntatore in SCL, cioè qual'è la sintassi giusta per dichiarare e inizializzare sia l'indirizzo che il valore del puntatore stesso.

Grazie a tutti..... :(


Inserita:

Ciao,

se solo per verificare come scriverlo prendi uno già fatto in step7 o crealo.

Poi apri o salva il sw di partenza e usa la funzione "genera sorgente"

La sintassi deve essere la stessa.

Saluti

Romano

Gianmario Pedrani
Inserita:

Non credo che sia la stessa sintassi, in quanto scl è un linguaggio ad alto livello, molto simile al pascal, quindi credo, ma devo ferificare il manuale che la gestione dei puntatori sia simile al pascal, se comunque hai installato scl troverai una guida in formato pdf dove ti spiega come utilizzarli

ciao

Inserita:
Non credo che sia la stessa sintassi
sono d'accordo!
ma devo ferificare il manuale che la gestione dei puntatori sia simile al pascal,
Dunque, per quanto ne so, gli statements sotto indicati usati in Pascal, non sono ammessi in SCL

var
   i: integer;
   p: ^integer;


begin
   p := [at]i;
   p^ := 2;

end.

L'uso del tipo data POINTER verrebbe accettato solo come parametro di dichiarazione I/O per passaggi di indirizzi nei richiami blocchi.

Se guardi sull' HTML di aiuto allegato al SCL, potresti capire qualcosa...

Comunque secondo me, l'AWL resta un valitissimo linguaggio di programmazione per l'utilizzo dei puntatori.

Inserita:

no .In scl i puntatori sono intrinseci negli indici degli array , semplici o strutture di array

Per fare cio devi dichiarare i sombolici delle strutture indicizzate

Piccola funzione che uso per spostare dati in un tracking

FUNCTION FC13: INT

VAR_INPUT

END_VAR

VAR_IN_OUT

END_VAR

VAR_OUTPUT

END_VAR

VAR_TEMP

ind:INT;

END_VAR

BEGIN

DB_TRACK.DATA[35]:= DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded];

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].LENGHT:=0.0;

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].WEIGHT:=0.0;

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].DIAMETER:=0.0;

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].REAL1:=0.0;

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].REAL2:=0.0;

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].INT1:=0;

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].INT2:=0;

DB_TRACK.DATA[30 - DB_CONV_8.Reels_Loaded].BARCODE:=' ';

;

FC13 := 1;

END_FUNCTION

Inserita:
no .In scl i puntatori sono intrinseci negli indici degli array
Beh, un indirizzamento indiretto attraverso una "variabile puntatore" non e' la stessa cosa che un indirizzamento indiretto attraverso l'indici. Forse Io non avevo capito bene la domanda. Comunque, per me un puntatore e ben un'altra cosa.

Inserita:

scl accetta anceh tipi di dati ANY e pointer .E' chiaro che il concetto e' una cosa , il codice un altro

Inserita: (modificato)

In SCL puoi utilizzare anche i seguenti modi di indirizzamento indiretto:

"DBDatiSup".dw[indWord]

in cui "DBDatiSup" è il nome simbolico della DB

"IndWord" è l'indirizzo della word nella DB (formato INT)

oppure

"DBDatiSup".dx[indByte,IndBit]

in cui "DBDatiSup" è il nome simbolico della DB

"IndByte" è l'indirizzo del byte nella DB (formato INT)

"IndBit" è l'indirizzo del bit nella DB (formato INT)

oppure

WORD_TO_BLOCK_DB(IndDB).dbx18.0

in cui "IndDB" è l'indirizzo della DB (formato WORD)

oppure pui mischiare le cose

WORD_TO_BLOCK_DB(IndDB).dw[indWord]

in cui "IndDB" è l'indirizzo della DB (formato WORD)

"IndWord" è l'indirizzo della word nella DB (formato INT)

CIAo

Beppe

Modificato: da beppeconti

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