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