runtime/PLCObject.py
changeset 699 6ff64cadb1ff
parent 690 ef60d7e188e6
child 717 1c23952dbde1
equal deleted inserted replaced
697:3e83853081d4 699:6ff64cadb1ff
    32     from _ctypes import FreeLibrary as dlclose
    32     from _ctypes import FreeLibrary as dlclose
    33 elif os.name == "posix":
    33 elif os.name == "posix":
    34     from _ctypes import dlopen, dlclose
    34     from _ctypes import dlopen, dlclose
    35 
    35 
    36 import traceback
    36 import traceback
       
    37 def get_last_traceback(tb):
       
    38     while tb.tb_next:
       
    39         tb = tb.tb_next
       
    40     return tb
    37 
    41 
    38 lib_ext ={
    42 lib_ext ={
    39      "linux2":".so",
    43      "linux2":".so",
    40      "win32":".dll",
    44      "win32":".dll",
    41      }.get(sys.platform, "")
    45      }.get(sys.platform, "")
   387                 return self.PLCStatus, tick.value, res
   391                 return self.PLCStatus, tick.value, res
   388             #elif size.value:
   392             #elif size.value:
   389                 #PLCprint("Debug error - wrong buffer unpack ! %d != %d"%(offset, size.value))
   393                 #PLCprint("Debug error - wrong buffer unpack ! %d != %d"%(offset, size.value))
   390         return self.PLCStatus, None, []
   394         return self.PLCStatus, None, []
   391 
   395 
       
   396     def RemoteExec(self, script, **kwargs):
       
   397         try:
       
   398             exec script in kwargs
       
   399         except:
       
   400             e_type, e_value, e_traceback = sys.exc_info()
       
   401             line_no = traceback.tb_lineno(get_last_traceback(e_traceback))
       
   402             return (-1, "RemoteExec script failed!\n\nLine %d: %s\n\t%s" % 
       
   403                         (line_no, e_value, script.splitlines()[line_no - 1]))
       
   404         return (0, kwargs.get("returnVal", None))
       
   405     
       
   406