Vai al contenuto
PLC Forum


Lettura e scrittura variabile UINT da nodo EtherCat


Alessandro Nandi

Messaggi consigliati

Alessandro Nandi

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 ;) 

Link al commento
Condividi su altri siti


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.

Link al commento
Condividi su altri siti

Alessandro Nandi

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

Link al commento
Condividi su altri siti

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

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