diff -r 4a45f6642523 -r 6e0cd0ceabb7 ProjectController.py --- a/ProjectController.py Fri Jan 30 10:45:11 2015 +0100 +++ b/ProjectController.py Fri Jan 30 20:42:24 2015 +0100 @@ -36,9 +36,6 @@ MATIEC_ERROR_MODEL = re.compile(".*\.st:(\d+)-(\d+)\.\.(\d+)-(\d+): (?:error)|(?:warning) : (.*)$") -DEBUG_RETRIES_WARN = 3 -DEBUG_RETRIES_REREGISTER = 4 - ITEM_CONFNODE = 25 def ExtractChildrenTypesFromCatalog(catalog): @@ -1392,41 +1389,34 @@ self.debug_break = False debug_getvar_retry = 0 while (not self.debug_break) and (self._connector is not None): - Trace = self._connector.GetTraceVariables() - if(Trace): - plc_status, debug_tick, debug_buff = Trace - else: - plc_status = None + plc_status, Traces = self._connector.GetTraceVariables() debug_getvar_retry += 1 #print [dict.keys() for IECPath, (dict, log, status, fvalue) in self.IECdebug_datas.items()] - if plc_status == "Started" and debug_buff is not None: - self.IECdebug_lock.acquire() - debug_vars = UnpackDebugBuffer(debug_buff, self.TracedIECTypes) - if (debug_tick is not None and debug_vars is not None and - len(debug_vars) == len(self.TracedIECPath)): - if debug_getvar_retry > DEBUG_RETRIES_WARN: - self.logger.write(_("... debugger recovered\n")) - debug_getvar_retry = 0 - for IECPath, values_buffer, value in izip( - self.TracedIECPath, - self.DebugValuesBuffers, - debug_vars): - IECdebug_data = self.IECdebug_datas.get(IECPath, None) #FIXME get - if IECdebug_data is not None and value is not None: - forced = IECdebug_data[2:4] == ["Forced", value] - if not IECdebug_data[4] and len(values_buffer) > 0: - values_buffer[-1] = (value, forced) - else: - values_buffer.append((value, forced)) - self.DebugTicks.append(debug_tick) - self.IECdebug_lock.release() - if debug_getvar_retry == DEBUG_RETRIES_WARN: - self.logger.write(_("Waiting debugger to recover...\n")) - if debug_getvar_retry == DEBUG_RETRIES_REREGISTER: - # re-register debug registry to PLC - wx.CallAfter(self.RegisterDebugVarToConnector) + if plc_status == "Started" : + if len(Traces) > 0: + Failed = False + self.IECdebug_lock.acquire() + for debug_tick, debug_buff in Traces : + debug_vars = UnpackDebugBuffer(debug_buff, self.TracedIECTypes) + if (debug_vars is not None and + len(debug_vars) == len(self.TracedIECPath)): + for IECPath, values_buffer, value in izip( + self.TracedIECPath, + self.DebugValuesBuffers, + debug_vars): + IECdebug_data = self.IECdebug_datas.get(IECPath, None) #FIXME get + if IECdebug_data is not None and value is not None: + forced = IECdebug_data[2:4] == ["Forced", value] + if not IECdebug_data[4] and len(values_buffer) > 0: + values_buffer[-1] = (value, forced) + else: + values_buffer.append((value, forced)) + self.DebugTicks.append(debug_tick) + debug_getvar_retry = 0 + self.IECdebug_lock.release() + if debug_getvar_retry != 0: - # Be patient, tollerate PLC to come up before debugging + # Be patient, tollerate PLC to come with fresh samples time.sleep(0.1) else: self.debug_break = True