1808 #print debug_tick, debug_vars |
1808 #print debug_tick, debug_vars |
1809 if plc_status == "Started": |
1809 if plc_status == "Started": |
1810 self.IECdebug_lock.acquire() |
1810 self.IECdebug_lock.acquire() |
1811 if len(debug_vars) == len(self.TracedIECPath): |
1811 if len(debug_vars) == len(self.TracedIECPath): |
1812 if debug_getvar_retry > DEBUG_RETRIES_WARN: |
1812 if debug_getvar_retry > DEBUG_RETRIES_WARN: |
1813 wx.CallAfter(self.logger.write, |
1813 self.logger.write(_("... debugger recovered\n")) |
1814 _("... debugger recovered\n")) |
|
1815 debug_getvar_retry = 0 |
1814 debug_getvar_retry = 0 |
1816 for IECPath,value in zip(self.TracedIECPath, debug_vars): |
1815 for IECPath,value in zip(self.TracedIECPath, debug_vars): |
1817 if value is not None: |
1816 if value is not None: |
1818 self.CallWeakcallables(IECPath, "NewValue", debug_tick, value) |
1817 self.CallWeakcallables(IECPath, "NewValue", debug_tick, value) |
1819 self.CallWeakcallables("__tick__", "NewDataAvailable") |
1818 self.CallWeakcallables("__tick__", "NewDataAvailable") |
1820 self.IECdebug_lock.release() |
1819 self.IECdebug_lock.release() |
1821 if debug_getvar_retry == DEBUG_RETRIES_WARN: |
1820 if debug_getvar_retry == DEBUG_RETRIES_WARN: |
1822 wx.CallAfter(self.logger.write, |
1821 self.logger.write(_("Waiting debugger to recover...\n")) |
1823 _("Waiting debugger to recover...\n")) |
|
1824 if debug_getvar_retry == DEBUG_RETRIES_REREGISTER: |
1822 if debug_getvar_retry == DEBUG_RETRIES_REREGISTER: |
1825 # re-register debug registry to PLC |
1823 # re-register debug registry to PLC |
1826 wx.CallAfter(self.RegisterDebugVarToConnector) |
1824 wx.CallAfter(self.RegisterDebugVarToConnector) |
1827 if debug_getvar_retry != 0: |
1825 if debug_getvar_retry != 0: |
1828 # Be patient, tollerate PLC to come up before debugging |
1826 # Be patient, tollerate PLC to come up before debugging |
1829 time.sleep(0.1) |
1827 time.sleep(0.1) |
1830 else: |
1828 else: |
1831 self.debug_break = True |
1829 self.debug_break = True |
1832 wx.CallAfter(self.logger.write, _("Debugger disabled\n")) |
1830 self.logger.write(_("Debugger disabled\n")) |
|
1831 self.DebugThread = None |
1833 |
1832 |
1834 def KillDebugThread(self): |
1833 def KillDebugThread(self): |
1835 self.debug_break = True |
1834 self.debug_break = True |
1836 if self.DebugThread is not None: |
1835 if self.DebugThread is not None: |
1837 self.logger.writeyield(_("Stopping debugger...\n")) |
1836 self.logger.writeyield(_("Stopping debugger...\n")) |
1859 self.logger.write(_("Starting PLC\n")) |
1858 self.logger.write(_("Starting PLC\n")) |
1860 self._connect_debug() |
1859 self._connect_debug() |
1861 else: |
1860 else: |
1862 self.logger.write_error(_("Couldn't start PLC !\n")) |
1861 self.logger.write_error(_("Couldn't start PLC !\n")) |
1863 wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
1862 wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
1864 |
|
1865 |
|
1866 # def _Do_Test_Debug(self): |
|
1867 # # debug code |
|
1868 # self.temporary_non_weak_callable_refs = [] |
|
1869 # for IEC_Path, idx in self._IECPathToIdx.iteritems(): |
|
1870 # class tmpcls: |
|
1871 # def __init__(_self): |
|
1872 # _self.buf = None |
|
1873 # def setbuf(_self,buf): |
|
1874 # _self.buf = buf |
|
1875 # def SetValue(_self, value, idx, name): |
|
1876 # self.logger.write("debug call: %s %d %s\n"%(repr(value), idx, name)) |
|
1877 # #self.logger.write("debug call: %s %d %s %s\n"%(repr(value), idx, name, repr(self.buf))) |
|
1878 # a = tmpcls() |
|
1879 # res = self.SubscribeDebugIECVariable(IEC_Path, a, idx, IEC_Path) |
|
1880 # a.setbuf(res) |
|
1881 # self.temporary_non_weak_callable_refs.append(a) |
|
1882 |
1863 |
1883 def _Stop(self): |
1864 def _Stop(self): |
1884 """ |
1865 """ |
1885 Stop PLC |
1866 Stop PLC |
1886 """ |
1867 """ |
1887 if self._connector is not None and not self._connector.StopPLC(): |
1868 if self._connector is not None and not self._connector.StopPLC(): |
1888 self.logger.write_error(_("Couldn't stop PLC !\n")) |
1869 self.logger.write_error(_("Couldn't stop PLC !\n")) |
1889 |
1870 |
1890 self.KillDebugThread() |
1871 # debugthread should die on his own |
|
1872 #self.KillDebugThread() |
1891 |
1873 |
1892 wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
1874 wx.CallAfter(self.UpdateMethodsFromPLCStatus) |
1893 |
1875 |
1894 def _Connect(self): |
1876 def _Connect(self): |
1895 # don't accept re-connetion is already connected |
1877 # don't accept re-connetion is already connected |