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): |