Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Access to variables in DataValue class is cumbersome #60

Closed
huebl opened this issue Dec 16, 2018 · 6 comments
Closed

Access to variables in DataValue class is cumbersome #60

huebl opened this issue Dec 16, 2018 · 6 comments
Assignees
Labels
enhancement New feature or request

Comments

@huebl
Copy link
Contributor

huebl commented Dec 16, 2018

Example:

OpcUaDataValue dataValue;
dataValue.statusCode(Success);
dataValue.sourceTimestamp(OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
dataValue.serverTimestamp(OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
dataValue.variant()->setValue(OpcUaString("Hello, World!"));

The intermediate step via variant function should be hidden from the user.

@huebl huebl added the bug Something isn't working label Dec 16, 2018
@huebl huebl self-assigned this Dec 16, 2018
@atimin
Copy link
Member

atimin commented Dec 17, 2018

First of all, this issue and #59, #58 can't be considered as bugs. They are new features making typical operations with the information model easier. They should be added to 3.6 or later releases to prevent compatibility problems.

In my opinion the most natural way to make initialization of DataValue more friendly it is add more constructors:

OpcUaDataValue value(OpcUaString("Hello, World!"));
OpcUaDataValue value(OpcUaString("Hello, World!"), Success);
OpcUaDataValue value(OpcUaString("Hello, World!"), Success, OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));

@huebl
Copy link
Contributor Author

huebl commented Dec 17, 2018

I like the suggestion to add constructors. This greatly facilitates the work for a developer. I also agree that the feature should be integrated with version 3.6. This also applies to feature # 58 and # 59.

@huebl
Copy link
Contributor Author

huebl commented Dec 18, 2018

added some new constructor functions:

OpcUaDataValue(const OpcUaNullValue& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaBoolean& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaByte& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaSByte& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaInt16& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaUInt16& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaInt32& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaUInt32& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaInt64& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaUInt64& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaString& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaDateTime& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaGuid& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaByteString& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaXmlElement& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaNodeId& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaExpandedNodeId& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaStatusCode& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaQualifiedName& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaLocalizedText& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
OpcUaDataValue(const OpcUaExtensionObject& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));

@atimin
Copy link
Member

atimin commented Dec 18, 2018

if you make the pull request, I'll update the documentation.

@atimin atimin added enhancement New feature or request and removed bug Something isn't working labels Dec 18, 2018
@huebl
Copy link
Contributor Author

huebl commented Dec 18, 2018

If the instance of the data value variable already exist we can use the following new functions.

void OpcUaDataValue::set(const OpcUaNullValue& value, OpcUaStatusCode statusCode, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaBoolean& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaByte& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaSByte& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaInt16& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaUInt16& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaInt32& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaUInt32& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaInt64& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaUInt64& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaString& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaDateTime& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaGuid& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaByteString& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaXmlElement& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaNodeId& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaExpandedNodeId& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaStatusCode& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaQualifiedName& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaLocalizedText& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));
void OpcUaDataValue::set(const OpcUaExtensionObject& value, OpcUaStatusCode statusCode = Success, const OpcUaDateTime& sourceTimestamp = OpcUaDateTime(boost::posix_time::microsec_clock::universal_time()));

@huebl
Copy link
Contributor Author

huebl commented Dec 18, 2018

Finally, a few functions for reading and writing variables.

            bool setValue(const OpcUaNullValue& value);
	    bool setValue(const OpcUaBoolean& value);
	    bool setValue(const OpcUaByte& value);
	    bool setValue(const OpcUaSByte& value);
	    bool setValue(const OpcUaInt16& value);
	    bool setValue(const OpcUaUInt16& value);
	    bool setValue(const OpcUaInt32& value);
	    bool setValue(const OpcUaUInt32& value);
	    bool setValue(const OpcUaInt64& value);
	    bool setValue(const OpcUaUInt64& value);
	    bool setValue(const OpcUaString& value);
	    bool setValue(const OpcUaDateTime& value);
	    bool setValue(const OpcUaGuid& value);
	    bool setValue(const OpcUaByteString& value);
	    bool setValue(const OpcUaXmlElement& value);
	    bool setValue(const OpcUaNodeId& value);
	    bool setValue(const OpcUaExpandedNodeId& value);
	    bool setValue(const OpcUaStatusCode& value);
	    bool setValue(const OpcUaQualifiedName& value);
	    bool setValue(const OpcUaLocalizedText& value);
	    bool setValue(const OpcUaExtensionObject& value);

	    bool getValue(OpcUaBoolean& value);
	    bool getValue(OpcUaByte& value);
	    bool getValue(OpcUaSByte& value);
	    bool getValue(OpcUaInt16& value);
	    bool getValue(OpcUaUInt16& value);
	    bool getValue(OpcUaInt32& value);
	    bool getValue(OpcUaUInt32& value);
	    bool getValue(OpcUaInt64& value);
	    bool getValue(OpcUaUInt64& value);
	    bool getValue(OpcUaString& value);
	    bool getValue(OpcUaDateTime& value);
	    bool getValue(OpcUaGuid& value);
	    bool getValue(OpcUaByteString& value);
	    bool getValue(OpcUaXmlElement& value);
	    bool getValue(OpcUaNodeId& value);
	    bool getValue(OpcUaExpandedNodeId& value);
	    bool getValue(OpcUaStatusCode& value);
	    bool getValue(OpcUaQualifiedName& value);
	    bool getValue(OpcUaLocalizedText& value);
	    bool getValue(OpcUaExtensionObject& value);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants