plc4x icon indicating copy to clipboard operation
plc4x copied to clipboard

PLC4J GIP/CIP Read STRING tag returns null w/error

Open ottlukas opened this issue 3 years ago • 1 comments

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 


%MyString[{index}]:STRING:1 

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:


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(); 
  
} 

 

Imported from Jira PLC4X-341. Original Jira may contain additional context. Reported by: AndyGPLC.

ottlukas avatar Nov 09 '22 10:11 ottlukas

@hutcheb Can this issue be closed?

chrisdutz avatar Feb 06 '24 10:02 chrisdutz

I have seen the driver read strings, so I'm closing this.

chrisdutz avatar Jul 12 '24 13:07 chrisdutz