--- a/ConfigTreeNode.py Thu Nov 07 16:40:48 2019 +0100
+++ b/ConfigTreeNode.py Wed Nov 13 11:21:04 2019 +0100
@@ -670,3 +670,14 @@
msg = _("Could not add child \"{a1}\", type {a2} :\n{a3}\n").format(a1=pname, a2=ptype, a3=text(exc))
self.GetCTRoot().logger.write_error(msg)
self.GetCTRoot().logger.write_error(traceback.format_exc())
+ def FatalError(self, message): + """ Raise an exception that will trigger error message intended to + the user, but without backtrace since it is not a software error """ + raise UserAddressedException(message) +class UserAddressedException(Exception): --- a/ProjectController.py Thu Nov 07 16:40:48 2019 +0100
+++ b/ProjectController.py Wed Nov 13 11:21:04 2019 +0100
@@ -63,7 +63,7 @@
from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer
from runtime import PlcStatus
-from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage
+from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage, UserAddressedException base_folder = paths.AbsParentDir(__file__)
@@ -1171,7 +1171,10 @@
LibCFilesAndCFLAGS, LibLDFLAGS, LibExtraFiles = self.GetLibrariesCCode(
+ except UserAddressedException as e: + self.logger.write_error(e.message) _("Runtime library extensions C code generation failed !\n"))
self.logger.write_error(traceback.format_exc())
@@ -1182,6 +1185,9 @@
CTNLocationCFilesAndCFLAGS, CTNLDFLAGS, CTNExtraFiles = self._Generate_C(
self.PLCGeneratedLocatedVars)
+ except UserAddressedException as e: + self.logger.write_error(e.message) _("Runtime IO extensions C code generation failed !\n"))