Alessandro Nandi Inserito: 8 febbraio 2018 Segnala 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
Ctec Inserita: 8 febbraio 2018 Segnala 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.
Alessandro Nandi Inserita: 8 febbraio 2018 Autore Segnala 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
Ctec Inserita: 8 febbraio 2018 Segnala 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:
Alessandro Nandi Inserita: 12 febbraio 2018 Autore Segnala Inserita: 12 febbraio 2018 Sono riuscito a fare quello che mi ero prefissato Grazie mille
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