editors/DebugViewer.py
changeset 1431 df59be5afb08
parent 1365 debc97102b23
child 1571 486f94a8032c
equal deleted inserted replaced
1430:754fa90c8b27 1431:df59be5afb08
   244         @param iec_path: Path in PLC of variable to release
   244         @param iec_path: Path in PLC of variable to release
   245         """
   245         """
   246         if self.DataProducer is not None:
   246         if self.DataProducer is not None:
   247             self.DataProducer.ReleaseDebugIECVariable(iec_path)
   247             self.DataProducer.ReleaseDebugIECVariable(iec_path)
   248     
   248     
   249     def NewDataAvailable(self, ticks, *args, **kwargs):
   249     def NewDataAvailable(self, ticks):
   250         """
   250         """
   251         Called by DataProducer for each tick captured
   251         Called by DataProducer for each tick captured
   252         @param tick: PLC tick captured
   252         @param tick: PLC tick captured
   253         All other parameters are passed to refresh function 
   253         All other parameters are passed to refresh function 
   254         """
   254         """
   265             
   265             
   266             # Try to get acquire common refresh lock if minimum period between
   266             # Try to get acquire common refresh lock if minimum period between
   267             # two refresh has expired
   267             # two refresh has expired
   268             if gettime() - self.LastRefreshTime > REFRESH_PERIOD and \
   268             if gettime() - self.LastRefreshTime > REFRESH_PERIOD and \
   269                DEBUG_REFRESH_LOCK.acquire(False):
   269                DEBUG_REFRESH_LOCK.acquire(False):
   270                 self.StartRefreshing(*args, **kwargs)
   270                 self.StartRefreshing()
   271             
   271             
   272             # If common lock wasn't acquired for any reason, restart last
   272             # If common lock wasn't acquired for any reason, restart last
   273             # refresh timer
   273             # refresh timer
   274             else:
   274             else:
   275                 self.StartLastRefreshTimer(*args, **kwargs)
   275                 self.StartLastRefreshTimer()
   276         
   276         
   277         # In the case that DebugViewer isn't visible on screen and has already
   277         # In the case that DebugViewer isn't visible on screen and has already
   278         # acquired common refresh lock, reset DebugViewer
   278         # acquired common refresh lock, reset DebugViewer
   279         elif not self.IsShown() and self.HasAcquiredLock:
   279         elif not self.IsShown() and self.HasAcquiredLock:
   280             DebugViewer.RefreshNewData(self)
   280             DebugViewer.RefreshNewData(self)
   281     
   281     
   282     def ShouldRefresh(self, *args, **kwargs):
   282     def ShouldRefresh(self):
   283         """
   283         """
   284         Callback function called when last refresh timer expired
   284         Callback function called when last refresh timer expired
   285         All parameters are passed to refresh function
   285         All parameters are passed to refresh function
   286         """
   286         """
   287         # Cancel if DebugViewer is not visible on screen
   287         # Cancel if DebugViewer is not visible on screen
   288         if self and self.IsShown():
   288         if self and self.IsShown():
   289             
   289             
   290             # Try to acquire common refresh lock
   290             # Try to acquire common refresh lock
   291             if DEBUG_REFRESH_LOCK.acquire(False):
   291             if DEBUG_REFRESH_LOCK.acquire(False):
   292                 self.StartRefreshing(*args, **kwargs)
   292                 self.StartRefreshing()
   293             
   293             
   294             # Restart last refresh timer if common refresh lock acquired failed
   294             # Restart last refresh timer if common refresh lock acquired failed
   295             else:
   295             else:
   296                 self.StartLastRefreshTimer(*args, **kwargs)
   296                 self.StartLastRefreshTimer()
   297     
   297     
   298     def StartRefreshing(self, *args, **kwargs):
   298     def StartRefreshing(self):
   299         """
   299         """
   300         Called to initiate a refresh of DebugViewer
   300         Called to initiate a refresh of DebugViewer
   301         All parameters are passed to refresh function
   301         All parameters are passed to refresh function
   302         """
   302         """
   303         # Update last refresh time stamp and flag for common refresh
   303         # Update last refresh time stamp and flag for common refresh
   309         
   309         
   310         # Inhibit data consumer value update
   310         # Inhibit data consumer value update
   311         self.Inhibit(True)
   311         self.Inhibit(True)
   312         
   312         
   313         # Initiate DebugViewer refresh
   313         # Initiate DebugViewer refresh
   314         wx.CallAfter(self.RefreshNewData, *args, **kwargs)
   314         wx.CallAfter(self.RefreshNewData)
   315     
   315     
   316     def StartLastRefreshTimer(self, *args, **kwargs):
   316     def StartLastRefreshTimer(self):
   317         """
   317         """
   318         Called to start last refresh timer for the minimum time between 2
   318         Called to start last refresh timer for the minimum time between 2
   319         refresh
   319         refresh
   320         All parameters are passed to refresh function
   320         All parameters are passed to refresh function
   321         """
   321         """
   322         self.TimerAccessLock.acquire()
   322         self.TimerAccessLock.acquire()
   323         self.LastRefreshTimer = Timer(
   323         self.LastRefreshTimer = Timer(
   324             REFRESH_PERIOD, self.ShouldRefresh, args, kwargs)
   324             REFRESH_PERIOD, self.ShouldRefresh)
   325         self.LastRefreshTimer.start()
   325         self.LastRefreshTimer.start()
   326         self.TimerAccessLock.release()
   326         self.TimerAccessLock.release()
   327     
   327     
   328     def RefreshNewData(self, *args, **kwargs):
   328     def RefreshNewData(self):
   329         """
   329         """
   330         Called to refresh DebugViewer according to values received by data
   330         Called to refresh DebugViewer according to values received by data
   331         consumers
   331         consumers
   332         May be overridden by inherited classes
   332         May be overridden by inherited classes
   333         Can receive any parameters depending on what is needed by inherited
   333         Can receive any parameters depending on what is needed by inherited