• Recent
    • Tags
    • Popular
    • Register
    • Login

    Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to support@radixiot.com.

    Radix IoT Website Mango 4 Documentation Website Mango 5 Documentation Website Radix IoT LinkedIn

    Modbus4j Android implementation

    Scheduled Pinned Locked Moved Modbus4J general discussion
    2 Posts 1 Posters 3.9k Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J Offline
      josempd
      last edited by

      Hello. I'm trying to create a modbus master application just to read values (function 1 to 4) actually I'm just trying to read coils just for testing and learning this package.

      I created an Asynctask to make the connection with a single id 0 slave with 2 coils but I get fatal exception Caused by: java.lang.NoSuchMethodError: com.serotonin.messaging.MessageControl.setIoLog

      I will post here the error and part of my code, so maybe I can get some guidance about this implementation.

      I have set internet access for my app and also the asynctask to make the connection in the background. here's the error:

      02-25 14:57:05.715  20957-21111/com.example.josempd.modbus4jtcpmaster E/AndroidRuntime? FATAL EXCEPTION: AsyncTask #4
          Process: com.example.josempd.modbus4jtcpmaster, PID: 20957
          java.lang.RuntimeException: An error occured while executing doInBackground()
                  at android.os.AsyncTask$3.done(AsyncTask.java:300)
                  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                  at java.lang.Thread.run(Thread.java:841)
           Caused by: java.lang.NoSuchMethodError: com.serotonin.messaging.MessageControl.setIoLog
                  at com.serotonin.modbus4j.ModbusMaster.getMessageControl(ModbusMaster.java:307)
                  at com.serotonin.modbus4j.ip.tcp.TcpMaster.openConnection(TcpMaster.java:194)
                  at com.serotonin.modbus4j.ip.tcp.TcpMaster.sendImpl(TcpMaster.java:93)
                  at com.serotonin.modbus4j.ModbusMaster.send(ModbusMaster.java:92)
                  at com.example.josempd.modbus4jtcpmaster.MainActivity$ConnectTask.doInBackground(MainActivity.java:130)
                  at com.example.josempd.modbus4jtcpmaster.MainActivity$ConnectTask.doInBackground(MainActivity.java:85)
                  at android.os.AsyncTask$2.call(AsyncTask.java:288)
                  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                  at java.lang.Thread.run(Thread.java:841)
      

      and my current asynctask block:

      @Override
              protected Void doInBackground(Void... arg0) {
      
      
                  ModbusFactory factory = new ModbusFactory();
                  IpParameters params = new IpParameters();
                  params.setHost(IPMod);
                  params.setPort(PortMod);
                  params.setEncapsulated(false);
                  ModbusMaster master = factory.createTcpMaster(params, false);
                  master.setTimeout(500);
                  master.setRetries(2);
      
                  //Descripción de los parámetros
                  Param = "Los parámetros son:" + "\n" +
                          "IP:" + IPMod + "\n" +
                          "Puerto:" + String.valueOf(PortMod) + "\n" +
                          "ID del esclavo:" + String.valueOf(slaveId) + "\n" +
                          "primera dirección:" + String.valueOf(RefMod) + "\n" +
                          "Número de direcciones:" + String.valueOf(CountMod);
      
                  try {
                      master.init();
      
                      ReadCoilsRequest request = new ReadCoilsRequest(slaveId, RefMod, CountMod);
      
                      ReadCoilsResponse response = (ReadCoilsResponse) master.send(request);
      
                      Resp = response.getBooleanData().toString();
      
                  } catch (ModbusInitException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                      Resp = "Error: " + e.toString();
                  }catch (ModbusTransportException e) {
                      e.printStackTrace();
                      Resp = "Error: " + e.toString();
                  }
                  finally {
                      master.destroy();
                  }
                  return null;
      
              }
      

      the imported libraries are the next:

      
      dependencies {
          compile fileTree(include: ['*.jar'], dir: 'libs')
          compile 'com.android.support:appcompat-v7:21.0.3'
          compile files('C:/Users/Josempd/AndroidStudioProjects/Modbus4JTCPMaster/libs/modbus4j-2.0.2.jar')
          compile files('C:/Users/Josempd/AndroidStudioProjects/Modbus4JTCPMaster/libs/serotonin-utils-2.1.7.jar')
          compile files('C:/Users/Josempd/AndroidStudioProjects/Modbus4JTCPMaster/libs/serotonin-timer-2.0.6.jar')
          compile files('C:/Users/Josempd/AndroidStudioProjects/Modbus4JTCPMaster/libs/maven-ant-tasks-2.1.3.jar')
          compile files('C:/Users/Josempd/AndroidStudioProjects/Modbus4JTCPMaster/libs/ant-contrib-1.0b3.jar')
      }
      
      

      I don't know if I'm missing libraries or any package or if I'm doing a bad implementation of the imported classes. Thanks in advance to everyone.

      1 Reply Last reply Reply Quote 0

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      • First post
        Last post