Vai al contenuto
PLC Forum


BLOCCO DATI GLOBALE CON ARRAY


Anikare

Messaggi consigliati

Salve ragazzi, avrei bisogno del vostro aiuto.

In allegato si trova un blocco dati globale appartenente al programma PLC della mia azienda, il DB 709.

Se io volessi ad esempio con la funzione MOVE spostare un dato nella WORD 176  mi basta digitare il comando DB709.DBW176, oppure dare lo stesso imput nella finestra  PUNTO DI APPLICAZIONE  se volessi sapere piu informazioni.

Nel caso invece delle WORDS contenute nella struttura ARRAY in cima al DB 709 ad esempio la word +6.0, quale input dovrei dare alla funzione MOVE se volessi spostare un dato in quella cella del DB ?  Ho provato ad usare DB709.DBW6  ma da errore. Ottengo errore da 0.0.  sino a 16.0 end struct.

DB.png

Link al commento
Condividi su altri siti


Perché non dai un nome al DB709 e non usi il simbolico anziché gli indirizzi?

"NomeDB".NomeVariabile

 

Comunque, la scrittura della variabile DB709.DBW6 non deve darti errore. L'errore è da qualche altra parte.
Forse, al posto del DB, era meglio se pubblicavi le righe di codice che non ti accetta.

Link al commento
Condividi su altri siti

Salve, 

diciamo che quando uso la finestra Punto di applicazione  per risalire all'origine del dato presente nella Array , nella finestra non mi compare nulla quando digito i codici  DB709. DBW(8,6,4,2,0) per le INT e DB709. DBD14 per il Real. 

Se invece gli stessi codici li uso nella funzione Move mi appare la scritta rossa. 

Link al commento
Condividi su altri siti

Significa che non sono usati nel programma o, se sono usati, sono usati con un indirizzamento indiretto, quindi non si possono trovare nel cross reference.

Link al commento
Condividi su altri siti

Salve Sig. Batta, 

ho provato nuovamente con la funzione MOVE ed i codici delle INT nella Array li accetta, ho commesso io un errore e mi scuso. Quello che invece non riesco ad ottenere è di risalire all' origine usando gli stessi codici nella finestra PUNTO DI APPLICAZIONE, specialmente della INT +8 nella Array la quale imposta il set point del numero di giri di un VFD. Esiste un modo per sapere da dove proviene il dato della DB709. DBW8 ? 

Link al commento
Condividi su altri siti

Vai in un blocco dati qualsiasi (ob,fc,fb) ti posizioni su una variabile qualsiasi (non temporanea) e premi CTRL Q nella finestra che ti si apre digiti il tuo DB709.DBW8.

Se è utilizzato nel plc lo vedi, se non lo vedi potrebbe essere indirizzato dal HMI, se non c'è nemmeno nel pannello non viene usato.

Ciao

Link al commento
Condividi su altri siti

41 minuti fa, Anikare ha scritto:

Ciao Drn5, ho provato ma premendo Cntr Q non si apre nessuna finestra. Mi sono posizionato su variabili In, out, M, ma niente. 

Ciao, CTRL+Q è quello che tu chiami "punto di applicazione".

Comunque, se non trovi dove viene letta e/o scritta la variabile che ti interessa i casi sono 3, 

1 non viene usata per davvero

2 viene usata da un qualche HMI

3 viene usata tramite puntamento indiretto, in questo caso per capire chi legge e/o scrive, bisogna far passare tutto il software, magari andando un po' ad intuito

Link al commento
Condividi su altri siti

CTRL+ALT+Q per il punto di applicazione.

 

Se DB709.DBW6 è richiamata da qualche parte nel programma, scritta così com'è o con indirizzamento simbolico, troverai il punto di applicazione.

Se invece la memoria viene scritta in un altro modo, per esempio con SFC20, l'indirizzamento della variabile è diverso e quindi non viene individuato nei punti di applicazione.

Ad esempio se usi SFC20 per muovere i primi 10 Byte della DB709, troverai scritto "P#db709.dbx0.0 byte 10" (oppure la stessa cosa in simbolico). In questo caso, la memoria viene usata, ma il cross references non la individua.

Funziona allo stesso modo se la word viene scritta con un puntatore.

Questa è la spiegazione "in soldoni" del punto 3 del post de il toby e anche della spiegazione di batta.

 

Link al commento
Condividi su altri siti

Una ultima cosa, in questo programma tra l'altro scritto in tedesco, tutti gli SFC e SFB hanno un lucchetto sul loro simbolo. 

Quando li apro sono vuoti, cosa significa? È una sorta di protezione? Poi su tutto il resto dei blocchi del programma, OB1, FC ed FB  su alcune righe di programma non è possibile convertirle in LAD, ma rimangono sempre in linguaggio Awl. 

Come è possibile? 

Link al commento
Condividi su altri siti

26 minuti fa, Anikare ha scritto:

tutti gli SFC e SFB hanno un lucchetto sul loro simbolo

SFC e SFB sono blocchi di sistema, non modificabili.

 

Quote

Poi su tutto il resto dei blocchi del programma, OB1, FC ed FB  su alcune righe di programma non è possibile convertirle in LAD, ma rimangono sempre in linguaggio Awl. 

Non tutto è convertibile in ladder.

 

Modificato: da batta
Link al commento
Condividi su altri siti

Ciao

 

potresti provare ad attivare "Accesso alle aree di memoria senza specificazione del tipo di dati" così da vedere se il DB709 viene aperto e poi usata un istruzione del tipo:

" L DBW8"

Quote

image.png.69fd71c853137cc0c094a88cfd848930.png

 

Saluti

image.png

image.png

Link al commento
Condividi su altri siti

Ti rimane una sola cosa da provare ovvero la ricerca dell' SFC 20 "BLKMOV" se neanche questo da esito allora il DB non viene utilizzato oppure è richiamato con puntatore "any".

Link al commento
Condividi su altri siti

  • 2 weeks later...
On 12/14/2020 at 7:56 AM, TravelMen said:

Ti rimane una sola cosa da provare ovvero la ricerca dell' SFC 20 "BLKMOV" se neanche questo da esito allora il DB non viene utilizzato oppure è richiamato con puntatore "any".

Grazie

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