yupanqui Inserito: 24 gennaio 2005 Segnala Share Inserito: 24 gennaio 2005 Salve,Vorrei sapere se con la famiglio micro logix c'e' la possibilità di comandare un driver tramite comandi in ascii dalla seriale.C'e' un modulo apposito che gestisce la comunicazione?? e poi nel software di programmazione ci sono le conversioni decimale/ascii ecc.Grazie,Silver. Link al commento Condividi su altri siti More sharing options...
Savino Inserita: 24 gennaio 2005 Segnala Share Inserita: 24 gennaio 2005 Salve,Dunque,100012001500Penso che quella possibilita' c'e' l'abbiano i MicroLogix 1200 e 1500 :1 o 2 porte seriali RS-232 per i protocolli: DF1 Allen Bradley, ASCII read/write, Modbus RTU Master/Slave.Le porte dovrebbero essere onboardIl 1000 in cambio no:1 porta seriale RS-232 (protocollo DF1 Allen Bradley).e poi nel software di programmazione ci sono le conversioni decimale/ascii ecc.Per ogni carattere ASCII c'e' la correspondente rappresentazione decimale,di un BYTE di data:1 byte di data:dec: 48Hex: 30 ASCII : 0dec : 65Hex : 41 ASCII: Ae cosi' via...Saluto. Link al commento Condividi su altri siti More sharing options...
yupanqui Inserita: 25 gennaio 2005 Autore Segnala Share Inserita: 25 gennaio 2005 (modificato) grazie per la risposta Savino!Quello che non mi è chiaro è la rappresentazione dei dati.Rappresentazione significa che ti fa vedere il dato nei 3 formati che mi hai specificato hex, dec, ascii ma non me li converte.Se io devo passare una quota da raggiungere al driver per esempio "50000" in decimale che faccio c'e' un qualcosa che mi trsforma il dato in ascii o devo dividere il numero in 3 parti 50-00-0 convertirlo in ascii metterlo in 3 byte per poi inviarlo alla seriale??Questo e' quello che dovevo fare con i plc della GE perchè non hanno nessuna conversione, mi chiedevo se con AB c'era questa possibilià.Grazie,Silver. Modificato: 25 gennaio 2005 da silver Link al commento Condividi su altri siti More sharing options...
Savino Inserita: 25 gennaio 2005 Segnala Share Inserita: 25 gennaio 2005 Salve silver,Dunque ,Piu' che una conversione di tratta di una formatazione dei dati.Per contenere il numero 50000 piu' il segno, ne hai bisogno di usare un contenitore a 32 bit, quindi 4 byte:50000 DEC = 0000C350 HEX. ( potresti anche farlo con 3 byte, ma ti conviene conservare uno standart).Byte 0 = 50 HByte 1 = C3 HByte 2 = 00 HByte 3 = 00 HScrittura PLC,Se per essempio, dal lato PC hai una routine di scrittura sulla COM di solo 4 byte di dati,la routine dal latoPLC (READ) quale e' gia' stata previamente parametrizzata per ricevere un telegramma fisso di 4 byte,riempira' il buffer di ricezione (DB READ) scrivendo 50000 nei primi 4 byte.La routine nel OS che gestisce la porta ,stampa nel DB la correspondente rappressentazione HEX per ogni ASCII byte ricevuto dal UART PC, non hai bisogno di nessuna conversione.Le eventuale conversioni ci la devi fare dal lato PC.( formato del byte di data inviato al bufferdi trasmissione del UART).Per inviare il numero 50000 dal PC, dovresti formatare i 4 byte (8 caratteri), in ASCIIsempre 4 byte ma 4 caratteri pero'. // struttura Dword/Byte union reg_32bitssigned long int mDWord;char mByte[4];}; union reg_16bits m_Num; // costruzione di una var. a 32 bits m_Num.mDWord=50000; // caricamento a Dword m_Num.mByte[0]=0x50; // caricamento a byte m_Num.mByte[1]=0xC3; m_Num.mByte[2]=0; m_Num.mByte[3]=0; char buffer[5]={'\0'}; // stringa // formata la stringa buffer con il valore di Dword in ASCII sprintf( buffer , "%c%c%c%c", m_Num.mByte[0],m_Num.mByte[1],m_Num.mByte[2],m_Num.mByte[3] ); // %c =formatazione di un singlo byte in carattere // invia la stringa buffer alla COM // buffer[0]=0x50 in ASCII // buffer[1]=0xC3 in ASCII // buffer[2]=0 in ASCII // buffer[3]=0 in ASCII Lettura,Sul'UART PC, i caratteri arrivano in ASCII al buffer di ricezione, quindi quando li leggi, devi considerare cheogni carattere corresponde a 1 byte di dati.// routine di lettura COM...... sscanf(buffer"%ld",&m_Num); // legge la data da buffer string a formata sulla struttura a 4 bytes.// % ld = formatazione long int.I 4 caratteri arrivatei in ASCII vengono formatati in 4 bytes( 8 caratteri). Conclussione:Se una variabile m_Byte contiene il numero 48 (0x30) e viene inviato alla COM del PLC, questa capisce chee' uno 0 (ASCII).Quindi se voglio ricevere uno 0 (0x00) devo inviare il carattere ASCII ' ' (NULL).Saluto. Link al commento Condividi su altri siti More sharing options...
Savino Inserita: 25 gennaio 2005 Segnala Share Inserita: 25 gennaio 2005 Link al commento Condividi su altri siti More sharing options...
yupanqui Inserita: 27 gennaio 2005 Autore Segnala Share Inserita: 27 gennaio 2005 grazie per le spiegazioni Savino,Tra pochi giorni avrò qui' l'ardware su cui lavorare e poi magari se ho qualche problema ne riparliamo.Grazie intanto!Silver. 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