Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 019af37

Browse files
OPC-UA-Server: fix datetime array variable value conversion.
1 parent 89b778b commit 019af37

File tree

1 file changed

+22
-69
lines changed

1 file changed

+22
-69
lines changed

‎src/OPC-UA-Server/index.js‎

Lines changed: 22 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,7 @@ process.on('uncaughtException', (err) =>
631631
element._componentOf = folderJsonScada
632632
}
633633

634+
// Log.log(JSON.stringify(v))
634635
server._metrics[element.tag] = namespace.addVariable({
635636
componentOf: element._componentOf,
636637
...(nodeId === null ? {} : { nodeId: nodeId }),
@@ -646,26 +647,28 @@ process.on('uncaughtException', (err) =>
646647
: writeFlag),
647648
...cmdWriteProp,
648649
})
649-
server._metrics[element.tag].setValueFromSource(
650-
{
651-
dataType: v.dataType,
652-
...(v.arrayType ? { arrayType: v.arrayType } : {}),
653-
value: v.value,
654-
},
655-
element.invalid ? StatusCodes.Bad : StatusCodes.Good,
656-
!('timeTagAtSource' in element) ||
657-
element.timeTagAtSource === null
658-
? new Date(1970, 0, 1)
659-
: element.timeTagAtSource
660-
)
650+
if (element.origin !== 'command') {
651+
server._metrics[element.tag].setValueFromSource(
652+
{
653+
dataType: v.dataType,
654+
...(v.arrayType ? { arrayType: v.arrayType } : {}),
655+
value: v.value,
656+
},
657+
element.invalid ? StatusCodes.Bad : StatusCodes.Good,
658+
!('timeTagAtSource' in element) ||
659+
element.timeTagAtSource === null
660+
? new Date(1970, 0, 1)
661+
: element.timeTagAtSource
662+
)
663+
}
661664
}
662665
} catch (e) {
663666
Log.log(
664667
`Error creating OPC UA Variable for tag ${res[i].tag}`,
665668
Log.levelMin
666669
)
667670
Log.log(e, Log.levelMin)
668-
Log.log(JSON.stringify(res[i]))
671+
// Log.log(JSON.stringify(res[i]))
669672
}
670673
}
671674

@@ -900,9 +903,6 @@ function convertValueVariant(rtData) {
900903
case 'sbyte[]':
901904
dataType = DataType.SByte
902905
break
903-
case 'datetime[]':
904-
dataType = DataType.DateTime
905-
break
906906
case 'string[]':
907907
dataType = DataType.String
908908
break
@@ -911,8 +911,12 @@ function convertValueVariant(rtData) {
911911
break
912912
case 'datetime[]':
913913
dataType = DataType.DateTime
914-
value = []
915-
obj.forEach((v) => value.push(new Date(v)))
914+
let vArr = []
915+
if (obj?.length)
916+
for (let i = 0; i < obj.length; i++) {
917+
vArr.push(new Date(obj[i]))
918+
}
919+
obj = vArr
916920
break
917921
case 'bytestring[]':
918922
dataType = DataType.ByteString
@@ -963,38 +967,6 @@ function convertValueVariant(rtData) {
963967
break
964968
}
965969
}
966-
/*
967-
if (obj.length > 0)
968-
switch (typeof obj[0]) {
969-
case 'boolean':
970-
dataType = DataType.Boolean
971-
value = obj
972-
break
973-
case 'number':
974-
case 'bigint':
975-
value = obj
976-
break
977-
case 'string':
978-
if (obj[0].length >= 19) {
979-
const tm = Date.parse(obj[0])
980-
if (!isNaN(tm)) {
981-
dataType = DataType.DateTime
982-
value = []
983-
obj.forEach((v) => value.push(new Date(v)))
984-
} else {
985-
dataType = DataType.String
986-
value = obj
987-
}
988-
} else {
989-
dataType = DataType.String
990-
value = obj
991-
}
992-
break
993-
default:
994-
dataType = DataType.String
995-
value = JSON.stringify(obj)
996-
}
997-
*/
998970
} else {
999971
dataType = DataType.String
1000972
value = rtData?.valueJson
@@ -1094,25 +1066,6 @@ function convertValueVariant(rtData) {
10941066
value = new Date(rtData.value)
10951067
break
10961068
}
1097-
/*
1098-
if (
1099-
rtData.value > 1000000000000 &&
1100-
typeof rtData.valueJson === 'string'
1101-
) {
1102-
// try to detect date type as json (number of milliseconds)
1103-
const tm = Date.parse(rtData.valueJson.replace(/^"(.+(?="$))"$/, '1ドル'))
1104-
if (!isNaN(tm)) {
1105-
value = new Date(tm)
1106-
dataType = DataType.DateTime
1107-
} else {
1108-
dataType = DataType.Double
1109-
value = parseFloat(rtData.value)
1110-
}
1111-
} else {
1112-
dataType = DataType.Double
1113-
value = parseFloat(rtData.value)
1114-
}
1115-
*/
11161069
break
11171070
default:
11181071
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /