-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobject_export.py
67 lines (50 loc) · 2.28 KB
/
object_export.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import sys,io,os
# Specify the project file name
project_name = "Somic Template V19P4.project"
# Define the path where the project should be/is stored
project_path =r"C:\Users\bhandwalkar\OneDrive - Somic Verwaltungs GmbH\Desktop\Codesys\RABBIT\Codesys_scripts"
# Define the path where the exported objects should be stored
object_path = os.path.join(project_path, "Objects")
def collect_objects(project_reference):
# List that stores all POU nodes
project_objects = []
# Collect all the leaf nodes.
for node in project_reference.get_children(True):
project_objects.append(node)
for i in project_objects:
print("Found: ", i.type, i.guid, i.get_name())
return project_objects
def export_objects(collected_objects, project_reference):
if not os.path.exists(object_path):
os.makedirs(object_path)
# Export the files.
for candidate in collected_objects:
# Create a list of objects to export:
# The object itself
objects = [candidate]
# And sub-objects (POUs can have actions, properties, ...)
objects.extend(candidate.get_children(True))
# And the parent folders.
parent = candidate.parent
while ((not parent.is_root) and parent.is_folder):
objects.append(parent)
parent = parent.parent
# Create a unique file name
filename = os.path.join(object_path, "%s__%s.export" % (candidate.get_name(), candidate.guid))
# Print some user information
print("Exporting " + str(len(objects)) + " objects to: " + filename)
# And actually export the project
project_reference.export_native(objects, filename)
try:
# Clean up any open project
if projects.primary:
projects.primary.close()
# Open a project first
project_reference = projects.open(os.path.join(project_path, project_name))
# Collect the objects
collected_objects = collect_objects(project_reference)
export_objects(collected_objects, project_reference)
except Exception as exception:
print("Error: " + str(exception))
if not system.trace:
print("Please turn on the 'Script Tracing' function to get detailed information about the script execution.")