# HG changeset patch # User Edouard Tisserant # Date 1626948214 -7200 # Node ID 70a76083c59c72880e20db793b4c2f03d7166d1a # Parent 5a135e635bfa9dac878209c216738acd28f36d0e SVGHMI: detect watchdog abuse (more than one HMI instance with watchdog) at build time diff -r 5a135e635bfa -r 70a76083c59c svghmi/svghmi.py --- a/svghmi/svghmi.py Thu Jul 22 12:02:50 2021 +0200 +++ b/svghmi/svghmi.py Thu Jul 22 12:03:34 2021 +0200 @@ -56,6 +56,19 @@ def Generate_C(self, buildpath, varlist, IECCFLAGS): global hmi_tree_root, on_hmitree_update, maxConnectionsTotal + already_found_watchdog = False + for CTNChild in self.GetCTR().IterChildren(): + if isinstance(CTNChild, SVGHMI): + # collect maximum connection total for all svghmi nodes + maxConnectionsTotal += CTNChild.GetParamsAttributes("SVGHMI.MaxConnections")["value"] + + # spot watchdog abuse + if CTNChild.GetParamsAttributes("SVGHMI.EnableWatchdog")["value"]: + if already_found_watchdog: + self.FatalError("SVGHMI: Only one watchdog enabled HMI allowed") + already_found_watchdog = True + + """ PLC Instance Tree: prog0 @@ -198,11 +211,6 @@ # "programs_declarations": "\n".join(["extern %(type)s %(C_path)s;" % # p for p in self._ProgramList]), - for CTNChild in self.GetCTR().IterChildren(): - if isinstance(CTNChild, SVGHMI): - maxConnectionsTotal += CTNChild.GetParamsAttributes("SVGHMI.MaxConnections")["value"] - - # C code to observe/access HMI tree variables svghmi_c_filepath = paths.AbsNeighbourFile(__file__, "svghmi.c") svghmi_c_file = open(svghmi_c_filepath, 'r')