--- a/ProjectController.py Wed Dec 01 09:54:02 2021 +0100
+++ b/ProjectController.py Thu Dec 09 10:21:45 2021 +0100
@@ -276,6 +276,7 @@
# copy StatusMethods so that it can be later customized
self.StatusMethods = [dic.copy() for dic in self.StatusMethods]
self.DebugToken = None
+ self.LastComplainDebugToken = None
self.debug_status = PlcStatus.Stopped
self.IECcodeDigest = None
@@ -1052,9 +1053,7 @@
# prepare debug code
variable_decl_array = []
- bofs = 0
for v in self._DbgVariablesList:
- sz = DebugTypesSize.get(v["type"], 0)
variable_decl_array += [
"{&(%(C_path)s), " % v +
{
@@ -1065,9 +1064,7 @@
"VAR": "%(type)s_ENUM"
}[v["vartype"]] % v +
"}"]
- bofs += sz
debug_code = targets.GetCode("plc_debug.c") % {
- "buffer_size": bofs,
"programs_declarations": "\n".join(["extern %(type)s %(C_path)s;" %
p for p in self._ProgramList]),
"extern_variables_declarations": "\n".join([
@@ -1555,6 +1552,14 @@
else:
values_buffer.append((value, forced))
self.DebugTicks.append(debug_tick)
+ else:
+ # complain if trace is incomplete, but only once per debug session
+ if self.LastComplainDebugToken != self.DebugToken :
+ self.logger.write_warning(
+ _("Debug: target couldn't trace all requested variables.\n"))
+ self.LastComplainDebugToken = self.DebugToken
+
+
buffers, self.DebugValuesBuffers = (self.DebugValuesBuffers,
[list() for dummy in xrange(len(self.TracedIECPath))])
@@ -1563,6 +1568,15 @@
return debug_status, ticks, buffers
+ RegisterDebugVariableErrorCodes = {
+ # TRACE_LIST_OVERFLOW
+ 1 : _("Debug: Too many variables traced. Max 1024.\n"),
+ # FORCE_LIST_OVERFLOW
+ 2 : _("Debug: Too many variables forced. Max 256.\n"),
+ # FORCE_BUFFER_OVERFLOW
+ 3 : _("Debug: Cumulated forced variables size too large. Max 1KB.\n")
+ }
+
def RegisterDebugVarToConnector(self):
Idxs = []
self.TracedIECPath = []
@@ -1596,7 +1610,14 @@
IdxsT = zip(*Idxs)
self.TracedIECPath = IdxsT[3]
self.TracedIECTypes = IdxsT[1]
- self.DebugToken = self._connector.SetTraceVariablesList(zip(*IdxsT[0:3]))
+ res = self._connector.SetTraceVariablesList(zip(*IdxsT[0:3]))
+ if res is not None and res > 0:
+ self.DebugToken = res
+ else:
+ self.DebugToken = None
+ self.logger.write_warning(
+ self.RegisterDebugVariableErrorCodes.get(
+ -res, _("Debug: Unknown error")))
else:
self.TracedIECPath = []
self._connector.SetTraceVariablesList([])