The values do come through when written with UaExpert when I write the same data to the server.
Code: Select all
UaStatus SampleClient::writeValue(OpcUa_NodeId NodeId, UaGenericStructureValue gsValue)
{
UaDiagnosticInfos diagnosticInfos;
UaWriteValues nodesToWrite;
UaStatus result;
UaStatusCodeArray results;
ServiceSettings serviceSettings;
UaExtensionObject value;
UaVariant variant;
gsValue.toExtensionObject(value);
variant.setExtensionObject(value, OpcUa_False);
nodesToWrite.create(1);
OpcUa_NodeId_CopyTo(&NodeId, &nodesToWrite[0].NodeId);
nodesToWrite[0].AttributeId = OpcUa_Attributes_Value;
variant.copyTo(&nodesToWrite[0].Value.Value);
result = m_pSession->write(serviceSettings, nodesToWrite, results, diagnosticInfos);
if (result.isGood())
{
// Write service succeded - check status of write value
result = UaStatus(results[0]);
}
return result;
}
Code: Select all
status = findPLCGlobal(pMyClient, "TestStruct1", nodeId);
structDefinition.setName("TestStruct1");
structDefinition.setDataTypeId(300000); // SSTRUCT1 data type (Boolean, Int16, Float)
field.setName("FFIELD1");
field.setDataTypeId(OpcUaType_Boolean);
structDefinition.addChild(field);
field.setName("FFIELD2");
field.setDataTypeId(OpcUaType_Int16);
structDefinition.addChild(field);
field.setName("FFIELD3");
field.setDataTypeId(OpcUaType_Float);
structDefinition.addChild(field);
gsValue = UaGenericStructureValue(structDefinition);
value.setBoolean((OpcUa_Boolean)true);
status = gsValue.setField(UaString("FFIELD1"), value);
value.setInt16((OpcUa_Int16)401);
status = gsValue.setField(UaString("FFIELD2"), value);
value.setFloat((OpcUa_Float)52.9f);
status = gsValue.setField(UaString("FFIELD3"), value);
status = pMyClient->writeValue(nodeId.NodeId, gsValue);