2 #include <opcua_basedatavariabletype.h> 3 #include "uabasenodes.h" 10 #include <uadatetime.h> 11 #include "uasemaphore.h" 29 m_subind = (OpcUa_Byte)strtol(
conf->subindex().data(),&p,16);
47 OpcUa_UInt16 ind = (OpcUa_UInt16)strtol(
conf->index().data(), &p, 16);
50 m_subind = (OpcUa_Byte)strtol(
conf->subindex().data(),&p,16);
89 UaStatus ret = par->
readSdo(udv);
91 OpcUa::BaseDataVariableType *bdt = getUaEntry();
92 bdt->setValue(0,udv,OpcUa_False);
103 UaStatus ret = OpcUa_Good;
105 OpcUa_Variant convData;
108 if (compatible.isBad())
110 UaString sDiag =
"Not compatible Data Types";
111 ret.setStatus(OpcUa_BadDataEncodingUnsupported, sDiag);
116 switch (getItemType()) {
117 case OpcUaType_Boolean:
120 pSDOObject->
m_buffer[4] = convData.Value.Boolean;
125 pSDOObject->
m_buffer[4] = convData.Value.Byte;
127 case OpcUaType_SByte:
130 pSDOObject->
m_buffer[4] = convData.Value.SByte;
132 case OpcUaType_Int16:
133 case OpcUaType_UInt16:
136 unsigned char temp[2];
137 unsigned short dtemp;
140 dt.dtemp = convData.Value.UInt16;
141 pSDOObject->
m_buffer[4] = dt.temp[0];
142 pSDOObject->
m_buffer[5] = dt.temp[1];
146 case OpcUaType_Int32:
147 case OpcUaType_UInt32:
150 unsigned char temp[4];
154 dt.dtemp = convData.Value.UInt32;
155 pSDOObject->
m_buffer[4] = dt.temp[0];
156 pSDOObject->
m_buffer[5] = dt.temp[1];
157 pSDOObject->
m_buffer[6] = dt.temp[2];
158 pSDOObject->
m_buffer[7] = dt.temp[3];
162 case OpcUaType_Float:
165 unsigned char temp[4];
169 dt.dtemp = convData.Value.Float;
170 pSDOObject->
m_buffer[4] = dt.temp[0];
171 pSDOObject->
m_buffer[5] = dt.temp[1];
172 pSDOObject->
m_buffer[6] = dt.temp[2];
173 pSDOObject->
m_buffer[7] = dt.temp[3];
178 case OpcUaType_ByteString:
180 union {
unsigned char temp[4];
184 if (getItemType() == sData->Datatype) {
186 pSDOObject->
m_iLength = sData->Value.ByteString.Length;
194 pSDOObject->
m_buffer[4] = dt.temp[0];
195 pSDOObject->
m_buffer[5] = dt.temp[1];
196 pSDOObject->
m_buffer[6] = dt.temp[2];
197 pSDOObject->
m_buffer[7] = dt.temp[3];
200 UaString sDiag =
"Not compatible Data Types";
201 ret.setStatus(OpcUa_BadDataEncodingUnsupported,sDiag);
209 UaString sDiag =
"Not compatible Data Types";
210 ret.setStatus(OpcUa_BadDataEncodingUnsupported, sDiag);
216 OpcUa_Byte invalid_bytes = (OpcUa_Byte)(4 - pSDOObject->
m_iLength);
234 UaByteArray& m_buffer = pSDOObject->
m_buffer;
235 OpcUa_Byte sByte = 4;
236 switch (getItemType()) {
237 case OpcUaType_Boolean:
239 newValue.setBool(m_buffer[sByte]);
243 case OpcUaType_SByte:
245 newValue.setByte(m_buffer[sByte]);
248 case OpcUaType_UInt16:
250 unsigned short ushortTemp = (
unsigned char)m_buffer[sByte+1];
251 ushortTemp = ( ushortTemp << 8 ) + (
unsigned char)m_buffer[sByte];
252 newValue.setUInt16(ushortTemp);
255 case OpcUaType_UInt32:
257 unsigned int uintTemp = (
unsigned char)m_buffer[sByte + 3];
258 uintTemp = (((((uintTemp << 8) + (
unsigned char)m_buffer[sByte + 2]) << 8) + (
unsigned char)m_buffer[sByte + 1]) << 8) + (
unsigned char)m_buffer[sByte];
259 newValue.setUInt32(uintTemp);
262 case OpcUaType_Float:
269 dt.temp = (
unsigned char)m_buffer[sByte+3];
270 dt.temp = ((((( dt.temp << 8 ) + (
unsigned char)m_buffer[sByte+2]) << 8) + (
unsigned char)m_buffer[sByte+1]) << 8) + (
unsigned char)m_buffer[sByte];
271 newValue.setFloat(dt.dtemp);
274 case OpcUaType_Int16:
276 unsigned short shortTemp = (
unsigned char)m_buffer[sByte+1];
277 shortTemp = ( shortTemp << 8 ) + (
unsigned char)m_buffer[sByte];
278 newValue.setInt16((OpcUa_Int16)shortTemp);
281 case OpcUaType_Int32:
283 unsigned int intTemp = (
unsigned char)m_buffer[sByte+3];
284 intTemp = ((((( intTemp << 8 ) + (
unsigned char)m_buffer[sByte+2]) << 8) + (
unsigned char)m_buffer[sByte+1]) << 8) + (
unsigned char)m_buffer[sByte];
285 newValue.setInt32((OpcUa_Int32)intTemp);
288 case OpcUaType_ByteString:
292 tmp.setByteString(pSDOObject->
m_iLength,(OpcUa_Byte *)(m_buffer.data()));
293 newValue.setByteString(tmp,
false);
312 val.setString(UaString(((
SDOITEM_TYPE2 *)sdoi)->index().c_str()));
316 val.setString(UaString(((
SDOITEM_TYPE2 *)sdoi)->subindex().c_str()));
321 val.setString(UaString(
t.c_str()));
330 UaStatus ret = OpcUa_Good;
333 UaDateTime sdt = UaDateTime::now();
340 udt.setDataValue(val, OpcUa_False, OpcUa_Good, sdt, sdt);
341 ret = ((OpcUa::BaseDataVariableType *)blink)->setValue(0, udt, OpcUa_False);