Hi,
I've just tried to do the same as below with the newly released 0.7.0 version.
Unfortunately, I get the following errors:
[main] INFO org.apache.plc4x.java.PlcDriverManager - Instantiating new PLC
Driver Manager with class loader
jdk.internal.loader.ClassLoaders$AppClassLoader@129a8472
[main] INFO org.apache.plc4x.java.PlcDriverManager - Registering available
drivers...
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/plc4x/java/spi/connection/GeneratedDriverBase
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown
Source)
at
java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown
Source)
at
java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown
Source)
at
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown
Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at
java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(Unknown
Source)
at
java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(Unknown
Source)
at
java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(Unknown
Source)
at java.base/java.util.ServiceLoader$2.hasNext(Unknown Source)
at java.base/java.util.ServiceLoader$3.hasNext(Unknown Source)
at
org.apache.plc4x.java.PlcDriverManager.<init>(PlcDriverManager.java:53)
at
org.apache.plc4x.java.PlcDriverManager.<init>(PlcDriverManager.java:44)
at modbus.playground.main(playground.java:108)
Caused by: java.lang.ClassNotFoundException:
org.apache.plc4x.java.spi.connection.GeneratedDriverBase
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown
Source)
at
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown
Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 19 more
I added the new version as a dependency in Maven, but in the pom.xml is also
stated "Missing artifact org.apache.plc4x:plc4j-driver-modbus:jar:0.7.0".
Used dependency in maven:
<dependency>
<groupId>org.apache.plc4x</groupId>
<artifactId>plc4j-driver-modbus</artifactId>
<version>0.7.0</version>
</dependency>
Best
Tim
-----Original Message-----
From: Christofer Dutz <[email protected]>
Sent: Mittwoch, 20. Mai 2020 11:28
To: [email protected]
Subject: Re: [Modbus] Querying Values from Holding Register
Hi Tim,
I guess you are using one of the "old generation" drivers (As you say it's
working and the address seems to imply that).
Perhaps you should either try the version 0.8.0-SNAPSHOT or wait for 2 more
days till we release the 0.7.0 version.
In the 0.7.0 version we have completely deleted all existing drivers and
replaced them by new ones.
While at it I took the liberty of making the Modbus a little more robust.
So it would be great if you could give us feedback if your problem goes away
magically when updating to these driver versions.
Chris
Am 20.05.20, 10:24 schrieb "udeho" <[email protected]>:
Hi all,
I have tried to query values from the holding register of a simulated
modbus device and process them as integer using the following code:
// read integer / holding register
PlcDriverManager driverManager = new PlcDriverManager();
String conString = "modbus:tcp://localhost";
PlcConnection plcCon =
driverManager.getConnection(conString);
PlcReadRequest.Builder builder =
plcCon.readRequestBuilder();
builder.addItem("value", "readholdingregisters:1");
PlcReadRequest readRequest = builder.build();
PlcReadResponse resp = readRequest.execute().get();
This runs well, but when I try to handle the result as integer (using
resp.getInteger("value")) I always get null as result no matter what's in the
register.
For Boolean values in the coil this works without any problem (using
getBoolean() of course).
Another approach I tried is using the getAllByteArrays("value"); command,
but I haven't found a way to get the returned collection of byte arrays into
integers.
Can you give me an indication of what my problem may be or what I'm doing
wrong?
Thank you very much in advance!
Best
Tim