PROTOCOLO MODBUS SIMULADOR MODBUS TESTER. El programa Modbus tester (Mbus.exe) es un simulador de un maestro Modbus que realiza peticiones de datos a un esclavo y visualiza los resultados. Puede descargarlo desde http://www.modbus.pl/download/zxy66/v19/Mtester.zip o desde la página de descargas de documentos de la asignatura en la carpeta Buses de Campo http://www.dte.us.es/docencia/etsii/itis/emc/docs/bc/mbus La aplicación Modbus tester tiene 3 pestañas de configuración: 1. Modbus Settings En esta opción configuramos el puerto serie y el tipo de protocolo. Especificaremos protocolo RTU y los parámetros deseados del puerto serie (9600 N 8 1). 2. View Data La opción View Data permite configurar la petición de datos que deseamos hacer (inputs, coils etc.). En Device Address especificamos la dirección del esclavo con la que deseamos comunicar En Start Address y Length especificamos la primera dirección del dato que deseamos y el número de datos deseados Scan Rate representa el tiempo entre peticiones de datos. A la derecha de la ventana se escriben los valores obtenidos de la comunicación. En la parte superior derecha de la aplicación hay contadores que indican el número de peticiones realizadas y el número de respuestas obtenidas. El botón Connect inicia el ciclo de peticiones de datos. 3. Comunication Spy En esta ventana se visualizan las tramas de petición y respuesta en hexadecimal. COMPROBACIÓN DE LA APLICACIÓN En la pestaña Modbus Settings seleccionar uno de los puertos serie disponibles COMx, protocolo RTU y los parámetros 9600 N 8 1. En la pestaña View Data seleccionar: • Device address: 1 • Data type: 1 Inputs • Start address: 1 • Lenght: 8 • Scan rate: 10000 ms (10s) • Data format: bit Observe que en la parte derecha de la ventana se muestra una tabla con las direcciones 10001-10008 y sus valores asociados. En la parte superior derecha se muestra el número de peticiones realizadas (polls) y el número de respuestas correctas a esas peticiones. Pulse sobre el botón Clear para poner a cero los contadores. Pulse el botón Connect para que comiencen las peticiones de datos. Cuando vea el contador Polls a 1 significa que se ha realizado la primera petición. Pulse sobre el botón Disconnect para detener las peticiones. Seleccione ahora la pestaña Communication Spy. En la ventana aparecen caracteres en color azul que representan los bytes transmitidos. Cada byte está representado en hexadecimal entre corchetes. La trama transmitida consta de los siguientes bytes: 01 02 00 00 00 08 79 CC. El primer byte representa la dirección del esclavo al que se le hace la petición. El segundo byte es el código de función modbus. En este caso la función 2 es la de petición de entradas digitales. El tercer y cuarto byte son 00 00. Este valor es la dirección de la primera entrada digital que se desea. Como hemos seleccionado el valor 1 para la primera dirección el valor que se transmite al esclavo es dirección inicial -1 y por tanto el valor 0. Los dos bytes representan el valor de la dirección inicial como un dato de 16 bits con el byte alto en primer lugar y el byte de menor peso en segundo lugar. Los dos bytes siguientes 00 08 representan el número de entradas consecutivas que pedimos al esclavo. En nuestro caso hemos seccionado para el campo Lenght el valor 8. El valor Lenght es un dato de 16 bits que se representa en dos bytes con el byte alto el primer lugar y el byte bajo en segundo lugar. Los dos últimos bytes son el CRC16 de la trama. El CRC16 es una información de 16 bits que se calcula a partir de los valores anteriores de la trama 01 02 00 00 00 08. Los 16 bits se representan en la trama con el byte bajo en primer lugar y el byte alto en segundo lugar. En nuestro ejemplo el CRC16 obtenido es 0x79CC. TRAMAS DE DATOS Modifique varias veces los datos de las peticiones: dirección del esclavo, código de la función, dirección de inicio etc. Observe los bytes transmitidos y compruébelos con los valores configurados. CÁLCULO DEL CRC16 El código del CRC16 se describe al final del documento MODBUS OVER SERIAL LINE V1. El algoritmo mostrado en ese documento está basado en una tabla de valores predefinidos para reducir el tiempo de cálculo del algoritmo. Una alternativa a ese algoritmo sin utilizar las tablas de constantes se muestra a continuación: unsigned short CxxDlg::Crc(unsigned char *buf , int len) { unsigned short crc=0xffff , i; while(len--) { crc = (crc ^ *buf++); for(i=0;i<8;i++) { if(crc & 1) crc=(crc>>1)^0xA001; else crc=(crc>>1); } } return crc; } Comprobar el algoritmo con los valores de las tramas de prueba obtenidos con el programa Modbus Tester. Para mostrar el resultado en hexadecimal puede usar una variable del tipo CString y representar el valor en hexadecimal usando el método Format con el argumento “%x”. Para ver el resultado en pantalla puede usar la función AfxMessageBox. SIMULADOR DE ESCLAVO MODBUS El programa RSim es un simulador gratuito, limitado en tiempo de ejecución de un esclavo Modbus. Puede descargar el programa desde la página del autor: http://downloads.sourceforge.net/project/modrssim/mod_RSsim.exe?use_mirror=freefr o desde la página de la asignatura: http://www.dte.us.es/docencia/etsii/itis/emc/docs/bc/rsim Descargue y ejecute la aplicación En la ventana principal de la aplicación seleccione Prot: MODBUS RS-232 y en I/O seleccione Digital Inputs. Busque el botón Set up the communication en la parte superior derecha de la aplicación. Seleccione el segundo puerto serie de su ordenador (recuerde que el otro está usado por la aplicación Modbus tester). Seleccione los parámetros de comunicación 9600,N,8,1 y en el campo RST control seleccione disable. El botón superior derecho permite abtir el puerto de comunicaciones. Asegurese de hacerlo para que puedan funcionar las comunicaciones. La primera línea de la tabla de valores contiene los valores para las entradas digitales 10001-10016. Puede cambiar los valores de las entradas haciendo un doble click sobre el valor de cualquier entrada. Seleccione en modbus tester la petición de entradas digitales 10001-10016 y conecte la comunicación entre las dos aplicaciones. Cambie valores sobre los valores de las entradas en la aplicación RSim y compruebe el funcionamiento del sistema. Revise los valores hexadecimales de petición (azul) y respuesta (negro) en Modbus Tester. Interprete los valores hexadecimales y asócielos con los valores de las entradas digitales.