pelino Inserito: 14 marzo 2010 Segnala Share Inserito: 14 marzo 2010 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 creareuna stringa di trasmissione. Aggiornate le mie varriabili le voglio trasferire con un'unico comandoa 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 identifichiil 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 More sharing options...
eliomacc Inserita: 14 marzo 2010 Segnala Share Inserita: 14 marzo 2010 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 More sharing options...
pelino Inserita: 15 marzo 2010 Autore Segnala Share Inserita: 15 marzo 2010 Si Eliomacc è quello che voglio fare, il problema è che volevo inserire il tutto in unblocco funzionale e parametrizzare l'area di destinazione, in pratica l'area di destinazionedeve essere identificata come parametro formale del blocco funzionale e l'area di partenzacome parametro interno del blocco funionale.Grazie Eliomac per l'aiuto Link al commento Condividi su altri siti More sharing options...
edogol Inserita: 15 marzo 2010 Segnala Share Inserita: 15 marzo 2010 (modificato) 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: #00010000All'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. Spero di essere stato sufficientemente chiaro!Ciao! Modificato: 15 marzo 2010 da edogol Link al commento Condividi su altri siti More sharing options...
pelino Inserita: 15 marzo 2010 Autore Segnala Share Inserita: 15 marzo 2010 Ciao edogolCome avrai intuito ho incominciato con Omron solo una decina di giorni fa e quindi alcuneprecisazioni 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 IR0MOV 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 internonel 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 Arraycome faccio a puntare alle singole aree dell'Array ?Quale istruzione devo attivare per rilevare l'indirizzo delle aree di memoria ?GrazieCiao! Link al commento Condividi su altri siti More sharing options...
edogol Inserita: 15 marzo 2010 Segnala Share Inserita: 15 marzo 2010 (modificato) Bravo! Hai capito bene. Le mie spiegazioni a volte stupiscono anche me stesso... 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: 15 marzo 2010 da edogol Link al commento Condividi su altri siti More sharing options...
pelino Inserita: 15 marzo 2010 Autore Segnala Share Inserita: 15 marzo 2010 Grazie per il Bravo......, è facile capire dopo certe spiegazioni.Naturalmente, per ovvi motivi, mi ritroverai sul forum con altri nuovi problemida risolvere...................Ciao e Grazie ancora. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora