02-08-2016 10:45 AM - editado 02-08-2016 10:46 AM
Hola a todos:
Me estoy enfrentando a un problema un tanto extraño y no consigo dar con la solución, aunque creo que debe ser algo sencillo de resolver. He hecho un sencillo proyecto y un VI de ejemplo para ilustrar el problema. Tengo una serie de dispositivos Modbus a los que quiero conectarme por medio de un I/O server, aunque en este ejemplo sólo quiero leer el registro 300016 de uno de los dispositivos, el que tiene la dirección 3. Para ello, he crado un IO server que sigue la siguiente configuración:
La configuración de la variable 300016 es esta:
El VI, sencillisimo, es este:
Pues bien, cuando ejecuto el VI el indicador de la variable 300016 me muestra un 0, que no es el valor que hay en el registro del dispositivo modbus (lo puedo ver en un display del propio aparato). Si me voy al Distributed System Manager puedo comprobar que la librería ha sido desplegada y que el valor almacenado en la variable es 0 (INCORRECTO).
Ahora viene lo extraño. Despliego la pestaña modbus y pincho en un item de la lista, por ejemplo en el rango de direcciones en el que está el registro que quiero consultar. En ese momento todo empieza a funcionar, la variable toma el valor esperado y el indicador del VI muestra el mismo valor, se actualiza correctamente con la tasa de refresco que tengo configurada y todo empieza a funcionar... Es decir, tengo la sensación de que el IO server no se inicia realmente hasta que pincho ahí. En la captura podeís ver que he dado click al item en amarillo y que la variable 300016 ha tomado el valor 22, que es el esperado.
Si cierro el Distributed System Manager, vuelve a dejar de funcionar y el indicador se pone a 0.
¿Sabéis qué estoy haciendo mal?
Quiero añadir que en este ejemplo estoy usando Modbus TCP desde un PC, pero que me he dado cuenta de que cuando hago el mismo procedimiento para un servidor Modbus Serial (master) en un PXI, el problema es exactamente el mismo.
Saludos y gracias.