Vai al contenuto
PLC Forum


Comandi Ascii Tramite Seriale.


yupanqui

Messaggi consigliati

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


Salve,

Dunque,

1000

1200

1500

Penso 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 onboard

Il 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: 48

Hex: 30

ASCII : 0

dec : 65

Hex : 41

ASCII: A

e cosi' via...

Saluto.

Link al commento
Condividi su altri siti

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: da silver
Link al commento
Condividi su altri siti

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 H

Byte 1 = C3 H

Byte 2 = 00 H

Byte 3 = 00 H

Scrittura PLC,

Se per essempio, dal lato PC hai una routine di scrittura sulla COM di solo 4 byte di dati,la routine dal lato

PLC (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 buffer

di trasmissione del UART).

Per inviare il numero 50000 dal PC, dovresti formatare i 4 byte (8 caratteri), in ASCII

sempre 4 byte ma 4 caratteri pero'.

// struttura Dword/Byte

union reg_32bits

signed 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 che

ogni 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 che

e' uno 0 (ASCII).Quindi se voglio ricevere uno 0 (0x00) devo inviare il carattere ASCII ' ' (NULL).

Saluto.

Link al commento
Condividi su altri siti

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

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