Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modbus 1
Modbus 1
Conexin de alimentacin.
Bornas 24V, RL0 y RL1. Son dos salidas por contacto que proviene de 2 rels que
llevan internamente el multiconvertidor. Los contactos estn colocados entre 24V y
RL0, y entre 24V y RL1. A travs del protocolo MODBUS se pueden activar y
desactivar dichos contactos.
Bornas A01 y A02. Son dos salidas analgicas en intensidad que se pueden regular
a travs del protocolo MODBUS. Normalmente estn definidas para que con el valor
mximo se obtenga 20 mA y con el valor mnimo 0 mA.
J.A. Rodrguez Mondejar 1 de 13
Funcin
Modo de uso
0x04
Lectura de
registros
M->S: MA,0x04,AH,AL,NH,NL,CRCL,CRCH
Escritura de
un registro
M->S: MA,0x06,AH,AL,RH,RL,CRCL,CRCH
Escritura de
mltiples
registros
M->S: MA,0x10,AH,AL,NH,NL,NB,R0H,R0L,..,CRCL,CRCH
S->M: MA,0x04,NR,R0H,R0L,R1H,R1L,..,CRCL,CRCH
0x03
0x06
0x10
S->M: MA,0x06,AH,AL,RH,RL,CRCL,CRCH
S->M: MA,0x10,AH,AL,NH,NL,CRCL,CRCH
M->S=Direccin maestro-esclavo S>M=Direccin esclavo-maestro
MA=Direccin MODBUS del dispositivo
AH,AL=Parte alta y baja de la direccin de un registro
NR=Nmero de bytes transmitidos
NH,NL=Nmero de registros ocupando 2 bytes
NB=Nmero de bytes equivalente al nmero de registros (2*nmero
de registros)
RxH,RxL o RH,RL=Parte alta y baja de un valor ledo o a escribir
en un registro
En la pgina 3 del manual del equipo CP2003 (ver web del laboratorio) se describe el
formato de las tramas que acepta el equipo, que se corresponden con la tabla anterior. A
partir de la pgina 13 del manual hay ejemplos de las tramas que acepta y de las tramas de
respuesta.
Para poner en marcha la comunicacin va protocolo MODBUS entre el ordenador, que
acta como maestro, y el CP2003, que acta como esclavo, el primer paso es comprobar
que el equipo funciona. Este paso se basa en utilizar los ejemplos que lleva el manual del
CP2003. En la prctica profesional, cuando se recibe un nuevo equipo, el primer paso es
Byte: ocupa los 8 bits bajos de un registro de 16 bits. La parte alta est a 0.
RL1
HV1
HV2
0V
Para probar el funcionamiento de los rels conecte las salidas RL0 y RL1 segn el siguiente
esquema a la placa de pilotos (pupitre de mando, ver figura). Como fuente de alimentacin
utilice la fuente de alimentacin de los bastidores de los autmatas (bornas rojas rotuladas
con +24V y bornas negras GND, ver figura). Para el resto de convertidores la conexin es
la misma.
Pupitre de control:
Pulsador de seta
de Paro de
Emergencia
HV1
HV2
HR
Piloto de
sealizacin
Pulsadores con
contacto NO
Conmutador de
3 posiciones
SV1
SV2
SR
Pulsador con
contacto NC
SC
Fuente de
alimentacin
PLC
Entradas/s
24V
0V
Segn el manual del CP2003 para trabajar con los rels primero hay que configurarlos en
modo SW y despus activarlos o desactivarlos (pgina 11 del manual). Siga los siguientes
pasos:
1. Enve la trama siguiente 0x4C,0x06,0x04,0xB9,0x00,0x01,CRC para configurar
los rels en modo SW (Tabla del apartado 1.2.7).
2. Enve 0x4C,0x06,0x04,0xBA,0x00,0x01,CRC para activar el RL0.
3. Enve 0x4C,0x06,0x04,0xBA,0x00,0x00,CRC para desactivar el RL0.
Realice la misma maniobra de activar y desactivar con el rel RL1.
Pregunta 8: Indique las tramas enviadas y su respuesta para el caso activar y desactivar
el rel RL1.
Monte el siguiente circuito para controlar el giro de los motores mediante RL0 y RL1.
Circuito de control
Circuito de potencia
24V
24V
RL0
HV1
24 22
11
11
21
KA2
HV2
KA2
A2
A2
KA1
KA1
A1 31
A1 31
KA1
21
KA2
22
24
12
14
32
32
RL1
Para ello utilice la placa pupitre de control anterior y la placa siguiente simulador de
planta.
Simulador de planta:
BI
SF1
Final de
carrera
Sensor de
proximidad
inductivo
SF2
M
Rel
KA1
KA2
Sensor de
proximidad
capacitivo
Motor
Un rel es un elemento electromecnico de control formado por contactos (11 con 12 y 14,
21 con 22, 24, etc.) cuya apertura y cierra se controla a travs de una bobina (A1, A2).
Cuando no pasa corriente por la bobina el rel est en reposo y se permite el paso de la
corriente a travs de 11-12 (21-22 y 31-32), tal como indica la figura. Cuando pasa corriente
suficiente, la bobina se activa y los contactos basculan hacia la posicin contraria. Ahora se
permite el paso de la corriente a travs de 11-14 (21-24 y 31-34).
Active RL0 y RL1 para arrancar el motor en giro a derechas, giro a izquierdas y pararlo.
Pngase de acuerdo con otros grupos para asignar a cada equipo una direccin
diferente. Por ejemplo: CP2003 del grupo 1 tiene la direccin 1, CP2003 del grupo 2
tiene la direccin 2.
Una vez cubierta la fase de familiarizacin de la red MODBUS y con los equipos conectados
a ella, el siguiente paso es dotarse de las herramientas necesarias para poder montar una
aplicacin. Dos tipos de herramientas son necesarias:
1. Preparar una librera que encapsule los detalles de la red MODBUS y las
operaciones repetitivas. Esta librera debera estar formada por:
Utilidades para preparar la trama como el clculo del CRC, convertir un nmero
real a formato IEEE sobre MODBUS y viceversa, etc.
2. Programas de prueba ms sofisticados que Windmill. Windmill es muy til pero est
muy limitado: para cualquier comunicacin hay que bajar al nivel byte. Si se quiere
probar que los rels de los multiconvertidores funcionan correctamente vendra muy
bien una aplicacin del tipo:
> 23 RL0 1
> 23 OK
> 23 RL0 0
> 23 OK
El objetivo de los siguientes apartados es crear un librera que pueda ser utilizada en
prcticas posteriores, y crear un programa de prueba para manejo cmodo de los rels.
// Tamao de la cadena
);
Para probar la funcin puede utilizar las propias tramas transmitidas o la que aparece como
respuesta en el apartado 1.2. Como programa de prueba puede utilizar el siguiente:
int main(){
unsigned char mc[5]={0xc7,0x04,0x02,0x53,0x41}; // CRC es CDE1
unsigned char mCRC[2];
MODBUSCRC(5,mc,mCRC);
printf("%02x%02x",mCRC[0],mCRC[1]);
return 0;
}
>> permite desplazar hacia la derecha los bits de un nmero n posiciones (a=b>>n;)
& permite realizar la funcin AND de dos nmeros bit a bit (a=b&c);
Una variable de tipo int ocupa 32 bits, lo mismo que un float (IEEE32).
Pregunta 12:
Comprobar el clculo del CRC con una trama de respuesta del CP2003.
HANDLE hPort,
int l,
// Tamao de la trama
);
// Devuelve 0 si ha habido error en la transmisin, 1 si no ha habido
HANDLE hPort,
int lmax,
// Trama recibida
);
// Devuelve 0 si ha habido error en la recepcin, >=1 indica la longitud de la trama
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;
}
int i;
for(i=0;i<l;i++){
printf("%02x",pb[i]);
}
}
Pregunta 13:
Pregunta 16: