# HG changeset patch # User laurent # Date 1333200004 -7200 # Node ID d76f73c7ae5eff414aee3435b83e51b7606a5f69 # Parent a5977f64d4d9c5cf45a80c9f7764ea83314f835d# Parent fe65601bd983b52c1a43cfe151d1430d8c865ea0 Merged diff -r a5977f64d4d9 -r d76f73c7ae5e Beremiz.py --- a/Beremiz.py Thu Mar 29 00:14:35 2012 +0200 +++ b/Beremiz.py Sat Mar 31 15:20:04 2012 +0200 @@ -150,7 +150,7 @@ from wxPopen import ProcessLogger from docutils import * -from PLCOpenEditor import IDEFrame, Viewer, AppendMenu, TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE, SCALING, PAGETITLES, USE_AUI +from PLCOpenEditor import IDEFrame, Viewer, AppendMenu, TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE, SCALING, PAGETITLES, USE_AUI from PLCControler import LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY SCROLLBAR_UNIT = 10 @@ -434,6 +434,12 @@ 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.png", _(u'New'), None), + (wx.ID_OPEN, "open.png", _(u'Open'), None), + (wx.ID_SAVE, "save.png", _(u'Save'), None), + (wx.ID_SAVEAS, "saveas.png", _(u'Save As...'), None), + (wx.ID_PRINT, "print.png", _(u'Print'), None)]) + def _init_coll_HelpMenu_Items(self, parent): parent.Append(help='', id=wx.ID_HELP, kind=wx.ITEM_NORMAL, text=_(u'Beremiz\tF1')) @@ -562,7 +568,7 @@ self.Bind(wx.EVT_CLOSE, self.OnCloseFrame) - self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) + self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) self.RefreshPluginMenu() self.LogConsole.SetFocus() @@ -683,6 +689,7 @@ def RefreshFileMenu(self): self.RefreshRecentProjectsMenu() + MenuToolBar = self.Panes["MenuToolBar"] if self.PluginRoot is not None: selected = self.TabsOpened.GetSelection() if selected >= 0: @@ -694,16 +701,22 @@ 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) - self.FileMenu.Enable(wx.ID_SAVE, self.PluginRoot.ProjectTestModified()) + project_modified = self.PluginRoot.ProjectTestModified() + self.FileMenu.Enable(wx.ID_SAVE, project_modified) + MenuToolBar.EnableTool(wx.ID_SAVE, project_modified) self.FileMenu.Enable(wx.ID_SAVEAS, True) + MenuToolBar.EnableTool(wx.ID_SAVEAS, True) self.FileMenu.Enable(wx.ID_PROPERTIES, True) self.FileMenu.Enable(wx.ID_CLOSE_ALL, True) else: @@ -711,8 +724,11 @@ 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_SAVEAS, False) + MenuToolBar.EnableTool(wx.ID_SAVEAS, False) self.FileMenu.Enable(wx.ID_PROPERTIES, False) self.FileMenu.Enable(wx.ID_CLOSE_ALL, False) @@ -1363,6 +1379,7 @@ main_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=_("Append ")+help) self.Bind(wx.EVT_MENU, self._GetAddPluginFunction(name, plugin), id=new_id) self.PopupMenuXY(main_menu) + main_menu.Destroy() return AddPluginMenu def GetButtonCallBackFunction(self, plugin, method): @@ -1629,7 +1646,7 @@ else: self.ResetView() self.ShowErrorMessage(result) - self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU) + self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) dialog.Destroy() def OnOpenProjectMenu(self, event): @@ -1665,14 +1682,14 @@ self.ShowErrorMessage(result) else: self.ShowErrorMessage(_("\"%s\" folder is not a valid Beremiz project\n") % projectpath) - self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU) + self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) def OnCloseProjectMenu(self, event): if self.PluginRoot is not None and not self.CheckSaveBeforeClosing(): return self.ResetView() - self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU) + self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU) self.RefreshAll() def OnSaveProjectMenu(self, event): diff -r a5977f64d4d9 -r d76f73c7ae5e LPCBeremiz.py --- a/LPCBeremiz.py Thu Mar 29 00:14:35 2012 +0200 +++ b/LPCBeremiz.py Sat Mar 31 15:20:04 2012 +0200 @@ -768,6 +768,80 @@ """ + def Generate_lpc_retain_array_sim(self): + """ + Support for retain array in Simulation + """ + return """/* Support for retain array */ +#define USER_RETAIN_ARRAY_SIZE 2000 +#define NUM_OF_COLS 3 +unsigned char readOK = 0; +unsigned int foundIndex = USER_RETAIN_ARRAY_SIZE; +unsigned int retainArray[USER_RETAIN_ARRAY_SIZE][NUM_OF_COLS]; + +unsigned int __GetRetainData(unsigned char READ, unsigned int INDEX, unsigned int COLUMN) +{ + if(READ == 1) + { + if((0<=INDEX) && (INDEX return index that is out of array bounds */ + return 0; +} + +/* Since Beremiz debugger doesn't like pointer-by-reference stuff or global varibles, separate function is a must */ +unsigned char __GetReadStatus(unsigned char dummy) +{ + return readOK; +} + +unsigned int __GetFoundIndex(unsigned char dummy) +{ + return foundIndex; +} +""" + def _Simulate(self): """ Method called by user to Simulate PLC @@ -834,7 +908,9 @@ # init/cleanup/retrieve/publish, run and align code (self.Generate_plc_common_main,"plc_common_main.c","Common runtime"), # declare located variables for simulate in a black box - (self.Generate_plc_declare_locations,"plc_declare_locations.c","Declare Locations")]: + (self.Generate_plc_declare_locations,"plc_declare_locations.c","Declare Locations"), + # declare located variables for simulate in a black box + (self.Generate_lpc_retain_array_sim,"lpc_retain_array_sim.c","Retain Array for Simulation")]: try: # Do generate code = generator() @@ -1004,6 +1080,9 @@ 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_SAVE, "save.png", _(u'Save'), None), + (wx.ID_PRINT, "print.png", _(u'Print'), None)]) + def _init_ctrls(self, prnt): IDEFrame._init_ctrls(self, prnt) @@ -1056,11 +1135,12 @@ new_values["creationDateTime"] = old_values["creationDateTime"] if new_values != old_values: self.Controler.SetProjectProperties(None, new_values) - self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, + self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, INSTANCESTREE, SCALING) dialog.Destroy() def RefreshFileMenu(self): + MenuToolBar = self.Panes["MenuToolBar"] if self.PluginRoot is not None: selected = self.TabsOpened.GetSelection() if selected >= 0: @@ -1072,22 +1152,29 @@ 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) - self.FileMenu.Enable(wx.ID_SAVE, self.PluginRoot.PlugTestModified()) + project_modified = self.PluginRoot.ProjectTestModified() + self.FileMenu.Enable(wx.ID_SAVE, project_modified) + MenuToolBar.EnableTool(wx.ID_SAVE, project_modified) self.FileMenu.Enable(wx.ID_PROPERTIES, 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) def RefreshPLCParams(self): diff -r a5977f64d4d9 -r d76f73c7ae5e plugger.py --- a/plugger.py Thu Mar 29 00:14:35 2012 +0200 +++ b/plugger.py Sat Mar 31 15:20:04 2012 +0200 @@ -1547,7 +1547,7 @@ for infos, (start_row, start_col) in chunk_infos: start = (from_location[0] - start_row, from_location[1] - start_col) end = (to_location[0] - start_row, to_location[1] - start_col) - print from_location, to_location, start_row, start_col, start, end + #print from_location, to_location, start_row, start_col, start, end if self.AppFrame is not None: self.AppFrame.ShowError(infos, start, end) @@ -1986,7 +1986,7 @@ if builder is not None: data = builder.GetBinaryCode() if data is not None : - if self._connector.NewPLC(MD5, data, extrafiles): + if self._connector.NewPLC(MD5, data, extrafiles) and self.GetIECProgramsAndVariables(): self.UnsubscribeAllDebugIECVariable() self.ProgramTransferred() if self.AppFrame is not None: diff -r a5977f64d4d9 -r d76f73c7ae5e plugins/c_ext/CFileEditor.py --- a/plugins/c_ext/CFileEditor.py Thu Mar 29 00:14:35 2012 +0200 +++ b/plugins/c_ext/CFileEditor.py Sat Mar 31 15:20:04 2012 +0200 @@ -657,7 +657,9 @@ self.Bind(wx.EVT_MENU, self.GetVariableTypeFunction(datatype), id=new_id) type_menu.AppendMenu(wx.NewId(), "User Data Types", datatype_menu) rect = self.VariablesGrid.BlockToDeviceRect((row, col), (row, col)) + self.VariablesGrid.PopupMenuXY(type_menu, rect.x + rect.width, rect.y + self.VariablesGrid.GetColLabelSize()) + type_menu.Destroy() event.Veto() else: event.Skip() diff -r a5977f64d4d9 -r d76f73c7ae5e targets/Win32/plc_Win32_main.c --- a/targets/Win32/plc_Win32_main.c Thu Mar 29 00:14:35 2012 +0200 +++ b/targets/Win32/plc_Win32_main.c Sat Mar 31 15:20:04 2012 +0200 @@ -169,9 +169,11 @@ /* from plc_debugger.c */ int WaitDebugData(unsigned long *tick) { + DWORD res; + res = WaitForSingleObject(debug_wait_sem, INFINITE); *tick = __debug_tick; /* Wait signal from PLC thread */ - return WaitForSingleObject(debug_wait_sem, INFINITE) != WAIT_OBJECT_0; + return res != WAIT_OBJECT_0; } /* Called by PLC thread when debug_publish finished