Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
opcua-cloning
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yogesh.m
opcua-cloning
Commits
82aaba97
Commit
82aaba97
authored
Mar 10, 2023
by
yogesh.m
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
76ecbee6
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
52 deletions
+57
-52
asyncua_server.py
asyncua_server.py
+57
-52
No files found.
asyncua_server.py
View file @
82aaba97
...
@@ -17,36 +17,12 @@ class asyncua_server():
...
@@ -17,36 +17,12 @@ class asyncua_server():
self
.
server
=
None
self
.
server
=
None
self
.
idx
=
None
self
.
idx
=
None
async
def
delete_all_objects
(
self
):
async
def
delete_nodes
(
self
,
nodes
):
root_nodes
=
await
self
.
server
.
get_root_node
()
.
get_children
()
for
node
in
nodes
:
obj_nodes
=
await
root_nodes
[
0
]
.
get_children
()
node
=
"ns=3;i="
+
node
if
node
.
isdigit
()
else
"ns=3;s="
+
node
for
node
in
obj_nodes
:
node
=
self
.
server
.
get_node
(
node
)
if
(
"ns="
in
str
(
node
)):
print
(
node
)
sub_obj
=
await
self
.
server
.
get_node
(
node
)
.
get_children
()
for
del_node
in
sub_obj
:
await
self
.
server
.
delete_nodes
([
del_node
])
await
self
.
server
.
delete_nodes
([
node
])
await
self
.
server
.
delete_nodes
([
node
])
async
def
add_object
(
self
,
obj
,
hierarchy
):
if
(
hierarchy
[
obj
][
"name"
]
==
"String"
):
var_obj
=
await
self
.
server
.
nodes
.
objects
.
add_folder
(
self
.
idx
,
obj
)
val_array
=
pickle
.
loads
(
hierarchy
[
obj
][
"obj"
])
for
identifier
in
val_array
:
if
(
val_array
[
identifier
][
"datatype"
]
==
11
):
var
=
await
var_obj
.
add_variable
(
ua
.
NodeId
(
identifier
,
3
),
val_array
[
identifier
][
"node_name"
],
float
(
0.0
))
#ua.NodeId(ua.ObjectIds.Double))
await
var
.
set_writable
()
if
(
val_array
[
identifier
][
"datatype"
]
==
6
):
var
=
await
var_obj
.
add_variable
(
ua
.
NodeId
(
identifier
,
3
),
val_array
[
identifier
][
"node_name"
],
0
,
ua
.
VariantType
.
Int32
)
#ua.NodeId(ua.ObjectIds.Int32))
await
var
.
set_writable
()
else
:
await
self
.
server
.
nodes
.
objects
.
add_folder
(
self
.
idx
,
obj
)
async
def
add_variable
(
self
,
obj
,
var
):
var
=
await
obj
.
add_variable
(
self
.
idx
,
var
,
11
)
await
var
.
set_writable
()
return
var
async
def
start_server
(
self
,
url
,
uri
):
async
def
start_server
(
self
,
url
,
uri
):
# create a server
# create a server
self
.
server
=
Server
()
self
.
server
=
Server
()
...
@@ -67,8 +43,41 @@ class asyncua_server():
...
@@ -67,8 +43,41 @@ class asyncua_server():
# stop the server
# stop the server
await
self
.
server
.
stop
()
await
self
.
server
.
stop
()
async
def
add_object
(
self
,
node
,
parent_node
,
hierarchy
):
if
(
parent_node
==
None
):
if
(
node
.
isdigit
()):
node_index
=
"ns=3;i="
+
node
else
:
node_index
=
"ns=3;s="
+
node
await
self
.
server
.
nodes
.
objects
.
add_folder
(
node_index
,
hierarchy
[
"name"
])
else
:
if
(
parent_node
.
isdigit
()):
node_index
=
"ns=3;i="
+
parent_node
else
:
node_index
=
"ns=3;s="
+
parent_node
node_space
=
self
.
server
.
get_node
(
node_index
)
node_id
=
"ns=3;i="
+
node
if
node
.
isdigit
()
else
"ns=3;s="
+
node
if
(
hierarchy
[
"type"
]
==
1
):
await
node_space
.
add_object
(
node_id
,
hierarchy
[
"name"
])
elif
(
hierarchy
[
"type"
]
==
2
):
print
(
hierarchy
[
"datatype"
])
if
(
hierarchy
[
"datatype"
]
==
11
):
var
=
await
node_space
.
add_variable
(
node_id
,
hierarchy
[
"name"
],
float
(
0.0
))
await
var
.
set_writable
()
elif
(
hierarchy
[
"datatype"
]
==
6
):
var
=
await
node_space
.
add_variable
(
node_id
,
hierarchy
[
"name"
],
0
,
ua
.
VariantType
.
Int32
)
await
var
.
set_writable
()
elif
(
hierarchy
[
"datatype"
]
==
24
):
var
=
await
node_space
.
add_variable
(
node_id
,
hierarchy
[
"name"
],
0
,
ua
.
VariantType
.
Null
)
await
var
.
set_writable
()
else
:
var
=
await
node_space
.
add_variable
(
node_id
,
hierarchy
[
"name"
],
None
)
await
var
.
set_writable
()
asr
=
asyncua_server
()
asr
=
asyncua_server
()
identifier_array_received
=
[]
identifier_array_received
=
[]
identifier_array_existing
=
[]
def
get_received_hierarchy_array
(
hierarchy
):
def
get_received_hierarchy_array
(
hierarchy
):
for
key
in
hierarchy
:
for
key
in
hierarchy
:
if
(
key
!=
"hash"
):
if
(
key
!=
"hash"
):
...
@@ -84,35 +93,37 @@ async def get_existing_hierarchy_array(client,node_objects):
...
@@ -84,35 +93,37 @@ async def get_existing_hierarchy_array(client,node_objects):
node
=
client
.
get_node
(
sub_obj
)
node
=
client
.
get_node
(
sub_obj
)
children_nodes
=
await
node
.
get_children
()
children_nodes
=
await
node
.
get_children
()
identifier
=
str
(
children_nodes
[
0
]
.
nodeid
.
Identifier
)
if
children_nodes
else
""
identifier
=
str
(
children_nodes
[
0
]
.
nodeid
.
Identifier
)
if
children_nodes
else
""
node_class
=
await
sub_obj
.
read_node_class
()
if
(
identifier
not
in
str
(
sub_obj
)):
if
(
identifier
not
in
str
(
sub_obj
)):
child_disp_name
=
await
sub_obj
.
read_display_name
()
identifier_name
=
sub_obj
.
nodeid
.
Identifier
identifier_name
=
sub_obj
.
nodeid
.
Identifier
identifier_array_existing
.
append
(
str
(
identifier_name
))
node_hierarchy
[
identifier_name
]
=
await
get_existing_hierarchy_array
(
client
,
children_nodes
)
node_hierarchy
[
identifier_name
]
=
await
get_existing_hierarchy_array
(
client
,
children_nodes
)
node_hierarchy
[
identifier_name
][
"name"
]
=
child_disp_name
.
Text
if
(
node_class
.
_name_
==
"Variable"
):
datatype
=
await
sub_obj
.
read_data_type_as_variant_type
()
node_hierarchy
[
identifier_name
][
"datatype"
]
=
datatype
.
_value_
else
:
else
:
disp_name
=
await
sub_obj
.
read_display_name
()
identifier_name
=
sub_obj
.
nodeid
.
Identifier
identifier_name
=
sub_obj
.
nodeid
.
Identifier
node_hierarchy
[
identifier_name
]
=
{}
identifier_array_existing
.
append
(
str
(
identifier_name
))
node_hierarchy
[
identifier_name
][
"name"
]
=
disp_name
.
Text
return
identifier_array_existing
if
(
node_class
.
_name_
==
"Variable"
):
datatype
=
await
sub_obj
.
read_data_type_as_variant_type
()
node_hierarchy
[
identifier_name
][
"datatype"
]
=
datatype
.
_value_
return
node_hierarchy
def
add_nodes
(
nodes_to_add
,
hierarchy
,
parent_key
=
None
):
for
key
in
hierarchy
:
if
(
key
!=
"hash"
):
if
(
isinstance
(
hierarchy
[
key
],
dict
)):
if
(
key
in
nodes_to_add
):
asyncio
.
run
(
asr
.
add_object
(
key
,
parent_key
,
hierarchy
[
key
]))
add_nodes
(
nodes_to_add
,
hierarchy
[
key
],
key
)
def
analyse_hierarchy
(
hierarchy
):
def
analyse_hierarchy
(
hierarchy
):
array1
=
get_received_hierarchy_array
(
hierarchy
)
array1
=
get_received_hierarchy_array
(
hierarchy
)
print
(
array1
)
root_node
=
asr
.
server
.
get_root_node
()
root_node
=
asr
.
server
.
get_root_node
()
object_root_node
=
asyncio
.
run
(
root_node
.
get_children
())
object_root_node
=
asyncio
.
run
(
root_node
.
get_children
())
node_objects
=
asyncio
.
run
(
object_root_node
[
0
]
.
get_children
())
node_objects
=
asyncio
.
run
(
object_root_node
[
0
]
.
get_children
())
print
(
node_objects
)
array2
=
asyncio
.
run
(
get_existing_hierarchy_array
(
asr
.
server
,
node_objects
))
existing_h
=
asyncio
.
run
(
get_existing_hierarchy_array
(
asr
.
server
,
node_objects
))
nodes_to_add
=
set
(
array1
)
-
set
(
array2
)
print
(
existing_h
)
nodes_to_delete
=
set
(
array2
)
-
set
(
array1
)
add_nodes
(
nodes_to_add
,
hierarchy
)
asyncio
.
run
(
asr
.
delete_nodes
(
nodes_to_delete
))
identifier_array_received
.
clear
()
identifier_array_received
.
clear
()
identifier_array_existing
.
clear
()
def
hash_receive
():
def
hash_receive
():
prev_hash
=
0
prev_hash
=
0
...
@@ -123,13 +134,7 @@ def hash_receive():
...
@@ -123,13 +134,7 @@ def hash_receive():
hierarchy
=
pickle
.
loads
(
message
)
hierarchy
=
pickle
.
loads
(
message
)
hierarchy
=
json
.
loads
(
hierarchy
)
hierarchy
=
json
.
loads
(
hierarchy
)
if
(
prev_hash
!=
hierarchy
[
"hash"
]
and
asr
.
idx
):
if
(
prev_hash
!=
hierarchy
[
"hash"
]
and
asr
.
idx
):
print
(
"changed"
)
analyse_hierarchy
(
hierarchy
)
analyse_hierarchy
(
hierarchy
)
asyncio
.
run
(
asr
.
delete_all_objects
())
for
object
in
hierarchy
:
if
(
object
!=
"hash"
):
display_name
=
object
asyncio
.
run
(
asr
.
add_object
(
object
,
hierarchy
))
prev_hash
=
hierarchy
[
"hash"
]
prev_hash
=
hierarchy
[
"hash"
]
def
st
():
def
st
():
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment