enomis81 Inserito: 29 dicembre 2013 Segnala Share Inserito: 29 dicembre 2013 Buonasera, ammetto che sono un principiante in fatto di programmazione, fino ad ora ho lavorato principalmente con programmi Siemens. Proprio oggi ho voluto provare il puntamento indiretto con il cx-programmer e devo dire che ho alcune difficoltà a capire quali sono le tipologie di puntamento che utilizzano questi modelli di plc. Qualcuno riesce ad aiutarmi??? Link al commento Condividi su altri siti More sharing options...
enomis81 Inserita: 29 dicembre 2013 Autore Segnala Share Inserita: 29 dicembre 2013 Forse sono stato un po troppo generico, le mie difficoltà riguardano l'utilizzo dei registri IR, ho provato con a scrivere qualche esempio riportato sul manuale ma con il simulatore del programma non riesco a farli funzionare. Avete qualche consiglio?? Link al commento Condividi su altri siti More sharing options...
lelos Inserita: 29 dicembre 2013 Segnala Share Inserita: 29 dicembre 2013 ciao spiegare i puntatori nel forum (secondo me ) non è facile(principalmente perché ci sarebbe molto da scrivere). io uso principalmente il puntamento diretto perché gestisce gli offset al puntatore. scrivimi una riga di codice di puntamento indiretto e dimmi dov'è il problema. usali con cautela e controllo perché se sfori le aree di memoria fai casini.ciao quanta esperienza hai nella programmazione dei plc omron? Link al commento Condividi su altri siti More sharing options...
enomis81 Inserita: 29 dicembre 2013 Autore Segnala Share Inserita: 29 dicembre 2013 Non ho molta esperienza a dire il vero, diciamo che l'esempio molto semplice che ho provato è il seguente: LD 2960.00 MOVR D0 - IR0 LD 2960.01 MOV D100 - ,IR0 Con questa semplice sequenza mi aspetto che il valore contenuto in D100 venga trasferito dentro l'indirizzo contenuto in IR0, giusto?? L'ho provato con il simulatore e non ho ottenuto riscontro, non funziona. Link al commento Condividi su altri siti More sharing options...
lelos Inserita: 29 dicembre 2013 Segnala Share Inserita: 29 dicembre 2013 ciao non è proprio così ci sono anche i DR..... Link al commento Condividi su altri siti More sharing options...
enomis81 Inserita: 29 dicembre 2013 Autore Segnala Share Inserita: 29 dicembre 2013 Scusa ma cosa sono i DR, o meglio a cosa servono?? Link al commento Condividi su altri siti More sharing options...
lelos Inserita: 29 dicembre 2013 Segnala Share Inserita: 29 dicembre 2013 ti mando esempi in mp (messaggi privati in alto a destra ) Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 30 dicembre 2013 Segnala Share Inserita: 30 dicembre 2013 Siccome ho visto che l'argomento degli indirizzamenti indiretti (tramite puntatori o registri indice) è più volte richiesto, provo a illustrarlo. Mi raccomando ai neofiti: fate una ricerca nel sito per vedere se gli argomenti sono già stati trattati, evitando di aprire argomenti già trattati... Per semplicità, si fa riferimento ai PLC serie CS/CJ e CP, che hanno un ottimo set di istruzioni. Gli altri sono o stanno andando fuori produzione. Cominciamo con il primo caso, cioè INDIRIZZAMENTO INDIRETTO (sarebbe il cosiddetto Puntatore di altri linguaggi). In pratica, non si definisce l'indirizzo della variabile di partenza e/o destinazione, ma una variabile contenente l'indirizzo di partenza e/o destinazione. In Omron, un indirizzo puntato lo si definisce mediante un carattere prima del nome della variabile contenente il puntatore (indirizzo vero). Se la variabile contenente il puntatore è espresso in BCD (ormai abbandonato) tale carattere è un *, altrimenti (binario) è un @. Quindi, l'istruzione MOV D100 @D200 sposterà il contenuto di D100 (per esempio +123) nella variabile puntata da D200. Se quest'ultima contiene per esempio +567 (decimale), il risultato dell'istruzione sarà di avere +123 (contenuto di D100) nella variabile D567 (puntata da D200). Come si vede, il valore della variabile puntatore è il valore nell'area D o E della variabile puntata. La limitazione di questo indirizzamento è che è valido solo per le aree D ed E, che però possono essere mescolate. Inoltre, non hanno limite di puntatori (gli IR sono "solo" 16), ne possono essere usati quanti se ne vuole, e le operazioni sul puntatore sono libere (moltiplicazioni, somme, ecc). Bisogna stare però attenti a non dar di fuori, altrimenti si avrà un errore di Illegal Area Access. Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 30 dicembre 2013 Segnala Share Inserita: 30 dicembre 2013 Poi ci sono i registri Indice, mediante i quali si ottiene un altro tipo di indirizzamento indiretto. Ce ne sono 16 disponibili, da IR0 a IR15. Questi sono dei registri (a 32 bit) che contengono effettivamente l'indirizzo interno della variabile puntata. Per "convertire" una variabile nel suo indirizzo si usa la MOVR (MOVRW per il valore attuale di contatori e timer). L'istruzione MOVR D0 IR0 mette in IR0 l'indirizzo interno della D0. Nei manuali trovate una tabella che riporta gli indirizzi interni delle varie aree. Se si vuole manipolare il contenuto del registro indice, non tutte le istruzioni sono utilizzabili, ma solo quelle riportate in apposita tabella. Una volta impostato il registro indice, è possibile utilizzarlo come segue (si fa l'esempio di IR0, ma vale per qualsiasi altro): Siano MOVR D50 IR0 (quindi IR0 contiene l'indirizzo di D50), D100 contiene +123, c=5, n=1, DR1 = +10 MOV D100 ,IR0 sposta il contenuto di D100 in D50, D50 puntato da IR0. Pertanto D50 = +123 MOV D100 c,IR0 sposta il contenuto di D100 in (D50+c), D50 puntato da IR0, con c costante algebrica tra -2048 e +2047. Pertanto D(50+5)=>D55 = +123 MOV D100 DRn,IR0 sposta il contenuto di D100 in (D50+DRn), D50 puntato da IR0, DRn è un registro Dati (da DR0 a DR15) contenente il valore da sommare algebricamente. Pertanto D(DR1+50)=>D(10+50)=>D60 = +123 MOV D100 ,IR0+ sposta il contenuto di D100 in D50, puntato da IR0 e poi incrementa di 1 il registro indice. Pertanto D50 = +123 e poi IR0 punta a D1. MOV D100 ,IR0++ sposta il contenuto di D100 in D50, puntato da IR0 e poi incrementa di 2 il registro indice. Pertanto D50 = +123 e poi IR0 punta a D2. MOV D100 ,-IR0 decrementa di 1 il registro indice e poi sposta il contenuto di D100 nel registro puntato da IR0. Pertanto IR0 punta a D49 e poi D49 = +123. MOV D100 ,--IR0 decrementa di 2 il registro indice e poi sposta il contenuto di D100 nel registro puntato da IR0. Pertanto IR0 punta a D48 e poi D48 = +123. La differenza sostanziale è che IRn può puntare a qualsiasi variabile, purchè di pari formato. Pertanto è possibile puntare alle aree CIO, W e H non raggiungibili dai puntatori di cui prima. Inoltre, è possibile indirizzare i bit, per cui se si fa una MOVR 34.5 IR0, il registro indice punterà al bit 5 della CIO 34. Ciò può essere utile per spostare o manipolare bit con i puntatori. Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 30 dicembre 2013 Segnala Share Inserita: 30 dicembre 2013 Ricapitolando un poco. Qualsiasi variabile D o E può essere usata come puntatore nella propria area, se usato con * o @. Tutte le normali istruzioni operano sul contenuto del puntatore. Mediante i registri indice IR è possibile puntare qualsiasi area, sia a bit che a word (o dual word), permettendo di operare in modo anche parecchio complesso sulle variabili. I registri dati DR sono dei registri offset che possono essere sommati algebricamente al registro indice per ottenere ulteriore flessibilità nel puntamento. I puntatori possono essere usati sia per la sorgente che per la destinazione o entrambi, per manipolazioni dati complesse. Cosa da tener presente è che non seguono l'aritmetica dei puntatori (come il C per esempio), pertanto in caso di variabili doppia o quadrupla word (per esempio i valori floating point in singola o doppia precisione), bisogna stare attenti agli incrementi e decrementi, cosa automatica in altri linguaggi di alto livello. Spero di aver fugato un po' di dubbi. Nel caso, sono a disposizione Link al commento Condividi su altri siti More sharing options...
enomis81 Inserita: 30 dicembre 2013 Autore Segnala Share Inserita: 30 dicembre 2013 Spiegazione perfetta!!! ma soprattutto molto chiara. Il dubbio che mi rimane, riguarda l'impiego con il simulatore. Nonostante abbia effettuato diversi esempi sulla base delle sue indicazioni, non riesco a puntare nessun valore. Potrebbe essere colpa del simulatore?? Dovrei provare con un plc vero?? Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 31 dicembre 2013 Segnala Share Inserita: 31 dicembre 2013 Veramente a me funziona perfettamente su simulatore (e ci mancherebbe altro...). Anche le tue righe all'inizio le ho testate e vanno. Io uso l'ultima versione dei software Omron, per cui CxProgrammer 9.5 e relativo simulatore (mi pare 1.9.94) E ovviamente li uso in continuazione nei programmi... Link al commento Condividi su altri siti More sharing options...
enomis81 Inserita: 31 dicembre 2013 Autore Segnala Share Inserita: 31 dicembre 2013 Io attualmente sto utilizzando la versione 9.31 e relativo simulatore, sicuramente e decisamente più vecchia della tua. Non riesco ne a puntare correttamente, ma sopprattutto quando apro la finestra di controllo non mi permette d'inserire i registri IR come denominazione. Potrebbe essere un problema legato alla versione del software?? Io volendo ho la possibilità nei prossimi giorni di provarlo con una cpu reale, credi possa essere una prova attenibile?? Grazie Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 2 gennaio 2014 Segnala Share Inserita: 2 gennaio 2014 I registri IR e DR non sono inseribili nella finestra di controllo. L'unico modo di poter vederne il contenuto (e manipolarlo, se necessario) è di usare Memoria nell'albero del progetto. Funziona anche nel simulatore. L'unica cosa che mi può venire in mente nel simulatore è che non sia in esecuzione (nelle vecchie versioni, caricavi il programma ma non andava in RUN automatico, ora si. I registri IR e DR non sono inseribili nella finestra di controllo. L'unico modo di poter vederne il contenuto (e manipolarlo, se necessario) è di usare Memoria nell'albero del progetto. Funziona anche nel simulatore. L'unica cosa che mi può venire in mente nel simulatore è che non sia in esecuzione (nelle vecchie versioni, caricavi il programma ma non andava in RUN automatico, ora si. Link al commento Condividi su altri siti More sharing options...
omer79 Inserita: 3 maggio 2016 Segnala Share Inserita: 3 maggio 2016 Salve a tutti, ho utilizzato spesso i puntatori all'interno dei miei programmi mediante un carattere prima del nome della variabile (BCD *, altrimenti in binario un @), ma ora voglio utilizzare un puntatore dentro un blocco funzione e provando ad inserire i caratteri * o @ prima del indirizzo si verifica un errore durante la compilazione. Mi sfugge qualcosa... è possibile utilizzare un puntatore dentro un blocco funzione creato in ladder? Allego uno ScreenShot della compilazione Grazie Link al commento Condividi su altri siti More sharing options...
hughthomas Inserita: 24 settembre 2018 Segnala Share Inserita: 24 settembre 2018 https://clashroyaleapk.net/clash-royale-private-servers/ Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati