[
https://issues.apache.org/jira/browse/PLC4X-341?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17536487#comment-17536487
]
Christofer Dutz commented on PLC4X-341:
---------------------------------------
Hi Andy,
thanks for your work on this ... it's highly appreciated :)
Perhaps this library could help explain things. This was actually the library
we used till version 0.7 where we switched to our own implementation. That one
is Apache licensed, and therefore safe for using as source of inspiration.
[https://github.com/digitalpetri/ethernet-ip]
But I'll try to look up some more information on the problem you were
encountering.
Chris
> 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)