plc4x icon indicating copy to clipboard operation
plc4x copied to clipboard

[Bug]: SlaveID

Open ZantsuRocks opened this issue 1 year ago • 3 comments

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

  • [X] plc4j
  • [ ] plc4go
  • [ ] plc4c
  • [ ] plc4net

Protocols

  • [ ] AB-Ethernet
  • [ ] ADS /AMS
  • [ ] BACnet/IP
  • [ ] CANopen
  • [ ] DeltaV
  • [ ] DF1
  • [ ] EtherNet/IP
  • [ ] Firmata
  • [ ] KNXnet/IP
  • [X] Modbus
  • [ ] OPC-UA
  • [ ] S7

ZantsuRocks avatar May 24 '24 20:05 ZantsuRocks

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

StrawberryBlue avatar May 28 '24 08:05 StrawberryBlue

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.

ZantsuRocks avatar May 28 '24 22:05 ZantsuRocks

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

StrawberryBlue avatar May 29 '24 04:05 StrawberryBlue

Can we close this issue?

chrisdutz avatar Jun 21 '24 16:06 chrisdutz

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.

ZantsuRocks avatar Jun 27 '24 11:06 ZantsuRocks