Professional Documents
Culture Documents
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 0x04 0x03 0x06 Escritura de un registro Escritura de mltiples registros M->S: MA,0x06,AH,AL,RH,RL,CRCL,CRCH S->M: MA,0x06,AH,AL,RH,RL,CRCL,CRCH M->S: MA,0x10,AH,AL,NH,NL,NB,R0H,R0L,..,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 Funcin Lectura de registros Modo de uso M->S: MA,0x04,AH,AL,NH,NL,CRCL,CRCH S->M: MA,0x04,NR,R0H,R0L,R1H,R1L,..,CRCL,CRCH
0x10
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:
Nota importante 1: Si varios grupos del laboratorio estn conectados al mismo instrumento, slo un grupo podr hablar en cada momento con el instrumento. En la ventana de respuesta del windmill del resto de grupos aparecer la conversacin entre el grupo que est hablando (maestro) con el CP2003 (esclavo). Los grupos que slo escuchan estn actuando como espas. El modo espa es muy til en la prctica para detectar problemas en una red modbus o de otro tipo. Por ejemplo: en un windmill en modo espa se puede ver el verdadero CRC que enva el windmill que est trabajando en modo maestro.
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.
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.
1.4 Escritura de datos en el CP2003 1.4.1 Manejo de rels para activar pilotos
Mediante la funcin de escritura (0x06 o 0x10) se puede activar los 2 rels de salida del CP2003 (RL0 y RL1).
J.A.RodrguezMondejar5de13
ComunicacionesIndustrialesAvanzadas
24V RL0 RL1
HV1 0V
HV2
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:
Conmutador de 3 posiciones
SC
J.A.RodrguezMondejar6de13
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
24V RL0
32
Circuito de potencia
24V
RL1
12 14 22 24 12 14
KA2
A1 31
KA1
A1 31
32
KA1
11 21
KA2
11 21
KA1
A2
HV1
KA2
A2
HV2
M
Para ello utilice la placa pupitre de control anterior y la placa siguiente simulador de planta. Simulador de planta:
BI
Final de carrera
KA1
SF1 M
SF2
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
22 24
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. Funciones para ensamblar y desensamblar la trama. Funciones para transmitir y recibir la trama.
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.
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;) << para desplazar hacia la izquierda. | permite realizar la funcin OR de dos nmeros bit a bit (a=b|c); & 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). Para obtener el byte ms alto de un nmero b de 32 bits: a=b>>24. De la misma manera se procedera con el resto de bytes. Para asignar el byte ms alto de un nmero a un determinado valor respetando el resto habra que hacer: a=(a&(0x00ffffffL))|(b<<24). Comprobar el clculo del CRC con una trama de respuesta del CP2003.
Pregunta 12:
// Recibe una trama int MODBUSRecibe( HANDLE hPort, int lmax, unsigned char *pb ); // Devuelve 0 si ha habido error en la recepcin, >=1 indica la longitud de la trama // Tamao mximo admisible de la trama // Trama recibida
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; }
Pregunta 13:
El primer caso est dirigido al multiconvertidor con la posicin 23 y el segundo al multiconvertidor con la posicin 2. Pregunta 14: Entregar el cdigo para probar los rels (mondejar@upcomillas.es)
J.A.RodrguezMondejar12de13
ComunicacionesIndustrialesAvanzadas
Donde OK indica que la respuesta dada por el multiconvertidor es correcta. Pregunta 15: Opcional. Entregar el cdigo para probar los rels (mondejar@upcomillas.es)
Pregunta 16:
J.A.RodrguezMondejar13de13