ModBus TCP con dos PLC y un panel HMI

  • 8 Respuestas
  • 63 Vistas

Rodrigo

  • Novato
  • *
  • Mensajes: 3
ModBus TCP con dos PLC y un panel HMI
« : octubre 01, 2018, 18:38:12 pm »
Buenas tarde Boris...
La semana pasada hablamos por teléfono sobre la comunicación entre los dos plc (8091 y 8092) y el panel KINCO... la verdad que estamos un poco mareado con la forma de programación porque sale un poco en cuanto a los plc que tenemos.

Si llamamos PLC 1 (8091d2) que esta con el Panel Kinco a traves de modbus TCP y PLC2 (8092d1) al que esta a distancia, todos vinculados por Modbus tcp...



Al PLC 1 lo configure como server y se comunica perfectamente con el panel Kinco, veo valores y realizo acciones... a la vez al PLC 1 le inicio un bloque de Modbus TCP cliente para poder escribir en el PLC2 que esta como server... pero únicamente puedo enviar escrituras al PLC 2, y unicamente a los reles salida, de ahí no puedo hacer nada mas! todo da error (escrituras lecturas de registros) y ya di vueltas por todo el foro...

Básicamente lo que necesito hacer es que el PLC2 funcione como entradas y salidas remotas, o sea desde el PLC1 leer entradas independientes y poder escribir las salidas! todos desde el PLC1... y que el panel realice las acciones al PLC1.

Nos podrías dar un ejemplo de configuración o tendrias algunas aplicaciones parecidas?.
desde ya muchas gracias
Saludos
« Última Modificación: octubre 03, 2018, 21:47:05 pm por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1914
  • Soporte Técnico
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #1 : octubre 02, 2018, 09:16:31 am »
Buenos días Rodrigo, muy bien, hacemos el ejemplo y te estoy subiendo el mismo por este medio cuando lo tenga. Saludos!
« Última Modificación: octubre 03, 2018, 21:47:16 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1914
  • Soporte Técnico
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #2 : octubre 03, 2018, 21:31:07 pm »
Estimado Rodrigo,

Te paso los ejemplos para que pruebes la conexión entre dos PLC y un panel HMI por ModBus TCP.

Primero que nada, debes actualizar a la última versión de StxLadder (1.9.4) ya que los ejemplos contienen
algunas funciones nuevas y deben ser abiertos con la última versión:


http://www.slicetex.com/ladder/soft

Hay dos ejemplos, que paso a describir a continuación.



EJEMPLO #1:

Al PLC-1 (ejemplo STX8091-D2) debés cargarle este proyecto:

www.slicetex.com/docs/an/an021/TwoPlc/MbTcpMaster1.zip

Al PLC-2 (ejemplo STX8092-D1) debés cargarle este otro proyecto:

www.slicetex.com/docs/an/an021/TwoPlc/MbTcpSlave1.zip

El PLC-1 actua como cliente ModBus TCP (maestro) y se conecta cada 0.5 segundos al PLC-2 (esclavo o servidor) para pedirle el estado de todas las entradas DIN y para actualizar el valor de todas sus salidas DOUT.

El PLC-1 presupone que el PLC-2 tiene configurada la dirección IP número 192.168.1.82

Al PLC-1 se le ha agregado una lógica en el proyecto para que sea fácil interactuar con las entradas/salidas del PLC-2. Por ejemplo, en el PLC-1 accedes a todas las entradas DIN del PLC-2 con las variables rDIN1 a rDIN12 (notar que prefijo "r" es de remoto).

También, desde el PLC-1 podes controlar las salidas del PLC-2 escribiendo las variables rDOUT1 a rDOUT16 (notar que prefijo "r" es de remoto).

En el diagrama Principal.sld del PLC-1, tenes un ejemplo de aplicación que te muestro en la siguiente figura:



Como podés observar, si DIN6 en PLC-1 es igual a "1", se activa salida DOUT6 en PLC-2, ya que escribimos la variable rDOUT6.

Al abrir el proyecto, en el archivo info.txt tenés más información.

EJEMPLO #2:

Este ejemplo, permite conectar la pantalla HMI Kinco al PLC-1 a través de ModBus TCP.

Al PLC-1 (ejemplo STX8091-D2) debés cargarle este proyecto:

www.slicetex.com/docs/an/an021/TwoPlc/MbTcpMaster2_HMI.zip

Al PLC-2 (ejemplo STX8092-D1) debés cargarle este otro proyecto (el mismo del ejemplo #1):

www.slicetex.com/docs/an/an021/TwoPlc/MbTcpSlave1.zip

A la pantalla HMI Kinco debes cargarle este proyecto:

www.slicetex.com/docs/an/an021/TwoPlc/ModBusTcpTest1_HMI.zip

Una vez conectado el HMI, tenes esta pantalla principal:



Desde los "switchs" podes escribir las direcciones 4003 y 4004 en el PLC-1, que a su vez, desde el diagrama Principal.sld del PLC-1 leemos dichas direcciones y escribimos las variables rDOUT1 y rDOUT2, comandando de esta forma indirectamente las salidas DOUT1 y DOUT2 del PLC-2, como muestra la siguiente imagen:



Este es un ejemplo didáctico, ya que la pantalla la podes conectar al PLC-1 a tráves de RS232/485 para evitar usar el puerto Ethernet, o directamente desde la pantalla HMI comandar el PLC-2 si está en la misma red Ethernet.



Te recomiendo probar los ejemplos, y ver a rasgos generales lo que hacen ,leer archivos info.txt, para luego modificar para tu proyecto.

Quedamos a disposición por cualquier duda.

Saludos!





« Última Modificación: octubre 03, 2018, 21:44:17 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Rodrigo

  • Novato
  • *
  • Mensajes: 3
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #3 : octubre 05, 2018, 16:41:07 pm »
Consulta #1:

Estimado Boris, buenas tardes... vi los ejemplos  y creo que voy a necesitar un curso sobre alguna cosas jajajaj...

* Eventos: no entiendo bien como aplican el concepto de los eventos y mas aun el "OnMbClientRx" porque en mis aplicaciones no los use! lo entiendo leyéndolo pero cuando se activan? es necesario el manejo ese de las librerías?
  - El "OnTimeout" seria un watchdog cada 5 seg?
  - El "OnTimer1" es un timer cada 500ms para realizar lecturas y escrituras?
Te envío los archivos míos... el panel opera sobre el 8092 con los arranques y paradas de las bombas y al 8091 solo que lea las entradas analógicas y las publiques en el panel, o sea que el panel se comporte como cliente/ maestro y los plc como servidores/esclavos... solo hay una comunicacion de un bit entre los dos PLC, es una baliza  (llamado COMUNICACION) que tiene la función de resetear timers en el PLC remoto ya que si se cae el enlace de comunicación no podran parar las bombas, entonces si esa baliza no esta presente para resetear los timers en el remoto activa una señal física que detiene  las bombas...


Consulta #2:

Buenas tardes Boris. Muchas gracias por el ejemplo y lo probe y todo ok... segun lo conversamos por mail, estoy necesitando comprar otro PLC para agregar a la red, un 8092 con un IP192.168.1.83... mi consulta es según el ejemplo, como haria con el segundo PLC servidor?... la aplicacion seria la misma, el 8091 tiene que leer y escribir en los dos 8092 segun los requerimientos solicitados en el panel.




Saludos
« Última Modificación: octubre 05, 2018, 20:15:51 pm por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1914
  • Soporte Técnico
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #4 : octubre 05, 2018, 20:43:20 pm »
Buenas tardes Rodrigo, te respondo primero la Consulta #1:

* Eventos: no entiendo bien como aplican el concepto de los eventos y mas aun el "OnMbClientRx" porque en mis aplicaciones no los use! lo entiendo leyéndolo pero cuando se activan? es necesario el manejo ese de las librerías?

Un evento es algo simple, funciona como una "interrupción". Esto es, cuando por ejemplo un "evento" ocurre, se interrumpe al programa que esta ejecutando el diagrama Principal.sld y se llama al diagrama correspondiente para manejar al evento. Cuando se termina de ejecutar el diagrama del evento, se continua ejecutando el diagrama Principal.sld en el punto en que fue interrumpido.

Un evento puede ser un timer que expiró o una respuesta que llegó de una transacción ModBus TCP que realizaste como cliente.

Una transacción ModBus TCP como cliente puede tardar varios segundos si el servidor no responde inmediatamente, por lo tanto si tuvieras que esperarla, detendrías la ejecución de tu programa para esperar repuesta. Esto seria un inconveniente, entonces es mejor utilizar eventos, en ese caso seguís normalmente la ejecución de tu programa y el PLC te "avisa" cuando llega la respuesta, generando un evento el cual debes procesar.

Ese es el concepto.

El evento "OnMbClientRx" se llama cuando una transacción ModBus TCP como cliente finaliza, la misma puede finalizar porque recibiste repuesta del servidor o porque ocurrió un error. Por ello en el evento se comprueba el estado de la transacción.

En el ejemplo que te pasé, cuando el PLC envía una petición para leer las entradas DIN del esclavo, en el programa se activa un flag llamado "ReadDin" y otro llamado "WaitResponse", esto es para poder diferenciar cuando se finaliza la transacción en el evento a que tipo de operación pertenece la repuesta (ya que podes haber enviado para comandar las salidas DOUT). También el flag WaitResponse evita que mientras estas enviado una petición, la "pises" enviando otra petición al mismo tiempo sin antes haber esperado repuesta. Esto es una lógica que realizamos.

  - El "OnTimeout" seria un watchdog cada 5 seg?

Algo así, un "Timeout" es un timer que podes setearlo para que cada X segundos dispare el evento "OnTimeout" y luego en el diagrama asociado "OnTimeout.sld" ejecutas una lógica. El PLC admite hasta 5 timeout de este tipo. En este programa, suponemos que solo existe el Timeout1 porque no comprobamos los otros 4.

En el ejemplo, usamos el evento OnTimeout para cerrar conexiones del cliente ModBus TCP y limpiar flags. Esto es necesario para evitar que por algún error queden abiertas y/o no se ejecute el evento fin de transacción OnMbClientRx. Ya que recordar, que pedimos periódicamente mediante ModBus datos al PLC que esta configurado como esclavo.

  - El "OnTimer1" es un timer cada 500ms para realizar lecturas y escrituras?

Exacto, fíjate que hay una variable entera MbOpCount que es incrementada si "WaitResponse=0" (no hay transacción en curso o no se espera repuesta).  Si la variable MbOpCount es "1" se hace una petición para lectura ModBus de las entradas DIN remotas, si MbOpCount es "2", se envia escritura a las salidas DOUT remotas. Luego, es reiniciada a "1" para comenzar nuevamente el ciclo.

Siguiendo esta lógica, podes agregar que cuando sea "3" pida el valor de un registro por ejemplo, cuando sea 4 escriba un bit, etc.

Te envío los archivos míos... el panel opera sobre el 8092 con los arranques y paradas de las bombas y al 8091 solo que lea las entradas analógicas y las publiques en el panel, o sea que el panel se comporte como cliente/ maestro y los plc como servidores/esclavos...

No es mala idea, podes usar el HMI como intermediario, para pedir datos a un PLC y copiarlo a otro. Creo que simplificaría un poco la lógica, porque todos los PLC serian esclavos, y solo lees/escribís desde HMI, y no debes utilizar el PLC como cliente. Entiendo que esto se puede hacer.

La parte que implementaste como cliente, no es correcta, ya que no esperas el fin de transacción ModBus TCP con el evento, ni diferencias que operación estas realizando. Si usas el cliente ModBus TCP, mejor partir desde el ejemplo que te pasé.

solo hay una comunicacion de un bit entre los dos PLC, es una baliza  (llamado COMUNICACION) que tiene la función de resetear timers en el PLC remoto ya que si se cae el enlace de comunicación no podran parar las bombas, entonces si esa baliza no esta presente para resetear los timers en el remoto activa una señal física que detiene  las bombas...

Claro, como te comentaba en el párrafo anterior, este bit de "keep alive" podrías setearlo desde el HMI (leyendo PLC-1 y copiando a PLC-2) o desde el PLC-1 maestro enviando el bit al PLC-2 con una transacción ModBus TCP como cliente.

Avísame, y te puedo agregar a lógica del ejemplo que te pase, como setear un bit desde el PLC maestro al esclavo.

Saludos!



« Última Modificación: octubre 05, 2018, 21:04:45 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1914
  • Soporte Técnico
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #5 : octubre 05, 2018, 20:53:28 pm »
Respecto a Consulta #2:

Buenas tardes Boris. Muchas gracias por el ejemplo y lo probe y todo ok... segun lo conversamos por mail, estoy necesitando comprar otro PLC para agregar a la red, un 8092 con un IP192.168.1.83... mi consulta es según el ejemplo, como haria con el segundo PLC servidor?... la aplicacion seria la misma, el 8091 tiene que leer y escribir en los dos 8092 segun los requerimientos solicitados en el panel.

Tendría que modificar un poco el ejemplo, ya que hay que hacer cambios de IP, para primero comunicarse con el PLC-2, y luego con PLC-3.
Dejame que haga unas pruebas para ver si conviene hacerlo así o de alguna otra forma, como por ejemplo utilizando el HMI como intermediario con los tres PLC configurados como servidor para simplificar.

Buen fin de semana.

Saludos!



« Última Modificación: octubre 05, 2018, 20:59:24 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Rodrigo

  • Novato
  • *
  • Mensajes: 3
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #6 : octubre 05, 2018, 21:33:32 pm »
Hola Boris, gracias por desburrarme un poco jajaj.... Lo que estaba pensando es que en el caso de la aplicación con 3 PLCs + el panel, seria configurar únicamente como servidor al 8091 y clientes a los dos remotos (8092) para interactuar con el 8091... a la vez a los 8091 también como servidor para que el panel comande sobre ellos... y el bit de baliza estaría en el 8091 que seria leído por los dos 8092... que opinas? podrías ver un ejemplo asi?.

Saludos

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1914
  • Soporte Técnico
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #7 : octubre 09, 2018, 11:18:13 am »
Lo que estaba pensando es que en el caso de la aplicación con 3 PLCs + el panel, seria configurar únicamente como servidor al 8091 y clientes a los dos remotos (8092) para interactuar con el 8091... a la vez a los 8091 también como servidor para que el panel comande sobre ellos... y el bit de baliza estaría en el 8091 que seria leído por los dos 8092... que opinas? podrías ver un ejemplo asi?.

Buenos días Rodrigo. Buenas idea. He probado armar tres PLC con un HMI conectados por ModBus TCP, donde un PLC es servidor, y el resto, dos PLC y HMI son maestros.  Funciona correctamente, todos acceden al PLC servidor.

Hice una prueba rápida de prueba, luego tendré que emprolijar y subir los ejemplos.



La única diferencia, es que desde el HMI en este caso, a cualquier dirección de registro o bit que quieras leer o escribir en el PLC, debes sumarle 1. Por ejemplo, si querés acceder desde el HMI al GP-COIL 4064 en el PLC, debes accederlo como 4064+1=4065.

Se puede configurar el PLC para que no necesites esa consideración desde el HMI, pero entonces los otros dos PLC clientes, deberán hacer la misma consideración sumando 1 a la dirección. Esto se puede elegir, depende de como lo quieras. Capaz, que si queres mantener compatibilidad de diseño de HMI con proyecto actual, te convenga que los PLC sean los que incrementen en 1 la dirección.

Saludos!


« Última Modificación: octubre 09, 2018, 11:32:07 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1914
  • Soporte Técnico
Re:ModBus TCP con dos PLC y un panel HMI
« Respuesta #8 : octubre 09, 2018, 11:22:47 am »
Cita de: Rodrigo
si en vez de leer entrada o escribir salidas quiero hacerlo en bits de GP, solo cambio la dirección verdad? en el caso de las lecturas las entradas 10001at16 las cambio por 4001at16 ? o si quiero escribir cambio 1at16 lo cambio por 4020at16 por ejemplo... 

Para escribir GP coils, utilizás el mismo componente del ejemplo, desde dirección 4001.

Para leer GP coils, debés remplazar el componente que lee las entradas en el ejemplo por el componente "MbClSendReadCoils".

El mismo se configurara igual que MbClSendReadDiscretes , solo que la dirección para GP-COIL es ADDR=4001 y QTY=16 (si pedís 16 bits).
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com