--- a/IDEFrame.py Mon Aug 14 21:31:01 2017 +0300
+++ b/IDEFrame.py Mon Aug 14 22:23:17 2017 +0300
@@ -1593,9 +1593,9 @@
new_name = event.GetLabel()
if not TestIdentifier(new_name):
- message = _("\"%s\" is not a valid identifier!")%new_name
+ message = _("\"%s\" is not a valid identifier!") % new_name elif new_name.upper() in IEC_KEYWORDS:
- message = _("\"%s\" is a keyword. It can't be used!")%new_name
+ message = _("\"%s\" is a keyword. It can't be used!") % new_name old_name = self.ProjectTree.GetItemText(item)
@@ -1604,7 +1604,7 @@
self.Controler.SetProjectProperties(name = new_name)
elif item_infos["type"] == ITEM_DATATYPE:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectDataTypeNames() if name != old_name]:
- message = _("\"%s\" data type already exists!")%new_name
+ message = _("\"%s\" data type already exists!") % new_name self.Controler.ChangeDataTypeName(old_name, new_name)
@@ -1613,10 +1613,10 @@
elif item_infos["type"] == ITEM_POU:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames() if name != old_name]:
- message = _("\"%s\" pou already exists!")%new_name
+ message = _("\"%s\" pou already exists!") % new_name elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames()]:
- messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION)
+ messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?") % new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) if messageDialog.ShowModal() == wx.ID_NO:
@@ -1630,9 +1630,9 @@
pou_item = self.ProjectTree.GetItemParent(event.GetItem())
pou_name = self.ProjectTree.GetItemText(pou_item)
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
- message = _("A POU named \"%s\" already exists!")%new_name
+ message = _("A POU named \"%s\" already exists!") % new_name elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames(pou_name) if name != old_name]:
- message = _("A variable with \"%s\" as name already exists in this pou!")%new_name
+ message = _("A variable with \"%s\" as name already exists in this pou!") % new_name words = item_infos["tagname"].split("::")
self.Controler.ChangePouTransitionName(words[1], old_name, new_name)
@@ -1643,9 +1643,9 @@
pou_item = self.ProjectTree.GetItemParent(event.GetItem())
pou_name = self.ProjectTree.GetItemText(pou_item)
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
- message = _("A POU named \"%s\" already exists!")%new_name
+ message = _("A POU named \"%s\" already exists!") % new_name elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames(pou_name) if name != old_name]:
- message = _("A variable with \"%s\" as name already exists in this pou!")%new_name
+ message = _("A variable with \"%s\" as name already exists in this pou!") % new_name words = item_infos["tagname"].split("::")
self.Controler.ChangePouActionName(words[1], old_name, new_name)
@@ -1654,15 +1654,15 @@
elif item_infos["type"] == ITEM_CONFIGURATION:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames() if name != old_name]:
- message = _("\"%s\" config already exists!")%new_name
+ message = _("\"%s\" config already exists!") % new_name elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
- messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION)
+ messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?") % new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) if messageDialog.ShowModal() == wx.ID_NO:
elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames()]:
- messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION)
+ messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?") % new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) if messageDialog.ShowModal() == wx.ID_NO:
@@ -1673,15 +1673,15 @@
elif item_infos["type"] == ITEM_RESOURCE:
if new_name.upper() in [name.upper() for name in self.Controler.GetProjectConfigNames()]:
- message = _("\"%s\" config already exists!")%new_name
+ message = _("\"%s\" config already exists!") % new_name elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouNames()]:
- messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION)
+ messageDialog = wx.MessageDialog(self, _("There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?") % new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) if messageDialog.ShowModal() == wx.ID_NO:
elif new_name.upper() in [name.upper() for name in self.Controler.GetProjectPouVariableNames()]:
- messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?")%new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION)
+ messageDialog = wx.MessageDialog(self, _("A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?") % new_name, _("Error"), wx.YES_NO|wx.ICON_QUESTION) if messageDialog.ShowModal() == wx.ID_NO:
--- a/PLCGenerator.py Mon Aug 14 21:31:01 2017 +0300
+++ b/PLCGenerator.py Mon Aug 14 22:23:17 2017 +0300
@@ -62,7 +62,7 @@
- compute += "%s%s\n"%(indent, line)
+ compute += "%s%s\n" % (indent, line) @@ -114,9 +114,9 @@
def ComputeValue(self, value, var_type):
base_type = self.Controler.GetBaseType(var_type)
if base_type == "STRING" and not value.startswith("'") and not value.endswith("'"):
elif base_type == "WSTRING" and not value.startswith('"') and not value.endswith('"'):
+ return "\"%s\"" % value # Generate a data type from its name
@@ -154,9 +154,9 @@
max_value = basetype_content.range.getupper()
datatype_def += [(basetype_name, (tagname, "base")),
- ("%s"%min_value, (tagname, "lower")),
+ ("%s" % min_value, (tagname, "lower")), - ("%s"%max_value, (tagname, "upper")),
+ ("%s" % max_value, (tagname, "upper")), # Data type is an enumerated type
elif basetype_content_type == "enum":
@@ -178,9 +178,9 @@
# Array derived directly from an elementary type
basetype_name = base_type_type.upper()
- dimensions = [[("%s"%dimension.getlower(), (tagname, "range", i, "lower")),
+ dimensions = [[("%s" % dimension.getlower(), (tagname, "range", i, "lower")), - ("%s"%dimension.getupper(), (tagname, "range", i, "upper"))]
+ ("%s" % dimension.getupper(), (tagname, "range", i, "upper"))] for i, dimension in enumerate(basetype_content.getdimension())]
datatype_def += [("ARRAY [", ())]
datatype_def += JoinList([(",", ())], dimensions)
@@ -251,12 +251,12 @@
program = pou_program.GenerateProgram(pou)
- raise PLCGenException, _("Undefined pou type \"%s\"")%pou_type
+ raise PLCGenException, _("Undefined pou type \"%s\"") % pou_type # Generate a POU defined and used in text
def GeneratePouProgramInText(self, text):
for pou_name in self.PouComputed.keys():
- model = re.compile("(?:^|[^0-9^A-Z])%s(?:$|[^0-9^A-Z])"%pou_name.upper())
+ model = re.compile("(?:^|[^0-9^A-Z])%s(?:$|[^0-9^A-Z])" % pou_name.upper()) if model.search(text) is not None:
self.GeneratePouProgram(pou_name)
@@ -423,7 +423,7 @@
resrce += [("PRIORITY := ", ()),
- ("%d"%task.getpriority(), (tagname, "task", task_number, "priority")),
+ ("%d" % task.getpriority(), (tagname, "task", task_number, "priority")), @@ -826,7 +826,7 @@
if block_infos is not None:
self.ComputeBlockInputTypes(instance, block_infos, body)
- raise PLCGenException, _("No informations found for \"%s\" block")%(instance.gettypeName())
+ raise PLCGenException, _("No informations found for \"%s\" block") % (instance.gettypeName()) previous_tagname = self.TagName
for action in pou.getactionList():
@@ -1075,9 +1075,9 @@
parameter = variable.getformalParameter()
if not inout_variables.has_key(parameter) and parameter in output_names + ["", "ENO"]:
if variable.getformalParameter() == "":
- variable_name = "%s%d"%(type, block.getlocalId())
+ variable_name = "%s%d" % (type, block.getlocalId()) - variable_name = "%s%d_%s"%(type, block.getlocalId(), parameter)
+ variable_name = "%s%d_%s" % (type, block.getlocalId(), parameter) if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] is not None or self.Interface[-1][2]:
self.Interface.append(("VAR", None, False, []))
if variable.connectionPointOut in self.ConnectionTypes:
@@ -1086,7 +1086,7 @@
self.Interface[-1][3].append(("ANY", variable_name, None, None))
if len(output_variables) > 1 and parameter not in ["", "OUT"]:
vars.append([(parameter, (self.TagName, "block", block.getlocalId(), "output", i)),
- (" => %s"%variable_name, ())])
+ (" => %s" % variable_name, ())]) output_info = (self.TagName, "block", block.getlocalId(), "output", i)
output_name = variable_name
@@ -1159,17 +1159,17 @@
output_value = inout_variables[output_parameter]
if output_parameter == "":
- output_name = "%s%d"%(type, block.getlocalId())
+ output_name = "%s%d" % (type, block.getlocalId()) - output_name = "%s%d_%s"%(type, block.getlocalId(), output_parameter)
+ output_name = "%s%d_%s" % (type, block.getlocalId(), output_parameter) output_value = [(output_name, output_info)]
return self.ExtractModifier(output_variable, output_value, output_info)
if block_infos["type"] == "functionBlock":
output_info = (self.TagName, "block", block.getlocalId(), "output", output_idx)
- output_name = self.ExtractModifier(output_variable, [("%s.%s"%(name, output_parameter), output_info)], output_info)
+ output_name = self.ExtractModifier(output_variable, [("%s.%s" % (name, output_parameter), output_info)], output_info) - variable_name = "%s_%s"%(name, output_parameter)
+ variable_name = "%s_%s" % (name, output_parameter) if not self.IsAlreadyDefined(variable_name):
if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] is not None or self.Interface[-1][2]:
self.Interface.append(("VAR", None, False, []))
@@ -1179,7 +1179,7 @@
self.Interface[-1][3].append(("ANY", variable_name, None, None))
self.Program += [(self.CurrentIndent, ()),
- ("%s := "%variable_name, ())]
+ ("%s := " % variable_name, ())] self.Program += output_name
self.Program += [(";\n", ())]
return [(variable_name, ())]
@@ -1315,15 +1315,15 @@
if self.Interface[-1][0] != "VAR" or self.Interface[-1][1] is not None or self.Interface[-1][2]:
self.Interface.append(("VAR", None, False, []))
- name = "%s%d"%(edge, i)
+ name = "%s%d" % (edge, i) while self.IsAlreadyDefined(name):
- name = "%s%d"%(edge, i)
+ name = "%s%d" % (edge, i) self.Interface[-1][3].append((edge, name, None, None))
self.Program += [(self.CurrentIndent, ()), (name, var_info), ("(CLK := ", ())]
self.Program += expression
self.Program += [(");\n", ())]
- return [("%s.Q"%name, var_info)]
+ return [("%s.Q" % name, var_info)] def ExtractDivergenceInput(self, divergence, pou):
connectionPointIn = divergence.getconnectionPointIn()
@@ -1441,7 +1441,7 @@
if action["type"] == "reference":
self.GenerateSFCAction(action["value"], pou)
- action_name = "%s_INLINE%d"%(step_name.upper(), self.GetActionNumber())
+ action_name = "%s_INLINE%d" % (step_name.upper(), self.GetActionNumber()) self.SFCNetworks["Actions"][action_name] = ([(self.CurrentIndent, ()),
(action["value"], (self.TagName, "action_block", action_infos["id"], "action", i, "inline")),
@@ -1488,7 +1488,7 @@
self.SFCNetworks["Transitions"][transition] = transition_infos
transitionValues = transition.getconditionContent()
if transitionValues["type"] == "inline":
- transition_infos["content"] = [("\n%s:= "%self.CurrentIndent, ()),
+ transition_infos["content"] = [("\n%s:= " % self.CurrentIndent, ()), (transitionValues["value"], (self.TagName, "transition", transition.getlocalId(), "inline")),
elif transitionValues["type"] == "reference":
@@ -1511,7 +1511,7 @@
if connections is not None:
expression = self.ComputeExpression(transitionBody, connections)
if expression is not None:
- transition_infos["content"] = [("\n%s:= "%self.CurrentIndent, ())] + expression + [(";\n", ())]
+ transition_infos["content"] = [("\n%s:= " % self.CurrentIndent, ())] + expression + [(";\n", ())] self.SFCComputedBlocks += self.Program
if not transition_infos.has_key("content"):
@@ -1525,7 +1525,7 @@
if connections is not None:
expression = self.ComputeExpression(body, connections)
if expression is not None:
- transition_infos["content"] = [("\n%s:= "%self.CurrentIndent, ())] + expression + [(";\n", ())]
+ transition_infos["content"] = [("\n%s:= " % self.CurrentIndent, ())] + expression + [(";\n", ())] self.SFCComputedBlocks += self.Program
@@ -1564,7 +1564,7 @@
(action_infos["indicator"], action_info + ("indicator",))]
self.Program += [(");\n", ())]
- self.Program += [("%sEND_STEP\n\n"%self.CurrentIndent, ())]
+ self.Program += [("%sEND_STEP\n\n" % self.CurrentIndent, ())] self.ComputeSFCAction(action)
for transition in step_infos["transitions"]:
@@ -1573,19 +1573,19 @@
def ComputeSFCAction(self, action_name):
if action_name in self.SFCNetworks["Actions"].keys():
action_content, action_info = self.SFCNetworks["Actions"].pop(action_name)
- self.Program += [("%sACTION "%self.CurrentIndent, ()),
+ self.Program += [("%sACTION " % self.CurrentIndent, ()), (action_name, action_info),
self.Program += action_content
- self.Program += [("%sEND_ACTION\n\n"%self.CurrentIndent, ())]
+ self.Program += [("%sEND_ACTION\n\n" % self.CurrentIndent, ())] def ComputeSFCTransition(self, transition):
if transition in self.SFCNetworks["Transitions"].keys():
transition_infos = self.SFCNetworks["Transitions"].pop(transition)
- self.Program += [("%sTRANSITION"%self.CurrentIndent, ())]
+ self.Program += [("%sTRANSITION" % self.CurrentIndent, ())] if transition_infos["priority"] != None:
self.Program += [(" (PRIORITY := ", ()),
- ("%d"%transition_infos["priority"], (self.TagName, "transition", transition_infos["id"], "priority")),
+ ("%d" % transition_infos["priority"], (self.TagName, "transition", transition_infos["id"], "priority")), self.Program += [(" FROM ", ())]
if len(transition_infos["from"]) > 1:
@@ -1610,7 +1610,7 @@
format(a1 = transition_infos["content"], a2 = self.Name)
raise PLCGenException, msg
self.Program += transition_infos["content"]
- self.Program += [("%sEND_TRANSITION\n\n"%self.CurrentIndent, ())]
+ self.Program += [("%sEND_TRANSITION\n\n" % self.CurrentIndent, ())] for [(step_name, step_infos)] in transition_infos["to"]:
self.ComputeSFCStep(step_name)
@@ -1619,22 +1619,22 @@
self.ComputeConnectionTypes(pou)
- program = [("%s "%self.Type, ()),
+ program = [("%s " % self.Type, ()), (self.Name, (self.TagName, "name"))]
if self.ReturnType is not None:
(self.ReturnType, (self.TagName, "return"))]
if len(self.Interface) == 0:
- raise PLCGenException, _("No variable defined in \"%s\" POU")%self.Name
+ raise PLCGenException, _("No variable defined in \"%s\" POU") % self.Name if len(self.Program) == 0 :
- raise PLCGenException, _("No body defined in \"%s\" POU")%self.Name
+ raise PLCGenException, _("No body defined in \"%s\" POU") % self.Name for list_type, option, located, variables in self.Interface:
variable_type = errorVarTypes.get(list_type, "var_local")
- program += [(" %s"%list_type, ())]
+ program += [(" %s" % list_type, ())] - program += [(" %s"%option, (self.TagName, variable_type, (var_number, var_number + len(variables)), option.lower()))]
+ program += [(" %s" % option, (self.TagName, variable_type, (var_number, var_number + len(variables)), option.lower()))] for var_type, var_name, var_address, var_initial in variables:
@@ -1655,7 +1655,7 @@
program += [(" END_VAR\n", ())]
- program += [("END_%s\n\n"%self.Type, ())]
+ program += [("END_%s\n\n" % self.Type, ())] def GenerateCurrentProgram(controler, project, errors, warnings):
--- a/ProjectController.py Mon Aug 14 21:31:01 2017 +0300
+++ b/ProjectController.py Mon Aug 14 22:23:17 2017 +0300
@@ -134,7 +134,7 @@
def findSupportedOptions(self):
- buildcmd = "\"%s\" -h"%(self.getCmd())
+ buildcmd = "\"%s\" -h" % (self.getCmd()) options =["-f", "-l", "-p"]
@@ -566,7 +566,7 @@
if len(self.Libraries)==0:
self.GetIECProgramsAndVariables()
- LibIECCflags = '"-I%s" -Wno-unused-function'%os.path.abspath(self.GetIECLibPath())
+ LibIECCflags = '"-I%s" -Wno-unused-function' % os.path.abspath(self.GetIECLibPath()) for lib in self.Libraries:
@@ -709,10 +709,10 @@
self.logger.write_warning(_("Warnings in ST/IL/SFC code generator :\n"))
- self.logger.write_warning("%s\n"%warning)
+ self.logger.write_warning("%s\n" % warning) - self.logger.write_error(_("Error in ST/IL/SFC code generator :\n%s\n")%errors[0])
+ self.logger.write_error(_("Error in ST/IL/SFC code generator :\n%s\n") % errors[0]) plc_file = open(self._getIECcodepath(), "w")
# Add ST Library from confnodes
@@ -736,7 +736,7 @@
def _Compile_ST_to_SoftPLC(self):
self.logger.write(_("Compiling IEC Program into C code...\n"))
buildpath = self._getBuildPath()
- buildcmd = "\"%s\" %s -I \"%s\" -T \"%s\" \"%s\""%(
+ buildcmd = "\"%s\" %s -I \"%s\" -T \"%s\" \"%s\"" % ( @@ -781,7 +781,7 @@
- self.logger.write_error(_("Error : IEC to C compiler returned %d\n")%status)
+ self.logger.write_error(_("Error : IEC to C compiler returned %d\n") % status) # Now extract C files of stdout
@@ -808,7 +808,7 @@
# Keep track of generated C files for later use by self.CTNGenerate_C
self.PLCGeneratedCFiles = C_files
- self.plcCFLAGS = '"-I%s" -Wno-unused-function'%iec2c_cfg.getLibCPath()
+ self.plcCFLAGS = '"-I%s" -Wno-unused-function' % iec2c_cfg.getLibCPath() @@ -962,25 +962,25 @@
for v in self._DbgVariablesList :
sz = DebugTypesSize.get(v["type"], 0)
+ "{&(%(C_path)s), " % v+ {"EXT":"%(type)s_P_ENUM",
- "VAR":"%(type)s_ENUM"}[v["vartype"]]%v +
+ "VAR":"%(type)s_ENUM"}[v["vartype"]] % v + debug_code = targets.GetCode("plc_debug.c") % {
- "\n".join(["extern %(type)s %(C_path)s;"%p for p in self._ProgramList]),
+ "\n".join(["extern %(type)s %(C_path)s;" % p for p in self._ProgramList]), "extern_variables_declarations":"\n".join([
{"EXT":"extern __IEC_%(type)s_p %(C_path)s;",
"IN":"extern __IEC_%(type)s_p %(C_path)s;",
"MEM":"extern __IEC_%(type)s_p %(C_path)s;",
"OUT":"extern __IEC_%(type)s_p %(C_path)s;",
"VAR":"extern __IEC_%(type)s_t %(C_path)s;",
- "FB":"extern %(type)s %(C_path)s;"}[v["vartype"]]%v
+ "FB":"extern %(type)s %(C_path)s;"}[v["vartype"]] % v for v in self._VariablesList if v["C_path"].find('.')<0]),
"variable_decl_array": ",\n".join(variable_decl_array)
@@ -1004,19 +1004,19 @@
"int __init_%(s)s(int argc,char **argv);\n"+
"void __cleanup_%(s)s(void);\n"+
"void __retrieve_%(s)s(void);\n"+
- "void __publish_%(s)s(void);")%{'s':locstr} for locstr in locstrs]),
+ "void __publish_%(s)s(void);") % {'s':locstr} for locstr in locstrs]), "retrieve_calls":"\n ".join([
- "__retrieve_%s();"%locstr for locstr in locstrs]),
+ "__retrieve_%s();" % locstr for locstr in locstrs]), "publish_calls":"\n ".join([ #Call publish in reverse order
- "__publish_%s();"%locstrs[i-1] for i in xrange(len(locstrs), 0, -1)]),
+ "__publish_%s();" % locstrs[i-1] for i in xrange(len(locstrs), 0, -1)]), "init_calls":"\n ".join([
- "init_level=%d; "%(i+1)+
- "if((res = __init_%s(argc,argv))){"%locstr +
+ "init_level=%d; " % (i+1)+ + "if((res = __init_%s(argc,argv))){" % locstr + #"printf(\"%s\"); "%locstr + #for debug
"return res;}" for i,locstr in enumerate(locstrs)]),
"cleanup_calls":"\n ".join([
- "if(init_level >= %d) "%i+
- "__cleanup_%s();"%locstrs[i-1] for i in xrange(len(locstrs), 0, -1)])
+ "if(init_level >= %d) " % i+ + "__cleanup_%s();" % locstrs[i-1] for i in xrange(len(locstrs), 0, -1)]) plc_main_code = targets.GetCode("plc_main_head.c") % {
@@ -1410,9 +1410,9 @@
if IEC_Type in DebugTypesSize:
Idxs.append((Idx, IEC_Type, fvalue, IECPath))
- self.logger.write_warning(_("Debug: Unsupported type to debug '%s'\n")%IEC_Type)
+ self.logger.write_warning(_("Debug: Unsupported type to debug '%s'\n") % IEC_Type) - self.logger.write_warning(_("Debug: Unknown variable '%s'\n")%IECPath)
+ self.logger.write_warning(_("Debug: Unknown variable '%s'\n") % IECPath) for IECPathToPop in IECPathsToPop:
self.IECdebug_datas.pop(IECPathToPop)
@@ -1728,13 +1728,13 @@
self._SetConnector(connectors.ConnectorFactory(uri, self))
- self.logger.write_error(_("Exception while connecting %s!\n")%uri)
+ self.logger.write_error(_("Exception while connecting %s!\n") % uri) self.logger.write_error(traceback.format_exc())
# Did connection success ?
if self._connector is None:
- self.logger.write_error(_("Connection failed to %s!\n")%uri)
+ self.logger.write_error(_("Connection failed to %s!\n") % uri) self.ShowMethod("_Connect", False)
self.ShowMethod("_Disconnect", True)
--- a/canfestival/canfestival.py Mon Aug 14 21:31:01 2017 +0300
+++ b/canfestival/canfestival.py Mon Aug 14 22:23:17 2017 +0300
@@ -72,7 +72,7 @@
"IEC_type": IECTypeConversion.get(typeinfos["name"]),
"var_name": "%s_%4.4x_%2.2x" % ("_".join(name.split()), index, subindex),
- "location": "%s%s"%(SizeConversion[size], ".".join(map(str, current_location +
+ "location": "%s%s" % (SizeConversion[size], ".".join(map(str, current_location + @@ -219,16 +219,16 @@
current_location = self.GetCurrentLocation()
# define a unique name for the generated C file
prefix = "_".join(map(str, current_location))
- Gen_OD_path = os.path.join(buildpath, "OD_%s.c"%prefix )
+ Gen_OD_path = os.path.join(buildpath, "OD_%s.c" % prefix ) # Create a new copy of the model
slave = self.GetCurrentNodeCopy()
- slave.SetNodeName("OD_%s"%prefix)
+ slave.SetNodeName("OD_%s" % prefix) # allow access to local OD from Slave PLC
pointers = config_utils.LocalODPointers(locations, current_location, slave)
res = gen_cfile.GenerateFile(Gen_OD_path, slave, pointers)
- res = eds_utils.GenerateEDSFile(os.path.join(buildpath, "Slave_%s.eds"%prefix), slave)
+ res = eds_utils.GenerateEDSFile(os.path.join(buildpath, "Slave_%s.eds" % prefix), slave) return [(Gen_OD_path,local_canfestival_config.getCFLAGS(CanFestivalPath))],"",False
@@ -433,10 +433,10 @@
current_location = self.GetCurrentLocation()
# define a unique name for the generated C file
prefix = "_".join(map(str, current_location))
- Gen_OD_path = os.path.join(buildpath, "OD_%s.c"%prefix )
+ Gen_OD_path = os.path.join(buildpath, "OD_%s.c" % prefix ) # Create a new copy of the model with DCF loaded with PDO mappings for desired location
- master, pointers = config_utils.GenerateConciseDCF(locations, current_location, self, self.CanFestivalNode.getSync_TPDOs(),"OD_%s"%prefix)
+ master, pointers = config_utils.GenerateConciseDCF(locations, current_location, self, self.CanFestivalNode.getSync_TPDOs(),"OD_%s" % prefix) except config_utils.PDOmappingException, e:
raise Exception, e.message
@@ -527,68 +527,68 @@
child_data = getattr(child, "CanFestivalNode")
- format_dict["nodes_init"] += 'NODE_MASTER_INIT(%s, %s)\n '%(
+ format_dict["nodes_init"] += 'NODE_MASTER_INIT(%s, %s)\n ' % ( if child_data.getSync_TPDOs():
- format_dict["nodes_send_sync"] += 'NODE_SEND_SYNC(%s)\n '%(nodename)
- format_dict["nodes_proceed_sync"] += 'NODE_PROCEED_SYNC(%s)\n '%(nodename)
+ format_dict["nodes_send_sync"] += 'NODE_SEND_SYNC(%s)\n ' % (nodename) + format_dict["nodes_proceed_sync"] += 'NODE_PROCEED_SYNC(%s)\n ' % (nodename) # initialize and declare node boot status variables for post_SlaveBootup lookup
SlaveIDs = child.GetSlaveIDs()
# define post_SlaveBootup lookup functions
format_dict["slavebootups"] += (
- "static void %s_post_SlaveBootup(CO_Data* d, UNS8 nodeId){}\n"%(nodename))
+ "static void %s_post_SlaveBootup(CO_Data* d, UNS8 nodeId){}\n" % (nodename)) format_dict["slavebootups"] += (
- "static void %s_post_SlaveBootup(CO_Data* d, UNS8 nodeId){\n"%(nodename)+
+ "static void %s_post_SlaveBootup(CO_Data* d, UNS8 nodeId){\n" % (nodename)+ " check_and_start_node(d, nodeId);\n"+
# register previously declared func as post_SlaveBootup callback for that node
format_dict["slavebootup_register"] += (
- "%s_Data.post_SlaveBootup = %s_post_SlaveBootup;\n"%(nodename,nodename))
+ "%s_Data.post_SlaveBootup = %s_post_SlaveBootup;\n" % (nodename,nodename)) format_dict["pre_op"] += (
- "static void %s_preOperational(CO_Data* d){\n "%(nodename)+
- "".join([" masterSendNMTstateChange(d, %d, NMT_Reset_Comunication);\n"%NdId for NdId in SlaveIDs])+
+ "static void %s_preOperational(CO_Data* d){\n " % (nodename)+ + "".join([" masterSendNMTstateChange(d, %d, NMT_Reset_Comunication);\n" % NdId for NdId in SlaveIDs])+ format_dict["pre_op_register"] += (
- "%s_Data.preOperational = %s_preOperational;\n"%(nodename,nodename))
+ "%s_Data.preOperational = %s_preOperational;\n" % (nodename,nodename)) align = child_data.getSync_Align()
align_ratio=child_data.getSync_Align_Ratio()
format_dict["post_sync"] += (
- "static int %s_CalCount = 0;\n"%(nodename)+
- "static void %s_post_sync(CO_Data* d){\n"%(nodename)+
- " if(%s_CalCount < %d){\n"%(nodename, align)+
- " %s_CalCount++;\n"%(nodename)+
+ "static int %s_CalCount = 0;\n" % (nodename)+ + "static void %s_post_sync(CO_Data* d){\n" % (nodename)+ + " if(%s_CalCount < %d){\n" % (nodename, align)+ + " %s_CalCount++;\n" % (nodename)+ - " align_tick(%d);\n"%(align_ratio)+
+ " align_tick(%d);\n" % (align_ratio)+ format_dict["post_sync_register"] += (
- "%s_Data.post_sync = %s_post_sync;\n"%(nodename,nodename))
- format_dict["nodes_init"] += 'NODE_SLAVE_INIT(%s, %s)\n '%(
+ "%s_Data.post_sync = %s_post_sync;\n" % (nodename,nodename)) + format_dict["nodes_init"] += 'NODE_SLAVE_INIT(%s, %s)\n ' % ( # Include generated OD headers
- format_dict["nodes_includes"] += '#include "%s.h"\n'%(nodename)
+ format_dict["nodes_includes"] += '#include "%s.h"\n' % (nodename) # Declare CAN channels according user filled config
- format_dict["board_decls"] += 'BOARD_DECL(%s, "%s", "%s")\n'%(
+ format_dict["board_decls"] += 'BOARD_DECL(%s, "%s", "%s")\n' % ( child_data.getCAN_Baudrate())
- format_dict["nodes_open"] += 'NODE_OPEN(%s)\n '%(nodename)
- format_dict["nodes_close"] += 'NODE_CLOSE(%s)\n '%(nodename)
- format_dict["nodes_stop"] += 'NODE_STOP(%s)\n '%(nodename)
+ format_dict["nodes_open"] += 'NODE_OPEN(%s)\n ' % (nodename) + format_dict["nodes_close"] += 'NODE_CLOSE(%s)\n ' % (nodename) + format_dict["nodes_stop"] += 'NODE_STOP(%s)\n ' % (nodename) filename = paths.AbsNeighbourFile(__file__,"cf_runtime.c")
cf_main = open(filename).read() % format_dict
- cf_main_path = os.path.join(buildpath, "CF_%(locstr)s.c"%format_dict)
+ cf_main_path = os.path.join(buildpath, "CF_%(locstr)s.c" % format_dict) f = open(cf_main_path,'w')
--- a/canfestival/config_utils.py Mon Aug 14 21:31:01 2017 +0300
+++ b/canfestival/config_utils.py Mon Aug 14 22:23:17 2017 +0300
@@ -254,7 +254,7 @@
if nodeDCF != None and nodeDCF != '':
tmpnbparams = [i for i in nodeDCF[:4]]
- nbparams += int(''.join(["%2.2x"%ord(i) for i in tmpnbparams]), 16)
+ nbparams += int(''.join(["%2.2x" % ord(i) for i in tmpnbparams]), 16) data = nodeDCF[4:] + data
@@ -546,7 +546,7 @@
- indexname = "%s%s%s_%d"%(VariableDirText[variable_infos["pdotype"]],
+ indexname = "%s%s%s_%d" % (VariableDirText[variable_infos["pdotype"]], variable_infos["sizelocation"],
'_'.join(map(str,current_location)),
variable_infos["nodeid"])
@@ -572,9 +572,9 @@
if mapvariableidx < VariableStartIndex[variable_infos["pdotype"]] + 0x2000:
if variable_infos["bit"] != None:
- subindexname = "%(index)d_%(subindex)d_%(bit)d"%variable_infos
+ subindexname = "%(index)d_%(subindex)d_%(bit)d" % variable_infos - subindexname = "%(index)d_%(subindex)d"%variable_infos
+ subindexname = "%(index)d_%(subindex)d" % variable_infos # If entry have just been created, no subentry have to be added
self.Manager.AddSubentriesToCurrent(mapvariableidx, 1, self.MasterNode)
@@ -590,7 +590,7 @@
self.MasterNode.SetEntry(current_idx + 0x200, subindex, value)
# Add variable to pointed variables
- self.PointedVariables[(mapvariableidx, nbsubentries)] = "%s_%s"%(indexname, subindexname)
+ self.PointedVariables[(mapvariableidx, nbsubentries)] = "%s_%s" % (indexname, subindexname) def GenerateConciseDCF(locations, current_location, nodelist, sync_TPDOs, nodename):
@@ -668,7 +668,7 @@
Reset the reference result of config_utils test.
Use with caution. Be sure that config_utils
is currently working properly.
# Boolean that indicate if reference result must be redefined
@@ -720,7 +720,7 @@
masternode, pointedvariables = GenerateConciseDCF(locations, (0, 1), nodelist, True, "TestNode")
except ValueError, message:
- print "%s\nTest Failed!"%message
+ print "%s\nTest Failed!" % message --- a/editors/Viewer.py Mon Aug 14 21:31:01 2017 +0300
+++ b/editors/Viewer.py Mon Aug 14 22:23:17 2017 +0300
@@ -231,10 +231,10 @@
- message = _("Invalid value \"%s\" for viewer block")%data
+ message = _("Invalid value \"%s\" for viewer block") % data if not isinstance(values, TupleType):
- message = _("Invalid value \"%s\" for viewer block")%data
+ message = _("Invalid value \"%s\" for viewer block") % data @@ -244,7 +244,7 @@
elif values[1] in ["function", "functionBlock"]:
words = tagname.split("::")
if pou_name == values[0]:
- message = _("\"%s\" can't use itself!")%pou_name
+ message = _("\"%s\" can't use itself!") % pou_name elif pou_type == "function" and values[1] != "function":
message = _("Function Blocks can't be used in Functions!")
elif self.ParentWindow.Controler.PouIsUsedBy(pou_name, values[0], self.ParentWindow.Debug):
@@ -258,9 +258,9 @@
if values[1] != "function" and blockname == "":
blockname = self.ParentWindow.GenerateNewName(blocktype=values[0])
if blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
- message = _("\"%s\" pou already exists!")%blockname
+ message = _("\"%s\" pou already exists!") % blockname elif blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]:
- message = _("\"%s\" element for this pou already exists!")%blockname
+ message = _("\"%s\" element for this pou already exists!") % blockname id = self.ParentWindow.GetNewId()
block = FBD_Block(self.ParentWindow, values[0], blockname, id, inputs = blockinputs)
@@ -313,7 +313,7 @@
elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
- message = _("\"%s\" pou already exists!")%var_name
+ message = _("\"%s\" pou already exists!") % var_name elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]:
@@ -328,7 +328,7 @@
self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel()
self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type)
- message = _("\"%s\" element for this pou already exists!")%var_name
+ message = _("\"%s\" element for this pou already exists!") % var_name elif values[1] == "NamedConstant":
if pou_type == "program":
@@ -343,7 +343,7 @@
elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
- message = _("\"%s\" pou already exists!")%var_name
+ message = _("\"%s\" pou already exists!") % var_name elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]:
@@ -352,7 +352,7 @@
self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel()
self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type)
- message = _("\"%s\" element for this pou already exists!")%var_name
+ message = _("\"%s\" element for this pou already exists!") % var_name elif values[1] == "Global":
dlg = wx.TextEntryDialog(
@@ -365,14 +365,14 @@
elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
- message = _("\"%s\" pou already exists!")%var_name
+ message = _("\"%s\" pou already exists!") % var_name elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]:
self.ParentWindow.Controler.AddEditedElementPouExternalVar(tagname, values[2], var_name)
self.ParentWindow.RefreshVariablePanel()
self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel()
self.ParentWindow.AddVariableBlock(x, y, scaling, INPUT, var_name, values[2])
- message = _("\"%s\" element for this pou already exists!")%var_name
+ message = _("\"%s\" element for this pou already exists!") % var_name elif values[1] == "Constant":
self.ParentWindow.AddVariableBlock(x, y, scaling, INPUT, values[0], None)
elif values[3] == tagname:
@@ -991,14 +991,14 @@
blockname = block.GetName()
connectorname = element.GetName()
- iec_path = "%s.%s.%s"%(instance_path, blockname, connectorname)
+ iec_path = "%s.%s.%s" % (instance_path, blockname, connectorname) - iec_path = "%s.%s%d"%(instance_path, block.GetType(), block.GetId())
+ iec_path = "%s.%s%d" % (instance_path, block.GetType(), block.GetId()) - iec_path = "%s.%s%d_%s"%(instance_path, block.GetType(), block.GetId(), connectorname)
+ iec_path = "%s.%s%d_%s" % (instance_path, block.GetType(), block.GetId(), connectorname) elif isinstance(block, FBD_Variable):
- iec_path = "%s.%s"%(instance_path, block.GetName())
+ iec_path = "%s.%s" % (instance_path, block.GetName()) elif isinstance(block, FBD_Connector):
connection = self.GetConnectorByName(block.GetName())
if connection is not None:
@@ -1006,14 +1006,14 @@
if len(connector.Wires) == 1:
iec_path = self.GetElementIECPath(connector.Wires[0][0])
elif isinstance(element, LD_Contact):
- iec_path = "%s.%s"%(instance_path, element.GetName())
+ iec_path = "%s.%s" % (instance_path, element.GetName()) elif isinstance(element, SFC_Step):
- iec_path = "%s.%s.X"%(instance_path, element.GetName())
+ iec_path = "%s.%s.X" % (instance_path, element.GetName()) elif isinstance(element, SFC_Transition):
connectors = element.GetConnectors()
previous_steps = self.GetPreviousSteps(connectors["inputs"])
next_steps = self.GetNextSteps(connectors["outputs"])
- iec_path = "%s.%s->%s"%(instance_path, ",".join(previous_steps), ",".join(next_steps))
+ iec_path = "%s.%s->%s" % (instance_path, ",".join(previous_steps), ",".join(next_steps)) def GetWireModifier(self, wire):
@@ -1883,7 +1883,7 @@
def OnEditBlockMenu(self, event):
if self.SelectedElement is not None:
- self.ParentWindow.EditProjectElement(ITEM_POU, "P::%s"%self.SelectedElement.GetType())
+ self.ParentWindow.EditProjectElement(ITEM_POU, "P::%s" % self.SelectedElement.GetType()) def OnAdjustBlockSizeMenu(self, event):
if self.SelectedElement is not None:
@@ -2238,7 +2238,7 @@
}.get(self.Controler.GetPouType(instance_type))
if pou_type is not None and instance_type in self.Controler.GetProjectPouNames(self.Debug):
self.ParentWindow.OpenDebugViewer(pou_type,
- "%s.%s"%(self.GetInstancePath(True), self.SelectedElement.GetName()),
+ "%s.%s" % (self.GetInstancePath(True), self.SelectedElement.GetName()), self.Controler.ComputePouName(instance_type))
iec_path = self.GetElementIECPath(self.SelectedElement)
--- a/plcopen/plcopen.py Mon Aug 14 21:31:01 2017 +0300
+++ b/plcopen/plcopen.py Mon Aug 14 22:23:17 2017 +0300
@@ -219,16 +219,16 @@
time_values.extend([int(seconds), int((seconds % 1) * 1000000)])
- text += "%dh"%time_values[0]
+ text += "%dh" % time_values[0] - text += "%dm"%time_values[1]
+ text += "%dm" % time_values[1] - text += "%ds"%time_values[2]
+ text += "%ds" % time_values[2] if time_values[3] % 1000 != 0:
- text += "%.3fms"%(float(time_values[3]) / 1000)
+ text += "%.3fms" % (float(time_values[3]) / 1000) - text += "%dms"%(time_values[3] / 1000)
+ text += "%dms" % (time_values[3] / 1000) task.set("interval", text)
# Update resources pou instance attributes
@@ -417,7 +417,7 @@
def appenddataType(self, name):
if self.getdataType(name) is not None:
- raise ValueError, "\"%s\" Data Type already exists !!!"%name
+ raise ValueError, "\"%s\" Data Type already exists !!!" % name self.types.appenddataTypeElement(name)
setattr(cls, "appenddataType", appenddataType)
@@ -884,7 +884,7 @@
- raise ValueError, _("\"%s\" Data Type doesn't exist !!!")%name
+ raise ValueError, _("\"%s\" Data Type doesn't exist !!!") % name setattr(cls, "removedataTypeElement", removedataTypeElement)
def getpouElements(self):
@@ -902,7 +902,7 @@
def appendpouElement(self, name, pou_type, body_type):
for element in self.pous.getpou():
if TextMatched(element.getname(), name):
- raise ValueError, _("\"%s\" POU already exists !!!")%name
+ raise ValueError, _("\"%s\" POU already exists !!!") % name new_pou = PLCOpenParser.CreateElement("pou", "pous")
self.pous.appendpou(new_pou)
@@ -923,7 +923,7 @@
- raise ValueError, _("\"%s\" POU doesn't exist !!!")%name
+ raise ValueError, _("\"%s\" POU doesn't exist !!!") % name setattr(cls, "removepouElement", removepouElement)
def Search(self, criteria, parent_infos=[]):
@@ -1101,7 +1101,7 @@
if body_type in ["IL", "ST", "LD", "FBD", "SFC"]:
self.body[0].setcontent(PLCOpenParser.CreateElement(body_type, "body"))
- raise ValueError, "%s isn't a valid body type!"%type
+ raise ValueError, "%s isn't a valid body type!" % type setattr(cls, "setbodyType", setbodyType)
@@ -1321,7 +1321,7 @@
- raise ValueError, _("Transition with name %s doesn't exist!")%name
+ raise ValueError, _("Transition with name %s doesn't exist!") % name setattr(cls, "removetransition", removetransition)
def addaction(self, name, body_type):
@@ -1362,7 +1362,7 @@
- raise ValueError, _("Action with name %s doesn't exist!")%name
+ raise ValueError, _("Action with name %s doesn't exist!") % name setattr(cls, "removeaction", removeaction)
def updateElementName(self, old_name, new_name):
@@ -1454,7 +1454,7 @@
if body_type in ["IL", "ST", "LD", "FBD", "SFC"]:
self.body.setcontent(PLCOpenParser.CreateElement(body_type, "body"))
- raise ValueError, "%s isn't a valid body type!"%type
+ raise ValueError, "%s isn't a valid body type!" % type return self.body.getcontent().getLocalTag()
@@ -1648,14 +1648,14 @@
if self.content.getLocalTag() in ["LD","FBD","SFC"]:
self.content.appendcontent(instance)
- raise TypeError, _("%s body don't have instances!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have instances!") % self.content.getLocalTag() setattr(cls, "appendcontentInstance", appendcontentInstance)
def getcontentInstances(self):
if self.content.getLocalTag() in ["LD","FBD","SFC"]:
return self.content.getcontent()
- raise TypeError, _("%s body don't have instances!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have instances!") % self.content.getLocalTag() setattr(cls, "getcontentInstances", getcontentInstances)
instance_by_id_xpath = PLCOpen_XPath("*[@localId=$localId]")
@@ -1667,7 +1667,7 @@
- raise TypeError, _("%s body don't have instances!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have instances!") % self.content.getLocalTag() setattr(cls, "getcontentInstance", getcontentInstance)
def getcontentInstancesIds(self):
@@ -1675,7 +1675,7 @@
return OrderedDict([(instance.getlocalId(), True)
for instance in self.content])
- raise TypeError, _("%s body don't have instances!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have instances!") % self.content.getLocalTag() setattr(cls, "getcontentInstancesIds", getcontentInstancesIds)
def getcontentInstanceByName(self, name):
@@ -1685,7 +1685,7 @@
- raise TypeError, _("%s body don't have instances!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have instances!") % self.content.getLocalTag() setattr(cls, "getcontentInstanceByName", getcontentInstanceByName)
def removecontentInstance(self, local_id):
@@ -1694,30 +1694,30 @@
self.content.remove(instance[0])
- raise ValueError, _("Instance with id %d doesn't exist!")%id
+ raise ValueError, _("Instance with id %d doesn't exist!") % id - raise TypeError, "%s body don't have instances!"%self.content.getLocalTag()
+ raise TypeError, "%s body don't have instances!" % self.content.getLocalTag() setattr(cls, "removecontentInstance", removecontentInstance)
if self.content.getLocalTag() in ["IL","ST"]:
self.content.setanyText(text)
- raise TypeError, _("%s body don't have text!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have text!") % self.content.getLocalTag() setattr(cls, "settext", settext)
if self.content.getLocalTag() in ["IL","ST"]:
return self.content.getanyText()
- raise TypeError, _("%s body don't have text!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have text!") % self.content.getLocalTag() setattr(cls, "gettext", gettext)
def hasblock(self, block_type):
if self.content.getLocalTag() in ["IL","ST"]:
return self.content.hasblock(block_type)
- raise TypeError, _("%s body don't have text!")%self.content.getLocalTag()
+ raise TypeError, _("%s body don't have text!") % self.content.getLocalTag() setattr(cls, "hasblock", hasblock)
def updateElementName(self, old_name, new_name):
@@ -2415,7 +2415,7 @@
- raise ValueError, _("\"%s\" is an invalid value!")%value
+ raise ValueError, _("\"%s\" is an invalid value!") % value cls = PLCOpenParser.GetElementClass("arrayValue", "value")
@@ -2449,10 +2449,10 @@
value = element.getvalue()
- values.append("%s(%s)"%(repetition, value))
+ values.append("%s(%s)" % (repetition, value)) values.append(element.getvalue())
- return "[%s]"%", ".join(values)
+ return "[%s]" % ", ".join(values) setattr(cls, "getvalue", getvalue)
cls = PLCOpenParser.GetElementClass("structValue", "value")
@@ -2475,6 +2475,6 @@
for element in self.value:
- values.append("%s := %s"%(element.getmember(), element.getvalue()))
- return "(%s)"%", ".join(values)
+ values.append("%s := %s" % (element.getmember(), element.getvalue())) + return "(%s)" % ", ".join(values) setattr(cls, "getvalue", getvalue)
--- a/runtime/PLCObject.py Mon Aug 14 21:31:01 2017 +0300
+++ b/runtime/PLCObject.py Mon Aug 14 22:23:17 2017 +0300
@@ -264,7 +264,7 @@
Calls init, start, stop or cleanup method provided by
runtime python files, loaded when new PLC uploaded
- for method in self.python_runtime_vars.get("_runtime_%s"%methodname, []):
+ for method in self.python_runtime_vars.get("_runtime_%s" % methodname, []): res,exp = self.evaluator(method)
self.LogMessage(0,'\n'.join(traceback.format_exception(*exp)))
@@ -279,7 +279,7 @@
t = self.python_runtime_vars["_"+name+"_ctype"]
- raise KeyError("Try to get unknown shared global variable : %s"%name)
+ raise KeyError("Try to get unknown shared global variable : %s" % name) r = self.python_runtime_vars["_PySafeGetPLCGlob_"+name](ctypes.byref(v))
return self.python_runtime_vars["_"+name+"_unpack"](v)
@@ -287,7 +287,7 @@
t = self.python_runtime_vars["_"+name+"_ctype"]
- raise KeyError("Try to set unknown shared global variable : %s"%name)
+ raise KeyError("Try to set unknown shared global variable : %s" % name) v = self.python_runtime_vars["_"+name+"_pack"](t,value)
self.python_runtime_vars["_PySafeSetPLCGlob_"+name](ctypes.byref(v))
@@ -299,7 +299,7 @@
for methodname in MethodNames :
- self.python_runtime_vars["_runtime_%s"%methodname] = []
+ self.python_runtime_vars["_runtime_%s" % methodname] = [] filenames = os.listdir(self.workingdir)
@@ -311,7 +311,7 @@
for methodname in MethodNames:
method = self.python_runtime_vars.get("_%s_%s" % (name, methodname), None)
- self.python_runtime_vars["_runtime_%s"%methodname].append(method)
+ self.python_runtime_vars["_runtime_%s" % methodname].append(method) self.LogMessage(0,traceback.format_exc())
@@ -346,14 +346,14 @@
result,exp = self.evaluator(eval,AST,self.python_runtime_vars)
res = "#EXCEPTION : "+str(exp[1])
- self.LogMessage(1,('PyEval@0x%x(Code="%s") Exception "%s"')%(FBID,cmd,
+ self.LogMessage(1,('PyEval@0x%x(Code="%s") Exception "%s"') % (FBID,cmd, '\n'.join(traceback.format_exception(*exp))))
self.python_runtime_vars["FBID"]=None
res = "#EXCEPTION : "+str(e)
- self.LogMessage(1,('PyEval@0x%x(Code="%s") Exception "%s"')%(FBID,cmd,str(e)))
+ self.LogMessage(1,('PyEval@0x%x(Code="%s") Exception "%s"') % (FBID,cmd,str(e))) if self.CurrentPLCFilename is not None and self.PLCStatus == "Stopped":
@@ -411,7 +411,7 @@
- self.LogMessage("NewPLC (%s)"%md5sum)
+ self.LogMessage("NewPLC (%s)" % md5sum)