Vai al contenuto
PLC Forum


Istruzione Xfer


pelino

Messaggi consigliati

Ciao a tutti, vi espongo il mio problema:

ho creato un blocco funzionale dove vado ad aggiornare 10 varriabili interne, che ho definito come

interi senza impostazioni AT, nelle varriabili ho inserito caratteri ASCII che mi servono per creare

una stringa di trasmissione. Aggiornate le mie varriabili le voglio trasferire con un'unico comando

a 10 canali D, ho pesato di utilizzare per questa operazione il comando XFER (70).

Vorrei definire il primo canale di destinazione come parametro formale del mio blocco e come primo canale di origine la prima varriabile interna delle 10 impostate.

Vorrei sapere se questo è possibile, in pratica come definisco un parametro formale che mi identifichi

il primo canale di destinazione ( nel mio caso un canale D ) ?

posso definire il primo canale di origine la prima varriabile interna definita ?

Spero di essermi spiegato.

Grazie a tutti

Link al commento
Condividi su altri siti


Se ho ben capito vuoi spostare 10 dm in blocco giusto ? Se è cosi devi impostare il primo campo dell'istruzione XFER #10 ( numero di word da movere) nel secondo Dxxx ( dove xxx è il numero della prima DM delle 10 da spostare ) nel terzo DMyyy ( dove yyy è il numero della prima DM dove andrai a spostare il contenuto di origine ) Spero di esserti stato di aiuto

Link al commento
Condividi su altri siti

Si Eliomacc è quello che voglio fare, il problema è che volevo inserire il tutto in un

blocco funzionale e parametrizzare l'area di destinazione, in pratica l'area di destinazione

deve essere identificata come parametro formale del blocco funzionale e l'area di partenza

come parametro interno del blocco funionale.

Grazie Eliomac per l'aiuto

Link al commento
Condividi su altri siti

Ciao pelino.

Puoi farlo utilizzando gli IR (indirizzo fisico di memoria che rappresenta la tua area di partenza ad es. D0) e i DR (offset rispetto all'area di partenza che passi tramite ingresso del FB)

Supponiamo che tu voglia puntare al D123. Quello che dovrà fare il tuo FB è caricare il D0 nell'IR0, 123 nel DR0 e poi utilizzare la sintassi DR0,IR0 nella XFER.

Per farla semplice:

L'indirizzo fisico di memoria del D0 (che recuperi sui manuali o con due righe di ladder) è questa costante (HEX) in doppia lunghezza: #00010000

All'inizio del tuo FB devi quindi muovere questa costante nell'IR0 (con una MOV lunga, ovviamente): [MOVL #00010000 IR0]

Se &123 (che come simbolo di ingresso dell'FB chiamerò 'Indirizzo_Dest' ) è l'ingresso del FB che rappresenta il tuo canale DM di destinazione, dovrai caricare l'&123 nell'area DR: [MOV Indirizzo_Dest DR0]

A questo punto il gioco è fatto:

L'istruzione [XFER &10 DR0,IR0 Array] copierà 10 word dal DM123 nel tuo array interno. :thumb_yello:

Spero di essere stato sufficientemente chiaro!

Ciao!

Modificato: da edogol
Link al commento
Condividi su altri siti

Ciao edogol

Come avrai intuito ho incominciato con Omron solo una decina di giorni fa e quindi alcune

precisazioni ti risulteranno per te evidenti.

Vediamo se ho capito:

IR0 è il registro indice che, per quanto riguarda l'aera D della memoria PLC,

corrisponde a #00010000. Se dovessi puntare all'area I/O sarebbe un'altro valore, giusto ?

In DR0 vado ad inserire il " puntatore " nel caso dell'esempio valore intero 123.

Quindi riassumendo:

MOVL #0001000 IR0

MOV Indirizzo_Dest DR0 ( dove Idirizzo_dest è il mio parametro formale input tipo dati INT ).

Con queste operazioni ho definito DR0,IR0 è come avessi scritto D123.

A questo punto attivo il comando XFER &10 Array DR0,IR0 se voglio spostare l'Array interno

nel puntatore dalla D123 alla D133 = 10 parole.

Mi manca di capire come definisco la varriabile interna Array.

Devo definirala come matrice dando dimesione matrice 10 tipo dati Word ?

Siccome all'interno dell'FB utilizzo i comandi MOV per aggiornare la varriabile del mio Array

come faccio a puntare alle singole aree dell'Array ?

Quale istruzione devo attivare per rilevare l'indirizzo delle aree di memoria ?

Grazie

Ciao!

Link al commento
Condividi su altri siti

Bravo! Hai capito bene. Le mie spiegazioni a volte stupiscono anche me stesso... :D

Sì, per definire la variabile array crea una variabile interna e clicca sulle impostazioni avanzate. Da lì puoi definire la dimensione della matrice (che è la traduzione di Array).

Per accedere all'elemento utilizza le parentesi quadre; puoi farlo sia con una costante (es: Mio_Array[5]) che in modo indiretto (es: Mio_Array[indice] dove indice è un'altra variabile)

Per sapere l'indirizzo fisico delle aree di memoria puoi usare (nel ladder normale, non dentro un FB) una istruzione MOVR dell'indirizzo che ti interessa in uno degli IR che il PLC mette a disposizione (ne hai ben 16 mi sembra ma non ricordo bene).

Per esempio se ti interessa sapere qual'è l'ind fisico del canale WR50 fai: [MOVR W50 IR0] e poi usi una MOVL dell'IR0 in un canale a tuo piacimento (ad es: [MOVL IR0 D100])

Nel D100 (e D101) troverai i 32 bit dell'indirizzo fisico allocato al canale WR0. Se lo fai per il D0 troverai il famoso numero #00010000 (se lo guardi in esadecimale ovviamente)

Chiaro no?!? Ma certo che sì! ;)

Ciao!

Modificato: da edogol
Link al commento
Condividi su altri siti

Grazie per il Bravo......, è facile capire dopo certe spiegazioni.

Naturalmente, per ovvi motivi, mi ritroverai sul forum con altri nuovi problemi

da risolvere...................

Ciao e Grazie ancora.

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