Carga valores de un array en los registros "Holding"

  • 5 Respuestas
  • 230 Vistas

Esteban E

  • Aprendiz
  • **
  • Mensajes: 69
Carga valores de un array en los registros "Holding"
« : septiembre 19, 2017, 21:13:53 pm »
Hola, tengo la siguiente duda, se utiliza el componente MbRtuServLoadRegisters para cargar desde una entrada Array y luego la lea el panel. Pero en QTY no comprendo que valor se coloca.

Y la otra duda es pasar de un valor int32 a int32_array como se realiza ?

Utilizo lenguaje ladder.

Gracias.
« Última Modificación: septiembre 20, 2017, 11:35:00 am por Soporte »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1885
  • Soporte Técnico
Re:Carga valores de un array en los registros "Holding"
« Respuesta #1 : septiembre 20, 2017, 11:47:39 am »
Buenos días Esteban,

Hola, tengo la siguiente duda, se utiliza el componente MbRtuServLoadRegisters para cargar desde una entrada Array y luego la lea el panel. Pero en QTY no comprendo que valor se coloca.

En la entrada QTY especificas el número de elementos que se van a leer desde el array tipo Int32_Array y luego cargar a la direccion ADDRESS de los registros ModBus Holding.

Por ejemplo, si tenes un array llamado "Valores" con 5 elementos con los siguientes valores:

Valores[0] = 21
Valores[1] = 50
Valores[2] = 200
Valores[3] = 500
Valores[4] = 1000

Y deseas cargar los primeros tres valores en las direcciones ModBus 42001, 42002 y 42003, entonces en el componente MbRtuServLoadRegisters especificas en su puertos:

ARRAY = Valores[0]
QTY = 3
ADDRESS = 42001

Luego de ejecutar el componente, te queda en las direcciones de registros holding los valores de los 3 elementos del array:

42001 = 21
42002 = 50
42003 = 200

Y la otra duda es pasar de un valor int32 a int32_array como se realiza ?

Utilizo lenguaje ladder.

Una opción fácil si queres cargar un Int32 a dirección de registro Holding ModBus es utilizar el componente MbRtuServLoadRegister, similar al MbRtuServLoadRegisters pero que solo requiere una variable tipo Int32, no un array.

La otra opción es cargar el array Int32_Array copiando en cada elemento el valor de la variable/constante Int32 con el componente: Int32Copy o Copia Int32, que lo podes encontrar en el grupo de componentes "Operaciones de variables".

Saludos

« Última Modificación: septiembre 20, 2017, 11:50:52 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Esteban E

  • Aprendiz
  • **
  • Mensajes: 69
Re:Carga valores de un array en los registros "Holding"
« Respuesta #2 : septiembre 20, 2017, 16:24:10 pm »
Mucha gracias por la respuesta.

Pero no termine de comprender. Yo tengo un valor en int32 y lo paso copiándolo a int32_array. Y en el componente lo cargo le pongo 42001 y en qty le coloque uno. Ahora tengo que mostrar otro valor más que es el valor de la salida analógica y cuando tomo ese valor como pongo entre paréntesis que es el mismo nombre y cambia el número y debo modificar el qty a 2 ? O para hacerlo más fácil puedo colocar un componente nuevo y el pongo 42002 qty 1 ?



Saludos.ñ

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1885
  • Soporte Técnico
Re:Carga valores de un array en los registros "Holding"
« Respuesta #3 : septiembre 20, 2017, 17:06:40 pm »
Pero no termine de comprender. Yo tengo un valor en int32 y lo paso copiándolo a int32_array. Y en el componente lo cargo le pongo 42001 y en qty le coloque uno. Ahora tengo que mostrar otro valor más que es el valor de la salida analógica y cuando tomo ese valor como pongo entre paréntesis que es el mismo nombre y cambia el número y debo modificar el qty a 2 ? O para hacerlo más fácil puedo colocar un componente nuevo y el pongo 42002 qty 1 ?

Primero en el Int32_Array copias los dos valores del Int32 de forma consecutivas. Cada valor que copias, esta dentro de un elemento independiente dentro del array.

Luego en el componente seleccionas el Int32_Array en su elemento "0" (que es el inicial) y le pones QTY=2, así el componente lee dos elementos consecutivos del array a partir del elemento inicial seleccionado.

Automáticamente, copiará los dos elementos del array en el ADDRESS ModBus que le especifiques, de forma consecutiva.

No te conviene poner un componente nuevo, porque estarias haciendo dos llamadas, cuando lo podes hacer de una sola vez.

Nota: Fijate que también hay otro componente para cargar a la dirección ModBus que solo lee un Int32, más practico para cuando no tenes un array.

Avísame si seguís con dudas y te subo algún ejemplo.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Esteban E

  • Aprendiz
  • **
  • Mensajes: 69
Re:Carga valores de un array en los registros "Holding"
« Respuesta #4 : septiembre 21, 2017, 14:43:29 pm »
Buenas tardes.

Utilizando INT32 puede ser que no me deja poner a una misma variable distintos campos con mismo nombre ?


Yo lo realice asi y funciono, pero eso esta bien o no conviene ?


Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1885
  • Soporte Técnico
Re:Carga valores de un array en los registros "Holding"
« Respuesta #5 : septiembre 21, 2017, 21:03:01 pm »
Mira, te adjunto foto y proyecto.



Observa como cargo el Array con el componente, en una parte cargo dos elementos del array (usando QTY=2) y luego cargo individualmente dos elementos en direcciones diferentes (use un array, pero podes usar un Int32 también).

Utilizando INT32 puede ser que no me deja poner a una misma variable distintos campos con mismo nombre ?

No comprendo bien la pregunta, una variable Int32 puede tener un solo nombre.

Yo lo realice asi y funciono, pero eso esta bien o no conviene ?

En la foto que pasas, veo que cargas dos valores en direcciones diferentes, llamando dos veces al componente.
No veo que este mal, lo único a modo de prolijidad, conectar dos END, en vez de uno solo unido al final.

Si lo que querés es cargar dos valores al mismo tiempo, usa un array, como te pase adjunto.

Saludos
« Última Modificación: septiembre 21, 2017, 21:21:44 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com