apache / plc4x

PLC4X The Industrial IoT adapter
https://plc4x.apache.org/
Apache License 2.0
1.24k stars 399 forks source link

[Bug]: SlaveID #1614

Closed ZantsuRocks closed 2 months ago

ZantsuRocks commented 3 months ago

What happened?

I think that something is not working with the TAG Creation...

I cant build a tag to read data from slave-id 2 in modbus.

I have a network with 10 slave, i need to read them in order but the string won't build

When i remove the "{unit-id 2}" from the tag it works.

//connection
plcConn = plcDM.getConnectionManager().getConnection("modbus-rtu:tcp://127.0.0.1:502"); //FIXME: Somente para debug

// ...Doing things...

builder.addTagAddress("holding-registers", "holding-register:1[23]{unit-id: 2}");

PlcReadRequest readRequest = builder.build();

PlcReadResponse response = readRequest.execute().get();

the error:

Exception in thread "Thread-2" org.apache.plc4x.java.api.exceptions.PlcInvalidTagException: holding-register:1[23]{unit-id: 2} invalid
    at org.apache.plc4x.java.modbus.base.tag.ModbusTagHandler.parseTag(ModbusTagHandler.java:41)
    at org.apache.plc4x.java.spi.messages.DefaultPlcReadRequest$Builder.lambda$0(DefaultPlcReadRequest.java:122)
    at org.apache.plc4x.java.spi.messages.DefaultPlcReadRequest$Builder.lambda$2(DefaultPlcReadRequest.java:138)
    at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:986)
    at org.apache.plc4x.java.spi.messages.DefaultPlcReadRequest$Builder.build(DefaultPlcReadRequest.java:138)

Version

v0.12.0

Programming Languages

Protocols

StrawberryBlue commented 3 months ago

slaveId use url parameter as "modbus-tcp:tcp://127.0.0.1:502?request-timeout=5000&default-unit-identifier=1"

ZantsuRocks commented 3 months ago

For TCP connections there is no problem in this. But for Serial connections this breaks all the utility of a Slave ID, we can have at least 247 slaves in serial communication, using this parameter as connection parameter just make the use difficult, we need to keep opening and closing the serial connection. I was using the TCP transport just to debug without a real hardware, my final transport will be serial.

StrawberryBlue commented 3 months ago

Try this one. I can succeed. builder.addTagAddress("value-1", "holding-register:1:UINT[10]{unit-id: 2}");

chrisdutz commented 2 months ago

Can we close this issue?

ZantsuRocks commented 2 months ago

Can we close this issue?

I gave up on using this library since my project is heavily dependent on SlaveID. You can close the issue, and if I use the library again, I will check and open another one if necessary.