py_ext/PythonFileCTNMixin.py
changeset 1878 fb73a6b6622d
parent 1853 47a3f39bead0
child 1897 62f9cae9a25f
equal deleted inserted replaced
1877:da5f1fa46f2b 1878:fb73a6b6622d
    97     def CTNGenerate_C(self, buildpath, locations):
    97     def CTNGenerate_C(self, buildpath, locations):
    98         # location string for that CTN
    98         # location string for that CTN
    99         location_str = "_".join(map(str, self.GetCurrentLocation()))
    99         location_str = "_".join(map(str, self.GetCurrentLocation()))
   100         configname = self.GetCTRoot().GetProjectConfigNames()[0]
   100         configname = self.GetCTRoot().GetProjectConfigNames()[0]
   101 
   101 
       
   102         def _onchangecode(var):
       
   103             return '"' + var.getonchange() + \
       
   104                 "('" + var.getname() + "')\"" \
       
   105                 if var.getonchange() else '""'
       
   106 
       
   107         def _onchange(var):
       
   108             return repr(var.getonchange()) \
       
   109                 if var.getonchange() else None
       
   110 
   102         pyextname = self.CTNName()
   111         pyextname = self.CTNName()
   103         varinfos = map(lambda variable: {
   112         varinfos = map(
   104             "name": variable.getname(),
   113             lambda variable: {
   105             "desc": repr(variable.getdesc()),
   114                 "name": variable.getname(),
   106             "onchangecode": '"' + variable.getonchange() +
   115                 "desc": repr(variable.getdesc()),
   107             "('" + variable.getname() + "')\""
   116                 "onchangecode": _onchangecode(variable),
   108             if variable.getonchange() else '""',
   117                 "onchange": _onchange(variable),
   109             "onchange": repr(variable.getonchange())
   118                 "opts": repr(variable.getopts()),
   110             if variable.getonchange() else None,
   119                 "configname": configname.upper(),
   111             "opts": repr(variable.getopts()),
   120                 "uppername": variable.getname().upper(),
   112             "configname": configname.upper(),
   121                 "IECtype": variable.gettype(),
   113             "uppername": variable.getname().upper(),
   122                 "pyextname": pyextname
   114             "IECtype": variable.gettype(),
   123             },
   115             "pyextname": pyextname},
   124             self.CodeFile.variables.variable)
   116                        self.CodeFile.variables.variable)
       
   117         # python side PLC global variables access stub
   125         # python side PLC global variables access stub
   118         globalstubs = "\n".join([
   126         globalstubs = "\n".join([
   119             """\
   127             """\
   120 _%(name)s_ctype, _%(name)s_unpack, _%(name)s_pack = \\
   128 _%(name)s_ctype, _%(name)s_unpack, _%(name)s_pack = \\
   121     TypeTranslator["%(IECtype)s"]
   129     TypeTranslator["%(IECtype)s"]
   248                             for varinfo in varinfos])
   256                             for varinfo in varinfos])
   249         varret = "\n".join([varretfmt % varinfo for varinfo in varinfos])
   257         varret = "\n".join([varretfmt % varinfo for varinfo in varinfos])
   250         varpub = "\n".join([(varpubonchangefmt if varinfo["onchange"] else
   258         varpub = "\n".join([(varpubonchangefmt if varinfo["onchange"] else
   251                              varpubfmt) % varinfo
   259                              varpubfmt) % varinfo
   252                             for varinfo in varinfos])
   260                             for varinfo in varinfos])
   253         varinit = "\n".join([varinitonchangefmt % dict(
   261         varinit = "\n".join([varinitonchangefmt %
   254                                 onchangelen=len(varinfo["onchangecode"]), **varinfo)
   262                              dict(onchangelen=len(varinfo["onchangecode"]), **varinfo)
   255                             for varinfo in varinfos if varinfo["onchange"]])
   263                              for varinfo in varinfos if varinfo["onchange"]])
   256 
   264 
   257         loc_dict = {
   265         loc_dict = {
   258             "vardec": vardec,
   266             "vardec": vardec,
   259             "varinit": varinit,
   267             "varinit": varinit,
   260             "varret": varret,
   268             "varret": varret,