Modbus4j Android implementation
-
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.