# HG changeset patch # User Laurent Bessard # Date 1367496384 -7200 # Node ID 5cd1f8df71aaebbd53fb4d755ec09667652be5c2 # Parent 43739c16a002cebcb48c55a204a5a06bc7ebc348 Fixed bug when transferring program and a output located variable is forced diff -r 43739c16a002 -r 5cd1f8df71aa IDEFrame.py --- a/IDEFrame.py Thu May 02 14:00:05 2013 +0200 +++ b/IDEFrame.py Thu May 02 14:06:24 2013 +0200 @@ -1970,7 +1970,7 @@ elif isinstance(editor, GraphicViewer): editor.ResetView(True) else: - editor.RefreshView() + editor.RegisterVariables() elif editor.IsDebugging(): editor.RegisterVariables() self.DebugVariablePanel.UnregisterObsoleteData() diff -r 43739c16a002 -r 5cd1f8df71aa ProjectController.py --- a/ProjectController.py Thu May 02 14:00:05 2013 +0200 +++ b/ProjectController.py Thu May 02 14:06:24 2013 +0200 @@ -1185,12 +1185,16 @@ def ReArmDebugRegisterTimer(self): if self.DebugTimer is not None: self.DebugTimer.cancel() - - # Timer to prevent rapid-fire when registering many variables - # use wx.CallAfter use keep using same thread. TODO : use wx.Timer instead - self.DebugTimer=Timer(0.5,wx.CallAfter,args = [self.RegisterDebugVarToConnector]) - # Rearm anti-rapid-fire timer - self.DebugTimer.start() + + # Prevent to call RegisterDebugVarToConnector when PLC is not started + # If an output location var is forced it's leads to segmentation fault in runtime + # Links between PLC located variables and real variables are not ready + if self.previous_plcstate == "Started": + # Timer to prevent rapid-fire when registering many variables + # use wx.CallAfter use keep using same thread. TODO : use wx.Timer instead + self.DebugTimer=Timer(0.5,wx.CallAfter,args = [self.RegisterDebugVarToConnector]) + # Rearm anti-rapid-fire timer + self.DebugTimer.start() def GetDebugIECVariableType(self, IECPath): Idx, IEC_Type = self._IECPathToIdx.get(IECPath,(None,None)) @@ -1235,7 +1239,7 @@ def UnsubscribeAllDebugIECVariable(self): self.IECdebug_lock.acquire() - IECdebug_data = {} + self.IECdebug_datas = {} self.IECdebug_lock.release() self.ReArmDebugRegisterTimer() diff -r 43739c16a002 -r 5cd1f8df71aa controls/DebugVariablePanel.py --- a/controls/DebugVariablePanel.py Thu May 02 14:00:05 2013 +0200 +++ b/controls/DebugVariablePanel.py Thu May 02 14:06:24 2013 +0200 @@ -1810,6 +1810,7 @@ self.Thaw() def UnregisterObsoleteData(self): + self.RegisterVariables() if USE_MPL: if self.DataProducer is not None: self.Ticktime = self.DataProducer.GetTicktime() diff -r 43739c16a002 -r 5cd1f8df71aa editors/Viewer.py --- a/editors/Viewer.py Thu May 02 14:00:05 2013 +0200 +++ b/editors/Viewer.py Thu May 02 14:06:24 2013 +0200 @@ -1041,7 +1041,11 @@ self.RefreshRect(self.GetScrolledRect(refresh_rect), False) else: DebugViewer.RefreshNewData(self) - + + def RegisterVariables(self): + DebugViewer.RegisterVariables(self) + self.RefreshView() + # Refresh Viewer elements def RefreshView(self, variablepanel=True, selection=None): EditorPanel.RefreshView(self, variablepanel) diff -r 43739c16a002 -r 5cd1f8df71aa graphics/GraphicCommons.py --- a/graphics/GraphicCommons.py Thu May 02 14:00:05 2013 +0200 +++ b/graphics/GraphicCommons.py Thu May 02 14:06:24 2013 +0200 @@ -327,7 +327,7 @@ if producer is not None: producer.SubscribeDebugIECVariable("__tick__", self) if self.DataProducer is not None: - self.DataProducer.UnsubscribeDebugIECVariable("__tick__", self) + self.DataProducer.UnsubscribeDebugIECVariable("__tick__", self) self.DataProducer = producer def IsDebugging(self): @@ -353,7 +353,8 @@ self.DataProducer.UnsubscribeDebugIECVariable(iec_path, consumer) def RegisterVariables(self): - pass + if self.RegisterTick and self.Debug and self.DataProducer is not None: + self.DataProducer.SubscribeDebugIECVariable("__tick__", self) def GetDataType(self, iec_path): if self.DataProducer is not None: