LPCBeremiz.py
changeset 710 d76f73c7ae5e
parent 708 6ec28dc375cf
child 715 135566ab0807
equal deleted inserted replaced
705:a5977f64d4d9 710:d76f73c7ae5e
   766 
   766 
   767 #undef __LOCATED_VAR
   767 #undef __LOCATED_VAR
   768 
   768 
   769 """
   769 """
   770 
   770 
       
   771     def Generate_lpc_retain_array_sim(self):
       
   772         """
       
   773         Support for retain array in Simulation
       
   774         """
       
   775         return """/* Support for retain array */
       
   776 #define USER_RETAIN_ARRAY_SIZE 2000
       
   777 #define NUM_OF_COLS    3
       
   778 unsigned char readOK = 0;
       
   779 unsigned int foundIndex = USER_RETAIN_ARRAY_SIZE;
       
   780 unsigned int retainArray[USER_RETAIN_ARRAY_SIZE][NUM_OF_COLS];
       
   781 
       
   782 unsigned int __GetRetainData(unsigned char READ, unsigned int INDEX, unsigned int COLUMN)
       
   783 {
       
   784     if(READ == 1)
       
   785     {
       
   786         if((0<=INDEX) && (INDEX<USER_RETAIN_ARRAY_SIZE) && (0<=COLUMN) && (COLUMN<NUM_OF_COLS))
       
   787         {
       
   788             readOK = 1;
       
   789             return retainArray[INDEX][COLUMN];
       
   790         }
       
   791     }
       
   792 
       
   793     readOK = 0;
       
   794     return 0;
       
   795 }
       
   796 
       
   797 unsigned char __SetRetainData(unsigned char WRITE, unsigned int INDEX, unsigned int WORD1, unsigned int WORD2, unsigned int WORD3)
       
   798 {
       
   799     if(WRITE == 1)
       
   800     {
       
   801         if((0<=INDEX) && (INDEX<USER_RETAIN_ARRAY_SIZE))
       
   802         {
       
   803             retainArray[INDEX][0] = WORD1;
       
   804             retainArray[INDEX][1] = WORD2;
       
   805             retainArray[INDEX][2] = WORD3;
       
   806             return 1;
       
   807         }
       
   808     }
       
   809     
       
   810     return 0;
       
   811 }
       
   812 
       
   813 unsigned char __FindRetainData(unsigned char SEARCH, unsigned int START_IDX, unsigned int END_IDX, unsigned int WORD1, unsigned int WORD2, unsigned int WORD3)
       
   814 {
       
   815     unsigned int i;
       
   816 
       
   817     if((SEARCH==1) && (0<=START_IDX) && (START_IDX<USER_RETAIN_ARRAY_SIZE) && (START_IDX<=END_IDX) && (END_IDX<USER_RETAIN_ARRAY_SIZE))
       
   818     {
       
   819         for(i=START_IDX;i<=END_IDX;i++)
       
   820         {
       
   821             if((retainArray[i][0] == WORD1) && (retainArray[i][1] == WORD2) && (retainArray[i][2] == WORD3))
       
   822             {
       
   823                 foundIndex = i;
       
   824                 return 1;
       
   825             }
       
   826         }
       
   827     }
       
   828 
       
   829     foundIndex = USER_RETAIN_ARRAY_SIZE;    /* Data not found => return index that is out of array bounds */
       
   830     return 0;
       
   831 }
       
   832 
       
   833 /* Since Beremiz debugger doesn't like pointer-by-reference stuff or global varibles, separate function is a must */
       
   834 unsigned char __GetReadStatus(unsigned char dummy)
       
   835 {
       
   836     return readOK;
       
   837 }
       
   838 
       
   839 unsigned int __GetFoundIndex(unsigned char dummy)
       
   840 {
       
   841     return foundIndex;
       
   842 }
       
   843 """
       
   844 
   771     def _Simulate(self):
   845     def _Simulate(self):
   772         """
   846         """
   773         Method called by user to Simulate PLC
   847         Method called by user to Simulate PLC
   774         """
   848         """
   775         self.CurrentMode = SIMULATION_MODE
   849         self.CurrentMode = SIMULATION_MODE
   832            # debugger code
   906            # debugger code
   833            (self.Generate_plc_debugger, "plc_debugger.c", "Debugger"),
   907            (self.Generate_plc_debugger, "plc_debugger.c", "Debugger"),
   834            # init/cleanup/retrieve/publish, run and align code
   908            # init/cleanup/retrieve/publish, run and align code
   835            (self.Generate_plc_common_main,"plc_common_main.c","Common runtime"),
   909            (self.Generate_plc_common_main,"plc_common_main.c","Common runtime"),
   836            # declare located variables for simulate in a black box
   910            # declare located variables for simulate in a black box
   837            (self.Generate_plc_declare_locations,"plc_declare_locations.c","Declare Locations")]:
   911            (self.Generate_plc_declare_locations,"plc_declare_locations.c","Declare Locations"),
       
   912            # declare located variables for simulate in a black box
       
   913            (self.Generate_lpc_retain_array_sim,"lpc_retain_array_sim.c","Retain Array for Simulation")]:
   838             try:
   914             try:
   839                 # Do generate
   915                 # Do generate
   840                 code = generator()
   916                 code = generator()
   841                 if code is None:
   917                 if code is None:
   842                      raise
   918                      raise
  1002         self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
  1078         self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
  1003         self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
  1079         self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
  1004         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES)
  1080         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES)
  1005         self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
  1081         self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
  1006     
  1082     
       
  1083         self.AddToMenuToolBar([(wx.ID_SAVE, "save.png", _(u'Save'), None),
       
  1084                                (wx.ID_PRINT, "print.png", _(u'Print'), None)])
       
  1085     
  1007     def _init_ctrls(self, prnt):
  1086     def _init_ctrls(self, prnt):
  1008         IDEFrame._init_ctrls(self, prnt)
  1087         IDEFrame._init_ctrls(self, prnt)
  1009         
  1088         
  1010         self.Bind(wx.EVT_MENU, self.OnOpenWidgetInspector, id=ID_BEREMIZINSPECTOR)
  1089         self.Bind(wx.EVT_MENU, self.OnOpenWidgetInspector, id=ID_BEREMIZINSPECTOR)
  1011         accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL|wx.ACCEL_ALT, ord('I'), ID_BEREMIZINSPECTOR)])
  1090         accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL|wx.ACCEL_ALT, ord('I'), ID_BEREMIZINSPECTOR)])
  1054         if dialog.ShowModal() == wx.ID_OK:
  1133         if dialog.ShowModal() == wx.ID_OK:
  1055             new_values = dialog.GetValues()
  1134             new_values = dialog.GetValues()
  1056             new_values["creationDateTime"] = old_values["creationDateTime"]
  1135             new_values["creationDateTime"] = old_values["creationDateTime"]
  1057             if new_values != old_values:
  1136             if new_values != old_values:
  1058                 self.Controler.SetProjectProperties(None, new_values)
  1137                 self.Controler.SetProjectProperties(None, new_values)
  1059                 self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, 
  1138                 self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, 
  1060                               TYPESTREE, INSTANCESTREE, SCALING)
  1139                               TYPESTREE, INSTANCESTREE, SCALING)
  1061         dialog.Destroy()
  1140         dialog.Destroy()
  1062 
  1141 
  1063     def RefreshFileMenu(self):
  1142     def RefreshFileMenu(self):
       
  1143         MenuToolBar = self.Panes["MenuToolBar"]
  1064         if self.PluginRoot is not None:
  1144         if self.PluginRoot is not None:
  1065             selected = self.TabsOpened.GetSelection()
  1145             selected = self.TabsOpened.GetSelection()
  1066             if selected >= 0:
  1146             if selected >= 0:
  1067                 graphic_viewer = isinstance(self.TabsOpened.GetPage(selected), Viewer)
  1147                 graphic_viewer = isinstance(self.TabsOpened.GetPage(selected), Viewer)
  1068             else:
  1148             else:
  1070             if self.TabsOpened.GetPageCount() > 0:
  1150             if self.TabsOpened.GetPageCount() > 0:
  1071                 self.FileMenu.Enable(wx.ID_CLOSE, True)
  1151                 self.FileMenu.Enable(wx.ID_CLOSE, True)
  1072                 if graphic_viewer:
  1152                 if graphic_viewer:
  1073                     self.FileMenu.Enable(wx.ID_PREVIEW, True)
  1153                     self.FileMenu.Enable(wx.ID_PREVIEW, True)
  1074                     self.FileMenu.Enable(wx.ID_PRINT, True)
  1154                     self.FileMenu.Enable(wx.ID_PRINT, True)
       
  1155                     MenuToolBar.EnableTool(wx.ID_PRINT, True)
  1075                 else:
  1156                 else:
  1076                     self.FileMenu.Enable(wx.ID_PREVIEW, False)
  1157                     self.FileMenu.Enable(wx.ID_PREVIEW, False)
  1077                     self.FileMenu.Enable(wx.ID_PRINT, False)
  1158                     self.FileMenu.Enable(wx.ID_PRINT, False)
       
  1159                     MenuToolBar.EnableTool(wx.ID_PRINT, False)
  1078             else:
  1160             else:
  1079                 self.FileMenu.Enable(wx.ID_CLOSE, False)
  1161                 self.FileMenu.Enable(wx.ID_CLOSE, False)
  1080                 self.FileMenu.Enable(wx.ID_PREVIEW, False)
  1162                 self.FileMenu.Enable(wx.ID_PREVIEW, False)
  1081                 self.FileMenu.Enable(wx.ID_PRINT, False)
  1163                 self.FileMenu.Enable(wx.ID_PRINT, False)
       
  1164                 MenuToolBar.EnableTool(wx.ID_PRINT, False)
  1082             self.FileMenu.Enable(wx.ID_PAGE_SETUP, True)
  1165             self.FileMenu.Enable(wx.ID_PAGE_SETUP, True)
  1083             self.FileMenu.Enable(wx.ID_SAVE, self.PluginRoot.PlugTestModified())
  1166             project_modified = self.PluginRoot.ProjectTestModified()
       
  1167             self.FileMenu.Enable(wx.ID_SAVE, project_modified)
       
  1168             MenuToolBar.EnableTool(wx.ID_SAVE, project_modified)
  1084             self.FileMenu.Enable(wx.ID_PROPERTIES, True)
  1169             self.FileMenu.Enable(wx.ID_PROPERTIES, True)
  1085         else:
  1170         else:
  1086             self.FileMenu.Enable(wx.ID_CLOSE, False)
  1171             self.FileMenu.Enable(wx.ID_CLOSE, False)
  1087             self.FileMenu.Enable(wx.ID_PAGE_SETUP, False)
  1172             self.FileMenu.Enable(wx.ID_PAGE_SETUP, False)
  1088             self.FileMenu.Enable(wx.ID_PREVIEW, False)
  1173             self.FileMenu.Enable(wx.ID_PREVIEW, False)
  1089             self.FileMenu.Enable(wx.ID_PRINT, False)
  1174             self.FileMenu.Enable(wx.ID_PRINT, False)
       
  1175             MenuToolBar.EnableTool(wx.ID_PRINT, False)
  1090             self.FileMenu.Enable(wx.ID_SAVE, False)
  1176             self.FileMenu.Enable(wx.ID_SAVE, False)
       
  1177             MenuToolBar.EnableTool(wx.ID_SAVE, False)
  1091             self.FileMenu.Enable(wx.ID_PROPERTIES, False)
  1178             self.FileMenu.Enable(wx.ID_PROPERTIES, False)
  1092         
  1179         
  1093     def RefreshPLCParams(self):
  1180     def RefreshPLCParams(self):
  1094         self.Freeze()
  1181         self.Freeze()
  1095         self.ClearSizer(self.PLCParamsSizer)
  1182         self.ClearSizer(self.PLCParamsSizer)