RS 485 - cliente - ladder

  • 4 Respuestas
  • 169 Vistas

fruiz

  • Aprendiz
  • **
  • Mensajes: 28
RS 485 - cliente - ladder
« : junio 06, 2019, 13:47:28 pm »
Buenas tardes, tienes algún ejemplo como implementar 485 en ladder? algo me debe estar faltando porque no logro leer los registros de una balanza y quiero saber si el problema lo tengo en el programa. Ya probe conectando dos plc en el mismo cableado y funcionó correctamente, pero cuando conecto la balanza no recibo ningún dato.
Gracias
PD como alternativa puedo implementarlo en pawn, pero no me va bien mezclando pawn con ladder

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2087
  • Soporte Técnico
Re:RS 485 - cliente - ladder
« Respuesta #1 : junio 06, 2019, 18:34:37 pm »
Buenas tardes Francisco,

Podes descargar el siguiente ejemplo en Ladder para ModBus cliente (maestro) RS485:

http://slicetex.com/modules/temperature/pd3060-pt100/files/PT100_PD3060_Ladder1.zip

El ejemplo está explicado en la sección 5.2 del siguiente PDF:

http://slicetex.com/modules/temperature/pd3060-pt100/docs/PD3060-PT100-DS.pdf

Básicamente en el ejemplo, cada 500 mS se realiza una transacción ModBus para obtener 6 registros del módulo PD3060 que representan la temperatura leída por los sensores PT100 conectados al mismo.

Podes modificarlo, para que en vez de temperatura, te muestre los valores crudos de los registros en VirtualHMI.

La repuesta es leída cuando los valores del registro se reciben en el evento OnMbRtuClientRx.sld.



CONSEJOS:

Fíjate de interpretar bien la dirección del registro a leer en la balanza, ya que las direcciones ModBus a veces no son muy "estándar".

Muchos fabricantes en la hoja de datos mencionan por ejemplo la dirección "40037", pero debe interpretarse como 40036, ya que no cuentan al "0" como una dirección válida.

También hay casos que las direcciones 4x tienen un offset de 40000 o 40001, es decir, volviendo al ejemplo, tenés las siguientes equivalencias a modo de resumen::

  • 40037 -> 40037-1 = 40036
  • 40037 -> 40037-40000 = 37
  • 40037 -> 40037-40001 = 36

En las funciones del PLC deberías colocar en estos casos, 40036, 37 o 36 como dirección de registro.  El valor que te devuelva el resultado correcto, es el método adecuado..

Esto se debe a que el PLC envía el número de dirección que le coloques, no interpreta si 40037 se refiere a 40036, 37 o 36, ya que no hay un estándar.

También verificar que el número de dirección no esté en base hexadecimal, en ese caso, convertirlo antes a base decimal.

Finalmente, corroborar que tengas bien configurados los parámetros de velocidad, paridad, deben ser los mismos, así como debes conocer la dirección de red ModBus RTU de la balanza, muchas veces por default dirección "1".

Saludos!



« Última Modificación: junio 06, 2019, 18:44:33 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

fruiz

  • Aprendiz
  • **
  • Mensajes: 28
Re:RS 485 - cliente - ladder
« Respuesta #2 : junio 07, 2019, 08:34:51 am »
GRACIAS!

fruiz

  • Aprendiz
  • **
  • Mensajes: 28
Re:RS 485 - cliente - ladder
« Respuesta #3 : junio 21, 2019, 09:53:25 am »
Buenas, logré conectarme a las tres balanzas y recibir datos de ellas. ahora tengo el programa que recibo datos que no puedo interpretar. por ejemplo cuando la balanza está en cero recibo 1024 y cuando esta a fondo de escala recibo 1056.

Creo que no estoy colocando bien los parámetros sobre el dato recibido o cuántos bytes muestro en la pantalla. Adjunto información de la balanza y te agradezco si me puedes orientar. Gracias

3.4.2 Mapa de memoria
Dirección Nombre Tamaño Lectura / Escritura
0 Peso bruto 2 registros (4 bytes)* Lectura
2 Tara 2 registros (4 bytes)* Lectura
4 Peso neto 2 registros (4 bytes)* Lectura
6 Flags / Teclado 1 registros (2 bytes) Flags:Lectura/ Teclado: Escritura
7 Usado por Legonet 1 registros (2 bytes) Lectura/ Escritura

(*) 32 bits, enteros largos (doble precisión) en complemento a dos

Los valores están expresados como enteros (sin punto decimal).
La característica de escritura en el registro de teclado por protocolo Modbus

3.4.3 Configuración del PLC
Configuración tarjeta PCMCIA RS232 (TSX SCP 111 RS232MP en Modicom)

Modo RTU Modo ASCII
Enlace: MODBUS/J-BUS T entre Carac: 1 mS Enlace: MODBUS/J-BUS T entre Carac: 3 mS
Tipo: Maestro Datos: RTU (8 bits) Tipo: Maestro Datos: ASCII (7 bits)
Velocidad: 9600 bps. Parada: 1 bits Velocidad: 9600 bps. Parada: 2 bits
Nro. de Reintentos: 0 Paridad: None Nro. de Reintentos: 0 Paridad: None
T Respuesta: 100 mS DelayRTS/CTS:0mS T Respuesta: 100 mS DelayRTS/CTS: 0mS



Buenas tardes Francisco,

Podes descargar el siguiente ejemplo en Ladder para ModBus cliente (maestro) RS485:

http://slicetex.com/modules/temperature/pd3060-pt100/files/PT100_PD3060_Ladder1.zip

El ejemplo está explicado en la sección 5.2 del siguiente PDF:

http://slicetex.com/modules/temperature/pd3060-pt100/docs/PD3060-PT100-DS.pdf

Básicamente en el ejemplo, cada 500 mS se realiza una transacción ModBus para obtener 6 registros del módulo PD3060 que representan la temperatura leída por los sensores PT100 conectados al mismo.

Podes modificarlo, para que en vez de temperatura, te muestre los valores crudos de los registros en VirtualHMI.

La repuesta es leída cuando los valores del registro se reciben en el evento OnMbRtuClientRx.sld.



CONSEJOS:

Fíjate de interpretar bien la dirección del registro a leer en la balanza, ya que las direcciones ModBus a veces no son muy "estándar".

Muchos fabricantes en la hoja de datos mencionan por ejemplo la dirección "40037", pero debe interpretarse como 40036, ya que no cuentan al "0" como una dirección válida.

También hay casos que las direcciones 4x tienen un offset de 40000 o 40001, es decir, volviendo al ejemplo, tenés las siguientes equivalencias a modo de resumen::

  • 40037 -> 40037-1 = 40036
  • 40037 -> 40037-40000 = 37
  • 40037 -> 40037-40001 = 36

En las funciones del PLC deberías colocar en estos casos, 40036, 37 o 36 como dirección de registro.  El valor que te devuelva el resultado correcto, es el método adecuado..

Esto se debe a que el PLC envía el número de dirección que le coloques, no interpreta si 40037 se refiere a 40036, 37 o 36, ya que no hay un estándar.

También verificar que el número de dirección no esté en base hexadecimal, en ese caso, convertirlo antes a base decimal.

Finalmente, corroborar que tengas bien configurados los parámetros de velocidad, paridad, deben ser los mismos, así como debes conocer la dirección de red ModBus RTU de la balanza, muchas veces por default dirección "1".

Saludos!

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2087
  • Soporte Técnico
Re:RS 485 - cliente - ladder
« Respuesta #4 : junio 21, 2019, 19:59:37 pm »
Buenas tardes.

Creo que no estoy colocando bien los parámetros sobre el dato recibido o cuántos bytes muestro en la pantalla. Adjunto información de la balanza y te agradezco si me puedes orientar. Gracias

3.4.2 Mapa de memoria
Dirección Nombre Tamaño Lectura / Escritura
0 Peso bruto 2 registros (4 bytes)* Lectura
2 Tara 2 registros (4 bytes)* Lectura
4 Peso neto 2 registros (4 bytes)* Lectura
6 Flags / Teclado 1 registros (2 bytes) Flags:Lectura/ Teclado: Escritura
7 Usado por Legonet 1 registros (2 bytes) Lectura/ Escritura

(*) 32 bits, enteros largos (doble precisión) en complemento a dos

Los valores están expresados como enteros (sin punto decimal).
La característica de escritura en el registro de teclado por protocolo Modbus

Entiendo que te especifica que el valor de peso se especifica en 32-bits, es decir, debes leer dos registros ModBus de 16 bits y juntarlos para formar un solo entero de 32-bits.

Esto lo podés hacer con una operación Pawn, definiendo en Ladder una nueva funcion Pawn como componente, donde le pasas dos registros como entradas IN1 e IN2, y en la salida OUT1 le colocas la nueva variable donde almacenás el peso.

Luego a la función Pawn le colocas el siguiente código para unir ambos registros:

Código: (Pawn) [Seleccionar]
OUT1=(IN1<<16)|(IN2)
En la entrada IN1, debes pasar el registro más significativo.

Según te explica están en complemento a dos, esto solo importa si lees números negativos.
No entiendo a que se refiere con "doble precisión", ya que no menciona que sea un tipo float.

3.4.3 Configuración del PLC
Configuración tarjeta PCMCIA RS232 (TSX SCP 111 RS232MP en Modicom)

Modo RTU Modo ASCII
Enlace: MODBUS/J-BUS T entre Carac: 1 mS Enlace: MODBUS/J-BUS T entre Carac: 3 mS
Tipo: Maestro Datos: RTU (8 bits) Tipo: Maestro Datos: ASCII (7 bits)
Velocidad: 9600 bps. Parada: 1 bits Velocidad: 9600 bps. Parada: 2 bits
Nro. de Reintentos: 0 Paridad: None Nro. de Reintentos: 0 Paridad: None
T Respuesta: 100 mS DelayRTS/CTS:0mS T Respuesta: 100 mS DelayRTS/CTS: 0mS

Por otro lado, fijate que la balanza este configurada solo en modo "ModBus RTU" y no en "ModBus RTU ASCII", ya que son dos protocolos diferentes, el PLC solo soporta el primero.

Saludos!
« Última Modificación: junio 23, 2019, 20:28:08 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com