Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1modbus 2016
1modbus 2016
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.RodrguezMondejar1de13
ComunicacionesIndustrialesAvanzadas
Una de las fases de medida de tensin est conectada a travs de un divisor de tensin a
220V. El divisor de tensin est formado por una resistencia fija de 100K y una resistencia
variable de 100K, tambin. Adems, hay una conexin externa lateral para conectar una
carga al convertidor. Con el potencimetro y la carga, se puede medir tensin, intensidad y
potencia en una fase.
MODBUS es un protocolo que permite ver a un instrumento desde un sistema remoto como
un banco de registros contiguos. Cada registro tiene una direccin dentro del rango 0x0000
a 0xFFFF, y tiene un tamao de 16 bits. Su equivalente pensando en una CPU es un mapa
de memoria de 16 bits en el bus de direcciones y 16 bits en el bus de datos. Segn el tipo de
instrumento no todos los registros estn disponibles y cada uno almacena un determinado
tipo de informacin (tensin, intensidad, etc.) o tiene una determinada funcin
(activar/desactivar un rel, disparar una alarma, etc.). El protocolo MODBUS permite
mediante tramas enviadas a travs de la RS485 consultar o actualizar el valor de dichos
registros. Cada trama corresponde a funcin o comando dentro del protocolo.
La tabla siguiente presenta las funciones o comandos del protocolo que se van a utilizar en
esta prctica:
Tabla 1 Comandos bsicos del protocolo MODBUS
Comando
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
J.A.RodrguezMondejar2de13
ComunicacionesIndustrialesAvanzadas
intentar una comunicacin sencilla siguiendo los ejemplos que da el fabricante. En este
caso, siguiendo la pgina 13 del manual, utilizaremos el comando 04 para leer el nmero de
serie del aparato que se encuentra a partir de la direccin 04B0 y que ocupa 5 registros (10
bytes). Se supone que el equipo tiene la direccin MODBUS 4C (76 en decimal).
Pasos a seguir:
1. Conecte el CP2003 a la red RS485, si no est ya montado.
2. Conecte el adaptado RS232/RS485 por un lado a la red RS485 y por otro al COM1
del ordenador.
3. Arranque el programa Windmill con la configuracin COM1, 9600, 8 bits, sin paridad
y un bit de stop.
4. Enve al CP2003 el siguiente comando escrito en hexadecimal para preguntarle su
identidad:
0x4C,0x04,0x04,0xB0,0x00,0x05,CRC.
CRC es un nmero de 16 bits que es calculado como el CRC del resto de la trama.
Para incluir el CRC pulse CRC en el men superior del Windmill. Windmill lo calcula
automticamente cada vez que se enva la trama. Al comando enviado desde el PC,
el CP2003 deber responder tal como muestra la siguiente figura:
J.A.RodrguezMondejar3de13
ComunicacionesIndustrialesAvanzadas
Nota importante 2: Si no responde el CP2003 puede ser debido a que la direccin
MODBUS utilizada no es la correcta. El CP2003 tiene una direccin MODBUS a la que
siempre responde: 0xC7 (199). Esta es una direccin muy til para mantenimiento
pero que no debe utilizarse nunca en operacin. Enve la trama cambiando 0x4C por
0xC7. Para saber cul es la direccin del dispositivo en operacin lea el registro
situado en la direccin 0x04B5 (0xC7,0x04,0x04,0xB5,0x00,0x01,CRC). Con esta
nueva direccin intente nuevamente leer 5 registros a partir de la direccin 0x04B0.
En la pgina 13 del manual se describe lo que enva el CP2003 (primer ejemplo). A lo largo
del manual del CP2003 aparecen una serie de tablas donde se indica la informacin que se
puede encontrar en cada direccin o la funcin que se puede ejecutar. Por desgracia, las
direcciones indicadas no son absolutas, sino relativas a una direccin base. En el caso del
CP2003 la direccin base es 1000 (si no se modifica). Por ejemplo: en la tabla del apartado
1.2.6 se dice que el nmero de serie se encuentra a partir del registro situado en la direccin
200. La verdadera direccin no es 200 sino 1200 (0x4B0), como ya hemos visto en el
ejemplo anterior.
Siguiendo las pginas 13, 11 y 3 del manual, las breves indicaciones dadas en este
apartado y las vistas en clase, explique la trama enviada al CP2003 en el ejemplo anterior y
la trama de respuesta del CP2003. Para determinar el verdadero valor del CRC mire lo
capturado en el windmill de otro grupo trabajando en modo espa.
Pregunta 1: Explique la trama enviada y la respuesta. En este caso y en los siguientes no
es necesario indicar el valor real del CRC enviado, basta con indicar CRC al final de la
trama).
Siguiendo el ejemplo anterior lea el tipo de aparato (ver tabla 1.2.6 del manual del CP2003).
El nmero de registros a leer es 3. Pngase de acuerdo con el resto de grupos para evitar
demasiadas colisiones a la hora de acceder al CP2003, si est compartido.
Pregunta 2: Explique la trama enviada y la respuesta.
Byte: ocupa los 8 bits bajos de un registro de 16 bits. La parte alta est a 0.
ComunicacionesIndustrialesAvanzadas
Siguiendo la tabla del apartado 1.2.6, leer la direccin modbus del equipo. Para ello enviar al
CP2003 la trama:
0x4C,0x04,0x04,0xB5,0x00,0x01,CRC.
El equipo responder con la direccin del equipo.
Pregunta 3: Explique brevemente la trama enviada y la respuesta.
J.A.RodrguezMondejar5de13
ComunicacionesIndustrialesAvanzadas
24V
RL0
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
J.A.RodrguezMondejar6de13
ComunicacionesIndustrialesAvanzadas
Bastidor con PLC:
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.
J.A.RodrguezMondejar7de13
ComunicacionesIndustrialesAvanzadas
Monte el siguiente circuito para controlar el giro de los motores mediante RL0 y RL1.
Circuito de control
Circuito de potencia
24V
24V
12
14
22
24
21
21
11
A1 31
KA2
KA2
HV2
A2
HV1
A2
KA1
KA1
11
KA1
A1 31
KA2
22
24
32
12
14
RL1
32
RL0
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
KA1
Sensor de
proximidad
capacitivo
Rel
KA2
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.
J.A.RodrguezMondejar8de13
ComunicacionesIndustrialesAvanzadas
Pregunta 9: Por qu no ocurre nada catastrfico si simultneamente se enva orden de
giro a derechas y giro a izquierdas al motor desde el Windmill?
J.A.RodrguezMondejar9de13
ComunicacionesIndustrialesAvanzadas
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;
}
J.A.RodrguezMondejar10de13
ComunicacionesIndustrialesAvanzadas
Para programar utilice el entorno MinGW de la prctica 3 de Fundamentos de
comunicaciones industriales:
http://www.dea.icai.upco.es/jarm/LabFundamentosComunicacionesIndustriales.htm
Para programar el CRC resultan tiles los siguientes operadores y recomendaciones de C:
>> 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
J.A.RodrguezMondejar11de13
ComunicacionesIndustrialesAvanzadas
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:
J.A.RodrguezMondejar12de13
ComunicacionesIndustrialesAvanzadas
Pregunta 16:
J.A.RodrguezMondejar13de13