275 |
275 |
276 def PythonRuntimeInit(self): |
276 def PythonRuntimeInit(self): |
277 MethodNames = ["init", "start", "stop", "cleanup"] |
277 MethodNames = ["init", "start", "stop", "cleanup"] |
278 self.python_runtime_vars = globals().copy() |
278 self.python_runtime_vars = globals().copy() |
279 self.python_runtime_vars.update(self.pyruntimevars) |
279 self.python_runtime_vars.update(self.pyruntimevars) |
|
280 parent = self |
280 |
281 |
281 class PLCSafeGlobals(object): |
282 class PLCSafeGlobals(object): |
282 def __getattr__(_self, name): |
283 def __getattr__(self, name): |
283 try: |
284 try: |
284 t = self.python_runtime_vars["_"+name+"_ctype"] |
285 t = parent.python_runtime_vars["_"+name+"_ctype"] |
285 except KeyError: |
286 except KeyError: |
286 raise KeyError("Try to get unknown shared global variable : %s" % name) |
287 raise KeyError("Try to get unknown shared global variable : %s" % name) |
287 v = t() |
288 v = t() |
288 self.python_runtime_vars["_PySafeGetPLCGlob_"+name](ctypes.byref(v)) |
289 parent.python_runtime_vars["_PySafeGetPLCGlob_"+name](ctypes.byref(v)) |
289 return self.python_runtime_vars["_"+name+"_unpack"](v) |
290 return parent.python_runtime_vars["_"+name+"_unpack"](v) |
290 |
291 |
291 def __setattr__(_self, name, value): |
292 def __setattr__(self, name, value): |
292 try: |
293 try: |
293 t = self.python_runtime_vars["_"+name+"_ctype"] |
294 t = parent.python_runtime_vars["_"+name+"_ctype"] |
294 except KeyError: |
295 except KeyError: |
295 raise KeyError("Try to set unknown shared global variable : %s" % name) |
296 raise KeyError("Try to set unknown shared global variable : %s" % name) |
296 v = self.python_runtime_vars["_"+name+"_pack"](t, value) |
297 v = parent.python_runtime_vars["_"+name+"_pack"](t, value) |
297 self.python_runtime_vars["_PySafeSetPLCGlob_"+name](ctypes.byref(v)) |
298 parent.python_runtime_vars["_PySafeSetPLCGlob_"+name](ctypes.byref(v)) |
298 |
299 |
299 self.python_runtime_vars.update({ |
300 self.python_runtime_vars.update({ |
300 "PLCGlobals": PLCSafeGlobals(), |
301 "PLCGlobals": PLCSafeGlobals(), |
301 "WorkingDir": self.workingdir, |
302 "WorkingDir": self.workingdir, |
302 "PLCObject": self, |
303 "PLCObject": self, |