[
https://issues.apache.org/jira/browse/PLC4X-341?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17541912#comment-17541912
]
Christofer Dutz commented on PLC4X-341:
---------------------------------------
Hi Andy,
will you be making your stuff available to us? Looking forward to improving our
drivers :)
Regardings structured data ... for that we usually have a PlcSTRUCT type ...
this is a named map of PlcValue fields ... you can genereally return any data
structure using this. However I'm not that deeply into EIP and alike that I
could tell you much about addressing such types or how you know the structure.
But I help the PlcSTRUCT tip helps you a bit (Besides that we also have a
PlcLIST, which is just a list of PlcValues used if a field is an array-type)
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)