2013-08-20 63 views
2

我正在制作一个智能手机程序,它试图通过TCP/Modbus连接到PLC,我正在使用库Jamod,这个程序我放在java中,如果连接,但没有改变在Android ....,有人可以帮助我?TCP/Modbus for Android,(Android,Jamod)

我也给了应用程序使用互联网的权限,不知道为什么不能连接,请我绝望!

 package com.JR.scada; 

import java.net.InetAddress; 

import net.wimpi.modbus.Modbus; 
import net.wimpi.modbus.io.ModbusTCPTransaction; 
import net.wimpi.modbus.msg.ReadInputDiscretesRequest; 
import net.wimpi.modbus.msg.ReadInputDiscretesResponse; 
import net.wimpi.modbus.net.TCPMasterConnection; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 




public class Main extends Activity implements OnClickListener{ 
    TextView text, depurar; 
    EditText IP; 
    Button boton; 
    //Thread comm = new Thread(this); 
    int i=0; 
    /*private final int PUERTO=502; 
    private Socket socket = null; 
    private OutputStream output = null; 
    private BufferedInputStream input = null; 
    private byte buffer[] = new byte[261];*/ 

    TCPMasterConnection con = null;  //the TCP connection 
    ModbusTCPTransaction trans = null; //the Modbus transaction 

    InetAddress addr = null;  //direccion del esclavo 
    int port = Modbus.DEFAULT_PORT;//puerto por defecto 502 


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

     text = (TextView) findViewById(R.id.lblRegistro); 
     IP = (EditText) findViewById(R.id.txtIp); 
     depurar = (TextView) findViewById(R.id.txtdepurar); 
     boton = (Button)findViewById(R.id.btnVerRegistro); 
     boton.setOnClickListener(this); 



    } 

      @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    @Override 
    protected void onStop() { 
     super.onStop(); 
     //Close the TCP connection 
     con.close(); 
    } 
    @Override 
    /*public void run() {*/ 
    protected void onResume() { 
     super.onResume(); 

     try { 
      text.setText("Entro en el try"); 
      //IP address; 
      addr = InetAddress.getByName("212.170.50.238"); 
      // Open the connection 
      con = new TCPMasterConnection(addr); 
      con.setPort(port); 
      con.connect(); 
      if(con.isConnected()){ 
       depurar.setText("conecta"); 
      } 


     } catch (Exception e) { 
      Log.d("MODBUS","connection error"); 
      depurar.setText("no conecta"); 
     } 

    } 

它给我的错误:

  08-20 10:25:39.299: D/MODBUS(1238): connection error 
08-20 10:25:39.299: D/MODBUS(1238): android.os.NetworkOnMainThreadException 
08-20 10:25:39.299: D/MODBUS(1238):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
08-20 10:25:39.299: D/MODBUS(1238):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
08-20 10:25:39.299: D/MODBUS(1238):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
08-20 10:25:39.299: D/MODBUS(1238):  at libcore.io.IoBridge.connect(IoBridge.java:112) 
08-20 10:25:39.299: D/MODBUS(1238):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
08-20 10:25:39.299: D/MODBUS(1238):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
08-20 10:25:39.299: D/MODBUS(1238):  at java.net.Socket.startupSocket(Socket.java:566) 
08-20 10:25:39.299: D/MODBUS(1238):  at java.net.Socket.<init>(Socket.java:225) 
08-20 10:25:39.299: D/MODBUS(1238):  at net.wimpi.modbus.net.TCPMasterConnection.connect(TCPMasterConnection.java:65) 
08-20 10:25:39.299: D/MODBUS(1238):  at com.JR.scada.Main.onResume(Main.java:96) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1185) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.Activity.performResume(Activity.java:5182) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2732) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.os.Looper.loop(Looper.java:137) 
08-20 10:25:39.299: D/MODBUS(1238):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
08-20 10:25:39.299: D/MODBUS(1238):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-20 10:25:39.299: D/MODBUS(1238):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-20 10:25:39.299: D/MODBUS(1238):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
08-20 10:25:39.299: D/MODBUS(1238):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
08-20 10:25:39.299: D/MODBUS(1238):  at dalvik.system.NativeStart.main(Native Method) 
08-20 10:25:40.140: D/dalvikvm(1238): GC_CONCURRENT freed 117K, 9% free 2653K/2892K, paused 15ms+23ms, total 236ms 
08-20 10:25:40.449: D/gralloc_goldfish(1238): Emulator without GPU emulation detected 

+0

你能帮我吗? – David

回答

3

如果您在API级别11或更高级别上执行此操作,可能与在主线程上执行阻止网络操作(onResume在主线程上执行,从而阻止UI更新)有关。这个答案应该是帮助: https://stackoverflow.com/a/6343299/1045199

来源:http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

附:你真的应该发布异常堆栈跟踪来让别人知道什么是实际的错误。

+1

如何做一个异常stacktrace让别人知道什么是实际的错误。我是新来的。对不起 – Isma9

+0

添加异常对象到Log.d调用,它会打印出logcat上的堆栈跟踪: 'Log.d(“MODBUS”,“connection error”,e);' –

+0

我得到了错误,非常感谢你很多 – Isma9

0

由于无法建立基本的TCP连接,这看起来不像Modbus特定的错误。

也许首先从NetworkManager中取出NetworkInfo,然后检查设备是否已连接?

+0

我下载到手机其他程序的Modbus/Tcp并连接到设备没有任何问题,所以设备连接... – Isma9