py_ext/PythonFileCTNMixin.py
changeset 1452 7a2b344de8cf
parent 1449 5f09fa31d7b0
child 1475 de4ee16f7c6c
equal deleted inserted replaced
1451:94e620cbd9de 1452:7a2b344de8cf
    72         configname = self.GetCTRoot().GetProjectConfigNames()[0]
    72         configname = self.GetCTRoot().GetProjectConfigNames()[0]
    73 
    73 
    74         pyextname = self.CTNName()
    74         pyextname = self.CTNName()
    75         varinfos = map(lambda variable : {
    75         varinfos = map(lambda variable : {
    76                     "name": variable.getname(),
    76                     "name": variable.getname(),
    77                     "desc" : repr(variable.getdesc()),   
    77                     "desc" : repr(variable.getdesc()),
    78                     "onchangecode" : '"'+variable.getonchange()+\
    78                     "onchangecode" : '"'+variable.getonchange()+\
    79                                          "('"+variable.getname()+"')\"" \
    79                                          "('"+variable.getname()+"')\"" \
    80                                      if variable.getonchange() else '""',
    80                                      if variable.getonchange() else '""',
    81                     "onchange" : repr(variable.getonchange()) \
    81                     "onchange" : repr(variable.getonchange()) \
    82                                  if variable.getonchange() else None,
    82                                  if variable.getonchange() else None,
   100     "%(name)s",
   100     "%(name)s",
   101     "%(IECtype)s",
   101     "%(IECtype)s",
   102     %(desc)s,
   102     %(desc)s,
   103     %(onchange)s,
   103     %(onchange)s,
   104     %(opts)s))
   104     %(opts)s))
   105 """ % varinfo 
   105 """ % varinfo
   106       for varinfo in varinfos])
   106       for varinfo in varinfos])
   107 
   107 
   108         # Runtime calls (start, stop, init, and cleanup)
   108         # Runtime calls (start, stop, init, and cleanup)
   109         rtcalls = ""
   109         rtcalls = ""
   110         for section in self.SECTIONS_NAMES:
   110         for section in self.SECTIONS_NAMES:
   128 ## Code for PLC global variable access
   128 ## Code for PLC global variable access
   129 from targets.typemapping import TypeTranslator
   129 from targets.typemapping import TypeTranslator
   130 import ctypes
   130 import ctypes
   131 _%(pyextname)sGlobalsDesc = []
   131 _%(pyextname)sGlobalsDesc = []
   132 __ext_name__ = "%(pyextname)s"
   132 __ext_name__ = "%(pyextname)s"
   133 PLCGlobalsDesc.append(( "_%(pyextname)s" , _%(pyextname)sGlobalsDesc ))
   133 PLCGlobalsDesc.append(( "%(pyextname)s" , _%(pyextname)sGlobalsDesc ))
   134 %(globalstubs)s
   134 %(globalstubs)s
   135 
   135 
   136 ## User code in "global" scope
   136 ## User code in "global" scope
   137 %(globalsection)s
   137 %(globalsection)s
   138 
   138 
   206         varinitonchangefmt = """\
   206         varinitonchangefmt = """\
   207     __%(name)s_notifier = __GET_GLOBAL_ON%(uppername)sCHANGE();
   207     __%(name)s_notifier = __GET_GLOBAL_ON%(uppername)sCHANGE();
   208     __SET_VAR(__%(name)s_notifier->,TRIG,,__BOOL_LITERAL(TRUE));
   208     __SET_VAR(__%(name)s_notifier->,TRIG,,__BOOL_LITERAL(TRUE));
   209     __SET_VAR(__%(name)s_notifier->,CODE,,__STRING_LITERAL(%(onchangelen)d,%(onchangecode)s));
   209     __SET_VAR(__%(name)s_notifier->,CODE,,__STRING_LITERAL(%(onchangelen)d,%(onchangecode)s));
   210 """
   210 """
   211         vardec = "\n".join([(vardecfmt + vardeconchangefmt 
   211         vardec = "\n".join([(vardecfmt + vardeconchangefmt
   212                              if varinfo["onchange"] else vardecfmt)% varinfo 
   212                              if varinfo["onchange"] else vardecfmt)% varinfo
   213                             for varinfo in varinfos])
   213                             for varinfo in varinfos])
   214         varret = "\n".join([varretfmt % varinfo for varinfo in varinfos])
   214         varret = "\n".join([varretfmt % varinfo for varinfo in varinfos])
   215         varpub = "\n".join([(varpubonchangefmt if varinfo["onchange"] else
   215         varpub = "\n".join([(varpubonchangefmt if varinfo["onchange"] else
   216                              varpubfmt) % varinfo
   216                              varpubfmt) % varinfo
   217                             for varinfo in varinfos])
   217                             for varinfo in varinfos])
   218         varinit = "\n".join([varinitonchangefmt % dict(
   218         varinit = "\n".join([varinitonchangefmt % dict(
   219                                 onchangelen = len(varinfo["onchangecode"]),**varinfo)
   219                                 onchangelen = len(varinfo["onchangecode"]),**varinfo)
   220                             for varinfo in varinfos if varinfo["onchange"]])
   220                             for varinfo in varinfos if varinfo["onchange"]])
   221 
   221 
       
   222         # TODO : use config name obtained from model instead of default
       
   223         # "config.h". User cannot change config name, but project imported
       
   224         # or created in older beremiz vesion could use different name.
   222         PyCFileContent = """\
   225         PyCFileContent = """\
   223 /*
   226 /*
   224  * Code generated by Beremiz py_ext confnode
   227  * Code generated by Beremiz py_ext confnode
   225  * for safe global variables access
   228  * for safe global variables access
   226  */
   229  */