isAlreadyInUse opened a new issue, #1230:
URL: https://github.com/apache/plc4x/issues/1230

   ### What happened?
   
   Trying to write a WORD plc variable it fails cause DATA TYPE NOT VALID
   
   
   CASE 1 :
   
   Using 
   ```java
   PlcWriteRequest.Builder wbuilder1 = plcConnection.writeRequestBuilder();
   wbuilder1.addTagAddress("value1", var12, 10);
   ```
   when code goes in calss
   ```java
   OpcuaProtocolLogic
   ```
   function
   ```java
   private Variant fromPlcValue(String tagName, OpcuaTag tag, PlcWriteRequest 
request) {
           PlcList valueObject;
           if (request.getPlcValue(tagName).getObject() instanceof ArrayList) {
               valueObject = (PlcList) request.getPlcValue(tagName);
           } else {
               ArrayList<PlcValue> list = new ArrayList<>();
               list.add(request.getPlcValue(tagName));
               valueObject = new PlcList(list);
           }
   
           List<PlcValue> plcValueList = valueObject.getList();
           PlcValueType dataType = tag.getPlcValueType();
           if (dataType.equals(PlcValueType.NULL)) {
               if (plcValueList.get(0).getObject() instanceof Boolean) {
                   dataType = PlcValueType.BOOL;
               } else if (plcValueList.get(0).getObject() instanceof Byte) {
                   dataType = PlcValueType.SINT;
               } else if (plcValueList.get(0).getObject() instanceof Short) {
                   dataType = PlcValueType.INT;
               } else if (plcValueList.get(0).getObject() instanceof Integer) {
                   dataType = PlcValueType.DINT; // ORIGINAL SOURCE CODE NOT 
WORKS
                   dataType=PlcValueType.UINT; //ADDED MANUALLY BY ME AND IT 
WORKS
               } else if (plcValueList.get(0).getObject() instanceof Long) {
                   dataType = PlcValueType.LINT;
               } else if (plcValueList.get(0).getObject() instanceof Float) {
                   dataType = PlcValueType.REAL;
               } else if (plcValueList.get(0).getObject() instanceof Double) {
                   dataType = PlcValueType.LREAL;
               } else if (plcValueList.get(0).getObject() instanceof String) {
                   dataType = PlcValueType.STRING;
               }
           }
   ...
   ```
   
   CASE 2 :
   
   Using
   ```java
   PlcWriteRequest.Builder wbuilder1 = plcConnection.writeRequestBuilder();
   PlcUINT plcValue = new PlcUINT(70);
   wbuilder1.addTagAddress("value1", var12, plcValue);            
   ```
   when execution arrive to class 
   ```java
   PlcValueHandler
   ```
   function 
   ```java
    public static PlcValue of(PlcTag tag, Object[] values) {
           if (values.length == 1) {
               
               Object value = values[0];
               
               if(tag.getPlcValueType() == null) {
                   // TODO: This is a hacky shortcut ..
                   if(value instanceof PlcValue) {
                       return (PlcValue) value;
                   }
                   return new PlcNull();
               }
              
               if (value instanceof PlcValue) {
                   PlcValue plcValue = (PlcValue) value;
                   if (plcValue.getPlcValueType() == tag.getPlcValueType()) {
                       return (PlcValue) value;
                   } else {
                       throw new PlcRuntimeException("Expected PlcValue of type 
" + tag.getPlcValueType().name() + " but got " + 
plcValue.getPlcValueType().name());
                   }
               }
   ...
   ```
   PlcRuntimeException is throwed 
   ```java
   org.apache.plc4x.java.api.exceptions.PlcRuntimeException: Expected PlcValue 
of type NULL but got UINT
   ```
   
   if I baypass this check changing == to != 
   ```java
   if (value instanceof PlcValue) {
                   PlcValue plcValue = (PlcValue) value;
                   if (plcValue.getPlcValueType() != tag.getPlcValueType()) {
                       return (PlcValue) value;
                   } else {
                       throw new PlcRuntimeException("Expected PlcValue of type 
" + tag.getPlcValueType().name() + " but got " + 
plcValue.getPlcValueType().name());
                   }
               }
   ```
   it works
   
   
   ### Version
   
   v0.11.0
   
   ### Programming Languages
   
   - [X] plc4j
   - [ ] plc4go
   - [ ] plc4c
   - [ ] plc4net
   
   ### Protocols
   
   - [ ] AB-Ethernet
   - [ ] ADS /AMS
   - [ ] BACnet/IP
   - [ ] CANopen
   - [ ] DeltaV
   - [ ] DF1
   - [ ] EtherNet/IP
   - [ ] Firmata
   - [ ] KNXnet/IP
   - [ ] Modbus
   - [X] OPC-UA
   - [ ] S7


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@plc4x.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to