Vai al contenuto
PLC Forum


Utilizzare Il Puntatore Any


jake

Messaggi consigliati

:rolleyes:

Ciao a tutti;

qualche volta mi sono trovato ad utilizzare blocchi standard Siemens, tipo sfc20 BLKMOV, che hanno come parametri di ingresso e di uscita dei puntatori ANY.

Quello che volevo sapere è se qualcuno ha mai scritto delle funzioni che avessero come parametri IN, OUT o IN/OUT dei puntatori ANY e come li ha utiizzati all'interno della sua funzione.

Io sono riuscito a utilizzare questi puntatori per parametrizzare le funzioni Siemens, ma non ho mai capito come possano essere utilizzate in una funzione fai da te, in quanto i blocchi Siemens, come tutti sanno, sono Close Source. :(

Qualcuno può aiutarmi a capire????

Grazie 1000 a tutti quanti!

Good Luck, Jake ;)

Link al commento
Condividi su altri siti


Grazie per la risposta, ma non è quello che intendevo.

Ero già a conoscenza di come paramatrizzare il puntatore ANY - magari potrà servire a qualcuno che passando da questo post potrà trarne vantaggio ;) - quello che volevo sapere è questo:

Se io debbo scrivere una routine parametrizzabile e come parametri voglio utilizzare dei puntatori ANY(IN, OUT e IN/OUT), ho visto che è possibile dichiararli nei parametri della mia funzione, ma quello che non ho capito, questi parametri da me indicati li debbo utilizzare come la discussione alla quale tu mi hai rimandato oppure c'è un altro modo?

Fino a quando si tratta di utilizzarli solo per parametrizzare una funzione Siemens non ho problemi, ma volevo avere un esempio di come utilizzarli se la funzione la scrivo io! :(

Spero di essere stato chiaro.

Grazie ancora per il tuo aiuto.

/Good Luck, Jake ;)

Link al commento
Condividi su altri siti

Il puntatore any in sintesi un blocco di 10 bytes dove secondo una sintassi ben determinata viene descritto un array di variabili dove le variabili sono bit, bytes ecc.

Non so se l'esempio che ti mostro possa calzare con quanto richiedi ma io utilizzo i parametri interni della FC di competenza per creare il puntatore any da inserire nella FC std siemens

Lo stesso puo' essere analogamente passato come parametro di input qualora tu voglia effettuare operazioni su array.

//***********************

LAR1 P##X_Sorgente // Parameter assignment ANY

//***********************

L W#16#1002 // ID code & type

T LW [AR1,P#0.0]

L 3238 // Nr. bytes

T LW [AR1,P#2.0]

L 100 // Nr. DB100 sorgente

T LW [AR1,P#4.0]

L 0 // From DW number

SLD 3

OD DW#16#84000000

T LD [AR1,P#6.0]

//***************************

LAR1 P##Y_Destinatario // Parameter assignment ANY

//***************************

L W#16#1002 // ID code & type

T LW [AR1,P#0.0]

L 3238 // Nr. bytes

T LW [AR1,P#2.0]

L 501 // Nr. DB destination = DB 501

T LW [AR1,P#4.0]

L 0 // To DW number

SLD 3

OD DW#16#84000000

T LD [AR1,P#6.0]

CALL "BLKMOV" // SFC20 DATA_BLOCK_MOVE

SRCBLK :=#X_Sorgente

RET_VAL:=#return

DSTBLK :=#Y_Destinatario

dove nell'intestazione della FC compaiono come parametri TEMP:

Nome Tipo di dati indirizzo commento

X_Sorgente any 0.0 aaaaaaaaaa

Y_Destinatario any 10.0 bbbbbbbbbb

pigroplc

Link al commento
Condividi su altri siti

:lol:

Questa è la stessa cosa che faccio anch'io - sicuramente ne gioveranno in tanti da questa discussione che sta mostrando come usarli per parametrizzare le fc standard, grazie pigroplc ;) - però il mio dilemma è ancora attivo.

**** Forse non riesco a spiegare quello che voglio sapere perchè non ho un'applicazione di esempio da proporre! :(

Comunque, io voglio scrivere una fc o fb, non ha importanza, voglio che questa funzione possa essere parametrizzata dall'esterno da chiunque si trovi ad utilizzarla... i parametri che voglio mettere in ingresso ed in uscita sono dei parametri di tipo ANY (immaginate che la sfc20 BLKMOV sia una funzione non standard ma scritta da un utente).... la mia domanda è: come maneggio questi parametri ANY all'interno della mia funzione (sfc20) ovvero i programmatori Siemens come gestiscono questi parametri ANY all'interno delle loro funzioni standard????

Lo so che sono delle elucubrazioni, ma volevo capire se magari posso usare questi tipi di puntatori in alcune fc scritte da me (del mio standard :lol: )

Grazie 1000 ancora a tutti quelli che hanno risposto e a tutti quelli che parteciperanno alla discussione!!!

Siete grandi.

/Good Luck, Jake ;)

Link al commento
Condividi su altri siti

Sinceramente faccio fatica a capire la tua richiesta, certo è che se voglio "sfuttare" un

parametro in ingresso dichiarato come any è possibile attenersi alle informazioni mappate

nella struttura stessa any:

cioè nel dato locale 0 mi trovo una cosa, per esempio bytes,

nel dato locale 2 mi trovo un numero che fa riferimento ad un numero di unità dichiarate nel

dato locale 0

ecc ecc

La verità è che il parametro any l'ho sempre e solo utilizzato per trasferire blocchi di dati, altro discorso invece per i registri AR1.....

pigroplc

Link al commento
Condividi su altri siti

Ma se tu dovessi scrivere una funzione da 0, e decidessi che i parametri da te utilizzati debbano essere dei puntatori ANY, all'interno della tua funzione li utilizzeresti nel metodo già sopra rappresentato oppure no????

Se tu fossi il programmatore della siemens che ha scritto l'SFC20 BLKMOV, quei parametri ANY all'interno della funzione, come l' hai maneggiati?? :unsure:

Sono riuscito a spiegare quello che intendo sapere? :huh:

Grazie ancora per la tua disponibilità.

/Good Luck, Jake ;)

Link al commento
Condividi su altri siti

Se ho capito bene vorresti fare delle prove , visto che ora sai come sono mappati e il significato dei 10 byte di un puntatore any , lo appoggi ad un puntatore any dichiarato nelle variabili locali ed utilizzi i byte e word che tiservono in valore assoluto all'interno del tu fc o fb

spero sia tutto chiaro

Modificato: da STEU
Link al commento
Condividi su altri siti

spero sia tutto chiaro

Forse stiamo arrivando a quello che intendo, però non ho capito bene cosa mi hai voluto spiegare :unsure:

Potresti riformulare per favore, o hai qualche esempio, magari anche stupido, da farmi vedere???? :)

/Good Luck, Jake

Link al commento
Condividi su altri siti

ripercorrendo l'esempio che ho fatto nel post precedente ti crei per esempio una fc con un parametro any in ingresso e nel codice della fc ci metti il richiamo dei dati di istanza

alla word 2 per esempio hai il numero di bytes, alla word 4 per esempio hai il numero della DB ecc.

come primo esempio leggi le word dei dati di istanza e li copy nei merker word, quindi ti rendi conto dei valori che cambiano al cambiare del parametro any di richiamo della FC.

Gia con questo puoi capire, prova inoltre a cambiare il parametro any mettendo aree di input e output, e vedi cosa cambia.

pigroplc

Link al commento
Condividi su altri siti

L'esempio che trovate in allegato è quello che sono riuscito a fare con il puntatore ANY :lol:

Si tratta di una funzione che gestisce 16 comandi da pannello operatore o da pulsantiera (K1..K16), in base alla richiesta attivata attiva il comando ad essa relativo, inoltre questo comando può essere resettato dopo un tempo di 3 secondi oppure abilitando nuovamente la richiesta. La voce Mask serve ad interbloccare l'attivazione del comando o addirittura a resettarlo se questo è già attivo.

Per poter provare questa fc dovete crearvi una DB che utilizza il seguente ordine:

  • 0.0 Delay (WORD);
  • 2.0 Mask (WORD);
  • 4.0 Request (WORD);
  • 6.0 Command (WORD) oppure una struttura di booleani se volete avere il commento per ogni simbolo
Good Luck, Jake ;)
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...