--- a/PLCControler.py Thu Jan 18 14:24:44 2018 +0300
+++ b/PLCControler.py Wed Jan 31 16:31:01 2018 +0300
@@ -42,6 +42,7 @@
from PLCGenerator import *
duration_model = re.compile("(?:([0-9]{1,2})h)?(?:([0-9]{1,2})m(?!s))?(?:([0-9]{1,2})s)?(?:([0-9]{1,3}(?:\.[0-9]*)?)ms)?")
+VARIABLE_NAME_SUFFIX_MODEL = re.compile('(\d+)$')
ITEMS_EDITABLE = [
ITEM_PROJECT,
@@ -2332,6 +2333,14 @@
return text
def GenerateNewName(self, tagname, name, format, start_idx=0, exclude=None, debug=False):
+ if name is not None:
+ result = re.search(VARIABLE_NAME_SUFFIX_MODEL, name)
+ if result is not None:
+ format = name[:result.start(1)] + '%d'
+ start_idx = int(result.group(1))
+ else:
+ format = name + '%d'
+
names = {} if exclude is None else exclude.copy()
if tagname is not None:
names.update(dict([(varname.upper(), True)
@@ -2347,6 +2356,14 @@
PLCOpenParser.GetElementClass("connector", "commonObjects"),
PLCOpenParser.GetElementClass("continuation", "commonObjects"))):
names[instance.getname().upper()] = True
+ elif words[0] == 'R':
+ element = self.GetEditedElement(tagname, debug)
+ for task in element.gettask():
+ names[task.getname().upper()] = True
+ for instance in task.getpouInstance():
+ names[instance.getname().upper()] = True
+ for instance in element.getpouInstance():
+ names[instance.getname().upper()] = True
else:
project = self.GetProject(debug)
if project is not None:
--- a/editors/ResourceEditor.py Thu Jan 18 14:24:44 2018 +0300
+++ b/editors/ResourceEditor.py Wed Jan 31 16:31:01 2018 +0300
@@ -303,7 +303,8 @@
self.RefreshHighlightsTimer = wx.Timer(self, -1)
self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
- self.TasksDefaultValue = {"Name": "", "Triggering": "", "Single": "", "Interval": "", "Priority": 0}
+ self.TasksDefaultValue = {"Name": "task0", "Triggering": "Cyclic",
+ "Single": "", "Interval": "T#20ms", "Priority": 0}
self.TasksTable = ResourceTable(self, [], GetTasksTableColnames())
self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT])
self.TasksTable.SetColSizes([200, 100, 100, 150, 100])
@@ -314,7 +315,15 @@
"Down": self.DownTaskButton})
def _AddTask(new_row):
- self.TasksTable.InsertRow(new_row, self.TasksDefaultValue.copy())
+ if new_row > 0:
+ row_content = self.TasksTable.data[new_row-1].copy()
+ old_name = row_content['Name']
+ row_content['Name'] =\
+ self.Controler.GenerateNewName(self.TagName, old_name, old_name+'%d')
+ else:
+ row_content = self.TasksDefaultValue.copy()
+
+ self.TasksTable.InsertRow(new_row, row_content)
self.RefreshModel()
self.RefreshView()
return new_row
@@ -338,7 +347,7 @@
self.TasksTable.ResetView(self.TasksGrid)
self.TasksGrid.RefreshButtons()
- self.InstancesDefaultValue = {"Name": "", "Type": "", "Task": ""}
+ self.InstancesDefaultValue = {"Name": "instance0", "Type": "", "Task": ""}
self.InstancesTable = ResourceTable(self, [], GetInstancesTableColnames())
self.InstancesTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT])
self.InstancesTable.SetColSizes([200, 150, 150])
@@ -349,7 +358,15 @@
"Down": self.DownInstanceButton})
def _AddInstance(new_row):
- self.InstancesTable.InsertRow(new_row, self.InstancesDefaultValue.copy())
+ if new_row > 0:
+ row_content = self.InstancesTable.data[new_row - 1].copy()
+ old_name = row_content['Name']
+ row_content['Name'] =\
+ self.Controler.GenerateNewName(self.TagName, old_name, old_name+'%d')
+ else:
+ row_content = self.InstancesDefaultValue.copy()
+
+ self.InstancesTable.InsertRow(new_row, row_content)
self.RefreshModel()
self.RefreshView()
return new_row