ProjectController.py
changeset 3879 17d0d1641090
parent 3874 48d66d3fb3a6
child 3887 2df45e4bd500
equal deleted inserted replaced
3878:58bce98b9ac6 3879:17d0d1641090
    38 import hashlib
    38 import hashlib
    39 import shutil
    39 import shutil
    40 from datetime import datetime
    40 from datetime import datetime
    41 from weakref import WeakKeyDictionary
    41 from weakref import WeakKeyDictionary
    42 from functools import reduce
    42 from functools import reduce
       
    43 from collections import OrderedDict
    43 
    44 
    44 import wx
    45 import wx
    45 
    46 
    46 import features
    47 import features
    47 import connectors
    48 import connectors
   278 
   279 
   279         self.IECcodeDigest = None
   280         self.IECcodeDigest = None
   280         self.LastBuiltIECcodeDigest = None
   281         self.LastBuiltIECcodeDigest = None
   281 
   282 
   282     def LoadLibraries(self):
   283     def LoadLibraries(self):
   283         self.Libraries = []
   284         self.Libraries = OrderedDict()
   284         TypeStack = []
   285         TypeStack = []
   285         for libname, clsname, default in features.libraries:
   286         for libname, clsname, default in features.libraries:
   286             lib_enabled = False if type(default)==str else default
   287             lib_enabled = False if type(default)==str else default
   287             if self.BeremizRoot.Libraries is not None:
   288             if self.BeremizRoot.Libraries is not None:
   288                 enable_attr = getattr(self.BeremizRoot.Libraries,
   289                 enable_attr = getattr(self.BeremizRoot.Libraries,
   291                     lib_enabled = enable_attr
   292                     lib_enabled = enable_attr
   292 
   293 
   293             if lib_enabled:
   294             if lib_enabled:
   294                 Lib = GetClassImporter(clsname)()(self, libname, TypeStack)
   295                 Lib = GetClassImporter(clsname)()(self, libname, TypeStack)
   295                 TypeStack.append(Lib.GetTypes())
   296                 TypeStack.append(Lib.GetTypes())
   296                 self.Libraries.append(Lib)
   297                 self.Libraries[libname] = Lib
   297 
   298 
   298     def CTNAddChild(self, CTNName, CTNType, IEC_Channel=0):
   299     def CTNAddChild(self, CTNName, CTNType, IEC_Channel=0):
   299         """ 
   300         """ 
   300         Project controller applies libraries requirements when adding new CTN
   301         Project controller applies libraries requirements when adding new CTN
   301         """
   302         """
   642                 return True
   643                 return True
   643         return False
   644         return False
   644 
   645 
   645     def GetLibrariesTypes(self):
   646     def GetLibrariesTypes(self):
   646         self.LoadLibraries()
   647         self.LoadLibraries()
   647         return [lib.GetTypes() for lib in self.Libraries]
   648         return [lib.GetTypes() for lib in self.Libraries.values()]
   648 
   649 
   649     def GetLibrariesSTCode(self):
   650     def GetLibrariesSTCode(self):
   650         return "\n".join([lib.GetSTCode() for lib in self.Libraries])
   651         return "\n".join([lib.GetSTCode() for lib in self.Libraries.values()])
   651 
   652 
   652     def GetLibrariesCCode(self, buildpath):
   653     def GetLibrariesCCode(self, buildpath):
   653         if len(self.Libraries) == 0:
   654         if len(self.Libraries) == 0:
   654             return [], [], ()
   655             return [], [], ()
   655         self.GetIECProgramsAndVariables()
   656         self.GetIECProgramsAndVariables()
   656         LibIECCflags = '"-I%s" -Wno-unused-function' % os.path.abspath(
   657         LibIECCflags = '"-I%s" -Wno-unused-function' % os.path.abspath(
   657             self.GetIECLibPath())
   658             self.GetIECLibPath())
   658         LocatedCCodeAndFlags = []
   659         LocatedCCodeAndFlags = []
   659         Extras = []
   660         Extras = []
   660         for lib in self.Libraries:
   661         for lib in self.Libraries.values():
   661             res = lib.Generate_C(buildpath, self._VariablesList, LibIECCflags)
   662             res = lib.Generate_C(buildpath, self._VariablesList, LibIECCflags)
   662             LocatedCCodeAndFlags.append(res[:2])
   663             LocatedCCodeAndFlags.append(res[:2])
   663             if len(res) > 2:
   664             if len(res) > 2:
   664                 Extras.extend(res[2:])
   665                 Extras.extend(res[2:])
   665         return list(map(list, list(zip(*LocatedCCodeAndFlags)))) + [tuple(Extras)]
   666         return list(map(list, list(zip(*LocatedCCodeAndFlags)))) + [tuple(Extras)]
   776                     locations.append(resdict)
   777                     locations.append(resdict)
   777         return locations
   778         return locations
   778 
   779 
   779     def GetConfNodeGlobalInstances(self):
   780     def GetConfNodeGlobalInstances(self):
   780         LibGlobals = []
   781         LibGlobals = []
   781         for lib in self.Libraries:
   782         for lib in self.Libraries.values():
   782             LibGlobals += lib.GlobalInstances()
   783             LibGlobals += lib.GlobalInstances()
   783         CTNGlobals = self._GlobalInstances()
   784         CTNGlobals = self._GlobalInstances()
   784         return LibGlobals + CTNGlobals
   785         return LibGlobals + CTNGlobals
   785 
   786 
   786     def _Generate_SoftPLC(self):
   787     def _Generate_SoftPLC(self):