[
https://issues.apache.org/jira/browse/PLC4X-341?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17552334#comment-17552334
]
Christofer Dutz edited comment on PLC4X-341 at 6/9/22 5:16 PM:
---------------------------------------------------------------
Hi Andy,
please don't just change the defaults based on your device.
It seems that this is one of the cases we were waiting to happen. Different
vendors seem to use different byte-encoding and as far as we can see there are
cases for both options.
I think for cases like this we should probably implement a soltuion where the
driver assumes a sensible defaut and is overridable by connection string
parameter.
Would be awesome if you could start a discussion on this on the mailinglist.
Chri
was (Author: cdutz):
Hi Andy,
please don't just change the defaults based on your device.
It seems that this is one of the cases we were waiting to happen.
I think for cases like this we should probably implement a soltuion where the
driver assumes a sensible defaut and is overridable by connection string
parameter.
Would be awesome if you could start a discussion on this on the mailinglist.
Chri
> PLC4J GIP/CIP Read STRING tag returns null w/error
> --------------------------------------------------
>
> Key: PLC4X-341
> URL: https://issues.apache.org/jira/browse/PLC4X-341
> Project: Apache PLC4X
> Issue Type: Bug
> Components: Driver-Ethernet/IP, PLC4J
> Affects Versions: 0.9.1
> Reporter: Andy Grebe
> Priority: Major
> Attachments: eipcipstringread.pcapng, eipcipstringwrite1.pcapng
>
>
> STRING tag reads in plc4j using eip are not returning the string. The error
> returned is:
> java.lang.NullPointerException: Cannot invoke
> "org.apache.plc4x.java.api.value.PlcValue.getString()" because the return
> value of
> "org.apache.plc4x.java.api.messages.PlcReadResponse.getPlcValue(String)" is
> null
> It looks like plc4j is considering it a structure or array. If I read with
> {code:java}
> %MyString[{index}]:STRING:1 {code}
> I can get the individual characters in the string by placing the actual index
> in \{index}. So it knows where to start reading the data from.
> When running a wireshark cap, I can see the returned string in the response
> from the PLC. Attached is a pcap of the transaction.
>
> Code Snippet:
> {code:java}
> try (PlcConnection plcConnection = new
> PlcDriverManager().getConnection("eip://127.0.0.1")) {
> if (!plcConnection.getMetadata().canRead()) {
> logger.error("PLC connection doesn't support reading.");
> return;
> }
> logger.info("PLC connector connected"); // Create a new read request:
> PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
> logger.info("Created Builder");
> builder.addItem("value-1", "%MyString:STRING:1");
> PlcReadRequest readRequest = builder.build(); // Register a callback
> executed as soon as a response arrives.
> logger.info("Make sync request for PLC data");
> PlcReadResponse readResponse = readRequest.execute().get(5000,
> TimeUnit.MILLISECONDS);
> if (readResponse != null) {
> printPlcResponse(readResponse);
> } else {
> logger.error("An error reading PLC, response is NULL");
> }
> for (String field : readResponse.getFieldNames()){
> rtnArray.add(new PlcReadResponseData(field,
> readResponse.getPlcValue(field).getString()) ); // Exception is
> thrown here
> }
> } catch (PlcConnectionException e) {
> e.printStackTrace();
> } {code}
>
--
This message was sent by Atlassian Jira
(v8.20.7#820007)