plugger.py
changeset 673 2e1a2ea6242f
parent 672 f97f207d027b
child 674 761de581cf7a
equal deleted inserted replaced
672:f97f207d027b 673:2e1a2ea6242f
   773         self.iec2c_path = os.path.join(base_folder, "matiec", "iec2c"+exe_ext)
   773         self.iec2c_path = os.path.join(base_folder, "matiec", "iec2c"+exe_ext)
   774         self.ieclib_path = os.path.join(base_folder, "matiec", "lib")
   774         self.ieclib_path = os.path.join(base_folder, "matiec", "lib")
   775         
   775         
   776         # Setup debug information
   776         # Setup debug information
   777         self.IECdebug_datas = {}
   777         self.IECdebug_datas = {}
   778         self.IECdebug_display_lock = Semaphore(1) 
       
   779         self.IECdebug_lock = Lock()
   778         self.IECdebug_lock = Lock()
   780 
   779 
   781         self.DebugTimer=None
   780         self.DebugTimer=None
   782         self.ResetIECProgramsAndVariables()
   781         self.ResetIECProgramsAndVariables()
   783         
   782         
  1771                 # This will block thread if more than one call is waiting
  1770                 # This will block thread if more than one call is waiting
  1772 
  1771 
  1773     def GetTicktime(self):
  1772     def GetTicktime(self):
  1774         return self._Ticktime
  1773         return self._Ticktime
  1775 
  1774 
  1776     def DebugDispatch(self, TracedDebugVars, debug_tick):
       
  1777         for IECPath,value in TracedDebugVars:
       
  1778             if value is not None:
       
  1779                 self.CallWeakcallables(IECPath, "NewValue", debug_tick, value)
       
  1780         self.CallWeakcallables("__tick__", "NewDataAvailable")
       
  1781         self.IECdebug_display_lock.release()
       
  1782 
       
  1783     def DebugThreadProc(self):
  1775     def DebugThreadProc(self):
  1784         """
  1776         """
  1785         This thread waid PLC debug data, and dispatch them to subscribers
  1777         This thread waid PLC debug data, and dispatch them to subscribers
  1786         """
  1778         """
  1787         self.debug_break = False
  1779         self.debug_break = False
  1795                 if len(debug_vars) == len(self.TracedIECPath):
  1787                 if len(debug_vars) == len(self.TracedIECPath):
  1796                     if debug_getvar_retry > DEBUG_RETRIES_WARN:
  1788                     if debug_getvar_retry > DEBUG_RETRIES_WARN:
  1797                         wx.CallAfter(self.logger.write, 
  1789                         wx.CallAfter(self.logger.write, 
  1798                                  _("... debugger recovered\n"))
  1790                                  _("... debugger recovered\n"))
  1799                     debug_getvar_retry = 0
  1791                     debug_getvar_retry = 0
  1800                     if self.IECdebug_display_lock.acquire(False):
  1792                     for IECPath,value in zip(self.TracedIECPath, debug_vars):
  1801                         wx.CallAfter(self.DebugDispatch, zip(self.TracedIECPath, debug_vars), debug_tick)
  1793                         if value is not None:
       
  1794                             self.CallWeakcallables(IECPath, "NewValue", debug_tick, value)
       
  1795                     self.CallWeakcallables("__tick__", "NewDataAvailable")
  1802                 self.IECdebug_lock.release()
  1796                 self.IECdebug_lock.release()
  1803                 if debug_getvar_retry == DEBUG_RETRIES_WARN:
  1797                 if debug_getvar_retry == DEBUG_RETRIES_WARN:
  1804                     wx.CallAfter(self.logger.write, 
  1798                     wx.CallAfter(self.logger.write, 
  1805                              _("Waiting debugger to recover...\n"))
  1799                              _("Waiting debugger to recover...\n"))
  1806                 if debug_getvar_retry == DEBUG_RETRIES_REREGISTER:
  1800                 if debug_getvar_retry == DEBUG_RETRIES_REREGISTER: