Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
SOIL2OPC UA Translator
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
WZL-IQS-Public
Sensor Interfacing Language (SOIL)
SOIL2OPC UA Translator
Commits
a77cda98
Commit
a77cda98
authored
1 year ago
by
Susanna Weber
Browse files
Options
Downloads
Patches
Plain Diff
parameter have ranges and units too + string and Datetime as new varianttypes
parent
0b027f0d
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
newmodeljsonparse.py
+42
-20
42 additions, 20 deletions
newmodeljsonparse.py
writefile.py
+18
-15
18 additions, 15 deletions
writefile.py
with
60 additions
and
35 deletions
newmodeljsonparse.py
+
42
−
20
View file @
a77cda98
...
...
@@ -76,6 +76,7 @@ def dimensionchange(string):
value
=
0
newdimension
=
{
"
dimension
"
:
value
}
string
.
update
(
newdimension
)
return
string
def
getdatatypes
(
argarray
):
...
...
@@ -88,14 +89,18 @@ def getdatatypes(argarray):
return
None
def
changerange
(
string
):
if
iskeythere
(
string
,
"
range
"
):
rangeval
=
string
[
"
range
"
]
rangetuple
=
(
rangeval
[
0
],
rangeval
[
1
])
string
.
update
({
"
range
"
:
rangetuple
})
def
changerange
(
obj
):
if
iskeythere
(
obj
,
"
range
"
):
if
obj
[
"
datatype
"
]
==
"
enum
"
:
obj
.
update
({
"
range
"
:
[
None
,
None
]})
else
:
string
.
update
({
"
range
"
:
(
None
,
None
)})
# print(string)
obj
[
"
range
"
]
=
[
None
,
None
]
return
obj
def
getunit
(
string
):
if
not
iskeythere
(
string
,
"
unit
"
):
string
[
"
unit
"
]
=
"
UNITLESS
"
return
string
def
getobjnames
(
argarray
):
...
...
@@ -110,16 +115,20 @@ def getobjnames(argarray):
def
getParameters
(
parametersDict
):
# extracts the measurements of a Json-Mode
l
# extracts the measurements of a Json-Mode
parameterobj
=
[]
if
len
(
parametersDict
)
>
0
:
for
i
in
parametersDict
:
obj
=
i
dimensionchange
(
obj
)
obj
[
"
value
"
]
=
getdefaultvalue
(
obj
[
"
dimension
"
],
obj
[
"
datatype
"
])
obj
=
json
.
dumps
(
i
)
obj
=
dimensionchange
(
obj
)
obj
[
"
value
"
]
=
getdefaultvalue
(
obj
)
obj
=
changerange
(
obj
)
obj
=
getunit
(
obj
)
obj
=
json
.
dumps
(
obj
)
parameterobji
=
json
.
loads
(
obj
,
object_hook
=
parameterJsonDecod
)
parameterobj
.
append
(
parameterobji
)
print
(
"
parameterobj
"
)
print
(
parameterobj
)
return
parameterobj
...
...
@@ -128,12 +137,12 @@ def getMeasurements(measurementsDict):
if
len
(
measurementsDict
)
>
0
:
for
i
in
measurementsDict
:
obj
=
i
dimensionchange
(
obj
)
obj
[
"
value
"
]
=
getdefaultvalue
(
obj
[
"
dimension
"
],
obj
[
"
datatype
"
]
)
changerange
(
obj
)
obj
=
dimensionchange
(
obj
)
obj
[
"
value
"
]
=
getdefaultvalue
(
obj
)
obj
=
changerange
(
obj
)
if
not
iskeythere
(
obj
,
"
unit
"
):
obj
[
"
unit
"
]
=
"
UNITLESS
"
obj
=
json
.
dumps
(
i
)
obj
=
json
.
dumps
(
obj
)
measurementobji
=
json
.
loads
(
obj
,
object_hook
=
measurementJsonDecod
)
measurementobj
.
append
(
measurementobji
)
return
measurementobj
...
...
@@ -164,7 +173,7 @@ def getFunctions(functionsDict, jsonmeasurements, jsonparameters):
def
searchlists
(
list1
,
list2
):
print
(
"
I am searching
"
)
#
print("I am searching")
objmeasurementlist
=
[]
if
len
(
list1
)
<=
0
:
return
[]
...
...
@@ -174,8 +183,13 @@ def searchlists(list1, list2):
objmeasurementlist
.
append
(
searchobj
)
return
objmeasurementlist
def
getdefaultvalue
(
dimension
,
datatype
):
def
getdefaultvalue
(
obj
):
if
iskeythere
(
obj
,
"
default
"
):
if
obj
[
"
datatype
"
]
==
"
string
"
or
obj
[
"
datatype
"
]
==
"
enum
"
:
return
"
\"
"
+
obj
[
"
default
"
]
+
"
\"
"
return
obj
[
"
default
"
]
datatype
=
obj
[
"
datatype
"
]
dimension
=
obj
[
"
dimension
"
]
if
datatype
==
"
float
"
or
datatype
==
"
double
"
or
datatype
==
"
int
"
:
if
dimension
>
1
:
value
=
[]
...
...
@@ -184,8 +198,12 @@ def getdefaultvalue(dimension, datatype):
return
value
else
:
return
0
el
se
:
el
if
datatype
==
"
boolean
"
:
return
True
elif
datatype
==
"
time
"
:
return
"
ua.DateTime.now()
"
else
:
return
"
\"\"
"
def
iskeythere
(
list
,
key
):
...
...
@@ -230,7 +248,7 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur
if
obj
[
"
name
"
]
not
in
interfacesreturn
.
keys
():
interfacesreturn
[
str
(
obj
[
"
name
"
])]
=
wf
.
openobject
(
obj
[
"
name
"
],
rootobj
[
"
description
"
])
objmeasurementlist
=
getInterfaceparam
([],
rootobj
,
"
measurements
"
,
jsoncomponents
,
jsonmeasurements
)
print
(
objmeasurementlist
)
#
print(objmeasurementlist)
measurementsobjs
=
getMeasurements
(
objmeasurementlist
)
wf
.
writemeasurement
(
measurementsobjs
,
interfacesreturn
[
str
(
obj
[
"
name
"
])])
objparameterlist
=
getInterfaceparam
([],
rootobj
,
"
parameters
"
,
jsoncomponents
,
jsonparameters
)
...
...
@@ -267,6 +285,7 @@ def instantiate(typesdict, interfaces, jsoncomponents):
if
interface
[
"
rootComponent
"
]
==
component
[
"
uuid
"
]:
root
=
component
components
=
getInterfaceparam
([],
root
,
"
components
"
,
jsoncomponents
,
jsoncomponents
)
#events = getInterfaceparam([], root, "events", jsoncomponents, jsonevents)
instantiatedict
[
str
(
interface
[
"
name
"
])]
=
wf
.
writeinterface
(
typesdict
[
str
(
interface
[
"
name
"
])],
interface
[
"
name
"
],
count
)
instantiateComponents
(
typesdict
,
components
,
jsoncomponents
,
interface
,
instantiatedict
)
...
...
@@ -292,6 +311,7 @@ def main():
jsonfunctions
=
[]
jsoncomponents
=
[]
jsoninterfaces
=
[]
jsonenums
=
[]
for
obj
in
elements
:
#print(obj)
if
obj
[
"
elementType
"
]
==
"
measurement
"
:
...
...
@@ -304,6 +324,8 @@ def main():
jsoncomponents
.
append
(
obj
)
elif
obj
[
"
elementType
"
]
==
"
interface
"
:
jsoninterfaces
.
append
(
obj
)
elif
obj
[
"
elementType
"
]
==
"
enum
"
:
jsonenums
.
append
(
obj
)
typesdict
=
buildComponents
({},
jsoninterfaces
,
jsoncomponents
,
jsonmeasurements
,
jsonparameters
,
jsonfunctions
,
[])
intantiateddict
=
instantiate
(
typesdict
,
jsoninterfaces
,
jsoncomponents
)
...
...
This diff is collapsed.
Click to expand it.
writefile.py
+
18
−
15
View file @
a77cda98
...
...
@@ -29,6 +29,12 @@ def getVariantType(datatype):
varianttype
=
"
ua.VariantType.Double
"
elif
datatype
==
"
Boolean
"
:
varianttype
=
"
ua.VariantType.Boolean
"
elif
datatype
==
"
time
"
:
varianttype
=
"
ua.VariantType.DateTime
"
elif
datatype
==
"
string
"
:
varianttype
=
"
ua.VariantType.String
"
elif
datatype
==
"
enum
"
:
varianttype
=
"
ua.VariantType.String
"
return
varianttype
...
...
@@ -112,11 +118,9 @@ def writemeasurement(measurementobj, headnode):
server
.
write
(
writeindent
+
varname
+
"
=
"
+
"
await
"
+
headnode
+
"
.add_variable(idx,
\"
"
+
str
(
i
.
name
)
+
"
\"
,
"
+
str
(
i
.
value
)
+
"
,
"
+
varianttype
+
"
,
"
+
datatype
+
"
)
\n
"
)
server
.
write
(
writeindent
+
"
await
"
+
varname
+
"
.
"
+
"
set_modelling_rule(True)
\n
"
)
if
i
.
range
is
not
None
or
i
.
range
!=
"
(
None, None
)
"
:
if
i
.
range
is
not
None
and
i
.
range
!=
[
None
,
None
]
:
rangename
=
"
rangeprop
"
server
.
write
(
writeindent
+
rangename
+
"
= await
"
+
varname
+
"
.add_property(idx,
\"
range
\"
, ua.Range(
"
+
str
(
i
.
range
[
0
])
+
"
,
"
+
str
(
i
.
range
[
1
])
+
"
))
\n
"
)
server
.
write
(
writeindent
+
rangename
+
"
= await
"
+
varname
+
"
.add_property(idx,
\"
range
\"
, ua.Range(
"
+
str
(
i
.
range
[
0
])
+
"
,
"
+
str
(
i
.
range
[
1
])
+
"
))
\n
"
)
server
.
write
(
writeindent
+
"
await
"
+
rangename
+
"
.set_modelling_rule(True)
\n
"
)
if
i
.
unit
!=
"
UNITLESS
"
:
unitname
=
"
unitprop
"
...
...
@@ -144,17 +148,16 @@ def writeparameter(parameterobj, headnode):
server
.
write
(
writeindent
+
varname
+
"
=
"
+
"
await
"
+
headnode
+
"
.add_variable(idx,
\"
"
+
str
(
i
.
name
)
+
"
\"
,
"
+
str
(
i
.
value
)
+
"
,
"
+
varianttype
+
"
,
"
+
datatype
+
"
)
\n
"
)
server
.
write
(
writeindent
+
"
await
"
+
varname
+
"
.
"
+
"
set_modelling_rule(True)
\n
"
)
# if i.range is not None or i.range != (None, None):
# rangename = "rangeprop"
# server.write(
# writeindent + rangename + " = await " + headnode + ".add_property(idx, \"range\", ua.Range(" + str(
# i.range[0]) + "," + str(i.range[1]) + "))\n")
# server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n")
# if i.unit != "UNITLESS":
# unitname = "unitprop"
# server.write(
# writeindent + unitname + " = await " + headnode + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n")
# server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n")
if
i
.
range
is
not
None
and
i
.
range
!=
[
None
,
None
]:
rangename
=
"
rangeprop
"
server
.
write
(
writeindent
+
rangename
+
"
= await
"
+
varname
+
"
.add_property(idx,
\"
range
\"
, ua.Range(
"
+
str
(
i
.
range
[
0
])
+
"
,
"
+
str
(
i
.
range
[
1
])
+
"
))
\n
"
)
server
.
write
(
writeindent
+
"
await
"
+
rangename
+
"
.set_modelling_rule(True)
\n
"
)
if
i
.
unit
!=
"
UNITLESS
"
:
unitname
=
"
unitprop
"
server
.
write
(
writeindent
+
unitname
+
"
= await
"
+
varname
+
"
.add_property(idx,
\"
unit
\"
,
"
+
"
\"
"
+
i
.
unit
+
"
\"
)
\n
"
)
server
.
write
(
writeindent
+
"
await
"
+
unitname
+
"
.set_modelling_rule(True)
\n
"
)
server
.
write
(
writeindent
+
varname
+
"
description = await
"
+
varname
+
"
.add_property(idx,
\"
Description
\"
,
"
+
"
\"
"
+
i
.
description
+
"
\"
)
"
+
"
\n
"
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment