runtime/PLCObject.py
changeset 914 94436558f0ce
parent 911 ffa24427396a
child 917 401e44bae7c0
equal deleted inserted replaced
913:5d6a04abab3c 914:94436558f0ce
    63         self._FreePLC()
    63         self._FreePLC()
    64         self.daemon = daemon
    64         self.daemon = daemon
    65         self.statuschange = statuschange
    65         self.statuschange = statuschange
    66         self.hmi_frame = None
    66         self.hmi_frame = None
    67         self.website = website
    67         self.website = website
       
    68         self._loading_error = None
    68         
    69         
    69         # Get the last transfered PLC if connector must be restart
    70         # Get the last transfered PLC if connector must be restart
    70         try:
    71         try:
    71             self.CurrentPLCFilename=open(
    72             self.CurrentPLCFilename=open(
    72                              self._GetMD5FileName(),
    73                              self._GetMD5FileName(),
    84 
    85 
    85 
    86 
    86     def GetLogCount(self):
    87     def GetLogCount(self):
    87         if self._GetLogCount is not None :
    88         if self._GetLogCount is not None :
    88             return int(self._GetLogCount())
    89             return int(self._GetLogCount())
       
    90         elif self._loading_error is not None:
       
    91             return 1;
       
    92 
    89 
    93 
    90     def GetLogMessage(self, msgid):
    94     def GetLogMessage(self, msgid):
    91         maxsz = len(self._log_read_buffer)-1
    95         if self._GetLogMessage is not None:
    92         sz = self._GetLogMessage(msgid, self._log_read_buffer, maxsz)
    96             maxsz = len(self._log_read_buffer)-1
    93         if sz and sz <= maxsz:
    97             sz = self._GetLogMessage(msgid, self._log_read_buffer, maxsz)
    94             self._log_read_buffer[sz] = '\x00'
    98             if sz and sz <= maxsz:
    95             return self._log_read_buffer.value
    99                 self._log_read_buffer[sz] = '\x00'
    96         else :
   100                 return self._log_read_buffer.value
    97             return None
   101         elif self._loading_error is not None :
       
   102             return self._loading_error
       
   103         return None
    98 
   104 
    99     def _GetMD5FileName(self):
   105     def _GetMD5FileName(self):
   100         return os.path.join(self.workingdir, "lasttransferedPLC.md5")
   106         return os.path.join(self.workingdir, "lasttransferedPLC.md5")
   101 
   107 
   102     def _GetLibFileName(self):
   108     def _GetLibFileName(self):
   173             self._log_read_buffer = ctypes.create_string_buffer(1<<14) #16K
   179             self._log_read_buffer = ctypes.create_string_buffer(1<<14) #16K
   174             self._GetLogMessage = self.PLClibraryHandle.GetLogMessage
   180             self._GetLogMessage = self.PLClibraryHandle.GetLogMessage
   175             self._GetLogMessage.restype = ctypes.c_uint32
   181             self._GetLogMessage.restype = ctypes.c_uint32
   176             self._GetLogMessage.argtypes = [ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint32]
   182             self._GetLogMessage.argtypes = [ctypes.c_uint32, ctypes.c_char_p, ctypes.c_uint32]
   177 
   183 
       
   184             self._loading_error = None
   178             return True
   185             return True
   179         except:
   186         except:
   180             PLCprint(traceback.format_exc())
   187             self._loading_error = traceback.format_exc()
       
   188             PLCprint(self._loading_error)
   181             return False
   189             return False
   182 
   190 
   183     def _FreePLC(self):
   191     def _FreePLC(self):
   184         """
   192         """
   185         Unload PLC library.
   193         Unload PLC library.
   197         self._suspendDebug = lambda x:-1
   205         self._suspendDebug = lambda x:-1
   198         self._resumeDebug = lambda:None
   206         self._resumeDebug = lambda:None
   199         self._PythonIterator = lambda:""
   207         self._PythonIterator = lambda:""
   200         self._GetLogCount = None 
   208         self._GetLogCount = None 
   201         self._LogMessage = lambda m,s:PLCprint("OFF LOG :"+m)
   209         self._LogMessage = lambda m,s:PLCprint("OFF LOG :"+m)
   202         self._GetLogMessage = lambda i,b,s:None
   210         self._GetLogMessage = None
   203         self.PLClibraryHandle = None
   211         self.PLClibraryHandle = None
   204         # Unload library explicitely
   212         # Unload library explicitely
   205         if getattr(self,"_PLClibraryHandle",None) is not None:
   213         if getattr(self,"_PLClibraryHandle",None) is not None:
   206             dlclose(self._PLClibraryHandle)
   214             dlclose(self._PLClibraryHandle)
   207             self._PLClibraryHandle = None
   215             self._PLClibraryHandle = None