Comunicacion Modbus

  • Respuestas:0
Pablo Chaves
  • Posts del Foro: 1

14 dic. 2014 17:32:10 vía Web

Hola estoy intentando crear una aplicación que usa Socket. Para poneros en situación os hablare un poco de ella:

Tengo unos "aparatos" que recopilan una serie de variables mediante diversos sensores. Estos aparatos son capaces de mandar estas variables mediante un protocolo de comunicaciones Modbus a otros lugares, el protocolo modbus esta soportado por el protocolo TCP/IP.

El escenario sobre el que estaría este proyecto sería uno de estos aparatos conectado a un router mediante un cable ethernet, y mi ordenador o mi movil (dependiendo del caso de simulación) con el router mediante wifi. Creando una red local en el que todos los equipos tiene direcciones ip de esta misma red.

Bien, para hacer una primera prueba y verificar que consigo comunicar con estos aparatos realizo un código sencillo en Java, dos clases para ser esactos:

  • Una de ellas posee los métodos básicos de Abrir Conexión (Mediante el uso de Socket), Intercambiar datos con los aparatos y Cerrar Conexión.

  • La segunda clase pues contiene básicamente el método public static void main(String[] main)

Cuando simulo sobre Java estas dos clases pues consigo leer perfectamente las variables de estos aparatos y mostrarlas con un sencillo System.out.println para verificar el correcto funcionamiento de todo el sistema.

MI PROBLEMA viene cuando me dispongo a utilizar estas clases en Android, la idea para comprobar que la conexión funciona es mostrar en un TextView el resultado de estas variables.

Pero por no se que extraño motivo cuando lo simulo sobre mi telefono móvil no consigo establecer la comunicación mediante los Socket.
Este sería el código utilizado en android:

private TextView salida;
ClienteModbusTCP remota= new ClienteModbusTCP();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mostrar_modbus);

    salida = (TextView)  findViewById(R.id.mostrar);
    boolean resultado=true;

    resultado=remota.AbrirConexion("192.168.1.100");

    //int []registros=remota.Leer_Multiples_Registros(1,30000,1);

    salida.setText(String.valueOf(resultado));
    //boolean resultado2=remota.CerrarConexion();

El método AbrirConexion devuelv true si se ejecuta la conexion y false si no, en el text view siempre se muestra False, es decir no consigo establecer la conexión, y lo que me trae loco es que ese mismo código ejecutado en las clases que comentaba al principio si consigue establecer la conexión. Además si no comento el método Leer_Multiples_Registros la aplicacion se cierra directamente, imagino que porque si no hay conexión, intentar hacer peticiones produce una excepción.

Indicar que ademas en el archivo AndroidMainFest he añadido los siguientes permisos:

uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
uses-permission android:name="android.permission.INTERNET"

Que entre otras cosas permite el uso de socket.

A ver si me podeis echar una mano, creo que el error no es de código en sí, si no que estoy dejando algo por alto como algún permiso, o algo que haya que escribir en el metodo onCreate si voy a usar Socket o algo.

Gracias de antemano.

Contestar