runtime/PLCObject.py
changeset 322 b8ae0580565c
parent 319 bdd82ac65f5d
child 327 e82c422ad811
equal deleted inserted replaced
321:5a4e6278a18b 322:b8ae0580565c
   187         if os.path.exists(pyfile):
   187         if os.path.exists(pyfile):
   188             try:
   188             try:
   189                 # TODO handle exceptions in runtime.py
   189                 # TODO handle exceptions in runtime.py
   190                 # pyfile may redefine _runtime_cleanup
   190                 # pyfile may redefine _runtime_cleanup
   191                 # or even call _PythonThreadProc itself.
   191                 # or even call _PythonThreadProc itself.
   192                 if os.path.exists(hmifile):
       
   193                    execfile(hmifile, self.python_threads_vars)
       
   194                 execfile(pyfile, self.python_threads_vars)
   192                 execfile(pyfile, self.python_threads_vars)
   195                 try:
       
   196                    if self.python_threads_vars.has_key('wx'):
       
   197 	                   wx = self.python_threads_vars['wx']
       
   198 	                   # try to instanciate the first frame found.
       
   199 	                   for name, obj in self.python_threads_vars.iteritems():
       
   200 	                       # obj is a class
       
   201 	                       if type(obj)==type(type) and issubclass(obj,wx.Frame):
       
   202 	                           def create_frame():
       
   203 	                               self.hmi_frame = obj(None)
       
   204 	                               self.python_threads_vars[name] = self.hmi_frame
       
   205 	                               # keep track of class... never know
       
   206 	                               self.python_threads_vars['Class_'+name] = obj
       
   207 	                               self.hmi_frame.Bind(wx.EVT_CLOSE, OnCloseFrame)
       
   208 	                               self.hmi_frame.Show()
       
   209 	                           
       
   210 	                           def OnCloseFrame(evt):
       
   211 	                               self.hmi_frame.Destroy()
       
   212 	                               self.hmi_frame = None
       
   213 	                               wx.MessageBox("Please stop PLC to close")
       
   214 	                               #wx.CallAfter(self.StopPLC)
       
   215 	                               create_frame()
       
   216 	                               #evt.Skip()
       
   217 	                           create_frame()
       
   218 	                           break
       
   219                 except:
       
   220                     PLCprint(traceback.format_exc())
       
   221             except:
   193             except:
   222                 PLCprint(traceback.format_exc())
   194                 PLCprint(traceback.format_exc())
   223 
   195         if os.path.exists(hmifile):
       
   196             try:
       
   197                 execfile(hmifile, self.python_threads_vars)
       
   198                 if self.python_threads_vars.has_key('wx'):
       
   199                     wx = self.python_threads_vars['wx']
       
   200                     # try to instanciate the first frame found.
       
   201                     for name, obj in self.python_threads_vars.iteritems():
       
   202                         # obj is a class
       
   203                         if type(obj)==type(type) and issubclass(obj,wx.Frame):
       
   204                             def create_frame():
       
   205                                 self.hmi_frame = obj(None)
       
   206                                 self.python_threads_vars[name] = self.hmi_frame
       
   207                                 # keep track of class... never know
       
   208                                 self.python_threads_vars['Class_'+name] = obj
       
   209                                 self.hmi_frame.Bind(wx.EVT_CLOSE, OnCloseFrame)
       
   210                                 self.hmi_frame.Show()
       
   211                             
       
   212                             def OnCloseFrame(evt):
       
   213                                 self.hmi_frame.Destroy()
       
   214                                 self.hmi_frame = None
       
   215                                 wx.MessageBox("Please stop PLC to close")
       
   216                                 #wx.CallAfter(self.StopPLC)
       
   217                                 create_frame()
       
   218                                 #evt.Skip()
       
   219                             create_frame()
       
   220                             break
       
   221             except:
       
   222                 PLCprint(traceback.format_exc())
       
   223             
   224     def BeginRuntimePy(self):
   224     def BeginRuntimePy(self):
   225         runtime_begin = self.python_threads_vars.get("_runtime_begin",None)
   225         runtime_begin = self.python_threads_vars.get("_runtime_begin",None)
   226         if runtime_begin is not None:
   226         if runtime_begin is not None:
   227             self.evaluator(runtime_begin)
   227             self.evaluator(runtime_begin)
   228 
   228