ProjectController.py
changeset 1366 3756ae754713
parent 1365 debc97102b23
child 1376 f8acd48e0342
equal deleted inserted replaced
1365:debc97102b23 1366:3756ae754713
     5 import time
     5 import time
     6 import features
     6 import features
     7 import shutil
     7 import shutil
     8 import wx
     8 import wx
     9 import re, tempfile
     9 import re, tempfile
       
    10 from math import ceil
    10 from types import ListType
    11 from types import ListType
    11 from threading import Timer, Lock, Thread
    12 from threading import Timer, Lock, Thread
    12 from time import localtime
    13 from time import localtime
    13 from datetime import datetime
    14 from datetime import datetime
    14 from weakref import WeakKeyDictionary
    15 from weakref import WeakKeyDictionary
  1405 
  1406 
  1406     def DispatchDebugValuesProc(self, event):
  1407     def DispatchDebugValuesProc(self, event):
  1407         self.IECdebug_lock.acquire()
  1408         self.IECdebug_lock.acquire()
  1408         debug_ticks, buffers = self.SnapshotAndResetDebugValuesBuffers()
  1409         debug_ticks, buffers = self.SnapshotAndResetDebugValuesBuffers()
  1409         self.IECdebug_lock.release()
  1410         self.IECdebug_lock.release()
       
  1411         start_time = time.time()
  1410         if len(self.TracedIECPath) == len(buffers):
  1412         if len(self.TracedIECPath) == len(buffers):
  1411             for IECPath, values in zip(self.TracedIECPath, buffers):
  1413             for IECPath, values in zip(self.TracedIECPath, buffers):
  1412                 if len(values) > 0:
  1414                 if len(values) > 0:
  1413                     self.CallWeakcallables(IECPath, "NewValues", debug_ticks, values)
  1415                     self.CallWeakcallables(IECPath, "NewValues", debug_ticks, values)
  1414             if len(debug_ticks) > 0:
  1416             if len(debug_ticks) > 0:
  1415                 self.CallWeakcallables("__tick__", "NewDataAvailable", debug_ticks)
  1417                 self.CallWeakcallables("__tick__", "NewDataAvailable", debug_ticks)
       
  1418         
       
  1419         delay = time.time() - start_time
       
  1420         next_refresh = max(REFRESH_PERIOD - delay, 0.2 * delay)
       
  1421         if self.DispatchDebugValuesTimer is not None and self.DebugThread is not None:
       
  1422             self.DispatchDebugValuesTimer.Start(
       
  1423                 int(next_refresh * 1000), oneShot=True)
  1416         event.Skip()
  1424         event.Skip()
  1417 
  1425 
  1418     def KillDebugThread(self):
  1426     def KillDebugThread(self):
  1419         tmp_debugthread = self.DebugThread
  1427         tmp_debugthread = self.DebugThread
  1420         self.debug_break = True
  1428         self.debug_break = True
  1433         self.previous_plcstate = None
  1441         self.previous_plcstate = None
  1434         if self.AppFrame:
  1442         if self.AppFrame:
  1435             self.AppFrame.ResetGraphicViewers()
  1443             self.AppFrame.ResetGraphicViewers()
  1436         self.RegisterDebugVarToConnector()
  1444         self.RegisterDebugVarToConnector()
  1437         if self.DispatchDebugValuesTimer is not None:
  1445         if self.DispatchDebugValuesTimer is not None:
  1438             self.DispatchDebugValuesTimer.Start(int(REFRESH_PERIOD * 1000))
  1446             self.DispatchDebugValuesTimer.Start(
       
  1447                 int(REFRESH_PERIOD * 1000), oneShot=True)
  1439         if self.DebugThread is None:
  1448         if self.DebugThread is None:
  1440             self.DebugThread = Thread(target=self.DebugThreadProc)
  1449             self.DebugThread = Thread(target=self.DebugThreadProc)
  1441             self.DebugThread.start()
  1450             self.DebugThread.start()
  1442     
  1451     
  1443     def _Run(self):
  1452     def _Run(self):