runtime/PLCObject.py
changeset 2649 db68cb0e6bdc
parent 2635 ae099881d800
child 2669 be233279d179
equal deleted inserted replaced
2648:e4ab768170f9 2649:db68cb0e6bdc
    97         self.python_runtime_vars = None
    97         self.python_runtime_vars = None
    98         self.TraceThread = None
    98         self.TraceThread = None
    99         self.TraceLock = Lock()
    99         self.TraceLock = Lock()
   100         self.Traces = []
   100         self.Traces = []
   101         self.DebugToken = 0
   101         self.DebugToken = 0
       
   102         # Callbacks used by web settings extensions (e.g.: BACnet_config.py, Modbus_config.py)
       
   103         self.LoadCallbacks   = {} # list of functions to call when PLC is   loaded
       
   104         self.UnLoadCallbacks = {} # list of functions to call when PLC is unloaded
   102 
   105 
   103         self._init_blobs()
   106         self._init_blobs()
   104 
   107 
   105     # First task of worker -> no @RunInMain
   108     # First task of worker -> no @RunInMain
   106     def AutoLoad(self, autostart):
   109     def AutoLoad(self, autostart):
   165                 return self._log_read_buffer.value, tick.value, tv_sec.value, tv_nsec.value
   168                 return self._log_read_buffer.value, tick.value, tv_sec.value, tv_nsec.value
   166         elif self._loading_error is not None and level == 0:
   169         elif self._loading_error is not None and level == 0:
   167             return self._loading_error, 0, 0, 0
   170             return self._loading_error, 0, 0, 0
   168         return None
   171         return None
   169 
   172 
       
   173     def RegisterCallbackLoad(self, ExtensionName, ExtensionCallback):
       
   174         """
       
   175         Register function to be called when PLC is loaded
       
   176         ExtensionName: a string with the name of the extension asking to register the callback 
       
   177         ExtensionCallback: the function to be called...
       
   178         """
       
   179         self.LoadCallbacks[ExtensionName] = ExtensionCallback
       
   180 
       
   181     def RegisterCallbackUnLoad(self, ExtensionName, ExtensionCallback):
       
   182         """
       
   183         Register function to be called when PLC is unloaded
       
   184         ExtensionName: a string with the name of the extension asking to register the callback 
       
   185         ExtensionCallback: the function to be called...
       
   186         """
       
   187         self.UnLoadCallbacks[ExtensionName] = ExtensionCallback
       
   188 
   170     def _GetMD5FileName(self):
   189     def _GetMD5FileName(self):
   171         return os.path.join(self.workingdir, "lasttransferedPLC.md5")
   190         return os.path.join(self.workingdir, "lasttransferedPLC.md5")
   172 
   191 
   173     def _GetLibFileName(self):
   192     def _GetLibFileName(self):
   174         return os.path.join(self.workingdir, self.CurrentPLCFilename)
   193         return os.path.join(self.workingdir, self.CurrentPLCFilename)
   268     @RunInMain
   287     @RunInMain
   269     def LoadPLC(self):
   288     def LoadPLC(self):
   270         res = self._LoadPLC()
   289         res = self._LoadPLC()
   271         if res:
   290         if res:
   272             self.PythonRuntimeInit()
   291             self.PythonRuntimeInit()
       
   292             for name, callbackFunc in self.LoadCallbacks.items():
       
   293                 callbackFunc()
   273         else:
   294         else:
   274             self._FreePLC()
   295             self._FreePLC()
   275 
   296 
   276         return res
   297         return res
   277 
   298 
   278     @RunInMain
   299     @RunInMain
   279     def UnLoadPLC(self):
   300     def UnLoadPLC(self):
   280         self.PythonRuntimeCleanup()
   301         self.PythonRuntimeCleanup()
       
   302         for name, callbackFunc in self.UnLoadCallbacks.items():
       
   303             callbackFunc()        
   281         self._FreePLC()
   304         self._FreePLC()
   282 
   305 
   283     def _InitPLCStubCalls(self):
   306     def _InitPLCStubCalls(self):
   284         """
   307         """
   285         create dummy C func proxies
   308         create dummy C func proxies