Programación red MODBUS Funciones principales: • Ensamblar y Tx una trama. • Rx y Desensamblar una trama. • Calculo CRC. • Librerías con parámetros MODBUS y gestión del puerto serie. Interfaces para Tx y Rx // Envía una trama int MODBUSEnvia( HANDLE hPort, int l, // Tamaño de la trama unsigned char *pb // Trama a enviar con CRC incluido ); // Devuelve 0 si ha habido error en la transmisión, 1 si no ha habido // Recibe una trama int MODBUSRecibe( HANDLE hPort, int lmax, // Tamaño máximo admisible de la trama unsigned char *pb // Trama recibida ); // Devuelve 0 si ha habido error en la recepción, >=1 indica la longitud de la trama Estructura Programa int main(){ unsigned char mc[8]={0xc7,0x04,0x04,0xb0,0x00,0x01,0x00,0x00}; unsigned char mcRec[100]; int l; hPort=OpenSerialPort("COM1",CBR_9600,8,NOPARITY,TWOSTOPBITS,10); if (hPort==INVALID_HANDLE_VALUE) { printf("Error abriendo puerto com1"); return 1; } MODBUSCRC(6,mc,mc+6); printf("\nTrama enviada: "); MODBUSImprime(8,mc); MODBUSEnvia(hPort,8,mc); l=MODBUSRecibe(hPort,100,mcRec); printf("\nTrama recibida: "); MODBUSImprime(l,mcRec); CloseSerialPort(hPort); return 0; } Gestion Puerto Serie Ensamblado Tx Rx Tx Funciones Tx: • Escribir en el puerto serie cada byte. • En serie.cpp: SerialSendByte(HANDLE hPort, BYTE byte) • Informar de cualquier error. Rx Funciones Rx: • Escuchar constantemente el puerto serie. • En serie.cpp: SerialReceiveByte(HANDLE hPort, BYTE *pbyte, BOOL *pTimeout) • Informar de cualquier error. • Chequear CRC trama recibida.(Final) Interfaz Línea Comandos > 23 RL0 1 > 23 RL0 0 > 3 RL0 1 > 4 RL0 0 1 char 3 char 1 char 3 RL0 1 1 espacio Para Leer de la línea de comandos: fgets (cadena, 100, stdin); Interpretación de números enteros: casting a integer (ASCII Table)