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, |