Alessandro Nandi Inserito: 8 febbraio 2018 Segnala Share Inserito: 8 febbraio 2018 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 More sharing options...
Ctec Inserita: 8 febbraio 2018 Segnala Share Inserita: 8 febbraio 2018 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 More sharing options...
Alessandro Nandi Inserita: 8 febbraio 2018 Autore Segnala Share Inserita: 8 febbraio 2018 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 More sharing options...
Ctec Inserita: 8 febbraio 2018 Segnala Share Inserita: 8 febbraio 2018 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ì: 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: 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: 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: Link al commento Condividi su altri siti More sharing options...
Alessandro Nandi Inserita: 12 febbraio 2018 Autore Segnala Share Inserita: 12 febbraio 2018 Sono riuscito a fare quello che mi ero prefissato Grazie mille Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora