Programación red MODBUS

Anuncio
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)
Descargar