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