Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: modbusrtu is not success now #1212

Closed
2 of 16 tasks
StrawberryBlue opened this issue Nov 17, 2023 · 18 comments
Closed
2 of 16 tasks

[Bug]: modbusrtu is not success now #1212

StrawberryBlue opened this issue Nov 17, 2023 · 18 comments
Assignees
Labels
bug pending-close Issues that have been addressed and are awaiting final reporter feedback

Comments

@StrawberryBlue
Copy link

StrawberryBlue commented Nov 17, 2023

What happened?

15:39:33.278 [main] INFO  DefaultPlcDriverManager - Instantiating new PLC Driver Manager with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@71bc1ae4
15:39:33.279 [main] INFO  DefaultPlcDriverManager - Registering available drivers...
15:39:33.290 [main] INFO  DefaultPlcDriverManager - Registering driver for Protocol modbus-ascii (Modbus ASCII)
15:39:33.291 [main] INFO  DefaultPlcDriverManager - Registering driver for Protocol modbus-rtu (Modbus RTU)
15:39:33.292 [main] INFO  DefaultPlcDriverManager - Registering driver for Protocol modbus-tcp (Modbus TCP)
15:39:34.211 [main] INFO  Plc4j - Synchronous request ...
15:39:39.719 [main] INFO  NettyChannelFactory - Channel is closed, closing worker Group also
15:39:39.736 [nioEventLoopGroup-2-1] WARN  NioEventLoop - Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@34a12a3b.
15:39:39.737 [nioEventLoopGroup-2-1] INFO  NioEventLoop - Migrated 1 channel(s) to the new Selector.
15:39:39.739 [nioEventLoopGroup-2-1] WARN  NioEventLoop - Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@571bf3f7.
15:39:39.739 [nioEventLoopGroup-2-1] INFO  NioEventLoop - Migrated 1 channel(s) to the new Selector.
15:39:39.740 [nioEventLoopGroup-2-1] WARN  NioEventLoop - Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@14871804.
15:39:39.740 [nioEventLoopGroup-2-1] INFO  NioEventLoop - Migrated 1 channel(s) to the new Selector.
15:39:39.741 [nioEventLoopGroup-2-1] WARN  NioEventLoop - Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@10d8ef59.

Now the ModbusRTU cannot run correctly.

Version

v0.11.0

Programming Languages

  • plc4j
  • plc4go
  • plc4c
  • plc4net

Protocols

  • AB-Ethernet
  • ADS /AMS
  • BACnet/IP
  • CANopen
  • DeltaV
  • DF1
  • EtherNet/IP
  • Firmata
  • KNXnet/IP
  • Modbus
  • OPC-UA
  • S7
@chrisdutz
Copy link
Contributor

I think the serial transports need a bit of testing ... unfortunately my previous setup seems to be unavailable to me and I'm struggling a bit with testing.

Could you please give version 0.12.0-SNAPSHOT a try, as we already addressed some configuration issues for serial there.

@chrisdutz
Copy link
Contributor

Ok .. so I've spotted an error in the Serial Transports and fixed it ... currently looking for a Serial Modbus device to do some further testing, but could you please test the latest SNAPSHOT version?

@chrisdutz chrisdutz self-assigned this Feb 6, 2024
@chrisdutz
Copy link
Contributor

Ok ... so I've tweaked quite a bit of stuff around the Serial Transport and Modbus in general ... could you please give this another try and tell us if it's working now?

@chrisdutz chrisdutz added the pending-close Issues that have been addressed and are awaiting final reporter feedback label Feb 14, 2024
@StrawberryBlue
Copy link
Author

I tried using the 0.12 version, but it says that the transfer serial is not supported, is there something that has happened to the connection string

@StrawberryBlue
Copy link
Author

MODBUS_RTU_CONNECT_OPTION = "modbus-rtu:serial://COM30?request-timeout=5000&unit-identifier=1&baud-rate=9600&num-data-bits=8&num-stop-bits=1&parity=NO_PARITY";

@chrisdutz
Copy link
Contributor

If you are using 0.12.0, then please have a look at the online documentation. The parameters for baud-rate etc need a prefix now

@StrawberryBlue
Copy link
Author

sorry,it also exist when i use

MODBUS_RTU_CONNECT_OPTION = "modbus-rtu:serial://COM30?request-timeout=5000&unit-identifier=1&serial.baud-rate=9600&serial.num-data-bits=8&serial.num-stop-bits=1&serial.parity=NO_PARITY";

@chrisdutz
Copy link
Contributor

chrisdutz commented Feb 20, 2024 via email

@StrawberryBlue
Copy link
Author

I am using a serial device on Windows,
`public static String MODBUS_RTU_CONNECT_OPTION = "modbus-rtu:serial://COM30?request-timeout=5000&unit-identifier=1&serial.baud-rate=9600&serial.num-data-bits=8&serial.num-stop-bits=1&serial.parity=NO_PARITY";
public static String MODBUS_TCP_CONNECT_OPTION = "modbus-tcp:tcp://127.0.0.1:502";

@Test
public void modbusRtuRead(){
    try (PlcConnection connection = PlcDriverManager.getDefault().getConnectionManager().getConnection(MODBUS_RTU_CONNECT_OPTION)) {
        // Check if this connection support reading of data.
        if (!connection.getMetadata().isReadSupported()) {
            log.error("This connection doesn't support reading.");
            return;
        }

        PlcReadRequest.Builder builder = connection.readRequestBuilder();
        builder.addTagAddress("value-1", "400001:UINT[10]");
        PlcReadRequest readRequest = builder.build();

        PlcReadResponse response = readRequest.execute().get(5000, TimeUnit.MILLISECONDS);


        for (String tagName : response.getTagNames()) {
            if(response.getResponseCode(tagName) == PlcResponseCode.OK) {
                int numValues = response.getNumberOfValues(tagName);
                // If it's just one element, output just one single line.
                if(numValues == 1) {
                    log.info("Value[" + tagName + "]: " + response.getObject(tagName));
                }
                // If it's more than one element, output each in a single row.
                else {
                    log.info("Value[" + tagName + "]:");
                    for(int i = 0; i < numValues; i++) {
                        log.info(" - " + response.getObject(tagName, i));
                    }
                }
            }
            // Something went wrong, to output an error message instead.
            else {
                log.error("Error[" + tagName + "]: " + response.getResponseCode(tagName).name());
            }
        }

    }catch (Exception e){
        e.printStackTrace();
        log.error("connect fail");
    }
}`

Like the code , when attempting to establish a connection, the program throws an exception.
2024-02-21T08:16:30.878+08:00 INFO 3276 --- [ main] o.a.plc4x.java.DefaultPlcDriverManager : Instantiating new PLC Driver Manager with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@2b193f2d 2024-02-21T08:16:30.879+08:00 INFO 3276 --- [ main] o.a.plc4x.java.DefaultPlcDriverManager : Registering available drivers... 2024-02-21T08:16:30.884+08:00 INFO 3276 --- [ main] o.a.plc4x.java.DefaultPlcDriverManager : Registering driver for Protocol modbus-ascii (Modbus ASCII) 2024-02-21T08:16:30.885+08:00 INFO 3276 --- [ main] o.a.plc4x.java.DefaultPlcDriverManager : Registering driver for Protocol modbus-rtu (Modbus RTU) 2024-02-21T08:16:30.886+08:00 INFO 3276 --- [ main] o.a.plc4x.java.DefaultPlcDriverManager : Registering driver for Protocol modbus-tcp (Modbus TCP) 2024-02-21T08:16:30.889+08:00 INFO 3276 --- [ main] o.a.plc4x.java.DefaultPlcDriverManager : Registering driver for Protocol s7 (Siemens S7 (Basic)) org.apache.plc4x.java.api.exceptions.PlcConnectionException: Unsupported transport serial

@StrawberryBlue
Copy link
Author

It looks like the transport attribute does not support serial.

@StrawberryBlue
Copy link
Author

I debugged the code and it seems that TcpTransport was used instead of SerialTransport.class, so I manually introduced the plc4j-transport-serial package. At this point, the data can be successfully read once, followed by frequent occurrences of Select. select() returned accurately 512 times in a row; Rebuilding selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@4954bfd. Warning, preventing the program from continuing to execute normally.

@StrawberryBlue
Copy link
Author

I continued to check the input logs, and it seems that the previous agent closed the channel after reading it onceChannel is closed, closing worker Group also.
So I adjusted the code and looped read the data before it was closed. At this point, the data can be read correctly. Thank you for your help.

@StrawberryBlue
Copy link
Author

I continued testing, and when I looped read the data, there was an incomplete message. The test code is as follows
` @test
public void modbusRtuRead(){
try (PlcConnection connection = PlcDriverManager.getDefault().getConnectionManager().getConnection(MODBUS_RTU_CONNECT_OPTION)) {

        while (true) {
            // Check if this connection support reading of data.
            if (!connection.getMetadata().isReadSupported()) {
                log.error("This connection doesn't support reading.");
                return;
            }
            PlcReadRequest.Builder builder = connection.readRequestBuilder();
            builder.addTagAddress("value-1", "400001:UINT[100]");
            PlcReadRequest readRequest = builder.build();
            long start = System.currentTimeMillis();
            PlcReadResponse response = null;

            response = readRequest.execute().get(5000, TimeUnit.MILLISECONDS);

            if (response != null) {
                for (String tagName : response.getTagNames()) {
                    if (response.getResponseCode(tagName) == PlcResponseCode.OK) {
                        int numValues = response.getNumberOfValues(tagName);
                        // If it's just one element, output just one single line.
                        if (numValues == 1) {
                            log.info("Value[" + tagName + "]: " + response.getObject(tagName));
                        }
                        // If it's more than one element, output each in a single row.
                        else {
                            log.info("Value[" + tagName + "]:");
                            for (int i = 0; i < numValues; i++) {
                                log.info(" - " + response.getObject(tagName, i));
                            }
                        }
                    }
                    // Something went wrong, to output an error message instead.
                    else {
                        log.error("Error[" + tagName + "]: " + response.getResponseCode(tagName).name());
                    }
                }
            }
            long end = System.currentTimeMillis();
            System.out.println(end - start);
            Thread.sleep(50);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}`

After a period of program execution, there may be a half package situation,

The complete response message should be '0103c8000100000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064a2ba', but the program cannot correctly parse the message due to two returns. Should length verification be added to the modbus return message. The error message is as follows
`2024-02-22 09:41:33.469 WARN 19404 --- [ntLoopGroup-2-1] .p.j.s.GeneratedDriverByteToMessageCodec : Error decoding package with content [0103c8000100000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]: Index 159 out of bounds for length 159

java.lang.ArrayIndexOutOfBoundsException: Index 159 out of bounds for length 159
at com.github.jinahya.bit.io.ArrayByteInput.read(ArrayByteInput.java:106) ~[bit-io-1.4.3.jar:na]
at com.github.jinahya.bit.io.DefaultBitInput.read(DefaultBitInput.java:57) ~[bit-io-1.4.3.jar:na]
at com.github.jinahya.bit.io.AbstractBitInput.unsigned8(AbstractBitInput.java:63) ~[bit-io-1.4.3.jar:na]
at com.github.jinahya.bit.io.AbstractBitInput.unsigned16(AbstractBitInput.java:92) ~[bit-io-1.4.3.jar:na]
at com.github.jinahya.bit.io.AbstractBitInput.readInt(AbstractBitInput.java:135) ~[bit-io-1.4.3.jar:na]
at com.github.jinahya.bit.io.AbstractBitInput.readInt(AbstractBitInput.java:118) ~[bit-io-1.4.3.jar:na]
at com.github.jinahya.bit.io.AbstractBitInput.readByte(AbstractBitInput.java:106) ~[bit-io-1.4.3.jar:na]
at org.apache.plc4x.java.spi.generation.ReadBufferByteBased.readSignedByte(ReadBufferByteBased.java:388) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.generation.ReadBuffer.readByte(ReadBuffer.java:44) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.generation.ReadBufferByteBased.readByteArray(ReadBufferByteBased.java:126) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusPDUReadHoldingRegistersResponse.staticParseModbusPDUBuilder(ModbusPDUReadHoldingRegistersResponse.java:112) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusPDU.staticParse(ModbusPDU.java:181) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusRtuADU.lambda$0(ModbusRtuADU.java:132) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.io.DataReaderComplexDefault.read(DataReaderComplexDefault.java:70) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.io.DataReaderComplexDefault.read(DataReaderComplexDefault.java:61) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.fields.FieldReaderSimple.lambda$0(FieldReaderSimple.java:34) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.FieldCommons.switchParseByteOrderIfNecessary(FieldCommons.java:52) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.fields.FieldReaderSimple.readSimpleField(FieldReaderSimple.java:34) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.readSimpleField(FieldReaderFactory.java:133) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusRtuADU.staticParseModbusADUBuilder(ModbusRtuADU.java:129) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusADU.staticParse(ModbusADU.java:117) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusADU.staticParse(ModbusADU.java:103) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.rtu.ModbusRtuDriver.lambda$0(ModbusRtuDriver.java:130) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.GeneratedDriverByteToMessageCodec.decode(GeneratedDriverByteToMessageCodec.java:87) ~[plc4j-spi-0.12.0.jar:0.12.0]
at io.netty.handler.codec.ByteToMessageCodec$1.decode(ByteToMessageCodec.java:42) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at org.apache.plc4x.java.transport.serial.SerialChannel$SerialNioUnsafe.read(SerialChannel.java:285) ~[plc4j-transport-serial-0.12.0.jar:0.12.0]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:689) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:652) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.94.Final.jar:4.1.94.Final]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]

2024-02-22 09:41:33.471 WARN 19404 --- [ntLoopGroup-2-1] .p.j.s.GeneratedDriverByteToMessageCodec : Error decoding package with content [0000000000000000000000000000000000000000000000000000000000000000000000000000000000000064a2ba]: Unsupported case for discriminated type parameters [errorFlag=false functionFlag=0 response=true]

org.apache.plc4x.java.spi.generation.ParseException: Unsupported case for discriminated type parameters [errorFlag=false functionFlag=0 response=true]
at org.apache.plc4x.java.modbus.readwrite.ModbusPDU.staticParse(ModbusPDU.java:310) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusRtuADU.lambda$0(ModbusRtuADU.java:132) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.io.DataReaderComplexDefault.read(DataReaderComplexDefault.java:70) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.io.DataReaderComplexDefault.read(DataReaderComplexDefault.java:61) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.fields.FieldReaderSimple.lambda$0(FieldReaderSimple.java:34) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.FieldCommons.switchParseByteOrderIfNecessary(FieldCommons.java:52) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.fields.FieldReaderSimple.readSimpleField(FieldReaderSimple.java:34) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.readSimpleField(FieldReaderFactory.java:133) ~[plc4j-spi-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusRtuADU.staticParseModbusADUBuilder(ModbusRtuADU.java:129) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusADU.staticParse(ModbusADU.java:117) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.readwrite.ModbusADU.staticParse(ModbusADU.java:103) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.modbus.rtu.ModbusRtuDriver.lambda$0(ModbusRtuDriver.java:130) ~[plc4j-driver-modbus-0.12.0.jar:0.12.0]
at org.apache.plc4x.java.spi.GeneratedDriverByteToMessageCodec.decode(GeneratedDriverByteToMessageCodec.java:87) ~[plc4j-spi-0.12.0.jar:0.12.0]
at io.netty.handler.codec.ByteToMessageCodec$1.decode(ByteToMessageCodec.java:42) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at org.apache.plc4x.java.transport.serial.SerialChannel$SerialNioUnsafe.read(SerialChannel.java:285) ~[plc4j-transport-serial-0.12.0.jar:0.12.0]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:689) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:652) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.94.Final.jar:4.1.94.Final]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]`

@chrisdutz
Copy link
Contributor

Currently at a conference... Will look into this as soon as I'm back home. And yeah... The serial transport is not included per default. We should probably change that to include all supported transports for a given driver.

@StrawberryBlue
Copy link
Author

Can you reproduce this problem

@wenhuancui
Copy link

Modbus with serial functioning is broken in 0.12.0.

@chrisdutz
Copy link
Contributor

@StrawberryBlue I just recently updated the Modbus driver to hopefully eliminate the half-packet problem ... could you please give that another try?

@StrawberryBlue
Copy link
Author

it is fixed, great

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug pending-close Issues that have been addressed and are awaiting final reporter feedback
Projects
None yet
Development

No branches or pull requests

3 participants