Vai al contenuto
PLC Forum


Puntatori


nikopoli

Messaggi consigliati

Ciao a tutti sto cercando di utilizzare per la prima volta un puntatore per abilitare delle FC ma devo sbagliare in qualche punto perchè non riesco a cambiare l'FC tramite il kp300 cambio il valore della variabile e online vedo che esso cambia ma poi nel blocco move non succede nulla dove sto sbagliando? grazie mille in anticipo.

cattura 2.PNG

Cattura1.PNG

Cattura3.PNG

Cattura4.PNG

Link al commento
Condividi su altri siti


Simone.Salarsi

così a prima vista non vedo errori, sembrerebbe corretto. Se le variabili del progetto sono tutte quelle che hai mostrato non vedo nemmeno sovrapposizioni di merker che potrebbero darti problemi però farei comunque una seconda verifica per sicurezza

 

L'unica cosa, M20.0 "Carica Ricetta" dove e come viene comandato ?

Link al commento
Condividi su altri siti

Chi cambia M20.0? Perché se non cambia il fronte positivo non si attiverà mai.

Lo setti/resetti come evento nell'oggetto del pannello?

Poi solo per chiarezza il termine puntatore è fuori luogo, il suo nome più corretto è Indice.

Link al commento
Condividi su altri siti

  • 2 weeks later...

M20.0 per ora non viene cambiato da nessun interruttore fisico lo Comandavo a 1 dal tia portal dopo lo assegnero a un pulsante fisico, il punto è che se guardo la variabile puntatore ricette essa cambia il valore ma poi il blocco move non me lo trasmette sull'array e non riesco a capirne il motivo... può essere dato dal fatto che comando m20.0 dal tia e non fiscamente?

 

Scusate il ritardo, ma ero via e non ho potuto più rispondervi ma intanto grazie!

Modificato: da nikopoli
Link al commento
Condividi su altri siti

Ciao, scusa ma non sto capendo ... per quale motivo copi l'array con indice "Puntatore_Ricette" dentro lo stesso array con indice 0 ?

Ciao,

Claudio.

Link al commento
Condividi su altri siti

La stessa cosa mi succede in simulazione, in foto si può vedere lo stato della variabile che non è 0 ma due e invece non varia il valore nell array. premetto che per quanto riguarda il blocco move avevo cercato di replicare un progetto visto in precedenza da un altro ragazzo, ma non ho ben capito come lavora, di conseguenza non saprei capire se ci fossero dei problemi, se riuscite a spiegarmi dove sto sbagliando e come devo procedere mi fareste un grande favore.

image.png

Modificato: da nikopoli
Link al commento
Condividi su altri siti

Non mi hai risposto, me ne farò una ragione 😉

Non puoi usare MOVE per copiare una struttura. Devi usare BLKMOV o UBLKMOV.

 

Inoltre, come ti hanno già detto, ricordati che non stai usando i puntatori (che sono una cosa diversa) ma un array al cui elemento accedi specificandone l'indice.

 

Ciao,

Claudio.

 

Link al commento
Condividi su altri siti

Simone.Salarsi
38 minuti fa, Cip77 ha scritto:

Ciao, scusa ma non sto capendo ... per quale motivo copi l'array con indice "Puntatore_Ricette" dentro lo stesso array con indice 0 ?

Ciao,

Claudio.

Suppongo che probabilmente @nikopoli intenda usare l'array[0] come ricetta in uso del programma e gli altri indici come archivio.

 

 

Comunque così a prima vista mi sembra corretto. Non sono solito usare merker come indici di array, ma non penso sia quello il problema.

Ma se invece di usare un fds, tanto per fare un test, provi a mettere un move senza condizioni cosa succede?

 

Ho provato a riprodurre e simulare ed a differenza tua andando online vedo i valori attuali sul blocco MOVE

image.thumb.png.3e0b6c942d9a3e5a4665a9f7f7c3c4b8.png

 

Che versioni di Tia e Firmware CPU hai ?

Link al commento
Condividi su altri siti

Simone.Salarsi
3 minuti fa, Cip77 ha scritto:

 

Non puoi usare MOVE per copiare una struttura. Devi usare BLKMOV o UBLKMOV.

 

Ciao,

Claudio.

 

 

si può usare tranquillamente il move per muovere una struttura, array o UDT  a patto che ovviamente sorgente e destinazione siano uguali

Link al commento
Condividi su altri siti

15 minuti fa, Simone.Salarsi ha scritto:

Suppongo che probabilmente @nikopoli intenda usare l'array[0] come ricetta in uso del programma e gli altri indici come archivio.

Immagino anche io così .... quindi, a che serve? Non può andare a leggere direttamente la ricetta usando l'indice direttamente?

 

11 minuti fa, Simone.Salarsi ha scritto:

si può usare tranquillamente il move per muovere una struttura, array o UDT  a patto che ovviamente sorgente e destinazione siano uguali

Allora mi ricordo male, grazie.

Claudio.

Link al commento
Condividi su altri siti

@Cip77 Non ti ho risposto perchè mi era stato fatto questo programma da un compagno parecchio tempo fa e ora l'ho rispolverato per cercare di capire come funziona, quindi in poche parole non sono molto ferrato sull'argomento ho dato un occhiata a un po' di manuali, ma non sono riuscito a capire. infatti quello che mi è poco chiaro e cosa serve definire nell'input e cosa nell output del blocco move in generale per poter svolgere questo tipo di compito. 

 

@Simone.SalarsiCosa intendi per mettere un move senza condizioni?

Tia 13 sp2 update 4

versione 4.1

Link al commento
Condividi su altri siti

23 minuti fa, nikopoli ha scritto:

Non ti ho risposto perchè mi era stato fatto questo programma da un compagno parecchio tempo fa e ora l'ho rispolverato per cercare di capire come funziona, quindi in poche parole non sono molto ferrato sull'argomento ho dato un occhiata a un po' di manuali, ma non sono riuscito a capire. infatti quello che mi è poco chiaro e cosa serve definire nell'input e cosa nell output del blocco move in generale per poter svolgere questo tipo di compito. 

Ma questa è una risposta. Come ho accennato sopra, non serve e non è una buona pratica fare una cosa del genere.

Se hai un array con 100 elementi, per accedere ad ogni elemento non devi usare l'indice per copiarlo da qualche parte e poi andare a leggertelo dopo: lo leggi direttamente usando l'indice.

 

Quello che stai facendo te è questo:

copio array[indice] dentro array[0]

mi leggo array[0]

 

Invece ti basta leggere direttamente array[indice].

 

Spero di essere stato chiaro e di aiuto.

 

27 minuti fa, nikopoli ha scritto:

Cosa intendi per mettere un move senza condizioni?

 

Intende un MOVE che viene eseguito ad ogni ciclo. In pratica devi levare il test su M20.0

 

Ciao,

Claudio.

Link al commento
Condividi su altri siti

Non ti sto seguendo molto  ma provo a mettere per iscritto quanto mi hai detto tu così puoi correggermi allora all input di move dovrei mettere ricetta e come indice puntatore ricette che è la variabile che modifico da hmi quindi sarebbe Ricette. ricetta[puntatore ricette] e poi in uscita cosa uso? Riusciresti a farmi un esempio utilizzando questi nomi cosi non ci confondiamo perchè non riesco a capire come possa funzionare con un blocco move.

DB: Ricette 

Array: array 

Indice: "quello che necessario" 

 

Grazie a tutti e scusate l'ignoranza!

 

 

 

Modificato: da nikopoli
Link al commento
Condividi su altri siti

Simone.Salarsi

@nikopoli 

ho riprovato con TIA13 sp2 ( con simulatore) e mi funziona.

Hai  possibilità di condividere il tuo progetto ? ( eventualmente togliendo parti di programma che non vuoi mostrare)

 

 

15 ore fa, Cip77 ha scritto:

Ma questa è una risposta. Come ho accennato sopra, non serve e non è una buona pratica fare una cosa del genere.

 

 

Come mai pensi che non sia una pratica non buona ? Quali controindicazioni possono esserci ?

 

Dal mio punto di vista non ci vedo nulla di male a copiare la ricetta selezionata dall'archivio ad un altra area di memoria da utilizzare nel programma senza dover toccare mai una volta inserita al posto giusto.

 

Io ed i miei colleghi utilizziamo solitamente questa tecnica quando usiamo le ricette salvate nel PLC, l'unica differenza è che invece di copiare nell'indice[0] mi creo una nuova struttura ( semplice o complessa a seconda del programma) chiamata Programma.inUso che andrò ad utilizzare in tutto il programma.

Link al commento
Condividi su altri siti

23 ore fa, Simone.Salarsi ha scritto:

Dal mio punto di vista non ci vedo nulla di male a copiare la ricetta selezionata dall'archivio ad un altra area di memoria da utilizzare nel programma senza dover toccare mai una volta inserita al posto giusto.

Non è sbagliato ma, a seconda dei casi, non è nemmeno vantaggioso. Va analizzato caso per caso.

 

23 ore fa, Simone.Salarsi ha scritto:

l'unica differenza è che invece di copiare nell'indice[0] mi creo una nuova struttura

È questa la pratica da evitare a cui mi riferivo. Mentre copiare in una nuova variabile come fai te va bene.

 

Ciao,

Claudio.

Link al commento
Condividi su altri siti

Simone.Salarsi

non riesco a trovare il progetto a quel link.

 

fai una cosa, apri il programma in TIA poi dal menu progetto scegli archivia così che ti venga creato un file compresso contenente tutto il progetto e poi condividi quello

Link al commento
Condividi su altri siti

Simone.Salarsi

buongiorno, ho provato con il tuo progetto e mi sembra funzionante.

 

L'unica cosa che vedo che non va bene è che il DB Ricette non è impostato come retentivo. Questo comporta che ad ogni avvio del plc tutti i bit del tuo DB Ricette ritornano al loro stato iniziale ( sono tutti false nel progetto che hai condiviso)

 

Dove imposti questi bit di configurazione ? attualmente non mi sembra di aver visto impostazioni sul pannello.

 

Prova a settare a TRUE tutti i bit dell'array "Ricette".Ricetta[1], poi imposti 1 la variabile puntatore_ricette ed infine comandi ad 1 M20.0.

Dovresti vedere che in "Ricette".Ricetta[0] tutti i bit diventano TRUE

 

 

Link al commento
Condividi su altri siti

ifachsoftware
Il 23/8/2021 alle 15:57 , Cip77 ha scritto:

Immagino anche io così .... quindi, a che serve? Non può andare a leggere direttamente la ricetta usando l'indice direttamente?

 

Allora mi ricordo male, grazie.

Claudio.

Per usare gli indici nel pannello serve un Comfort Panel mentre nel progetto sta usando un Basic. Se usasse un confort potrebbe scrivere solo codice lato Pannello.

Sconsiglio vivamente di continuare a sviluppare con la 13 in quanto che vengo sviluppate sempre nuove funzioni ed è sempre meglio rimanere aggiornati all'ultima versione che attualmente è la 17.

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