def OnOpenProjectMenu(self, event): if self.Controler is not None and not self.CheckSaveBeforeClosing(): return filepath = "" if self.Controler is not None: filepath = self.Controler.GetFilePath() if filepath != "": directory = os.path.dirname(filepath) else: directory = os.getcwd() result = None dialog = wx.FileDialog(self, _("Choose a file"), directory, "", _("PLCOpen files (*.xml)|*.xml|All files|*.*"), wx.OPEN) if dialog.ShowModal() == wx.ID_OK: filepath = dialog.GetPath() if os.path.isfile(filepath): self.ResetView() controler = PLCControler() result = controler.OpenXMLFile(filepath) self.Controler = controler self.LibraryPanel.SetController(controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(controler) self._Refresh(PROJECTTREE, LIBRARYTREE) self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) dialog.Destroy() if result is not None: (num, line) = result self.ShowErrorMessage( _("PLC syntax error at line {a1}:\n{a2}").format(a1=num, a2=line))
class POULibrary(object): def __init__(self, CTR, LibName, TypeStack): from PLCControler import PLCControler self.CTR = ref(CTR) self.LibName = LibName self.LibraryControler = PLCControler() self.LibraryControler.OpenXMLFile(self.GetLibraryPath()) self.LibraryControler.ClearConfNodeTypes() self.LibraryControler.AddConfNodeTypesList(TypeStack) self.program = None def GetSTCode(self): if not self.program: self.program = self.LibraryControler.GenerateProgram()[0] + "\n" return self.program def GetName(self): return self.LibName def GetCTR(self): return self.CTR() def GetTypes(self): return {"name": self.GetName(), "types": self.LibraryControler.Project} def GetLibraryPath(self): raise Exception("Not implemented") def Generate_C(self, buildpath, varlist, IECCFLAGS): # Pure python or IEC libs doesn't produce C code return ((""), [], False), ""
def __init__(self, parent, fileOpen=None): self.icon = wx.Icon(os.path.join(beremiz_dir, "images", "poe.ico"), wx.BITMAP_TYPE_ICO) IDEFrame.__init__(self, parent) result = None # Open the filepath if defined if fileOpen is not None: fileOpen = DecodeFileSystemPath(fileOpen, False) if os.path.isfile(fileOpen): # Create a new controller controler = PLCControler() result = controler.OpenXMLFile(fileOpen) self.Controler = controler self.LibraryPanel.SetController(controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(controler) self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) # Define PLCOpenEditor icon self.SetIcon(self.icon) self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) if result is not None: (num, line) = result self.ShowErrorMessage( _("PLC syntax error at line {a1}:\n{a2}").format(a1=num, a2=line))
def __init__(self, CTR, LibName, TypeStack): from PLCControler import PLCControler self.CTR = ref(CTR) self.LibName = LibName self.LibraryControler = PLCControler() self.LibraryControler.OpenXMLFile(self.GetLibraryPath()) self.LibraryControler.ClearConfNodeTypes() self.LibraryControler.AddConfNodeTypesList(TypeStack) self.program = None
def OnNewProjectMenu(self, event): if self.Controler is not None and not self.CheckSaveBeforeClosing(): return dialog = ProjectDialog(self) if dialog.ShowModal() == wx.ID_OK: properties = dialog.GetValues() self.ResetView() self.Controler = PLCControler() self.Controler.CreateNewProject(properties) self.LibraryPanel.SetController(self.Controler) self.ProjectTree.Enable(True) self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
class POULibrary(object): def __init__(self, CTR, LibName, TypeStack): from PLCControler import PLCControler self.CTR = ref(CTR) self.LibName = LibName self.LibraryControler = PLCControler() self.LibraryControler.OpenXMLFile(self.GetLibraryPath()) self.LibraryControler.ClearConfNodeTypes() self.LibraryControler.AddConfNodeTypesList(TypeStack) self.program = None def GetSTCode(self): if not self.program: self.program = self.LibraryControler.GenerateProgram()[0] + "\n" return self.program def GetName(self): return self.LibName def GetCTR(self): return self.CTR() def GetTypes(self): return {"name": self.GetName(), "types": self.LibraryControler.Project} def GetLibraryPath(self): raise Exception("Not implemented") def Generate_C(self, buildpath, varlist, IECCFLAGS): # Pure python or IEC libs doesn't produce C code return ((""), [], False), "" def FatalError(self, message): """ Raise an exception that will trigger error message intended to the user, but without backtrace since it is not a software error """ raise UserAddressedException(message)
class PLCOpenEditor(IDEFrame): # Compatibility function for wx versions < 2.6 if wx.VERSION < (2, 6, 0): def Bind(self, event, function, id=None): if id is not None: event(self, id, function) else: event(self, function) def _init_coll_FileMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_NEW, kind=wx.ITEM_NORMAL, text=_(u'New') + '\tCTRL+N') AppendMenu(parent, help='', id=wx.ID_OPEN, kind=wx.ITEM_NORMAL, text=_(u'Open') + '\tCTRL+O') AppendMenu(parent, help='', id=wx.ID_CLOSE, kind=wx.ITEM_NORMAL, text=_(u'Close Tab') + '\tCTRL+W') AppendMenu(parent, help='', id=wx.ID_CLOSE_ALL, kind=wx.ITEM_NORMAL, text=_(u'Close Project') + '\tCTRL+SHIFT+W') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_SAVE, kind=wx.ITEM_NORMAL, text=_(u'Save') + '\tCTRL+S') AppendMenu(parent, help='', id=wx.ID_SAVEAS, kind=wx.ITEM_NORMAL, text=_(u'Save As...') + '\tCTRL+SHIFT+S') AppendMenu(parent, help='', id=ID_PLCOPENEDITORFILEMENUGENERATE, kind=wx.ITEM_NORMAL, text=_(u'Generate Program') + '\tCTRL+G') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_PAGE_SETUP, kind=wx.ITEM_NORMAL, text=_(u'Page Setup') + '\tCTRL+ALT+P') AppendMenu(parent, help='', id=wx.ID_PREVIEW, kind=wx.ITEM_NORMAL, text=_(u'Preview') + '\tCTRL+SHIFT+P') AppendMenu(parent, help='', id=wx.ID_PRINT, kind=wx.ITEM_NORMAL, text=_(u'Print') + '\tCTRL+P') parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_PROPERTIES, kind=wx.ITEM_NORMAL, text=_(u'&Properties')) parent.AppendSeparator() AppendMenu(parent, help='', id=wx.ID_EXIT, kind=wx.ITEM_NORMAL, text=_(u'Quit') + '\tCTRL+Q') self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW) self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN) self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=wx.ID_CLOSE) self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu, id=wx.ID_CLOSE_ALL) self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE) self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu, id=wx.ID_SAVEAS) self.Bind(wx.EVT_MENU, self.OnGenerateProgramMenu, id=ID_PLCOPENEDITORFILEMENUGENERATE) self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP) self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW) self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT) self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES) self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT) self.AddToMenuToolBar([(wx.ID_NEW, "new", _(u'New'), None), (wx.ID_OPEN, "open", _(u'Open'), None), (wx.ID_SAVE, "save", _(u'Save'), None), (wx.ID_SAVEAS, "saveas", _(u'Save As...'), None), (wx.ID_PRINT, "print", _(u'Print'), None)]) def _init_coll_HelpMenu_Items(self, parent): AppendMenu(parent, help='', id=wx.ID_HELP, kind=wx.ITEM_NORMAL, text=_(u'PLCOpenEditor') + '\tF1') # AppendMenu(parent, help='', id=wx.ID_HELP_CONTENTS, # kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2') # AppendMenu(parent, help='', id=wx.ID_HELP_CONTEXT, # kind=wx.ITEM_NORMAL, text=u'IEC 61131-3\tF3') def handler(event): return wx.MessageBox(version.GetCommunityHelpMsg(), _(u'Community support'), wx.OK | wx.ICON_INFORMATION) id = wx.NewId() parent.Append(help='', id=id, kind=wx.ITEM_NORMAL, text=_(u'Community support')) self.Bind(wx.EVT_MENU, handler, id=id) AppendMenu(parent, help='', id=wx.ID_ABOUT, kind=wx.ITEM_NORMAL, text=_(u'About')) self.Bind(wx.EVT_MENU, self.OnPLCOpenEditorMenu, id=wx.ID_HELP) # self.Bind(wx.EVT_MENU, self.OnPLCOpenMenu, id=wx.ID_HELP_CONTENTS) self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT) def __init__(self, parent, fileOpen=None): """ Constructor of the PLCOpenEditor class. :param parent: The parent window. :param fileOpen: The filepath to open if no controler defined (default: None). """ self.icon = wx.Icon(os.path.join(beremiz_dir, "images", "poe.ico"), wx.BITMAP_TYPE_ICO) IDEFrame.__init__(self, parent) result = None # Open the filepath if defined if fileOpen is not None: fileOpen = DecodeFileSystemPath(fileOpen, False) if os.path.isfile(fileOpen): # Create a new controller controler = PLCControler() result = controler.OpenXMLFile(fileOpen) self.Controler = controler self.LibraryPanel.SetController(controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(controler) self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) # Define PLCOpenEditor icon self.SetIcon(self.icon) self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) if result is not None: (num, line) = result self.ShowErrorMessage( _("PLC syntax error at line {a1}:\n{a2}").format(a1=num, a2=line)) def OnCloseFrame(self, event): if self.Controler is None or self.CheckSaveBeforeClosing( _("Close Application")): self.AUIManager.UnInit() self.SaveLastState() event.Skip() else: event.Veto() def RefreshTitle(self): name = _("PLCOpenEditor") if self.Controler is not None: self.SetTitle("%s - %s" % (name, self.Controler.GetFilename())) else: self.SetTitle(name) # ------------------------------------------------------------------------------- # File Menu Functions # ------------------------------------------------------------------------------- def RefreshFileMenu(self): MenuToolBar = self.Panes["MenuToolBar"] if self.Controler is not None: selected = self.TabsOpened.GetSelection() if selected >= 0: graphic_viewer = isinstance(self.TabsOpened.GetPage(selected), Viewer) else: graphic_viewer = False if self.TabsOpened.GetPageCount() > 0: self.FileMenu.Enable(wx.ID_CLOSE, True) if graphic_viewer: self.FileMenu.Enable(wx.ID_PREVIEW, True) self.FileMenu.Enable(wx.ID_PRINT, True) MenuToolBar.EnableTool(wx.ID_PRINT, True) else: self.FileMenu.Enable(wx.ID_PREVIEW, False) self.FileMenu.Enable(wx.ID_PRINT, False) MenuToolBar.EnableTool(wx.ID_PRINT, False) else: self.FileMenu.Enable(wx.ID_CLOSE, False) self.FileMenu.Enable(wx.ID_PREVIEW, False) self.FileMenu.Enable(wx.ID_PRINT, False) MenuToolBar.EnableTool(wx.ID_PRINT, False) self.FileMenu.Enable(wx.ID_PAGE_SETUP, True) project_modified = not self.Controler.ProjectIsSaved() self.FileMenu.Enable(wx.ID_SAVE, project_modified) MenuToolBar.EnableTool(wx.ID_SAVE, project_modified) self.FileMenu.Enable(wx.ID_PROPERTIES, True) self.FileMenu.Enable(wx.ID_CLOSE_ALL, True) self.FileMenu.Enable(wx.ID_SAVEAS, True) MenuToolBar.EnableTool(wx.ID_SAVEAS, True) self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, True) else: self.FileMenu.Enable(wx.ID_CLOSE, False) self.FileMenu.Enable(wx.ID_PAGE_SETUP, False) self.FileMenu.Enable(wx.ID_PREVIEW, False) self.FileMenu.Enable(wx.ID_PRINT, False) MenuToolBar.EnableTool(wx.ID_PRINT, False) self.FileMenu.Enable(wx.ID_SAVE, False) MenuToolBar.EnableTool(wx.ID_SAVE, False) self.FileMenu.Enable(wx.ID_PROPERTIES, False) self.FileMenu.Enable(wx.ID_CLOSE_ALL, False) self.FileMenu.Enable(wx.ID_SAVEAS, False) MenuToolBar.EnableTool(wx.ID_SAVEAS, False) self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUGENERATE, False) def OnNewProjectMenu(self, event): if self.Controler is not None and not self.CheckSaveBeforeClosing(): return dialog = ProjectDialog(self) if dialog.ShowModal() == wx.ID_OK: properties = dialog.GetValues() self.ResetView() self.Controler = PLCControler() self.Controler.CreateNewProject(properties) self.LibraryPanel.SetController(self.Controler) self.ProjectTree.Enable(True) self._Refresh(TITLE, FILEMENU, EDITMENU, PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) def OnOpenProjectMenu(self, event): if self.Controler is not None and not self.CheckSaveBeforeClosing(): return filepath = "" if self.Controler is not None: filepath = self.Controler.GetFilePath() if filepath != "": directory = os.path.dirname(filepath) else: directory = os.getcwd() result = None dialog = wx.FileDialog(self, _("Choose a file"), directory, "", _("PLCOpen files (*.xml)|*.xml|All files|*.*"), wx.OPEN) if dialog.ShowModal() == wx.ID_OK: filepath = dialog.GetPath() if os.path.isfile(filepath): self.ResetView() controler = PLCControler() result = controler.OpenXMLFile(filepath) self.Controler = controler self.LibraryPanel.SetController(controler) self.ProjectTree.Enable(True) self.PouInstanceVariablesPanel.SetController(controler) self._Refresh(PROJECTTREE, LIBRARYTREE) self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) dialog.Destroy() if result is not None: (num, line) = result self.ShowErrorMessage( _("PLC syntax error at line {a1}:\n{a2}").format(a1=num, a2=line)) def OnCloseProjectMenu(self, event): if not self.CheckSaveBeforeClosing(): return self.ResetView() self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) def OnSaveProjectMenu(self, event): self.SaveProject() def OnSaveProjectAsMenu(self, event): self.SaveProjectAs() def OnGenerateProgramMenu(self, event): dialog = wx.FileDialog(self, _("Choose a file"), os.getcwd(), self.Controler.GetProgramFilePath(), _("ST files (*.st)|*.st|All files|*.*"), wx.SAVE | wx.CHANGE_DIR) if dialog.ShowModal() == wx.ID_OK: filepath = dialog.GetPath() message_text = "" header, icon = _("Done"), wx.ICON_INFORMATION if os.path.isdir(os.path.dirname(filepath)): _program, errors, warnings = self.Controler.GenerateProgram( filepath) message_text += "".join( [_("warning: %s\n") % warning for warning in warnings]) if len(errors) > 0: message_text += "".join( [_("error: %s\n") % error for error in errors]) message_text += _( "Can't generate program to file %s!") % filepath header, icon = _("Error"), wx.ICON_ERROR else: message_text += _("Program was successfully generated!") else: message_text += _("\"%s\" is not a valid folder!" ) % os.path.dirname(filepath) header, icon = _("Error"), wx.ICON_ERROR message = wx.MessageDialog(self, message_text, header, wx.OK | icon) message.ShowModal() message.Destroy() dialog.Destroy() def OnPLCOpenEditorMenu(self, event): wx.MessageBox(_("No documentation available.\nComing soon.")) def OnPLCOpenMenu(self, event): open_pdf(os.path.join(beremiz_dir, "plcopen", "TC6_XML_V101.pdf")) def OnAboutMenu(self, event): info = version.GetAboutDialogInfo() info.Name = "PLCOpenEditor" info.Description = _("PLCOpenEditor is part of Beremiz project.\n\n" "Beremiz is an ") + info.Description info.Icon = wx.Icon( os.path.join(beremiz_dir, "images", "aboutlogo.png"), wx.BITMAP_TYPE_PNG) ShowAboutDialog(self, info) def SaveProject(self): result = self.Controler.SaveXMLFile() if not result: self.SaveProjectAs() else: self._Refresh(TITLE, FILEMENU, PAGETITLES) def SaveProjectAs(self): filepath = self.Controler.GetFilePath() if filepath != "": directory, filename = os.path.split(filepath) else: directory, filename = os.getcwd( ), "%(projectName)s.xml" % self.Controler.GetProjectProperties() dialog = wx.FileDialog(self, _("Choose a file"), directory, filename, _("PLCOpen files (*.xml)|*.xml|All files|*.*"), wx.SAVE | wx.OVERWRITE_PROMPT) if dialog.ShowModal() == wx.ID_OK: filepath = dialog.GetPath() if os.path.isdir(os.path.dirname(filepath)): result = self.Controler.SaveXMLFile(filepath) if not result: self.ShowErrorMessage( _("Can't save project to file %s!") % filepath) else: self.ShowErrorMessage( _("\"%s\" is not a valid folder!") % os.path.dirname(filepath)) self._Refresh(TITLE, FILEMENU, PAGETITLES) dialog.Destroy()
def __init__(self): self.controller = PLCControler() # PLCControler.__init__(self) self.BuildPath = None self.DefaultBuildPath = paths.AbsParentDir(__file__) self.RefreshConfNodesBlockLists()
class ProjectControllerPy: def __init__(self): self.controller = PLCControler() # PLCControler.__init__(self) self.BuildPath = None self.DefaultBuildPath = paths.AbsParentDir(__file__) self.RefreshConfNodesBlockLists() def printhello(self): # print("I am in class ProjectControllerPy") return () def _setBuildPath(self, buildpath): print "======== In setBuildPath_3.0===================" self.BuildPath = convertProjectPathFromC(buildpath) print self.BuildPath self.DefaultBuildPath = None print self.BuildPath print "hhhhhhhhh===================================" def _getBuildPath(self): if self.BuildPath is not None: return self.BuildPath if self.DefaultBuildPath is not None: return self.DefaultBuildPath def _getIECgeneratedcodePath(self): return os.path.join(self._getBuildPath(), "generated_plc.st") def Generate_PLC_ST(self): _program, errors, warnings = self.controller.GenerateProgram( self._getIECgeneratedcodePath()) if len(warnings) > 0 or len(errors) > 0: print("Generate ST code error\n") def AddProjectDefaultConfiguration(self, config_name="config", res_name="resource1"): self.controller.ProjectAddConfiguration(config_name) # self.controller.ProjectAddConfigurationResource(config_name, res_name) # 新建工程时并判断当用户创建主程序时添加 def SetProjectDefaultConfiguration(self): # Sets default task and instance for new project config = self.controller.Project.getconfiguration( self.GetProjectMainConfigurationName()) resource = config.getresource()[0].getname() config = config.getname() resource_tagname = self.controller.ComputeConfigurationResourceName( config, resource) def_task = [{ 'Priority': '0', 'Single': '', 'Interval': 'T#20ms', 'Name': 'task0', 'Triggering': 'Cyclic' }] def_instance = [{ 'Task': def_task[0].get('Name'), 'Type': self.GetProjectPouNames()[0], 'Name': 'instance0' }] self.controller.SetEditedResourceInfos(resource_tagname, def_task, def_instance) def NewProject(self, ProjectPath, BuildPath=None): if not os.path.isdir(ProjectPath): print("It is not a folder. You can't use is for a new project") return False self.controller.CreateNewProject({ "rrojectName": "Unnamed", "productNaem": "Unnamed", "productVersion": "1", "companyName": "Unknown", "createDateTime": datetime(*localtime()[:6]) }) self.AddProjectDefaultConfiguration() # Change XSD into class members # self._AddParamsMembers() # self.Children = {} self.ProjectPath = ProjectPath self.SaveProject() def LoadProject(self, ProjPath): projectPath = convertProjectPathFromC(ProjPath) #add 2018/1/6 self.ProjectPath = projectPath plc_file = os.path.join(projectPath, "plc.xml") print("=============================================") print("In Python LoadProject") print plc_file print("=============================================") if not os.path.isfile(plc_file): print("chosen folder doesn't contain a program.") return False error = self.controller.OpenXMLFile(plc_file) if error is not None: print("open XML file error") return False print self.controller.Project return True #只有调用了SaveProject才将Project写入XML文件 def SaveProject(self): self.controller.SaveXMLFile(os.path.join(self.ProjectPath, 'plc.xml')) def LoadLibraries(self): self.Libraries = [] TypeStack = [] for libname, clsname in features.libraries: # if self.BeremizRoot.Libraries is None or getattr(self.BeremizRoot.Libraries, "Enable_"+libname+"_Library"): Lib = GetClassImporter(clsname)()(self, libname, TypeStack) TypeStack.append(Lib.GetTypes()) self.Libraries.append(Lib) def GetLibrariesTypes(self): self.LoadLibraries() return [lib.GetTypes() for lib in self.Libraries] # Update PLCOpenEditor ConfNode Block types from loaded confnodes def RefreshConfNodesBlockLists(self): # if getattr(self, "Children", None) is not None: self.controller.ClearConfNodeTypes() self.controller.AddConfNodeTypesList(self.GetLibrariesTypes()) #和资源有关的获取设置函数 def getProjectConfigNames(self): return self.controller.GetProjectConfigNames() def getProjectCurrentConfigName(self): config_names = self.getProjectConfigNames() if len(config_names) > 0: return config_names[0] return "" def getBlockResource(self): return self.controller.GetBlockResource() def getEditedResourceVariables(self, tagname): return self.controller.GetEditedResourceVariables(tagname) def getEditedResourceInfos(self, tagname): ret = self.controller.GetEditedResourceInfos(tagname) if ret is None: return () return ret def getEditedResourceElemnetVariables(self, configName, resourceName): values = self.controller.GetConfigurationResourceGlobalVars( configName, resourceName) print( "================== in getEditedResourceVariables ==================" ) variables = [] for oneValue in values: onevar = [] onevar.append(getattr(oneValue, "Name")) onevar.append(getattr(oneValue, "Type")) onevar.append(getattr(oneValue, "Location")) onevar.append(getattr(oneValue, "InitialValue")) onevar.append(getattr(oneValue, "Option")) variables.append(onevar) return variables #添加新的资源时需要添加xml文件config节点的资源 def projectAddConfigurationResource(self, config_name, resource_name): self.controller.ProjectAddConfigurationResource( config_name, resource_name) def projectRemoveConfigurationResource(self, config_name, resource_name): self.controller.ProjectRemoveConfigurationResource( config_name, resource_name) def setEditedResourceInfos(self, tagname, tasksInfo, instancesInfo): self.controller.SetEditedResourceInfos(tagname, tasksInfo, instancesInfo) def setEditedResourceElementVariables(self, configName, resourceName, varsList): values = [] for oneVar in varsList: value = _VariableInfos("", "", "", "", "", True, "", "INT", ([], []), 0) setattr(value, "Name", oneVar[0]) setattr(value, "Type", oneVar[1]) setattr(value, "Location", oneVar[2]) setattr(value, "InitialValue", oneVar[3]) setattr(value, "Option", oneVar[4]) setattr(value, "Class", "Global") values.append(value) self.controller.SetConfigurationResourceGlobalVars( configName, resourceName, values) #获取整个工程信息 def getProjectInfos(self): return self.controller.GetProjectInfos() #获取变量类型 def getBaseTypes(self): return self.controller.GetBaseTypes() def getDataTypes(self): return self.controller.GetDataTypes(basetypes=False, confnodetypes=False) def getConfNodeDataTypes(self): return self.controller.GetConfNodeDataTypes() def getFunctionBlockTypes(self, tagName): return self.controller.GetFunctionBlockTypes(tagName) def getEditedElementInterfaceVars(self, tagName): values = self.controller.GetEditedElementInterfaceVars(tagName) variables = [] for oneValue in values: onevar = [] onevar.append(getattr(oneValue, "Name")) onevar.append(getattr(oneValue, "Class")) onevar.append(getattr(oneValue, "Type")) onevar.append(getattr(oneValue, "InitialValue")) onevar.append(getattr(oneValue, "Option")) variables.append(onevar) return variables def getEditedElementInterfaceReturnType(self, tagName): ret = self.controller.GetEditedElementInterfaceReturnType(tagName) if ret is None: return "" return ret # 将修改后的变量存入PLCcontroler中 def setPouInterfaceReturnType(self, tagName, return_type): self.controller.SetPouInterfaceReturnType(tagName, return_type) def setPouInterfaceVars(self, name, varsList): values = [] for oneVar in varsList: value = _VariableInfos("", "", "", "", "", True, "", "INT", ([], []), 0) setattr(value, "Name", oneVar[0]) setattr(value, "Class", oneVar[1]) setattr(value, "Type", oneVar[2]) setattr(value, "InitialValue", oneVar[3]) setattr(value, "Option", oneVar[4]) values.append(value) self.controller.SetPouInterfaceVars(name, values) #POU的增删修改 def projectAddPou(self, pou_name, pou_type, body_type="ST"): self.controller.ProjectAddPou(pou_name, pou_type, body_type) def projectRemovePou(self, pou_name): self.controller.ProjectRemovePou(pou_name) def changePouName(self, old_name, new_name): self.controller.ChangePouName(old_name, new_name) # 获取POU中编辑的程序 def getEditedPouElementText(self, tagName): return self.controller.GetEditedElementText(tagName) # 将编辑框中的程序更新值PLCController def setEditedPouElementText(self, tagName, text): print("in Python setEditedPouElemetnText") print text encodedText = unicode(text, "utf-8") self.controller.SetEditedElementText(tagName, encodedText) # 获取库功能块名称和内容 def getLibraryNodes(self): blocktypes = self.controller.GetBlockTypes() LibNameList = [] LibContents = [] if blocktypes is not None: for category in blocktypes: category_name = category["name"] LibNameList.append(category_name) tempList = [] for blocktype in category["list"]: tempList.append(blocktype["name"]) LibContents.append(tempList) return (LibNameList, LibContents) def secondHello(self): print("I am python hello") return []