#!/usr/bin/env python ### This Source Code Form is subject to the terms of the Mozilla Public ### License, v. 2.0. If a copy of the MPL was not distributed with this ### file, You can obtain one at http://mozilla.org/MPL/2.0/. ### Copyright 2014-2015 (c) TU-Dresden (Author: Chris Iatrou) ### Copyright 2014-2017 (c) Fraunhofer IOSB (Author: Julius Pfrommer) ### Copyright 2016-2017 (c) Stefan Profanter, fortiss GmbH import codecs from nodeset import * class testing: def __init__(self): self.ns = NodeSet("testing") logger.debug("Phase 1: Reading XML file nodessets") self.ns.parseXML("Opc.Ua.NodeSet2.xml") # self.ns.parseXML("Opc.Ua.NodeSet2.Part4.xml") # self.ns.parseXML("Opc.Ua.NodeSet2.Part5.xml") # self.ns.parseXML("Opc.Ua.SimulationNodeSet2.xml") logger.debug("Phase 2: Linking address space references and datatypes") self.ns.linkOpenPointers() self.ns.sanitize() logger.debug("Phase 3: Allocating variable value data") self.ns.allocateVariables() bin = self.ns.buildBinary() f = codecs.open("binary.base64", "w+", encoding='utf-8') f.write(bin.encode("base64")) f.close() allnodes = self.ns.nodes ns = [self.ns.getRoot()] i = 0 # print "Starting depth search on " + str(len(allnodes)) + " nodes starting # with from " + str(ns) while (len(ns) < len(allnodes)): i = i + 1 tmp = [] print("Iteration: " + str(i)) for n in ns: tmp.append(n) for r in n.getReferences(): if (not r.target() in tmp): tmp.append(r.target()) print("...tmp, " + str(len(tmp)) + " nodes discovered") ns = [] for n in tmp: ns.append(n) print("...done, " + str(len(ns)) + " nodes discovered") class testing_open62541_header: def __init__(self): self.ns = opcua_ns("testing") logger.debug("Phase 1: Reading XML file nodessets") self.ns.parseXML("Opc.Ua.NodeSet2.xml") # self.ns.parseXML("Opc.Ua.NodeSet2.Part4.xml") # self.ns.parseXML("Opc.Ua.NodeSet2.Part5.xml") # self.ns.parseXML("Opc.Ua.SimulationNodeSet2.xml") logger.debug("Phase 2: Linking address space references and datatypes") self.ns.linkOpenPointers() self.ns.sanitize() logger.debug("Phase 3: Calling C Printers") code = self.ns.printOpen62541Header() codeout = codecs.open("./open62541_nodeset.c", "w+", encoding='utf-8') for line in code: codeout.write(line + "\n") codeout.close() return if __name__ == '__main__': tst = testing_open62541_header()