diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
Prueba del “Driver ModBus”
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusPrueba de la placa – Elementos y Conexiones
Elementos:
- Placa 232-485- Driver ModBus - Master SPI (µC en protoboard, ver más abajo)- PC + software de prueba dedicado, o genérico (ver más abajo)
Conexiones:
Master SPI
MOSI
PC 485
232-485
MISO
SPSCK
/SS
5V
0V
MOSI
MISO
SPSCK
/SS
5V
0V
Driver ModBus
B
A
B
A
Tx
Rx
Rx
Tx
0V 0V
232
5V 0V
Vcc 0V
Fuente
Fuente
LED 1
LED 2
Potenciómetro
LED RxOk
LED Aux
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusPrueba de la placa – Esquemático del dispositivo SPI Master para prueba
En la placa adaptadora BDM a proto
A la placa “Driver ModBus”
No se utilizaron en el circuito de prueba (ver siguiente)
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusPrueba de la placa – Diagrama en bloques del dispositivo SPI Master para prueba
SPI MasterPara prueba
de placa“Driver
ModBus”
BDM
MOSISPCK
MISOSS
5VGND
LED 1LED 2
Potenciómetro
Placa “Driver
ModBus”
- El SPI master enciende / apaga cada 1 s aproximadamente el LED2- Si el valor del registro 4 de la placa “driver modbus” es mayor a 150, enciende el LED1, sino lo apaga.- El SPI master escribe en el registro 3 de la placa “driver modbus” el resultado (8 bits) de la conversión del ADC de la tensión presente en el punto medio del potenciómetro.
En PCBPuede ser en protoboard
¿Qué debería hacer el circuito master?
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusPrueba de la placa – Dispositivo SPI Master para prueba
potenciómetro
LED2
LED1
ConectorBDM
ConexionesSPI
μC SH08
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusPrueba de la placa – Soft dedicado
1. Ejecutar el programa. 2. Ingresar el número de port serie (Si hay dudas sobre cuáles están disponibles, ver el “Administrador de dispositivos”)
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
3. Ingresar la “Dirección de slave” Este número (entre 1 y 15) debe coicidir con la combinación fijada con S1 de la placa (Los 4 jumpers o DIP-switch conectados a patas 9, 10, 11, 12 del microcontrolador de la placa “driver ModBus”)
Prueba de la placa – Soft dedicado
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
4. Si las conexiones y placas funcionan correctamente, se mostrarán:
a) Respuesta al pedido de lectura, y el valor devuelto. Este valor entre 0 y 255 corresponde al resultado de la conversión del ADC del “spi master”
b) Respuesta a la escritura realizada. En este caso, se enciende y apaga el led del “spi master” cada 0,5 s aprox.
Prueba de la placa – Soft dedicado
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
En caso de ocurrir errores en la comunicación se informa en el sector indicado.
Verificar:
- Cables- Número de COM correcto.- Conexión correcta del bus 485 (“A” con “A”, “B” con “B”) Si se tiene dudas, invertir estas conexiones,- Si se utiliza un adaptador 232-485 “autopowered” y solo se enciende el led “Tx” la línea DTR tal vez esté OFF. En este caso, utilizar el RealTerm (ver a continuación)- Verificar los jumpers / DIP switch de “Slave Id” Esta combinación debe coincidir con la Dirección de Slave ingresada en el soft,
Prueba de la placa – Soft dedicado
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
1. Ir a la solapa “Port” (Donde vamos a configurar el port)2. Seleccionar la velocidad: 9600 en este caso.3. Paridad: Even (Par)4. Bits de datos: 75. Número de Port (Si hay dudas sobre cuáles están disponibles, ver el “Administrador de dispositivos”)6. Presionar “Change”7. Verificar que se muestre “9600 7E1 None”
Prueba de la placa – RealTerm
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
1. Ir a la solapa “Display”2. Seleccionar “Ansi”
Se puede fijar otras características: tipo y tamaño de letra, si mostrar o no los bytes enviados, ver en Hexa, etc.
Prueba de la placa – RealTerm
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
1. Ir a la solapa “Send” (Desde donde vamos a enviar mensajes modbus a nuestra placa) 2. Ingresar el mensaje (Ver instructivo más adelante) 3. Marcar los casilleros “+CR” y “+LF”4. Para enviar, click en el botón “Send ASCII”
Prueba de la placa – RealTerm
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
- Si todo va bien, veremos las respuestas a nuestros requerimientos en amarillo, en la zona indicada (1)- Existe otro conjunto (2) de cuadro de texto para mensaje (3), botones “Send Numbers” y “Send ASCII” (4) y casillas “+CR” y “+LF” (5) Esto posibilita trabajar con dos mensajes sin la necesidad de ingresar uno y otro cada vez.
Prueba de la placa – RealTerm
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
- Para cerrar el programa vamos a la solapa “Port” (1) y ahi hacemos click en el botón “Open” (2) hasta que quede “hacia afuera” (como se muestra en la imagen) Notar que en la parte inferior derecha aparece la leyenda “Port: Closed”
Prueba de la placa – RealTerm
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
Conceptos para la prueba del “Driver ModBus”
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusIntroducción
● En los proyectos que se proponen este año, existen tres elementos que necesitan comunicarse: La estación de mando, basada en un microcontrolador S08SH8, un PLC (Twido o Nano) y una PC
● Dicha comunicación deberá realizarse utilizando un bus 485 y protocolo ModBus.
● El PLC puede unirse al bus sin nigún adicional.
● La estación de mando y la PC necesitan interfaces.
Estación de mando(µC SH8)
PLC PC
Bus 485
“Driver ModBus” 232-485
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusModBus
● La interfaz física entre el port serie del µC (niveles 0V y 5V común) y 485 se puede realizar mediante un MAX485 o similar, de forma muy sencilla.
● La complicación reside en el protocolo, el “lenguaje” con el que se comunica el PLC; en este caso, como se dijo, será ModBus.
¿Qué es ModBus?
● Es una forma de intercomunicar varios dispositivos. ● Consta de un Master (Maestro) y uno o varios Slaves (Esclavos)● Cada Slave tiene que tener una identificación única.● Los Slaves tienes “registros” (Ej. %MW3 del PLC) que se identifica con una dirección.● El Master es el que inicia una comunicación, mandando un mensaje y queda esperando respuesta.● El Slave correspondiente le responderá y con esto, el master queda libre para enviar otro mensaje.● Cada mensaje ModBus tiene una estructura determinada. ● Cada dispositivo puede soportar más o menos operaciones.● Esta placa está preparada solo para dos operaciones:
● Escribir Registro (Función ModBus 06)● Leer Registro (Función ModBus 03)
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusSPI
● Es una forma de interconectar circuitos integrados cercanos (distancia de conexión menor a 20 cm)● Hay un Master y uno o más Slaves.● La estructura interna es muy sencilla:
● El master y el slave tienen cada uno un registro de desplazamiento.● El master, para enviar información, carga su registro con información (8 bits en el ejemplo) y luego genera pulsos de clock (8 en este caso) para que la información salga del master y entre en el slave.
● A la vez, a causa de que el clock es compartido entre los dos registros, lo que contenía el registro del slave se transmitió al del master.
● De esta operatoria surgen los nombres MOSI (Master Out – Slave In) y MISO (Master In – Slave Out)
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusEsquema del “Driver ModBus”
● Se puede pensar este dispositivo como un conjunto de 16 registros que se pueden leer y escribir● Utilizando ModBus y SPI● El lado de ModBus permite el intercambio de información con el Master presente en el Bus 485● El SPI permite a cualquier microcontrolador acceder a los registros.
(µC
DriverModBus
Bus 485
Registros
● Con esta estructura, si el µC quiere compartir algo con algún dispsitivo ModBus, lo escribe en un registro determinado del driver modbus, y el master modbus eventualmente accederá a dicha información.
● Y puede leer cualquier registro, que pudo haber sido escrito por el master modbus.
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
Estructura de los mensajes ModBus ASCII
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusMensajes ModBus
Un mensaje ModBus ASCII tiene la siguiente forma:
:050300030001F4CRLF
Comienza con “:”
Dirección de Esclavo / Slave
Función a realizar
Dirección de Registro a leer / modificar
Cantidad de registros a leerO valor a escribir,
LRC (verificaciónde integridad)
Termina con los caracteres
CR y LF
- La placa soporta función 03 (Leer registro) y 06 (Escribir registro)- La dirección de slave puede ser cualquier valor entre 1 y F
Argumentos para la función
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusMensajes ModBus
Ejemplo de mensaje ModBus ASCII para escritura de registro (función 06)
:0206000A00C8??CRLF
Comienza con “:”
Dirección de Slave: 12
Función a realizar
Dirección de Registro a escribir 000A
Valor a escribir.200 en hexa (C8)
En esta placa entre 0 y 255
LRC (verificaciónde integridad)
Termina con los caracteres
El mensaje queda → :0206000A00C826CrLf
0206000A00C8DA
+
D A
1101 1010
0010 0101 1
0010 0110 2 6
En binario...
Complemento a 2:Se inverten bitsY se suma 1
LRC
Si se procesa el requerimiento en forma exitosa la respuesta del slave es igual al mensaje enviado por el master.
¿Cómo calcular el LRC?
- Se suman los caracteres de a pares, descartando carry.- El LRC es el complemento a 2 del resultado obtenido.- Para este proceso no considerar los “:”
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusMensajes ModBus
Ejemplo de mensaje ModBus ASCII para lectura de registro (función 03)
:0C0300090001??CRLF
Comienza con “:”
Dirección de Slave: 12
Función a realizar
Dirección de Registro a leer 0009
Cantidad de registros a leer.Para esta placa
siempre usamos 1
LRC (verificaciónde integridad)
Termina con los caracteres
¿Cómo calcular el LRC?
- Se suman los caracteres de a pares, descartando carry.- El LRC es el complemento a 2 del resultado obtenido.- Para este procesran los “:”
0C030009000119
+
1 9
0001 1001
1110 0110 1
1110 0111 E 7
En binario...
Complemento a 2:Se inverten bitsY se suma 1
LRC
El mensaje queda → :0C0300090001E7CrLf
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBusMensajes ModBus
Ejemplo de mensaje ModBus ASCII para lectura de registro (función 03) – Respuesta...
:0C030200D916CRLF
Comienza con “:”
Dirección de Slave: 12
Función
Cantidad de bytes devueltos
(Con esta placa siempre será 2)
LRC (verificaciónde integridad)
Valor del registro pedido
Para leer el registro 3 del dispositivo con ID = 7, enviar: :070300030001F2CrLf
Para escribir 250 en el registro 4 del dispositivo con ID = 10, enviar: :0A06000400FAF2CrLf
Para escribir 50 en el registro 4 del dispositivo con ID = 14, enviar: :0E0600040032B6CrLf
Ej.:
diego codevilla – argentina – 09.2012 – v. 1.1
Interfaz MCU - ModBus
1. Introducir el mensaje, sin “:”2. Click en el botón “calcula LRC”3. Se obtiene el LRC
Calculadora de LRC
a. Descargar el programa: http://www.diegocodevilla.com.ar/?p=423b. Descomprimir y ejecutar.