No puedo transferir datos del PLC (maestro) a la pantalla (esclava) por RS485

  • 7 Respuestas
  • 50 Vistas

SebaRiera

  • Novato
  • *
  • Mensajes: 4
Buenos días , adquirimos tres módulos PD3060 con la pantalla Kinco 4532 y el PLC8091. Lo que hemos echo es configurar el PLC como maestro y en primer lugar leer todos los valores de las PT100 , luego envío esos valores a la pantalla y le digo que los guarde a partir de la dirección 40036 con el siguiente comando MbRtuClSendWriteMultReg(4,40036,6,gai_PT100_1)... Ahora cuando queremos programar la pantalla para que busque en su registro 40036 el valor de la primera PT100 y lo muestre no sabemos cómo se debería hacer. Parece que la pantalla pide al PLC leer esos datos como si fuera maestra también y sale un error PLC no responde. Estamos usando para comunicar Modbus RTU por RS485 2 cables.
« Última Modificación: marzo 18, 2019, 11:01:14 am por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1979
  • Soporte Técnico
Buenos días , adquirimos tres módulos PD3060 con la pantalla Kinco 4532 y el PLC8091. Lo que hemos echo es configurar el PLC como maestro y en primer lugar leer todos los valores de las PT100 , luego envío esos valores a la pantalla y le digo que los guarde a partir de la dirección 40036 con el siguiente comando MbRtuClSendWriteMultReg(4,40036,6,gai_PT100_1)... Ahora cuando queremos programar la pantalla para que busque en su registro 40036 el valor de la primera PT100 y lo muestre no sabemos cómo se debería hacer. Parece que la pantalla pide al PLC leer esos datos como si fuera maestra también y sale un error PLC no responde. Estamos usando para comunicar Modbus RTU por RS485 2 cables.

Buenos días, no había probado la pantalla como esclava, pero da la impresión de que sigue siendo maestra por el tipo de error.

¿Cómo estás programando la pantalla?. ¿Podrías compartirme el proyecto de la pantalla para ver la configuración?.

Saludos!
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

foliva26

  • Novato
  • *
  • Mensajes: 4
Buen Día, soy compañero de Seba Riera, estamos en el mismo proyecto. Yo programé la pantalla, en realidad, está como maestro; ya que por lo general, la pantalla siempre se la coloca como maestro.

el tema es que no sé como hacer para poner a la pantalla como esclavo?, ya que mi compañero puso el plc como maestro.

saludos.

FO

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1979
  • Soporte Técnico
el tema es que no sé como hacer para poner a la pantalla como esclavo?, ya que mi compañero puso el plc como maestro.

Ah, ok.

Conectar el PLC a la pantalla con conexión Ethernet y evitar el RS485, para usarlas por separado, ¿no te sirve?, para eso hay ejemplos disponibles.

Sino decime, y puedo hacerte un ejemplo para comunicar el PLC como maestro a la pantalla configurada como esclava.

Saludos!
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

foliva26

  • Novato
  • *
  • Mensajes: 4
Como hago para programar la HMI como esclavo?

saludos.

FO

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1979
  • Soporte Técnico
Como hago para programar la HMI como esclavo?

Estuve haciendo pruebas, para comunicar el PLC como maestro y el HMI como esclavo, y es posible.

Si solo tenés que mostrar temperatura en el HMI, es algo simple, sin problemas.

Pero se complica desde el punto de vista de programación en el PLC, si tenés que interactuar, es decir escribir valores desde el HMI al PLC,
para por ejemplo establecer configuraciones o controlar algo en el PLC. Más aún si tenés conectados los módulos de temperatura.

Te recomiendo conectar el HMI al puerto Ethernet del PLC, de esa forma, escribís o lees registros desde el HMI en el PLC de forma directa, que pueden ser los de temperatura, y listo.

¿Hay una razón en particular por la cual no usar Ethernet?.



Te dejo como configurar el HMI como esclavo, por si querés hacer la prueba:

HMI

En el proyecto del HMI, ir al diseñador y configurar conexión, especificando que el PLC utiliza "ModBus RTU Slave":



Entrar a los atributos del HMI y configurar puerto COM0:



En la vista de diseño de pantalla, podemos insertar un componente "Number Display" para mostrar un valor de registro escrito por el PLC en el HMI:



PLC

En el PLC podés enviar el valor de 6 registros contenidos en un Array HmiData[] como se muestra a continuación:

Código: (Pawn) [Seleccionar]
      //
      // Enviar datos de 6 registros al HMI a partir de dirección 0.
      // En el HMI se podrán leer en dirección LW 0, 1, 2, 3, 4, y 5.
      //
     
      MbRtuClSendWriteMultReg(4, 0, 6, HmiData) 
     
      // Incrementar valores de los registros.
      HmiData[0]++
      HmiData[1]++
      HmiData[2]++
      HmiData[3]++
      HmiData[4]++
      HmiData[5]++
     
      // Realizar una pausa de 100 mS para permitir que termine transmisión ModBus
      // de escritura, antes de iniciar siguiente transmisión.
      DelayMS(100)


Notar que utilizamos dirección ModBus RTU número 4 para el HMI como esclavo y escribimos 6 registros a partir de dirección interna número 0 del HMI.

En el HMI accedés a estos registros en dirección LW 0, LW 1, LW 2, LW 3, LW 4 y LW 5.

Esta equivalencia se muestra en el manual del HMI (pág. 448):



Saludos!
« Última Modificación: marzo 18, 2019, 20:27:23 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

SebaRiera

  • Novato
  • *
  • Mensajes: 4
Hola gracias por responder , ya hicimos funcionar el envío de datos a la HMI y visualizarlos en pantalla pero no podemos leer datos del HMI. No utilizamos ethernet porque el proyecto lo presentamos con RS485 dos hilos y ya está aprobado así, el cliente lo exigió. Te agradecemos la solución.
Volviendo al tema de leer en la pantalla, utilizamos el mismo ejemplo de lectura para los módulos PD3060... Te escribo el código en PAWN :

MbRtuClSendReadHoldingReg(4,10,16);
MbRtuClGetRxReg(gai_Pantalla,0,16,1);
 
En la posición  10 guardamos en pantalla un valor cualquiera por ejemplo 128. Luego envío lo que tengo en gai_Pantalla(0) nuevamente a la pantalla para visualizar que estoy haciendo bien la lectura y muestra siempre cero en vez de retornar el 128.

PD: Los módulos de temperatura los pudimos leer también y mostrarlos en la pantalla.
« Última Modificación: marzo 19, 2019, 18:40:09 pm por SebaRiera »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1979
  • Soporte Técnico
MbRtuClSendReadHoldingReg(4,10,16);
MbRtuClGetRxReg(gai_Pantalla,0,16,1);
 
En la posición  10 guardamos en pantalla un valor cualquiera por ejemplo 128. Luego envío lo que tengo en gai_Pantalla(0) nuevamente a la pantalla para visualizar que estoy haciendo bien la lectura y muestra siempre cero en vez de retornar el 128.

Me da la impresión de que hay un error de lógica, es decir, debes estar leyendo la repuesta de otra petición ModBus, o en la pantalla no estás escribiendo LW10.

Igualmente, te hice un ejemplo completo así lo probás.

Ejemplifica todas las operaciones, lectura de registros, escritura de registros, escritura/lectura de bits, etc.
El ejemplo utiliza VirtualHMI para mostrar información.



Te paso los links de descarga:

Proyecto para pantalla (HMI como esclavo):

http://slicetex.com/hmi/kinco/files/examples/ModBusRTU_HMI_Slave_MT4532TE.zip

Proyecto para PLC (como maestro):

http://slicetex.com/hmi/kinco/files/examples/ModBusRtuKincoSlave1.zip

Fíjate de probarlos y ver como se hace, leer archivo info.txt en el proyecto de PLC que explica procedimiento.

Cualquier duda, quedamos a disposición.

Saludos!
« Última Modificación: marzo 19, 2019, 21:50:23 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com