Vai al contenuto
PLC Forum


Lettura e scrittura variabile UINT da nodo EtherCat


Messaggi consigliati

Alessandro Nandi
Inserito:

Ciao a tutti, sto sviluppando la mia prima applicazione con la CPU NX1P2 per l'aggiunta di alcune funzionalità a due macchine tampografiche. Per la prima macchina utilizzo solamente I/O digitali e il problema non sussiste, nella seconda invece utilizzo il protocollo di comunicazione EtherCat per comunicare con l'azionamento di un asse lineare dell'SMC. L'azionamento funziona a richiamo di quote, nel senso che al suo interno ha memorizzato 64 posizioni e tramite un codice binario viene selezionata una delle 64 posizioni.

Il problema è che il PLC vede gli ingressi e le uscite dell'azionamento come un dato di tipo UINT di 2 bytes, un UINT per gli ingressi dell'azionamento e uno per le uscite. Io dovrei andare a leggere e scrivere ogni singolo bit di ogni UINT. Come posso fare?

Ciao e grazie a tutti :) confido in voi ;) 


Inserita:

La soluzione più comoda è usare una UNION. La definisci come UINT e BOOL, Così puoi indirizzare il singolo bit.

Per capire cosa sono le Union e come lavorano, fare riferimento casomai a un manuale del C.

Sostanzialmente è una variabile alla quale si può accedere in più modi, come ad esempio ogni singolo bit, ai singoli bytes, all'intera word.

Alessandro Nandi
Inserita:

Ciao Ctec, grazie mille per la risposta. Potresti per cortesia fare un mini esempio così posso capire meglio come devo fare? Poi per leggere e scrivere il singolo bit all'interno della UNION che istruzione uso?

Grazie mille ancora

Inserita:

Ok, ho proprio un esempio funzionante da anni. E' per il NJ, ma lo NX mi pare identico. E' usato per analizzare o comandare lo stato di un inverter in Ethercat.

 

Nei Tipi di Dati definisci per esempio una Union così:

image.png.8459443b872e57bd4723e3ff7e82ddc3.png

Come vedi, si definisce un tipo che avrà accesso come word (quindi un UINT nel tuo caso) o come array di bit (matrice 0..15 di bool).

 

Definisci poi una variabile globale con tipo WordBit:

image.png.e6983d3b213e4426888539215da06923.png

Qui vedi sia la variabile di lettura (status) che di comando (cmd).

 

Ora, nella Mappa I/O, assegni tale variabile all'interfaccia col dispositivo Ethercat:

image.png.48ed75edfc06006f6dbffc9d1cb23f59.png

 

Nel tuo programma, quando vorrai leggere il singolo bit (per esempio il bit 5), userai la forma Spint_Status.b[5] mentre se usi la forma Spint_Status.W accederai a tutta la word (UINT).

Qui un esempio dove in base allo stato di un bit di stato, si scrive un comando (word) nella word di comando:

image.png.917d1f383ec3c78c1734c6e555d90b8c.png

Alessandro Nandi
Inserita:

Sono riuscito a fare quello che mi ero prefissato:)

Grazie mille:thumb_yello::thumb_yello:

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