Instead of register “4001” try “1”, and of that doesn’t work try “0”. 

Regards Adam

> On Aug 12, 2020, at 5:59 AM, Syed Kefayath <syed.kefay...@elmeasure.com> 
> wrote:
> 
> Hi Everyone,
> 
> I am using a plc4x modbus driver to read data from a modbus device but i am
> left with an exception. But while reading data from the ModbusPal virtual
> device I am getting the output. The java code and the error message is
> given below.
> 
> I need help from this community to complete my POC.
> 
> Java code.
> 
> import org.apache.plc4x.java.PlcDriverManager;
> import org.apache.plc4x.java.api.PlcConnection;
> import org.apache.plc4x.java.api.messages.PlcReadRequest;
> import org.apache.plc4x.java.api.messages.PlcReadResponse;
> import org.apache.plc4x.java.api.types.PlcResponseCode;
> 
> import java.util.concurrent.CompletableFuture;
> 
> public class modbus {
> 
>    public static void main(String[] args) throws Exception {
>        System.out.println("started");
>        String connectionString =
> "modbus:tcp://192.168.4.163:4001?unit-identifier=2";
>        try {
>            PlcConnection plcConnection = new
> PlcDriverManager().getConnection(connectionString);
> 
>            if (!plcConnection.getMetadata().canRead()) {
>                System.out.println("This connection doesn't support reading.");
>                return;
>            }
>            PlcReadRequest.Builder builder = 
> plcConnection.readRequestBuilder();
>            builder.addItem("tag1","holding-register:101");
> //            builder.addItem("tag2","holding-register:1[3]");
>            PlcReadRequest readRequest = builder.build();
>            CompletableFuture<? extends PlcReadResponse> asyncResponse
> = readRequest.execute();
>            asyncResponse.whenComplete((response, throwable) -> {
>                System.out.println("response :"+response.toString() );
>                for (String fieldName : response.getFieldNames()) {
>                    if (response.getResponseCode(fieldName) ==
> PlcResponseCode.OK){
>                        int registerValues =
> response.getNumberOfValues(fieldName);
>                        if (registerValues == 1){
>                            System.out.println(fieldName +" : "+
> response.getObject(fieldName));
>                        }
>                        else {
>                            for (int i = 0; i< registerValues;i++){
>                                System.out.println(fieldName + i +" :
> " + response.getObject(fieldName,i));
>                            }
>                        }
> 
>                    }
>                    else {
>                        System.out.println("Error[" + fieldName+ "]:
> "+ response.getResponseCode(fieldName).name());
>                    }
>                }
> 
>            });
> 
> 
>        } catch (Exception e) {
>            System.out.println("Something went wrong."+e);
>        }
>        System.out.println("Execution completed");
>    }
> }
> 
> 
> Output:
> 
> started
> SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
> SLF4J: Defaulting to no-operation (NOP) logger implementation
> SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
> details.
> Execution completed
> Aug 12, 2020 3:05:02 PM io.netty.channel.DefaultChannelPipeline
> onUnhandledInboundException
> WARNING: An exceptionCaught() event was fired, and it reached at the tail
> of the pipeline. It usually means the last handler in the pipeline did not
> handle the exception.
> io.netty.handler.codec.DecoderException:
> org.apache.plc4x.java.api.exceptions.PlcRuntimeException: Unexpected
> response type ModbusPDUReadHoldingRegistersResponse
> at
> io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:98)
> at
> io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)
> at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
> at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
> at
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
> at
> io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:321)
> at
> io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:295)
> at
> io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103)
> at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
> at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
> at
> io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
> at
> io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
> at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
> at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
> at
> io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
> at
> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
> at
> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
> at
> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
> at
> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
> at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
> at
> io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
> at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
> at
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> at java.base/java.lang.Thread.run(Thread.java:834)
> Caused by: org.apache.plc4x.java.api.exceptions.PlcRuntimeException:
> Unexpected response type ModbusPDUReadHoldingRegistersResponse
> at
> org.apache.plc4x.java.modbus.protocol.ModbusProtocolLogic.toPlcValue(ModbusProtocolLogic.java:240)
> at
> org.apache.plc4x.java.modbus.protocol.ModbusProtocolLogic.lambda$read$2(ModbusProtocolLogic.java:112)
> at
> org.apache.plc4x.java.spi.Plc4xNettyWrapper.decode(Plc4xNettyWrapper.java:154)
> at
> io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81)
> at
> io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
> ... 23 more
> 
> When used another Modbus master Simulator  by name - modpoll to cross
> verify , getting the correct value as shown below.
> 
> 
> ./modpoll -m tcp -a 2 -r 101 -c 1 -t 4:float -p 4001 192.168.4.163
> modpoll 3.9 - FieldTalk(tm) Modbus(R) Master Simulator
> Copyright (c) 2002-2020 proconX Pty Ltd
> Visit https://www.modbusdriver.com for Modbus libraries and tools.
> 
> Protocol configuration: MODBUS/TCP, FC3
> Slave configuration...: address = 2, start reference = 101, count = 1
> Communication.........: 192.168.4.163, port 4001, t/o 1.00 s, poll rate
> 1000 ms
> Data type.............: 32-bit float, output (holding) register table
> 
> -- Polling slave... (Ctrl-C to stop)
> [101]: 2353.341064
> -- Polling slave... (Ctrl-C to stop)
> Reply time-out!
> -- Polling slave... (Ctrl-C to stop)
> Reply time-out!
> -- Polling slave... (Ctrl-C to stop)
> [101]: 2353.341064
> -- Polling slave... (Ctrl-C to stop)
> [101]: 2353.341064
> -- Polling slave... (Ctrl-C to stop)
> [101]: 2353.341064
> 
> 
> -- 
> Thanks and Regards;
> 
> Syed Kefayath
> 
> -- 
> 
> 
> 
> 
> 
> 
> 
> IMPORTANT: The contents of this email and any attachments are 
> confidential. They are intended for the named recipient(s) only. If you 
> have received this email by mistake, please notify the sender immediately 
> and do not disclose the contents to anyone or make copies thereof.
> 
> Please, 
> consider your environmental responsibility. Before printing this e-mail ask 
> yourself: "Do I need a hard copy?"

Reply via email to