Mostraremos a continuación cómo leer desde el
HMI Kinco temperatura de sensores tipo termocupla conectados a un módulo RS-485 con protocolo ModBus RTU. Una vez leída la temperatura, desde el HMI ejecutaremos un macro que copiará la temperatura a registros ModBus TCP de un
PLC conectado por Ethernet.
La ventaja de esta configuración, es que el PLC no necesita tener conexión RS-485 para obtener los valores de temperatura, ya que es el HMI quién los obtiene y transfiere al PLC utilizando una conexión Ethernet.Una vez entendido este ejemplo, puede aplicarlo a cualquier dispositivo ModBus RTU que quiera acceder desde la pantalla HMI y además compartir sus valores por ModBus TCP a un PLC.
DIAGRAMA EN BLOQUES
PREPARAR LOS EQUIPOSPara este ejemplo necesitará:
- Pantalla HMI Kinco con puerto Ethernet y RS-485.
- PLC con conexión ModBus TCP por Ethernet.
- Módulo de temperatura TC8MB-K o similar, con conexión ModBus RTU por RS-485.
- Fuente de 12 o 24 Vcc.
REALIZAR EL CONEXIONADO DE LOS EQUIPOSEn el siguiente link puede descargar en formato PDF el diagrama de conexión eléctrica y cableado de los equipos:
www.slicetex.com/hmi/kinco/files/examples/mb_temp_read/plc_wiring.pdfCARGAR LOS PROYECTOS DE DE EJEMPLO AL HMI Y PLCPara que el ejemplo funcione es necesario que cargue los proyectos de software en el HMI y en el PLC.
El proceso de carga se explica en sus respectivos manuales.
A continuación puede descargar los proyectos y abrirlos en el entorno de programación del HMI y el PLC respectivamente.
HMI:El proyecto para la pantalla HMI Kinco lo puede descargar desde el siguiente link:
www.slicetex.com/hmi/kinco/files/examples/mb_temp_read/PLC_Temperature_Module1.zipNota[1]: Se utiliza el HMI modelo GL100E en el ejemplo, pero puede cambiar a otro modelo desde el entorno de programación.
Nota[2]: El proyecto del HMI se abre con
Kinco DTools.
PLC:Para el PLC, puede descargar el proyecto desde los siguientes links:
Lenguaje Ladder:www.slicetex.com/hmi/kinco/files/examples/mb_temp_read/MbTempKincoLadder1.zipLenguaje Pawn:www.slicetex.com/hmi/kinco/files/examples/mb_temp_read/MbTempKincoPawn1.zipNota[1]: Se utiliza el PLC modelo STX8140-A2-R en el ejemplo, pero puede cambiar a otro modelo desde el entorno de programación.
Nota[2]: Al abrir el proyecto del PLC, lea el archivo
info.txt incluido, allí se explica en detalle el funcionamiento del programa del PLC.
Nota[3]: El proyecto del PLC se abre con
StxLadder.
PRUEBA INICIALUna vez armado el cableado de los equipos (verificar dos veces) y cargado el software a la pantalla HMI y el PLC, puede energizar los equipos para hacer una prueba de funcionamiento.
En el HMI debería leer la temperatura reportada por todos los canales del módulo de temperatura en una pantalla similar a la siguiente:

Y en el PLC, utilice
Virtual-HMI para ver las temperaturas recibidas en el PLC:

Note que si no hay sensor de temperatura conectado al módulo de temperatura, el valor leído será -100 °C. Si la temperatura parece ser errónea, es decir algunos grados de más o de menos, intente conectar en orden inverso los terminales de la termocupla, ya que pueden estar en la posición incorrecta.
Si la pantalla muestra "PLC no response", asegúrese haber cableado correctamente el módulo de temperatura por RS-485, y además que el PLC tenga la dirección IP 192.168.1.81, conectado directamente al HMI con un cable ethernet, o en una red LAN con direcciones de red IP compatible (192.168.1.
xxx). Si necesita cambiar estas IP, debe reflejar dichos cambios en el proyecto del HMI.
MÓDULO DE TEMPERATURAEl módulo de temperatura utilizado en este ejemplo es el
TC8MB-K, que admite conexión RS-485 (ModBus RTU) y tiene ocho entradas para sensores de temperatura tipo termocupla K.

Los registros ModBus RTU de esté módulo son los siguientes:


Note como la comunicación por defecto es: 9600 bps, 8N1 y dirección RTU = 1.
En la última tabla, cada canal de temperatura tiene la dirección: 32 para el número 1, 33 para el número 2, etc.
Sin embargo, en el HMI Kinco es necesario sumarle "1" a las direcciones ModBus RTU para este módulo.
Por lo tanto nos queda: 33 para el número 1, 34 para el número 2, etc.Por otro lado, el valor de temperatura es un entero de 16-bits con signo multiplicado por 10. Es decir, el valor 200 corresponde a 20 °C.
Cuando no hay sensor conectado, el valor por defecto es -1000, es decir -100 °C.
Link a hoja de datos completa:
https://slicetex.com/modules/temperature/tc8mb-k/docs/TC8MB-K-DS.pdfDETALLES DE FUNCIONAMIENTO DEL HMIPara practicar ejemplos de comunicación ModBus TCP entre el HMI y el PLC, recomendamos bajar y practicar por separado los ejemplos disponibles en nuestra página de manuales de la pantalla Kinco, que puede accederla desde
aquí.
A continuación mostraremos las particularidades a prestar atención en el proyecto del HMI para hacer funcionar este ejemplo.
Una vez abierto el proyecto de ejemplo desde el software
Kinco DTools vamos a la estructura del proyecto al área de conexión, como muestra la siguiente imágen:

Aquí el PLC está conectado por ModBus TCP (Ethernet) y su conexión "
Net" se llama "
PLC_0_1", mientras que el módulo de temperatura está conectado por ModBus RTU (RS-485), y su conexión
"COM0" se llama "
PLC_1_1". Ambos nombres se utilizarán como referencia en el proyecto para conectarnos a uno u otro dispositivo.
En la misma figura, hacemos doble-click en el dibujo de la pantalla HMI para ingresar a sus atributos:

Una vez en los atributos del HMI, buscamos la solapa "
COM0 Setting":

En está última ventana, especificamos los parámetros de comunicación del puerto COM0, ver áreas resaltadas en amarillo.
Elegimos los valores de conexión que requiere el módulo de temperatura conectado por RS-485 (ver más arriba), por lo tanto Type=RS485, Baud Rate=9600, Data Bit=8, Parity Check=none, Stop Bit=1.
El siguiente paso es mostrar desde la pantalla HMI el valor de temperatura del módulo, accediendo directamente a un registro del módulo. Para ello, vamos al "
Frame0" del HMI en la sección de estructura del proyecto, y aparecerá la siguiente ventana:

Hacemos doble-click en el objeto "
NI5", que es el primer componente numérico que se muestra.
Aparecerá la siguiente ventana:

Las partes coloreadas en amarillo son las importantes.
Como esté componente numérico lee un registro ModBus y muestra su valor, configuramos lo siguiente para que acceda el módulo de temperatura:
PLC No: Elegimos PLC_1_1 (que es la conexión RS-485 al módulo, ver más arriba)
Addr Type: 4X (esto indica "leer un registro ModBus)
Address: 33 (dirección del registro ModBus a leer, ver más arriba).
Luego, en la misma ventana, vamos a la solapa "Numeric Data":

Aquí "adaptamos" el valor leído del registro, ya que si recordamos, es un número de 16-bits con signo, y cuyo valor está multiplicado por 10. Entonces, seleccionamos:
Data type: signed int (entero con signo)
Data Width: WORD (16-bits)
Integer: 5 (solo nos interesan 5 digitos de parte entera)
Decimal: 1 (solo nos interesa 1 dígito de parte decimal, es decir, dónde poner el punto o lo que es lo mismo a dividir por 10).
Show Plus Sign: tildar (muestra el signo)
Min: -9999 (valor mínimo a mostrar, podemos colocar cualquiera para límitar el valor a mostrar)
Max: 9999 (valor máximo a mostrar, podemos colocar cualquiera para límitar el valor a mostrar)
Listo, le damos click a "OK" para cerrar la ventana y aplicar los cambios.
Todos los controles numéricos de este "Frame0" están configurados iguales, pero con una dirección "Address" de ModBus diferente, para que lea los ocho canales de temperatura.
Ya fue explicado como mostrar la temperatura leyendo directamente el módulo por ModBus RTU.
Ahora será necesario explicar cómo enviar los valores de temperatura leídos por ModBus RTU (RS-485) al PLC utilizando ModBus TCP (Ethernet).
Esto lo haremos utilizando MACROS en el HMI. Un macro es un pequeño código escrito con un listado de operaciones que puede llamarse como una función desde el HMI.
Este macro será el encargado de leer 8 registros por ModBus RTU (dirección 33 a 40) desde el módulo y escribirlos por ModBus TCP (dirección 40041 a 40048) al PLC.
Para agregar un macro al HMI vaya a menú "
Option > Macrocode ...". Allí una ventana le pedirá un nombre para el macro.
Como en el ejemplo ya está creado el macro, vaya al árbol de la estructura del proyecto, busque "
Macro File" y haga click sobre "
copy_temperature_array.c", como se muestra a continuación:

En esta nueva ventana puede escribir el código del macro. Pero antes, explicaremos como declarar los parámetros utilizados como variables dentro del código del macro.

En la sección "Parameters" puede agregar una variable nueva haciendo click-izquierdo y seleccionando "Add variable".
En este ejemplo ya fueron agregadas dos variables tipo array: "
MODULE_TEMP" y "
PLC_TEMP".
Una variable se utilizará para leer los registros del módulo, y la otra para escribir los registros del PLC.
Haga doble-click sobre "MODULE_TEMP" aparecerá la siguiente ventana:

En las partes en amarillo se elige:
Data Type: unsigned short (entero de 16 bits sin signo, no utilizaremos signo aquí)
PLC No: PLC_1_1 (es la conexión ModBus RTU, RS485)
Address Type: 4x (para leer un registro ModBus)
Address: 33 (dirección del primer canal de temperatura)
Array Variable: Tildar, ya que declararemos un array de 8 elementos.
R/W: Read (operación de lectura)
Array Length: 8 (tamaño del array y cantidad de registros a solicitar).
Cerramos la ventana.
Ahora haga doble-click sobre "PLC_TEMP" aparecerá la siguiente ventana:

En las partes en amarillo se elige:
Data Type: unsigned short (entero de 16 bits sin signo, no utilizaremos signo aquí)
PLC No: PLC_0_1 (es la conexión ModBus TCP, Ethernet)
Address Type: 4x (para leer un registro ModBus)
Address: 40041 (dirección del primer registro a escribir en el PLC)
Array Variable: Tildar, ya que declararemos un array de 8 elementos.
R/W: Write (operación de escritura)
Array Length: 8 (tamaño del array y cantidad de registros a escribir).
Cerramos la ventana.
Una vez declaradas ambas variables, podemos utilizarla en el código del macro.
El código que utilizamos es el siguiente:
int MacroEntry()
{
int i;
/* Copiamos la temperatura desde los registros del módulo ModBus RTU (RS-485) a los registros del PLC ModBus TCP (Ethernet) */
for(i=0; i<8; i++)
{
PLC_TEMP[i] = MODULE_TEMP[i];
}
return 0;
}
El código es muy simple. En un ciclo "for" incrementamos la variable "i" desde 0 a 7.
En cada incremento copiamos el array MODULE_TEMP del módulo de temperatura al array PLC_TEMP del PLC. En otras palabras, leemos los registros ModBus RTU desde el módulo y los escribimos en los registros ModBus TCP del PLC.
PLC_TEMP[i] = MODULE_TEMP[i];
Finalmente queda ejecutar el macro
copy_temperature_array.c en el HMI para que periódicamente envié los valores de temperatura al PLC. En el HMI hay varios métodos para ejecutar un macro (ver manual del HMI), por ejemplo utilizando un temporizador o mediante "
PLC Control". Nosotros utilizaremos "PLC Control".
En "PLC Control" configuraremos el HMI para que constantemente lea el registro 40040 del PLC mediante ModBus TCP. Si el valor leído, ha cambiado, es decir, difiere de la última lectura, se ejecuta el macro
copy_temperature_array.c, y por lo tanto el HMI obtiene la temperatura del módulo y la copia a los registros del PLC.
Con este método, debemos procurar en el PLC cambiar el valor del registro 40040 periódicamente (o cada vez que necesitemos) para que la temperatura copiada al PLC esté actualizada.
Entonces, vamos a menú "
Components > PLC Control" y aparece la siguiente pantalla:

Si queremos agregar una nueva regla, tocamos en "Add". Pero como en el proyecto ya está agregada, tocamos con doble-click la única definida y se muestra la siguiente pantalla:

La parte en amarillo es la importante a prestar atención:
PLC No: PLC_0_1 (Seleccionamos la conexión ModBus TCP, Ethernet)
Addr. Type: 4X (para leer un registro ModBus)
Address: 40040 (dirección del registro en el PLC a leer)
Control Type: Execute Macro Program (ejecutar macro cuando se cumpla la condición)
Macro ID: copy_temperature_array.c (seleccionamos el macro que queremos ejecutar)
Execute Method: Word register value changed (cuando el registro 40040 cambie de valor, ejecutar el macro)
Salimos de la ventana.
Listo, ahora cuando el PLC cambié el el valor del registro 40040 el HMI buscará los valores de temperatura y los copiará al PLC.
Consejo: En el PLC podemos definir una variable entera e incrementarla constantemente, luego copiar dicha variable al registro 40040, y de esta manera cumplimos la condición que espera el HMI, ya que el registro 40040 tendrá un valor diferente constantemente. En los ejemplos de código para el PLC suministrado, hacemos esto.
Esto es todo, si necesita ejemplos básicos para utilizar el HMI con el PLC los puede encontrar en el siguiente link:
www.slicetex.com/hmi/kinco/docs.php#ExamplesLa nota de aplicación AN022 detalla como usar ModBus TCP con el PLC:
www.slicetex.com/docs/an/an022Consúltenos si tiene dudas, éxitos