ProjectController.py
changeset 2741 3cc5663af196
parent 2729 4e0cd7806776
child 2744 577118ebd179
--- a/ProjectController.py	Fri Jun 11 11:56:07 2021 +0200
+++ b/ProjectController.py	Mon Jun 14 16:48:39 2021 +0200
@@ -40,6 +40,7 @@
 from datetime import datetime
 from weakref import WeakKeyDictionary
 from functools import reduce
+from itertools import izip
 from distutils.dir_util import copy_tree
 from six.moves import xrange
 
@@ -1512,8 +1513,8 @@
                     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 zip(
+                        if debug_vars is not None:
+                            for IECPath, values_buffer, value in izip(
                                     self.TracedIECPath,
                                     self.DebugValuesBuffers,
                                     debug_vars):
@@ -1606,8 +1607,8 @@
                 WeakKeyDictionary(),  # Callables
                 [],                   # Data storage [(tick, data),...]
                 "Registered",         # Variable status
-                None,
-                buffer_list]                # Forced value
+                None,                 # Forced value
+                buffer_list]
             self.IECdebug_datas[IECPath] = IECdebug_data
         else:
             IECdebug_data[4] |= buffer_list
@@ -1681,27 +1682,28 @@
         return self._connector.RemoteExec(script, **kwargs)
 
     def DispatchDebugValuesProc(self, event):
+        event.Skip()
+        start_time = time.time()
         self.debug_status, debug_ticks, buffers = self.SnapshotAndResetDebugValuesBuffers()
-        start_time = time.time()
-        if len(self.TracedIECPath) == len(buffers):
-            for IECPath, values in zip(self.TracedIECPath, buffers):
-                if len(values) > 0:
-                    self.CallWeakcallables(
-                        IECPath, "NewValues", debug_ticks, values)
-            if len(debug_ticks) > 0:
-                self.CallWeakcallables(
-                    "__tick__", "NewDataAvailable", debug_ticks)
 
         if self.debug_status == PlcStatus.Broken:
             self.logger.write_warning(
                 _("Debug: token rejected - other debug took over - reconnect to recover\n"))
-        else:
-            delay = time.time() - start_time
-            next_refresh = max(REFRESH_PERIOD - delay, 0.2 * delay)
-            if self.DispatchDebugValuesTimer is not None:
-                self.DispatchDebugValuesTimer.Start(
-                    int(next_refresh * 1000), oneShot=True)
-        event.Skip()
+            return
+
+        for IECPath, values in zip(self.TracedIECPath, buffers):
+            if len(values) > 0:
+                self.CallWeakcallables(
+                    IECPath, "NewValues", debug_ticks, values)
+        if len(debug_ticks) > 0:
+            self.CallWeakcallables(
+                "__tick__", "NewDataAvailable", debug_ticks)
+
+        delay = time.time() - start_time
+        next_refresh = max(REFRESH_PERIOD - delay, 0.2 * delay)
+        if self.DispatchDebugValuesTimer is not None:
+            res = self.DispatchDebugValuesTimer.Start(
+                int(next_refresh * 1000), oneShot=True)
 
     def KillDebugThread(self):
         if self.DispatchDebugValuesTimer is not None: