apply constraints to names for tasks and task instances in resource configuration
authorAndrey Skvortsov <andrej.skvortzov@gmail.com>
Thu, 09 Mar 2017 15:35:19 +0300
changeset 1657 3a98027ff372
parent 1656 bb5440697405
child 1658 ba6a6d6e989c
apply constraints to names for tasks and task instances in resource configuration

The same rules as for IEC identifiers are applied.
- no non-lating characters, ...
- no IEC keywords
- check for duplicate names in resource configuration

closes #19
editors/ResourceEditor.py
i18n/Beremiz_ru_RU.po
i18n/messages.pot
locale/ru_RU/LC_MESSAGES/Beremiz.mo
--- a/editors/ResourceEditor.py	Thu Mar 09 13:01:28 2017 +0500
+++ b/editors/ResourceEditor.py	Thu Mar 09 15:35:19 2017 +0300
@@ -31,7 +31,7 @@
 from dialogs.DurationEditorDialog import IEC_TIME_MODEL
 from EditorPanel import EditorPanel
 from util.BitmapLibrary import GetBitmap
-
+from plcopen.structures import LOCATIONDATATYPES, TestIdentifier, IEC_KEYWORDS, DefaultType
 #-------------------------------------------------------------------------------
 #                          Configuration Editor class
 #-------------------------------------------------------------------------------
@@ -108,7 +108,7 @@
     def GetValue(self, row, col):
         if row < self.GetNumberRows():
             colname = self.GetColLabelValue(col, False)
-            value = str(self.data[row].get(colname, ""))
+            value = self.data[row].get(colname, "")
             if colname == "Triggering":
                 return _(value)
             return value
@@ -432,9 +432,28 @@
         self.TasksGrid.RefreshButtons()
         self.InstancesGrid.RefreshButtons()
 
+    def ShowErrorMessage(self, message):
+        dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
+        dialog.ShowModal()
+        dialog.Destroy()
+
     def OnTasksGridCellChange(self, event):
         row, col = event.GetRow(), event.GetCol()
         if self.TasksTable.GetColLabelValue(col, False) == "Name":
+            value = self.TasksTable.GetValue(row, col)
+            message = None
+
+            if not TestIdentifier(value):
+                message = _("\"%s\" is not a valid identifier!") % value
+            elif value.upper() in IEC_KEYWORDS:
+                message = _("\"%s\" is a keyword. It can't be used!") % value
+            elif value.upper() in [var["Name"].upper() for i, var in enumerate(self.TasksTable.data) if i!=row]:
+                message = _("A task with the same name already exists!")
+            if message is not None:
+                event.Veto()
+                wx.CallAfter(self.ShowErrorMessage, message)
+                return
+
             tasklist = [name for name in self.TaskList.split(",") if name != ""]
             for i in xrange(self.TasksTable.GetNumberRows()):
                 task = self.TasksTable.GetValueByName(i, "Name")
@@ -454,6 +473,22 @@
         event.Skip()
 
     def OnInstancesGridCellChange(self, event):
+        row, col = event.GetRow(), event.GetCol()
+        if self.InstancesTable.GetColLabelValue(col, False) == "Name":
+            value = self.InstancesTable.GetValue(row, col)
+            message = None
+
+            if not TestIdentifier(value):
+                message = _("\"%s\" is not a valid identifier!") % value
+            elif value.upper() in IEC_KEYWORDS:
+                message = _("\"%s\" is a keyword. It can't be used!") % value
+            elif value.upper() in [var["Name"].upper() for i ,var in enumerate(self.InstancesTable.data) if i!=row]:
+                message = _("An instance with the same name already exists!")
+            if message is not None:
+                event.Veto()
+                wx.CallAfter(self.ShowErrorMessage, message)
+                return
+
         self.RefreshModel()
         self.ParentWindow.RefreshPouInstanceVariablesPanel()
         self.InstancesGrid.RefreshButtons()
--- a/i18n/Beremiz_ru_RU.po	Thu Mar 09 13:01:28 2017 +0500
+++ b/i18n/Beremiz_ru_RU.po	Thu Mar 09 15:35:19 2017 +0300
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: Beremiz\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-01-12 14:39+0300\n"
-"PO-Revision-Date: 2017-01-12 14:41+0300\n"
+"POT-Creation-Date: 2017-03-09 15:28+0300\n"
+"PO-Revision-Date: 2017-03-09 15:30+0300\n"
 "Last-Translator: Andrey Skvortsov <andrej.skvortzov@gmail.com>\n"
 "Language-Team: Andrey Skvortsov <andrej.skvortzov@gmail.com>\n"
 "Language: ru_RU\n"
@@ -72,7 +72,7 @@
 msgid " and %s"
 msgstr "и %s"
 
-#: ../ProjectController.py:1089
+#: ../ProjectController.py:1110
 msgid " generation failed !\n"
 msgstr "неудачная генерация кода!\n"
 
@@ -96,7 +96,7 @@
 msgid "\"%s\" can't use itself!"
 msgstr "\"%s\" не может использовать сам себя!!!"
 
-#: ../IDEFrame.py:1652 ../IDEFrame.py:1671
+#: ../IDEFrame.py:1651 ../IDEFrame.py:1670
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr "Конфигурация \"%s\"  уже существует!!!"
@@ -106,7 +106,7 @@
 msgid "\"%s\" configuration already exists !!!"
 msgstr "Конфигурация \"%s\"  уже существует!!!"
 
-#: ../IDEFrame.py:1602
+#: ../IDEFrame.py:1601
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr "Тип данных \"%s\"  уже существует!!!"
@@ -128,9 +128,10 @@
 #: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:106
 #: ../dialogs/BlockPreviewDialog.py:207 ../dialogs/PouNameDialog.py:50
 #: ../dialogs/PouActionDialog.py:98 ../dialogs/PouDialog.py:120
+#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484
 #: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:584
-#: ../editors/CodeFileEditor.py:770 ../controls/VariablePanel.py:751
-#: ../IDEFrame.py:1593
+#: ../editors/CodeFileEditor.py:770 ../controls/VariablePanel.py:763
+#: ../IDEFrame.py:1592
 #, python-format
 msgid "\"%s\" is a keyword. It can't be used!"
 msgstr "\"%s\" является ключевым словом и не может быть использован!"
@@ -148,13 +149,14 @@
 #: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:104
 #: ../dialogs/BlockPreviewDialog.py:203 ../dialogs/PouNameDialog.py:48
 #: ../dialogs/PouActionDialog.py:96 ../dialogs/PouDialog.py:118
+#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482
 #: ../editors/DataTypeEditor.py:579 ../editors/CodeFileEditor.py:768
-#: ../controls/VariablePanel.py:749 ../IDEFrame.py:1591
+#: ../controls/VariablePanel.py:761 ../IDEFrame.py:1590
 #, python-format
 msgid "\"%s\" is not a valid identifier!"
 msgstr "\"%s\" неверный идентификатор!"
 
-#: ../IDEFrame.py:2396
+#: ../IDEFrame.py:2395
 #, python-format
 msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
 msgstr "\"%s\" используется более чем одним POU. Продолжить?"
@@ -164,7 +166,7 @@
 #: ../editors/Viewer.py:367 ../editors/TextViewer.py:270
 #: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350
 #: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338
-#: ../IDEFrame.py:1611
+#: ../IDEFrame.py:1610
 #, python-format
 msgid "\"%s\" pou already exists!"
 msgstr "POU \"%s\" уже существует!"
@@ -279,8 +281,8 @@
 msgid "&Add Element"
 msgstr "&Добавить элемент"
 
-#: ../dialogs/AboutDialog.py:65 ../dialogs/AboutDialog.py:113
-#: ../dialogs/AboutDialog.py:150
+#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121
+#: ../dialogs/AboutDialog.py:158
 msgid "&Close"
 msgstr "&Закрыть"
 
@@ -316,7 +318,7 @@
 msgid "&Help"
 msgstr "&Помощь"
 
-#: ../dialogs/AboutDialog.py:64
+#: ../dialogs/AboutDialog.py:72
 msgid "&License"
 msgstr "&Лицензия"
 
@@ -402,15 +404,15 @@
 msgid "1s"
 msgstr "1 сек"
 
-#: ../dialogs/PouDialog.py:124 ../IDEFrame.py:1614 ../IDEFrame.py:1660
-#: ../IDEFrame.py:1679
+#: ../dialogs/PouDialog.py:124 ../IDEFrame.py:1613 ../IDEFrame.py:1659
+#: ../IDEFrame.py:1678
 #, python-format
 msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr "В POU присутствует элемент с именем \"%s\". Это может вызвать конфликт. Хотите продолжить?"
 
 #: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:108
 #: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:100
-#: ../controls/VariablePanel.py:753 ../IDEFrame.py:1628 ../IDEFrame.py:1641
+#: ../controls/VariablePanel.py:765 ../IDEFrame.py:1627 ../IDEFrame.py:1640
 #, python-format
 msgid "A POU named \"%s\" already exists!"
 msgstr "POU с именем \"%s\" уже существует!"
@@ -424,8 +426,12 @@
 msgid "A location must be selected!"
 msgstr "Необходимо выбрать размещение!"
 
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:755
-#: ../IDEFrame.py:1630 ../IDEFrame.py:1643
+#: ../editors/ResourceEditor.py:451
+msgid "A task with the same name already exists!"
+msgstr "Задача с таким именем уже существует!"
+
+#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:767
+#: ../IDEFrame.py:1629 ../IDEFrame.py:1642
 #, python-format
 msgid "A variable with \"%s\" as name already exists in this pou!"
 msgstr "Переменная с именем \"%s\" уже существует в этом POU!"
@@ -435,7 +441,7 @@
 msgid "A variable with \"%s\" as name already exists!"
 msgstr "Переменная с именем \"%s\" уже существует!"
 
-#: ../dialogs/AboutDialog.py:40 ../PLCOpenEditor.py:158 ../Beremiz.py:381
+#: ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:158 ../Beremiz.py:381
 msgid "About"
 msgstr "О программе"
 
@@ -447,7 +453,7 @@
 msgid "Action"
 msgstr "Действие"
 
-#: ../editors/Viewer.py:555 ../editors/Viewer.py:2345
+#: ../editors/Viewer.py:555 ../editors/Viewer.py:2356
 msgid "Action Block"
 msgstr "Блок действия"
 
@@ -472,7 +478,7 @@
 msgid "Actions:"
 msgstr "Действия:"
 
-#: ../editors/Viewer.py:1100
+#: ../editors/Viewer.py:1110
 msgid "Active"
 msgstr "Активный"
 
@@ -481,7 +487,7 @@
 msgid "Add"
 msgstr "Добавить"
 
-#: ../IDEFrame.py:1890 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1889 ../IDEFrame.py:1924
 msgid "Add Action"
 msgstr "Добавить действие"
 
@@ -489,11 +495,11 @@
 msgid "Add C code accessing located variables synchronously"
 msgstr "Добавить C-код с синхронным доступом к локальным переменным"
 
-#: ../IDEFrame.py:1873
+#: ../IDEFrame.py:1872
 msgid "Add Configuration"
 msgstr "Добавить конфигурацию"
 
-#: ../IDEFrame.py:1853
+#: ../IDEFrame.py:1852
 msgid "Add DataType"
 msgstr "Добавить тип данных"
 
@@ -505,7 +511,7 @@
 msgid "Add IP"
 msgstr "Добавить IP адрес"
 
-#: ../IDEFrame.py:1861
+#: ../IDEFrame.py:1860
 msgid "Add POU"
 msgstr "Добавить POU"
 
@@ -513,11 +519,11 @@
 msgid "Add Python code executed asynchronously"
 msgstr "Добавить асинхронно вызываемый код на Python"
 
-#: ../IDEFrame.py:1901 ../IDEFrame.py:1951
+#: ../IDEFrame.py:1900 ../IDEFrame.py:1950
 msgid "Add Resource"
 msgstr "Добавить ресурс"
 
-#: ../IDEFrame.py:1879 ../IDEFrame.py:1922
+#: ../IDEFrame.py:1878 ../IDEFrame.py:1921
 msgid "Add Transition"
 msgstr "Добавить переход"
 
@@ -529,7 +535,7 @@
 msgid "Add a new initial step"
 msgstr "Добавить новый исходный шаг"
 
-#: ../editors/Viewer.py:2706 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2717 ../editors/SFCViewer.py:770
 msgid "Add a new jump"
 msgstr "Добавить новый безусловный переход"
 
@@ -577,7 +583,7 @@
 msgid "Adjust Block Size"
 msgstr "Скорректировать размер элемента"
 
-#: ../editors/Viewer.py:1637
+#: ../editors/Viewer.py:1648
 msgid "Alignment"
 msgstr "Выравнивание"
 
@@ -593,7 +599,7 @@
 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
 msgstr "Все файлы  (*.*)|*.*|CSV files (*.csv)|*.csv"
 
-#: ../ProjectController.py:1623
+#: ../ProjectController.py:1644
 msgid "Already connected. Please disconnect\n"
 msgstr "Уже подключен. Пожалуйста, отключитесь сначала.\n"
 
@@ -602,6 +608,10 @@
 msgid "An element named \"%s\" already exists in this structure!"
 msgstr "Поле с именем \"%s\" уже существует в данной структуре!"
 
+#: ../editors/ResourceEditor.py:486
+msgid "An instance with the same name already exists!"
+msgstr "Экземпляр задачи с таким именем уже существует!"
+
 #: ../dialogs/ConnectionDialog.py:96
 msgid "Apply name modification to all continuations with the same name"
 msgstr "Переименовать все цепи с тем же самым именем"
@@ -623,7 +633,7 @@
 msgstr "Математика"
 
 #: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:635
-#: ../controls/VariablePanel.py:829
+#: ../controls/VariablePanel.py:841
 msgid "Array"
 msgstr "Массив"
 
@@ -668,7 +678,7 @@
 msgid "Base Type:"
 msgstr "Базовый тип:"
 
-#: ../editors/DataTypeEditor.py:625 ../controls/VariablePanel.py:787
+#: ../editors/DataTypeEditor.py:625 ../controls/VariablePanel.py:799
 msgid "Base Types"
 msgstr "Базовые типы"
 
@@ -710,7 +720,7 @@
 msgid "Bitwise inverting"
 msgstr "Битовое НЕ"
 
-#: ../editors/Viewer.py:525 ../editors/Viewer.py:2358
+#: ../editors/Viewer.py:525 ../editors/Viewer.py:2369
 msgid "Block"
 msgstr "Блок"
 
@@ -726,7 +736,7 @@
 msgid "Bottom"
 msgstr "Низ"
 
-#: ../ProjectController.py:1301
+#: ../ProjectController.py:1322
 msgid "Broken"
 msgstr "Ошибка"
 
@@ -739,23 +749,23 @@
 msgid "Browse Locations"
 msgstr "Просмотр директорий"
 
-#: ../ProjectController.py:1769
+#: ../ProjectController.py:1790
 msgid "Build"
 msgstr "Сборка"
 
-#: ../ProjectController.py:1235
+#: ../ProjectController.py:1256
 msgid "Build directory already clean\n"
 msgstr "Директория сборки уже пуста\n"
 
-#: ../ProjectController.py:1770
+#: ../ProjectController.py:1791
 msgid "Build project into build folder"
 msgstr "Сборка проекта в директории сборки"
 
-#: ../ProjectController.py:1018
+#: ../ProjectController.py:1039
 msgid "C Build crashed !\n"
 msgstr "Крэш во время сборки C-кода!\n"
 
-#: ../ProjectController.py:1015
+#: ../ProjectController.py:1036
 msgid "C Build failed.\n"
 msgstr "Ошибка сборки C-кода.\n"
 
@@ -763,7 +773,7 @@
 msgid "C code"
 msgstr "C код "
 
-#: ../ProjectController.py:1093
+#: ../ProjectController.py:1114
 msgid "C code generated successfully.\n"
 msgstr "C-код успешно сгенерирован.\n"
 
@@ -780,7 +790,7 @@
 msgid "C extension"
 msgstr "С-расширение"
 
-#: ../dialogs/AboutDialog.py:63
+#: ../dialogs/AboutDialog.py:71
 msgid "C&redits"
 msgstr "&Благодарности"
 
@@ -859,7 +869,7 @@
 msgid "Cannot get PLC status - connection failed.\n"
 msgstr "Невозможно получить состояние ПЛК - ошибка подключения.\n"
 
-#: ../ProjectController.py:881
+#: ../ProjectController.py:902
 msgid "Cannot open/parse VARIABLES.csv!\n"
 msgstr "Не удалось открыть/прочитать VARIABLES.csv\n"
 
@@ -884,7 +894,7 @@
 msgid "Change Name"
 msgstr "Сменить имя"
 
-#: ../IDEFrame.py:1943
+#: ../IDEFrame.py:1942
 msgid "Change POU Type To"
 msgstr "Сменить тип POU на"
 
@@ -904,7 +914,7 @@
 msgid "Choose a SVG file"
 msgstr "Выберите SVG-файл"
 
-#: ../ProjectController.py:451
+#: ../ProjectController.py:501
 msgid "Choose a directory to save project"
 msgstr "Выберите директорию, чтобы сохранить проект"
 
@@ -926,11 +936,11 @@
 msgid "Choose a working directory "
 msgstr "Выберите рабочую директорию"
 
-#: ../ProjectController.py:358
+#: ../ProjectController.py:408
 msgid "Chosen folder doesn't contain a program. It's not a valid project!"
 msgstr "Выбранная директория не содержит программы. Это некорректный проект!"
 
-#: ../ProjectController.py:325
+#: ../ProjectController.py:375
 msgid "Chosen folder isn't empty. You can't use it for a new project!"
 msgstr "Выбранная директория не пуста и не может использоваться для нового проекта!"
 
@@ -946,7 +956,7 @@
 msgid "Class:"
 msgstr "Класс:"
 
-#: ../ProjectController.py:1773
+#: ../ProjectController.py:1794
 msgid "Clean"
 msgstr "Очистить"
 
@@ -954,11 +964,11 @@
 msgid "Clean log messages"
 msgstr "Очистить лог"
 
-#: ../ProjectController.py:1775
+#: ../ProjectController.py:1796
 msgid "Clean project build folder"
 msgstr "Очистить директорию сборки проекта"
 
-#: ../ProjectController.py:1232
+#: ../ProjectController.py:1253
 msgid "Cleaning the build directory\n"
 msgstr "Очистка директории сборки\n"
 
@@ -987,7 +997,7 @@
 msgid "Close Tab"
 msgstr "Закрыть вкладку"
 
-#: ../editors/Viewer.py:541 ../editors/Viewer.py:2366
+#: ../editors/Viewer.py:541 ../editors/Viewer.py:2377
 msgid "Coil"
 msgstr "Катушка"
 
@@ -1017,7 +1027,7 @@
 msgid "Compiler"
 msgstr "Компилятор"
 
-#: ../ProjectController.py:672
+#: ../ProjectController.py:693
 msgid "Compiling IEC Program into C code...\n"
 msgstr "Компиляция МЭК-программы в C-код...\n"
 
@@ -1047,21 +1057,21 @@
 msgid "Confirm or change variable name"
 msgstr "Подтвердить или поменять имя переменной"
 
-#: ../ProjectController.py:1788
+#: ../ProjectController.py:1809
 msgid "Connect"
 msgstr "Подключиться"
 
-#: ../ProjectController.py:1789
+#: ../ProjectController.py:1810
 msgid "Connect to the target PLC"
 msgstr "Подключиться к целевому ПЛК"
 
-#: ../ProjectController.py:1292
+#: ../ProjectController.py:1313
 #, python-format
 msgid "Connected to URI: %s"
 msgstr "Подключен к URI: %s"
 
 #: ../dialogs/SFCTransitionDialog.py:76 ../editors/Viewer.py:527
-#: ../editors/Viewer.py:2359
+#: ../editors/Viewer.py:2370
 msgid "Connection"
 msgstr "Подключение"
 
@@ -1069,11 +1079,11 @@
 msgid "Connection Properties"
 msgstr "Свойства подключение"
 
-#: ../ProjectController.py:1647
+#: ../ProjectController.py:1668
 msgid "Connection canceled!\n"
 msgstr "Подключение отменено!\n"
 
-#: ../ProjectController.py:1672
+#: ../ProjectController.py:1693
 #, python-format
 msgid "Connection failed to %s!\n"
 msgstr "Неудачное подключение к %s!\n"
@@ -1087,7 +1097,7 @@
 msgid "Connection to '%s' failed.\n"
 msgstr "Неудачное подключение к %s!\n"
 
-#: ../dialogs/ConnectionDialog.py:64 ../editors/Viewer.py:1594
+#: ../dialogs/ConnectionDialog.py:64 ../editors/Viewer.py:1605
 msgid "Connector"
 msgstr "Коннектор"
 
@@ -1103,7 +1113,7 @@
 msgid "Constant"
 msgstr "Константа"
 
-#: ../editors/Viewer.py:537 ../editors/Viewer.py:2362
+#: ../editors/Viewer.py:537 ../editors/Viewer.py:2373
 msgid "Contact"
 msgstr "Контакт"
 
@@ -1111,7 +1121,7 @@
 msgid "Content Description (optional):"
 msgstr "Описание содержимого (опционально):"
 
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1595
+#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1606
 msgid "Continuation"
 msgstr "Продолжение"
 
@@ -1136,7 +1146,7 @@
 msgid "Copy"
 msgstr "Копировать"
 
-#: ../IDEFrame.py:1930
+#: ../IDEFrame.py:1929
 msgid "Copy POU"
 msgstr "Копировать POU"
 
@@ -1191,15 +1201,15 @@
 msgid "Couldn't paste non-POU object."
 msgstr "Невозможно вставить не-POU."
 
-#: ../ProjectController.py:1589
+#: ../ProjectController.py:1610
 msgid "Couldn't start PLC !\n"
 msgstr "Невозможно запустить ПЛК!\n"
 
-#: ../ProjectController.py:1597
+#: ../ProjectController.py:1618
 msgid "Couldn't stop PLC !\n"
 msgstr "Невозможно остановить ПЛК!\n"
 
-#: ../ProjectController.py:1561
+#: ../ProjectController.py:1582
 msgid "Couldn't stop debugger.\n"
 msgstr "Невозможно остановить отладчик.\n"
 
@@ -1279,7 +1289,7 @@
 msgid "Create a new variable"
 msgstr "Создать новую переменную"
 
-#: ../dialogs/AboutDialog.py:105
+#: ../dialogs/AboutDialog.py:113
 msgid "Credits"
 msgstr "Благодарности"
 
@@ -1343,7 +1353,7 @@
 msgid "Days:"
 msgstr "Дни:"
 
-#: ../ProjectController.py:1694
+#: ../ProjectController.py:1715
 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
 msgstr "Отлаживаемая программа не соответствует программе в ПЛК - остановите/загрузите/запустите, чтобы разрешить отладку\n"
 
@@ -1351,17 +1361,17 @@
 msgid "Debug instance"
 msgstr "Отладка экземпляра"
 
-#: ../editors/Viewer.py:1117 ../editors/Viewer.py:3653
+#: ../editors/Viewer.py:1127 ../editors/Viewer.py:3664
 #, python-format
 msgid "Debug: %s"
 msgstr "Отладка: %s"
 
-#: ../ProjectController.py:1350
+#: ../ProjectController.py:1371
 #, python-format
 msgid "Debug: Unknown variable '%s'\n"
 msgstr "Отладка: неизвестная переменная '%s'\n"
 
-#: ../ProjectController.py:1348
+#: ../ProjectController.py:1369
 #, python-format
 msgid "Debug: Unsupported type to debug '%s'\n"
 msgstr "Отладка: неподдерживамый отладкой тип '%s'\n"
@@ -1370,19 +1380,19 @@
 msgid "Debugger"
 msgstr "Отладчик"
 
-#: ../ProjectController.py:1530
+#: ../ProjectController.py:1551
 msgid "Debugger disabled\n"
 msgstr "Отладчик запрещен\n"
 
-#: ../ProjectController.py:1691
+#: ../ProjectController.py:1712
 msgid "Debugger ready\n"
 msgstr "Отладчик готов\n"
 
-#: ../ProjectController.py:1563
+#: ../ProjectController.py:1584
 msgid "Debugger stopped.\n"
 msgstr "Отладчик остановлен.\n"
 
-#: ../editors/Viewer.py:572 ../Beremiz.py:1064 ../IDEFrame.py:1959
+#: ../editors/Viewer.py:572 ../Beremiz.py:1064 ../IDEFrame.py:1958
 msgid "Delete"
 msgstr "Удалить"
 
@@ -1439,19 +1449,19 @@
 msgid "Disable_Extensions"
 msgstr "Запретить расширения"
 
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1818
 msgid "Disconnect"
 msgstr "Отключиться"
 
-#: ../ProjectController.py:1799
+#: ../ProjectController.py:1820
 msgid "Disconnect from PLC"
 msgstr "Отключиться от ПЛК"
 
-#: ../ProjectController.py:1302
+#: ../ProjectController.py:1323
 msgid "Disconnected"
 msgstr "Отключено"
 
-#: ../editors/Viewer.py:556 ../editors/Viewer.py:2354
+#: ../editors/Viewer.py:556 ../editors/Viewer.py:2365
 msgid "Divergence"
 msgstr "Ветвление"
 
@@ -1512,7 +1522,7 @@
 msgid "Edit array type properties"
 msgstr "Редактировать свойства массива"
 
-#: ../editors/Viewer.py:2575 ../editors/Viewer.py:3004
+#: ../editors/Viewer.py:2586 ../editors/Viewer.py:3015
 msgid "Edit comment"
 msgstr "Редактировать комментарий"
 
@@ -1524,11 +1534,11 @@
 msgid "Edit item"
 msgstr "Редактировать элемент"
 
-#: ../editors/Viewer.py:2963
+#: ../editors/Viewer.py:2974
 msgid "Edit jump target"
 msgstr "Редактирование безусловного перехода"
 
-#: ../ProjectController.py:1811
+#: ../ProjectController.py:1832
 msgid "Edit raw IEC code added to code generated by PLCGenerator"
 msgstr "Редактировать МЭК-код добавленный к коду сгенерированному PLCGenerator"
 
@@ -1544,7 +1554,7 @@
 msgid "Editor ToolBar"
 msgstr "Редактор панели инструментов"
 
-#: ../ProjectController.py:1195
+#: ../ProjectController.py:1216
 msgid "Editor selection"
 msgstr "Редактор выделения"
 
@@ -1555,7 +1565,7 @@
 msgid "Elements :"
 msgstr "Элементы:"
 
-#: ../ProjectController.py:1300
+#: ../ProjectController.py:1321
 msgid "Empty"
 msgstr "Нет программы"
 
@@ -1595,35 +1605,36 @@
 #: ../dialogs/PouNameDialog.py:54 ../dialogs/BrowseLocationsDialog.py:216
 #: ../dialogs/BrowseValuesLibraryDialog.py:83 ../dialogs/PouActionDialog.py:104
 #: ../dialogs/PouDialog.py:134 ../PLCOpenEditor.py:335 ../PLCOpenEditor.py:340
-#: ../PLCOpenEditor.py:420 ../PLCOpenEditor.py:430 ../editors/Viewer.py:423
+#: ../PLCOpenEditor.py:420 ../PLCOpenEditor.py:430
+#: ../editors/ResourceEditor.py:436 ../editors/Viewer.py:423
 #: ../editors/LDViewer.py:666 ../editors/LDViewer.py:882
 #: ../editors/LDViewer.py:886 ../editors/DataTypeEditor.py:550
 #: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:579
 #: ../editors/DataTypeEditor.py:584 ../editors/DataTypeEditor.py:594
 #: ../editors/DataTypeEditor.py:745 ../editors/DataTypeEditor.py:752
 #: ../editors/TextViewer.py:389 ../editors/CodeFileEditor.py:783
-#: ../ProjectController.py:293 ../ProjectController.py:421
-#: ../ProjectController.py:428 ../controls/FolderTree.py:217
+#: ../ProjectController.py:343 ../ProjectController.py:471
+#: ../ProjectController.py:478 ../controls/FolderTree.py:217
 #: ../controls/DebugVariablePanel/DebugVariablePanel.py:166
 #: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137
 #: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231
-#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:772
-#: ../Beremiz.py:1203 ../IDEFrame.py:1003 ../IDEFrame.py:1614
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1660 ../IDEFrame.py:1674
-#: ../IDEFrame.py:1679 ../Beremiz_service.py:211
+#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:784
+#: ../Beremiz.py:1203 ../IDEFrame.py:1003 ../IDEFrame.py:1613
+#: ../IDEFrame.py:1654 ../IDEFrame.py:1659 ../IDEFrame.py:1673
+#: ../IDEFrame.py:1678 ../Beremiz_service.py:211
 msgid "Error"
 msgstr "Ошибка"
 
-#: ../ProjectController.py:727
+#: ../ProjectController.py:748
 msgid "Error : At least one configuration and one resource must be declared in PLC !\n"
 msgstr "Ошибка: Как минимум одна конфигурация и один ресурс должны быть задекларированы в ПЛК!\n"
 
-#: ../ProjectController.py:719
+#: ../ProjectController.py:740
 #, python-format
 msgid "Error : IEC to C compiler returned %d\n"
 msgstr "Ошибка: компилятор МЭК в C вернул код ошибки %d\n"
 
-#: ../ProjectController.py:621
+#: ../ProjectController.py:671
 #, python-format
 msgid ""
 "Error in ST/IL/SFC code generator :\n"
@@ -1647,7 +1658,7 @@
 msgid "Error: No PLC built\n"
 msgstr "Ошибка: ПЛК не собран\n"
 
-#: ../ProjectController.py:1666
+#: ../ProjectController.py:1687
 #, python-format
 msgid "Exception while connecting %s!\n"
 msgstr "Исключение во время подключения %s!\n"
@@ -1692,7 +1703,7 @@
 msgid "External"
 msgstr "Внешний"
 
-#: ../ProjectController.py:740
+#: ../ProjectController.py:761
 msgid "Extracting Located Variables...\n"
 msgstr "Экспорт локальных переменных...\n"
 
@@ -1707,7 +1718,7 @@
 msgid "FBD"
 msgstr "FBD"
 
-#: ../ProjectController.py:1729
+#: ../ProjectController.py:1750
 msgid "Failed : Must build before transfer.\n"
 msgstr "Ошибка: необходима сборка перед передачей.\n"
 
@@ -1715,7 +1726,7 @@
 msgid "Falling Edge"
 msgstr "Спадающий фронт"
 
-#: ../ProjectController.py:1008
+#: ../ProjectController.py:1029
 msgid "Fatal : cannot get builder.\n"
 msgstr "Ошибка: невозможно получить сборщик.\n"
 
@@ -1764,7 +1775,7 @@
 msgid "Force runtime reload\n"
 msgstr "Принудительный перезапуск системы исполнения\n"
 
-#: ../editors/Viewer.py:1553
+#: ../editors/Viewer.py:1564
 msgid "Force value"
 msgstr "Фиксировать значение"
 
@@ -1792,7 +1803,7 @@
 msgid "Forward"
 msgstr "Вперед"
 
-#: ../dialogs/SearchInProjectDialog.py:36 ../IDEFrame.py:1746
+#: ../dialogs/SearchInProjectDialog.py:36 ../IDEFrame.py:1745
 msgid "Function"
 msgstr "Функция"
 
@@ -1800,12 +1811,12 @@
 msgid "Function &Block"
 msgstr "Функциональный &блок"
 
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1745
-#: ../IDEFrame.py:1938
+#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1744
+#: ../IDEFrame.py:1937
 msgid "Function Block"
 msgstr "Функциональный блок"
 
-#: ../controls/VariablePanel.py:825
+#: ../controls/VariablePanel.py:837
 msgid "Function Block Types"
 msgstr "Типы функциональных блоков"
 
@@ -1830,7 +1841,7 @@
 msgid "Generate Program"
 msgstr "Сгенерировать программу"
 
-#: ../ProjectController.py:612
+#: ../ProjectController.py:662
 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
 msgstr "Генерация МЭК-61131 ST/IL/SFC кода ПЛК...\n"
 
@@ -1900,12 +1911,12 @@
 msgid "Import SVG"
 msgstr "Импорт SVG"
 
-#: ../dialogs/FBDVariableDialog.py:38 ../editors/Viewer.py:1580
+#: ../dialogs/FBDVariableDialog.py:38 ../editors/Viewer.py:1591
 #: ../controls/VariablePanel.py:71
 msgid "InOut"
 msgstr "Вход/Выход"
 
-#: ../editors/Viewer.py:1100
+#: ../editors/Viewer.py:1110
 msgid "Inactive"
 msgstr "Неактивный"
 
@@ -1955,7 +1966,7 @@
 
 #: ../dialogs/SFCStepDialog.py:70 ../dialogs/FBDVariableDialog.py:37
 #: ../dialogs/BrowseLocationsDialog.py:40 ../editors/Viewer.py:289
-#: ../editors/Viewer.py:1578 ../editors/TextViewer.py:307
+#: ../editors/Viewer.py:1589 ../editors/TextViewer.py:307
 #: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
 #: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
 msgid "Input"
@@ -2043,7 +2054,7 @@
 "Неверное значение!\n"
 "Необходимо ввести числовое значение."
 
-#: ../editors/Viewer.py:557 ../editors/Viewer.py:2343
+#: ../editors/Viewer.py:557 ../editors/Viewer.py:2354
 msgid "Jump"
 msgstr "Безусловный переход"
 
@@ -2074,7 +2085,7 @@
 msgid "Language:"
 msgstr "Язык:"
 
-#: ../ProjectController.py:1735
+#: ../ProjectController.py:1756
 msgid "Latest build already matches current target. Transfering anyway...\n"
 msgstr "Загружаемая программа совпадает с текущий программой в целевом ПЛК. Загрузка продолжена...\n"
 
@@ -2113,7 +2124,7 @@
 msgid "Library"
 msgstr "Библиотеки"
 
-#: ../dialogs/AboutDialog.py:143
+#: ../dialogs/AboutDialog.py:151
 msgid "License"
 msgstr "Лицензия"
 
@@ -2139,7 +2150,7 @@
 msgid "Local entries"
 msgstr "Локальные записи"
 
-#: ../ProjectController.py:1641
+#: ../ProjectController.py:1662
 msgid "Local service discovery failed!\n"
 msgstr "Локальный сервис не найден!\n"
 
@@ -2350,7 +2361,7 @@
 msgid "No Modifier"
 msgstr "Нет модификатора"
 
-#: ../ProjectController.py:1763
+#: ../ProjectController.py:1784
 msgid "No PLC to transfer (did build succeed ?)\n"
 msgstr "Нет ПЛК для передачи (была сборка успешна?)\n"
 
@@ -2460,7 +2471,7 @@
 msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
 msgstr "Свободное программное обеспечение для промышленной автоматизации, состоящие из среды разработки программ по стандарту МЭК 61131 с постоянно расширяющимся набором плагинов и гибкой системой исполнения для ПЛК."
 
-#: ../ProjectController.py:1815
+#: ../ProjectController.py:1836
 msgid "Open a file explorer to manage project files"
 msgstr "Открыть файловый менеджер для просмотра файлов проекта"
 
@@ -2486,7 +2497,7 @@
 
 #: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:39
 #: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:289
-#: ../editors/Viewer.py:1579 ../editors/TextViewer.py:307
+#: ../editors/Viewer.py:1590 ../editors/TextViewer.py:307
 #: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
 #: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
 msgid "Output"
@@ -2514,7 +2525,7 @@
 msgid "PLC Log"
 msgstr "Лог ПЛК"
 
-#: ../ProjectController.py:992
+#: ../ProjectController.py:1013
 msgid "PLC code generation failed !\n"
 msgstr "Неудачная генерация кода!\n"
 
@@ -2594,7 +2605,7 @@
 msgid "Page Size (optional):"
 msgstr "Размер страницы (опционально):"
 
-#: ../IDEFrame.py:2599
+#: ../IDEFrame.py:2598
 #, python-format
 msgid "Page: %d"
 msgstr "Страница: %d"
@@ -2607,7 +2618,7 @@
 msgid "Paste"
 msgstr "Вставить"
 
-#: ../IDEFrame.py:1865
+#: ../IDEFrame.py:1864
 msgid "Paste POU"
 msgstr "Вставить POU"
 
@@ -2619,7 +2630,7 @@
 msgid "Pin number:"
 msgstr "Номер пина:"
 
-#: ../editors/Viewer.py:2706 ../editors/Viewer.py:2963
+#: ../editors/Viewer.py:2717 ../editors/Viewer.py:2974
 #: ../editors/SFCViewer.py:770
 msgid "Please choose a target"
 msgstr "Выберите цель перехода"
@@ -2628,7 +2639,7 @@
 msgid "Please enter a block name"
 msgstr "Введите имя блока"
 
-#: ../editors/Viewer.py:2576 ../editors/Viewer.py:3005
+#: ../editors/Viewer.py:2587 ../editors/Viewer.py:3016
 msgid "Please enter comment text"
 msgstr "Введите текст комментария"
 
@@ -2654,7 +2665,7 @@
 msgid "Port number must be an integer!"
 msgstr "Номер порта должен быть целым числом!"
 
-#: ../editors/Viewer.py:536 ../editors/Viewer.py:2367
+#: ../editors/Viewer.py:536 ../editors/Viewer.py:2378
 msgid "Power Rail"
 msgstr "Шина питания"
 
@@ -2718,8 +2729,8 @@
 msgid "Product Version (required):"
 msgstr "Версия продукта (обязательно):"
 
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1744
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1743
+#: ../IDEFrame.py:1940
 msgid "Program"
 msgstr "Программа"
 
@@ -2744,7 +2755,7 @@
 msgid "Project '%s':"
 msgstr "Проект '%s':"
 
-#: ../ProjectController.py:1814
+#: ../ProjectController.py:1835
 msgid "Project Files"
 msgstr "Файлы проекта"
 
@@ -2828,7 +2839,7 @@
 msgid "Range:"
 msgstr "Диапазон:"
 
-#: ../ProjectController.py:1810
+#: ../ProjectController.py:1831
 msgid "Raw IEC code"
 msgstr "МЭК-код"
 
@@ -2857,7 +2868,7 @@
 msgid "Regular expressions"
 msgstr "Регулярные выражения"
 
-#: ../editors/Viewer.py:1556
+#: ../editors/Viewer.py:1567
 msgid "Release value"
 msgstr "Освободить значение"
 
@@ -2870,11 +2881,11 @@
 msgid "Remove %s node"
 msgstr "Удалить %s элемент"
 
-#: ../IDEFrame.py:2405
+#: ../IDEFrame.py:2404
 msgid "Remove Datatype"
 msgstr "Удалить тип данных"
 
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2409
 msgid "Remove Pou"
 msgstr "Удалить POU"
 
@@ -2906,7 +2917,7 @@
 msgid "Remove variable"
 msgstr "Удалить переменную"
 
-#: ../IDEFrame.py:1945
+#: ../IDEFrame.py:1944
 msgid "Rename"
 msgstr "Переименовать"
 
@@ -2977,15 +2988,15 @@
 msgid "Rounding up/down"
 msgstr "Округление вверх/вниз"
 
-#: ../ProjectController.py:1778
+#: ../ProjectController.py:1799
 msgid "Run"
 msgstr "Старт"
 
-#: ../ProjectController.py:1037
+#: ../ProjectController.py:1058
 msgid "Runtime IO extensions C code generation failed !\n"
 msgstr "Ошибка генерации C-кода для расширений ввода-вывода!\n"
 
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1067
 msgid "Runtime library extensions C code generation failed !\n"
 msgstr "Ошибка генерации C-кода для библиотеки расширений системы исполнения!\n"
 
@@ -3044,7 +3055,7 @@
 msgid "Save as"
 msgstr "Сохранить как"
 
-#: ../ProjectController.py:420
+#: ../ProjectController.py:470
 msgid "Save path is the same as path of a project! \n"
 msgstr "Выбранный путь совпадает с путём проекта!\n"
 
@@ -3074,7 +3085,7 @@
 msgid "Select a variable class:"
 msgstr "Выберите класс переменной:"
 
-#: ../ProjectController.py:1195
+#: ../ProjectController.py:1216
 msgid "Select an editor:"
 msgstr "Выберите редактор:"
 
@@ -3086,7 +3097,7 @@
 msgid "Select an object"
 msgstr "Выберите объект"
 
-#: ../ProjectController.py:427
+#: ../ProjectController.py:477
 msgid "Selected directory already contains another project. Overwrite? \n"
 msgstr "Выбранная директория уже содержит другой проект. Перезаписать?\n"
 
@@ -3125,7 +3136,7 @@
 msgid "Shift right"
 msgstr "Сдвиг вправо"
 
-#: ../ProjectController.py:1804
+#: ../ProjectController.py:1825
 msgid "Show IEC code generated by PLCGenerator"
 msgstr "Показать код, сгенерированный PLCGenerator"
 
@@ -3137,7 +3148,7 @@
 msgid "Show Master generated by config_utils"
 msgstr "Показать ведущий узел сгенерированный config_utils"
 
-#: ../ProjectController.py:1802
+#: ../ProjectController.py:1823
 msgid "Show code"
 msgstr "Показать код"
 
@@ -3174,20 +3185,20 @@
 msgid "Standard function blocks"
 msgstr "Стандартные функциональные блоки"
 
-#: ../ProjectController.py:1780 ../Beremiz_service.py:261
+#: ../ProjectController.py:1801 ../Beremiz_service.py:261
 msgid "Start PLC"
 msgstr "Запустить ПЛК"
 
-#: ../ProjectController.py:984
+#: ../ProjectController.py:1005
 #, python-format
 msgid "Start build in %s\n"
 msgstr "Сборка запущена в %s\n"
 
-#: ../ProjectController.py:1298
+#: ../ProjectController.py:1319
 msgid "Started"
 msgstr "Работа"
 
-#: ../ProjectController.py:1586
+#: ../ProjectController.py:1607
 msgid "Starting PLC\n"
 msgstr "ПЛК запускается\n"
 
@@ -3195,11 +3206,11 @@
 msgid "Status ToolBar"
 msgstr "Панель статуса"
 
-#: ../editors/Viewer.py:553 ../editors/Viewer.py:2342
+#: ../editors/Viewer.py:553 ../editors/Viewer.py:2353
 msgid "Step"
 msgstr "Шаг"
 
-#: ../ProjectController.py:1783
+#: ../ProjectController.py:1804
 msgid "Stop"
 msgstr "Стоп"
 
@@ -3207,15 +3218,15 @@
 msgid "Stop PLC"
 msgstr "Остановить ПЛК"
 
-#: ../ProjectController.py:1785
+#: ../ProjectController.py:1806
 msgid "Stop Running PLC"
 msgstr "Остановить запущенный ПЛК"
 
-#: ../ProjectController.py:1299
+#: ../ProjectController.py:1320
 msgid "Stopped"
 msgstr "Стоп"
 
-#: ../ProjectController.py:1558
+#: ../ProjectController.py:1579
 msgid "Stopping debugger...\n"
 msgstr "Остановка отладчика...\n"
 
@@ -3231,7 +3242,7 @@
 msgid "Subtraction"
 msgstr "Вычитание"
 
-#: ../ProjectController.py:1023
+#: ../ProjectController.py:1044
 msgid "Successfully built.\n"
 msgstr "Сборка прошла успешно.\n"
 
@@ -3343,7 +3354,7 @@
 msgid "There are changes, do you want to save?"
 msgstr "Хотите сохранить изменения?"
 
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1654 ../IDEFrame.py:1673
 #, python-format
 msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr "Существует POU с именем \"%s\". Это может вызвать конфликт. Хотите продолжить?"
@@ -3402,23 +3413,23 @@
 msgid "Top"
 msgstr "Верх"
 
-#: ../ProjectController.py:1792
+#: ../ProjectController.py:1813
 msgid "Transfer"
 msgstr "Передать"
 
-#: ../ProjectController.py:1794
+#: ../ProjectController.py:1815
 msgid "Transfer PLC"
 msgstr "Передать ПЛК"
 
-#: ../ProjectController.py:1758
+#: ../ProjectController.py:1779
 msgid "Transfer completed successfully.\n"
 msgstr "Передача успешно завершена.\n"
 
-#: ../ProjectController.py:1760
+#: ../ProjectController.py:1781
 msgid "Transfer failed\n"
 msgstr "Ошибка передачи\n"
 
-#: ../editors/Viewer.py:554 ../editors/Viewer.py:2344 ../editors/Viewer.py:2371
+#: ../editors/Viewer.py:554 ../editors/Viewer.py:2355 ../editors/Viewer.py:2382
 msgid "Transition"
 msgstr "Переход"
 
@@ -3454,7 +3465,7 @@
 msgid "Transitions"
 msgstr "Переходы"
 
-#: ../dialogs/AboutDialog.py:123
+#: ../dialogs/AboutDialog.py:131
 msgid "Translated by"
 msgstr "Перевод"
 
@@ -3526,7 +3537,7 @@
 msgid "Undo"
 msgstr "Отмена"
 
-#: ../ProjectController.py:332
+#: ../ProjectController.py:382
 msgid "Unknown"
 msgstr "Неизвестно"
 
@@ -3535,7 +3546,7 @@
 msgid "Unknown variable \"%s\" for this POU!"
 msgstr "Неизвестная переменная \"%s\" для этого POU!"
 
-#: ../ProjectController.py:329 ../ProjectController.py:330
+#: ../ProjectController.py:379 ../ProjectController.py:380
 msgid "Unnamed"
 msgstr "Unnamed"
 
@@ -3549,7 +3560,7 @@
 msgid "Unrecognized data size \"%s\""
 msgstr "Неопределенный размер данных \"%s\""
 
-#: ../editors/DataTypeEditor.py:632 ../controls/VariablePanel.py:798
+#: ../editors/DataTypeEditor.py:632 ../controls/VariablePanel.py:810
 msgid "User Data Types"
 msgstr "Пользовательские типы данных"
 
@@ -3570,7 +3581,7 @@
 msgstr "Значения:"
 
 #: ../dialogs/ActionBlockDialog.py:42 ../editors/Viewer.py:526
-#: ../editors/Viewer.py:2374
+#: ../editors/Viewer.py:2385
 msgid "Variable"
 msgstr "Переменная"
 
@@ -3636,7 +3647,7 @@
 msgid "Warning"
 msgstr "Предупреждение"
 
-#: ../ProjectController.py:616
+#: ../ProjectController.py:666
 msgid "Warnings in ST/IL/SFC code generator :\n"
 msgstr "Предупреждения в ST/IL/SFC коде генераторе:\n"
 
@@ -3655,7 +3666,7 @@
 msgid "Wrap search"
 msgstr "Продолжить поиск сначала"
 
-#: ../dialogs/AboutDialog.py:122
+#: ../dialogs/AboutDialog.py:130
 msgid "Written by"
 msgstr "Авторы"
 
@@ -3685,7 +3696,7 @@
 "У вас недостаточно прав для записи.\n"
 "Открыть wxGlade все равно?"
 
-#: ../ProjectController.py:292
+#: ../ProjectController.py:342
 msgid ""
 "You must have permission to work on the project\n"
 "Work on a project copy ?"
--- a/i18n/messages.pot	Thu Mar 09 13:01:28 2017 +0500
+++ b/i18n/messages.pot	Thu Mar 09 15:35:19 2017 +0300
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-01-12 14:39+0300\n"
+"POT-Creation-Date: 2017-03-09 15:28+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -62,7 +62,7 @@
 msgid " and %s"
 msgstr ""
 
-#: ../ProjectController.py:1089
+#: ../ProjectController.py:1110
 msgid " generation failed !\n"
 msgstr ""
 
@@ -86,7 +86,7 @@
 msgid "\"%s\" can't use itself!"
 msgstr ""
 
-#: ../IDEFrame.py:1652 ../IDEFrame.py:1671
+#: ../IDEFrame.py:1651 ../IDEFrame.py:1670
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr ""
@@ -96,7 +96,7 @@
 msgid "\"%s\" configuration already exists !!!"
 msgstr ""
 
-#: ../IDEFrame.py:1602
+#: ../IDEFrame.py:1601
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr ""
@@ -118,9 +118,10 @@
 #: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:106
 #: ../dialogs/BlockPreviewDialog.py:207 ../dialogs/PouNameDialog.py:50
 #: ../dialogs/PouActionDialog.py:98 ../dialogs/PouDialog.py:120
+#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484
 #: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:584
-#: ../editors/CodeFileEditor.py:770 ../controls/VariablePanel.py:751
-#: ../IDEFrame.py:1593
+#: ../editors/CodeFileEditor.py:770 ../controls/VariablePanel.py:763
+#: ../IDEFrame.py:1592
 #, python-format
 msgid "\"%s\" is a keyword. It can't be used!"
 msgstr ""
@@ -138,13 +139,14 @@
 #: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:104
 #: ../dialogs/BlockPreviewDialog.py:203 ../dialogs/PouNameDialog.py:48
 #: ../dialogs/PouActionDialog.py:96 ../dialogs/PouDialog.py:118
+#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482
 #: ../editors/DataTypeEditor.py:579 ../editors/CodeFileEditor.py:768
-#: ../controls/VariablePanel.py:749 ../IDEFrame.py:1591
+#: ../controls/VariablePanel.py:761 ../IDEFrame.py:1590
 #, python-format
 msgid "\"%s\" is not a valid identifier!"
 msgstr ""
 
-#: ../IDEFrame.py:2396
+#: ../IDEFrame.py:2395
 #, python-format
 msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
 msgstr ""
@@ -154,7 +156,7 @@
 #: ../editors/Viewer.py:367 ../editors/TextViewer.py:270
 #: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350
 #: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338
-#: ../IDEFrame.py:1611
+#: ../IDEFrame.py:1610
 #, python-format
 msgid "\"%s\" pou already exists!"
 msgstr ""
@@ -266,8 +268,8 @@
 msgid "&Add Element"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:65 ../dialogs/AboutDialog.py:113
-#: ../dialogs/AboutDialog.py:150
+#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121
+#: ../dialogs/AboutDialog.py:158
 msgid "&Close"
 msgstr ""
 
@@ -303,7 +305,7 @@
 msgid "&Help"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:64
+#: ../dialogs/AboutDialog.py:72
 msgid "&License"
 msgstr ""
 
@@ -373,15 +375,15 @@
 msgid "1s"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:124 ../IDEFrame.py:1614 ../IDEFrame.py:1660
-#: ../IDEFrame.py:1679
+#: ../dialogs/PouDialog.py:124 ../IDEFrame.py:1613 ../IDEFrame.py:1659
+#: ../IDEFrame.py:1678
 #, python-format
 msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr ""
 
 #: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:108
 #: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:100
-#: ../controls/VariablePanel.py:753 ../IDEFrame.py:1628 ../IDEFrame.py:1641
+#: ../controls/VariablePanel.py:765 ../IDEFrame.py:1627 ../IDEFrame.py:1640
 #, python-format
 msgid "A POU named \"%s\" already exists!"
 msgstr ""
@@ -395,8 +397,12 @@
 msgid "A location must be selected!"
 msgstr ""
 
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:755
-#: ../IDEFrame.py:1630 ../IDEFrame.py:1643
+#: ../editors/ResourceEditor.py:451
+msgid "A task with the same name already exists!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:767
+#: ../IDEFrame.py:1629 ../IDEFrame.py:1642
 #, python-format
 msgid "A variable with \"%s\" as name already exists in this pou!"
 msgstr ""
@@ -406,7 +412,7 @@
 msgid "A variable with \"%s\" as name already exists!"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:40 ../PLCOpenEditor.py:158 ../Beremiz.py:381
+#: ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:158 ../Beremiz.py:381
 msgid "About"
 msgstr ""
 
@@ -418,7 +424,7 @@
 msgid "Action"
 msgstr ""
 
-#: ../editors/Viewer.py:555 ../editors/Viewer.py:2345
+#: ../editors/Viewer.py:555 ../editors/Viewer.py:2356
 msgid "Action Block"
 msgstr ""
 
@@ -443,7 +449,7 @@
 msgid "Actions:"
 msgstr ""
 
-#: ../editors/Viewer.py:1100
+#: ../editors/Viewer.py:1110
 msgid "Active"
 msgstr ""
 
@@ -452,7 +458,7 @@
 msgid "Add"
 msgstr ""
 
-#: ../IDEFrame.py:1890 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1889 ../IDEFrame.py:1924
 msgid "Add Action"
 msgstr ""
 
@@ -460,11 +466,11 @@
 msgid "Add C code accessing located variables synchronously"
 msgstr ""
 
-#: ../IDEFrame.py:1873
+#: ../IDEFrame.py:1872
 msgid "Add Configuration"
 msgstr ""
 
-#: ../IDEFrame.py:1853
+#: ../IDEFrame.py:1852
 msgid "Add DataType"
 msgstr ""
 
@@ -476,7 +482,7 @@
 msgid "Add IP"
 msgstr ""
 
-#: ../IDEFrame.py:1861
+#: ../IDEFrame.py:1860
 msgid "Add POU"
 msgstr ""
 
@@ -484,11 +490,11 @@
 msgid "Add Python code executed asynchronously"
 msgstr ""
 
-#: ../IDEFrame.py:1901 ../IDEFrame.py:1951
+#: ../IDEFrame.py:1900 ../IDEFrame.py:1950
 msgid "Add Resource"
 msgstr ""
 
-#: ../IDEFrame.py:1879 ../IDEFrame.py:1922
+#: ../IDEFrame.py:1878 ../IDEFrame.py:1921
 msgid "Add Transition"
 msgstr ""
 
@@ -500,7 +506,7 @@
 msgid "Add a new initial step"
 msgstr ""
 
-#: ../editors/Viewer.py:2706 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2717 ../editors/SFCViewer.py:770
 msgid "Add a new jump"
 msgstr ""
 
@@ -548,7 +554,7 @@
 msgid "Adjust Block Size"
 msgstr ""
 
-#: ../editors/Viewer.py:1637
+#: ../editors/Viewer.py:1648
 msgid "Alignment"
 msgstr ""
 
@@ -564,7 +570,7 @@
 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
 msgstr ""
 
-#: ../ProjectController.py:1623
+#: ../ProjectController.py:1644
 msgid "Already connected. Please disconnect\n"
 msgstr ""
 
@@ -573,6 +579,10 @@
 msgid "An element named \"%s\" already exists in this structure!"
 msgstr ""
 
+#: ../editors/ResourceEditor.py:486
+msgid "An instance with the same name already exists!"
+msgstr ""
+
 #: ../dialogs/ConnectionDialog.py:96
 msgid "Apply name modification to all continuations with the same name"
 msgstr ""
@@ -594,7 +604,7 @@
 msgstr ""
 
 #: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:635
-#: ../controls/VariablePanel.py:829
+#: ../controls/VariablePanel.py:841
 msgid "Array"
 msgstr ""
 
@@ -636,7 +646,7 @@
 msgid "Base Type:"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:625 ../controls/VariablePanel.py:787
+#: ../editors/DataTypeEditor.py:625 ../controls/VariablePanel.py:799
 msgid "Base Types"
 msgstr ""
 
@@ -672,7 +682,7 @@
 msgid "Bitwise inverting"
 msgstr ""
 
-#: ../editors/Viewer.py:525 ../editors/Viewer.py:2358
+#: ../editors/Viewer.py:525 ../editors/Viewer.py:2369
 msgid "Block"
 msgstr ""
 
@@ -688,7 +698,7 @@
 msgid "Bottom"
 msgstr ""
 
-#: ../ProjectController.py:1301
+#: ../ProjectController.py:1322
 msgid "Broken"
 msgstr ""
 
@@ -701,23 +711,23 @@
 msgid "Browse Locations"
 msgstr ""
 
-#: ../ProjectController.py:1769
+#: ../ProjectController.py:1790
 msgid "Build"
 msgstr ""
 
-#: ../ProjectController.py:1235
+#: ../ProjectController.py:1256
 msgid "Build directory already clean\n"
 msgstr ""
 
-#: ../ProjectController.py:1770
+#: ../ProjectController.py:1791
 msgid "Build project into build folder"
 msgstr ""
 
-#: ../ProjectController.py:1018
+#: ../ProjectController.py:1039
 msgid "C Build crashed !\n"
 msgstr ""
 
-#: ../ProjectController.py:1015
+#: ../ProjectController.py:1036
 msgid "C Build failed.\n"
 msgstr ""
 
@@ -725,7 +735,7 @@
 msgid "C code"
 msgstr ""
 
-#: ../ProjectController.py:1093
+#: ../ProjectController.py:1114
 msgid "C code generated successfully.\n"
 msgstr ""
 
@@ -742,7 +752,7 @@
 msgid "C extension"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:63
+#: ../dialogs/AboutDialog.py:71
 msgid "C&redits"
 msgstr ""
 
@@ -799,7 +809,7 @@
 msgid "Cannot get PLC status - connection failed.\n"
 msgstr ""
 
-#: ../ProjectController.py:881
+#: ../ProjectController.py:902
 msgid "Cannot open/parse VARIABLES.csv!\n"
 msgstr ""
 
@@ -824,7 +834,7 @@
 msgid "Change Name"
 msgstr ""
 
-#: ../IDEFrame.py:1943
+#: ../IDEFrame.py:1942
 msgid "Change POU Type To"
 msgstr ""
 
@@ -844,7 +854,7 @@
 msgid "Choose a SVG file"
 msgstr ""
 
-#: ../ProjectController.py:451
+#: ../ProjectController.py:501
 msgid "Choose a directory to save project"
 msgstr ""
 
@@ -866,11 +876,11 @@
 msgid "Choose a working directory "
 msgstr ""
 
-#: ../ProjectController.py:358
+#: ../ProjectController.py:408
 msgid "Chosen folder doesn't contain a program. It's not a valid project!"
 msgstr ""
 
-#: ../ProjectController.py:325
+#: ../ProjectController.py:375
 msgid "Chosen folder isn't empty. You can't use it for a new project!"
 msgstr ""
 
@@ -886,7 +896,7 @@
 msgid "Class:"
 msgstr ""
 
-#: ../ProjectController.py:1773
+#: ../ProjectController.py:1794
 msgid "Clean"
 msgstr ""
 
@@ -894,11 +904,11 @@
 msgid "Clean log messages"
 msgstr ""
 
-#: ../ProjectController.py:1775
+#: ../ProjectController.py:1796
 msgid "Clean project build folder"
 msgstr ""
 
-#: ../ProjectController.py:1232
+#: ../ProjectController.py:1253
 msgid "Cleaning the build directory\n"
 msgstr ""
 
@@ -927,7 +937,7 @@
 msgid "Close Tab"
 msgstr ""
 
-#: ../editors/Viewer.py:541 ../editors/Viewer.py:2366
+#: ../editors/Viewer.py:541 ../editors/Viewer.py:2377
 msgid "Coil"
 msgstr ""
 
@@ -951,7 +961,7 @@
 msgid "Comparison"
 msgstr ""
 
-#: ../ProjectController.py:672
+#: ../ProjectController.py:693
 msgid "Compiling IEC Program into C code...\n"
 msgstr ""
 
@@ -981,21 +991,21 @@
 msgid "Confirm or change variable name"
 msgstr ""
 
-#: ../ProjectController.py:1788
+#: ../ProjectController.py:1809
 msgid "Connect"
 msgstr ""
 
-#: ../ProjectController.py:1789
+#: ../ProjectController.py:1810
 msgid "Connect to the target PLC"
 msgstr ""
 
-#: ../ProjectController.py:1292
+#: ../ProjectController.py:1313
 #, python-format
 msgid "Connected to URI: %s"
 msgstr ""
 
 #: ../dialogs/SFCTransitionDialog.py:76 ../editors/Viewer.py:527
-#: ../editors/Viewer.py:2359
+#: ../editors/Viewer.py:2370
 msgid "Connection"
 msgstr ""
 
@@ -1003,11 +1013,11 @@
 msgid "Connection Properties"
 msgstr ""
 
-#: ../ProjectController.py:1647
+#: ../ProjectController.py:1668
 msgid "Connection canceled!\n"
 msgstr ""
 
-#: ../ProjectController.py:1672
+#: ../ProjectController.py:1693
 #, python-format
 msgid "Connection failed to %s!\n"
 msgstr ""
@@ -1021,7 +1031,7 @@
 msgid "Connection to '%s' failed.\n"
 msgstr ""
 
-#: ../dialogs/ConnectionDialog.py:64 ../editors/Viewer.py:1594
+#: ../dialogs/ConnectionDialog.py:64 ../editors/Viewer.py:1605
 msgid "Connector"
 msgstr ""
 
@@ -1037,7 +1047,7 @@
 msgid "Constant"
 msgstr ""
 
-#: ../editors/Viewer.py:537 ../editors/Viewer.py:2362
+#: ../editors/Viewer.py:537 ../editors/Viewer.py:2373
 msgid "Contact"
 msgstr ""
 
@@ -1045,7 +1055,7 @@
 msgid "Content Description (optional):"
 msgstr ""
 
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1595
+#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1606
 msgid "Continuation"
 msgstr ""
 
@@ -1070,7 +1080,7 @@
 msgid "Copy"
 msgstr ""
 
-#: ../IDEFrame.py:1930
+#: ../IDEFrame.py:1929
 msgid "Copy POU"
 msgstr ""
 
@@ -1116,15 +1126,15 @@
 msgid "Couldn't paste non-POU object."
 msgstr ""
 
-#: ../ProjectController.py:1589
+#: ../ProjectController.py:1610
 msgid "Couldn't start PLC !\n"
 msgstr ""
 
-#: ../ProjectController.py:1597
+#: ../ProjectController.py:1618
 msgid "Couldn't stop PLC !\n"
 msgstr ""
 
-#: ../ProjectController.py:1561
+#: ../ProjectController.py:1582
 msgid "Couldn't stop debugger.\n"
 msgstr ""
 
@@ -1204,7 +1214,7 @@
 msgid "Create a new variable"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:105
+#: ../dialogs/AboutDialog.py:113
 msgid "Credits"
 msgstr ""
 
@@ -1265,7 +1275,7 @@
 msgid "Days:"
 msgstr ""
 
-#: ../ProjectController.py:1694
+#: ../ProjectController.py:1715
 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
 msgstr ""
 
@@ -1273,17 +1283,17 @@
 msgid "Debug instance"
 msgstr ""
 
-#: ../editors/Viewer.py:1117 ../editors/Viewer.py:3653
+#: ../editors/Viewer.py:1127 ../editors/Viewer.py:3664
 #, python-format
 msgid "Debug: %s"
 msgstr ""
 
-#: ../ProjectController.py:1350
+#: ../ProjectController.py:1371
 #, python-format
 msgid "Debug: Unknown variable '%s'\n"
 msgstr ""
 
-#: ../ProjectController.py:1348
+#: ../ProjectController.py:1369
 #, python-format
 msgid "Debug: Unsupported type to debug '%s'\n"
 msgstr ""
@@ -1292,19 +1302,19 @@
 msgid "Debugger"
 msgstr ""
 
-#: ../ProjectController.py:1530
+#: ../ProjectController.py:1551
 msgid "Debugger disabled\n"
 msgstr ""
 
-#: ../ProjectController.py:1691
+#: ../ProjectController.py:1712
 msgid "Debugger ready\n"
 msgstr ""
 
-#: ../ProjectController.py:1563
+#: ../ProjectController.py:1584
 msgid "Debugger stopped.\n"
 msgstr ""
 
-#: ../editors/Viewer.py:572 ../Beremiz.py:1064 ../IDEFrame.py:1959
+#: ../editors/Viewer.py:572 ../Beremiz.py:1064 ../IDEFrame.py:1958
 msgid "Delete"
 msgstr ""
 
@@ -1352,19 +1362,19 @@
 msgid "Directly"
 msgstr ""
 
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1818
 msgid "Disconnect"
 msgstr ""
 
-#: ../ProjectController.py:1799
+#: ../ProjectController.py:1820
 msgid "Disconnect from PLC"
 msgstr ""
 
-#: ../ProjectController.py:1302
+#: ../ProjectController.py:1323
 msgid "Disconnected"
 msgstr ""
 
-#: ../editors/Viewer.py:556 ../editors/Viewer.py:2354
+#: ../editors/Viewer.py:556 ../editors/Viewer.py:2365
 msgid "Divergence"
 msgstr ""
 
@@ -1425,7 +1435,7 @@
 msgid "Edit array type properties"
 msgstr ""
 
-#: ../editors/Viewer.py:2575 ../editors/Viewer.py:3004
+#: ../editors/Viewer.py:2586 ../editors/Viewer.py:3015
 msgid "Edit comment"
 msgstr ""
 
@@ -1437,11 +1447,11 @@
 msgid "Edit item"
 msgstr ""
 
-#: ../editors/Viewer.py:2963
+#: ../editors/Viewer.py:2974
 msgid "Edit jump target"
 msgstr ""
 
-#: ../ProjectController.py:1811
+#: ../ProjectController.py:1832
 msgid "Edit raw IEC code added to code generated by PLCGenerator"
 msgstr ""
 
@@ -1457,7 +1467,7 @@
 msgid "Editor ToolBar"
 msgstr ""
 
-#: ../ProjectController.py:1195
+#: ../ProjectController.py:1216
 msgid "Editor selection"
 msgstr ""
 
@@ -1465,7 +1475,7 @@
 msgid "Elements :"
 msgstr ""
 
-#: ../ProjectController.py:1300
+#: ../ProjectController.py:1321
 msgid "Empty"
 msgstr ""
 
@@ -1502,35 +1512,36 @@
 #: ../dialogs/PouNameDialog.py:54 ../dialogs/BrowseLocationsDialog.py:216
 #: ../dialogs/BrowseValuesLibraryDialog.py:83 ../dialogs/PouActionDialog.py:104
 #: ../dialogs/PouDialog.py:134 ../PLCOpenEditor.py:335 ../PLCOpenEditor.py:340
-#: ../PLCOpenEditor.py:420 ../PLCOpenEditor.py:430 ../editors/Viewer.py:423
+#: ../PLCOpenEditor.py:420 ../PLCOpenEditor.py:430
+#: ../editors/ResourceEditor.py:436 ../editors/Viewer.py:423
 #: ../editors/LDViewer.py:666 ../editors/LDViewer.py:882
 #: ../editors/LDViewer.py:886 ../editors/DataTypeEditor.py:550
 #: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:579
 #: ../editors/DataTypeEditor.py:584 ../editors/DataTypeEditor.py:594
 #: ../editors/DataTypeEditor.py:745 ../editors/DataTypeEditor.py:752
 #: ../editors/TextViewer.py:389 ../editors/CodeFileEditor.py:783
-#: ../ProjectController.py:293 ../ProjectController.py:421
-#: ../ProjectController.py:428 ../controls/FolderTree.py:217
+#: ../ProjectController.py:343 ../ProjectController.py:471
+#: ../ProjectController.py:478 ../controls/FolderTree.py:217
 #: ../controls/DebugVariablePanel/DebugVariablePanel.py:166
 #: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137
 #: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231
-#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:772
-#: ../Beremiz.py:1203 ../IDEFrame.py:1003 ../IDEFrame.py:1614
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1660 ../IDEFrame.py:1674
-#: ../IDEFrame.py:1679 ../Beremiz_service.py:211
+#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:784
+#: ../Beremiz.py:1203 ../IDEFrame.py:1003 ../IDEFrame.py:1613
+#: ../IDEFrame.py:1654 ../IDEFrame.py:1659 ../IDEFrame.py:1673
+#: ../IDEFrame.py:1678 ../Beremiz_service.py:211
 msgid "Error"
 msgstr ""
 
-#: ../ProjectController.py:727
+#: ../ProjectController.py:748
 msgid "Error : At least one configuration and one resource must be declared in PLC !\n"
 msgstr ""
 
-#: ../ProjectController.py:719
+#: ../ProjectController.py:740
 #, python-format
 msgid "Error : IEC to C compiler returned %d\n"
 msgstr ""
 
-#: ../ProjectController.py:621
+#: ../ProjectController.py:671
 #, python-format
 msgid ""
 "Error in ST/IL/SFC code generator :\n"
@@ -1554,7 +1565,7 @@
 msgid "Error: No PLC built\n"
 msgstr ""
 
-#: ../ProjectController.py:1666
+#: ../ProjectController.py:1687
 #, python-format
 msgid "Exception while connecting %s!\n"
 msgstr ""
@@ -1599,7 +1610,7 @@
 msgid "External"
 msgstr ""
 
-#: ../ProjectController.py:740
+#: ../ProjectController.py:761
 msgid "Extracting Located Variables...\n"
 msgstr ""
 
@@ -1608,7 +1619,7 @@
 msgid "FBD"
 msgstr ""
 
-#: ../ProjectController.py:1729
+#: ../ProjectController.py:1750
 msgid "Failed : Must build before transfer.\n"
 msgstr ""
 
@@ -1616,7 +1627,7 @@
 msgid "Falling Edge"
 msgstr ""
 
-#: ../ProjectController.py:1008
+#: ../ProjectController.py:1029
 msgid "Fatal : cannot get builder.\n"
 msgstr ""
 
@@ -1665,7 +1676,7 @@
 msgid "Force runtime reload\n"
 msgstr ""
 
-#: ../editors/Viewer.py:1553
+#: ../editors/Viewer.py:1564
 msgid "Force value"
 msgstr ""
 
@@ -1693,7 +1704,7 @@
 msgid "Forward"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:36 ../IDEFrame.py:1746
+#: ../dialogs/SearchInProjectDialog.py:36 ../IDEFrame.py:1745
 msgid "Function"
 msgstr ""
 
@@ -1701,12 +1712,12 @@
 msgid "Function &Block"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1745
-#: ../IDEFrame.py:1938
+#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1744
+#: ../IDEFrame.py:1937
 msgid "Function Block"
 msgstr ""
 
-#: ../controls/VariablePanel.py:825
+#: ../controls/VariablePanel.py:837
 msgid "Function Block Types"
 msgstr ""
 
@@ -1731,7 +1742,7 @@
 msgid "Generate Program"
 msgstr ""
 
-#: ../ProjectController.py:612
+#: ../ProjectController.py:662
 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
 msgstr ""
 
@@ -1795,12 +1806,12 @@
 msgid "Import SVG"
 msgstr ""
 
-#: ../dialogs/FBDVariableDialog.py:38 ../editors/Viewer.py:1580
+#: ../dialogs/FBDVariableDialog.py:38 ../editors/Viewer.py:1591
 #: ../controls/VariablePanel.py:71
 msgid "InOut"
 msgstr ""
 
-#: ../editors/Viewer.py:1100
+#: ../editors/Viewer.py:1110
 msgid "Inactive"
 msgstr ""
 
@@ -1847,7 +1858,7 @@
 
 #: ../dialogs/SFCStepDialog.py:70 ../dialogs/FBDVariableDialog.py:37
 #: ../dialogs/BrowseLocationsDialog.py:40 ../editors/Viewer.py:289
-#: ../editors/Viewer.py:1578 ../editors/TextViewer.py:307
+#: ../editors/Viewer.py:1589 ../editors/TextViewer.py:307
 #: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
 #: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
 msgid "Input"
@@ -1924,7 +1935,7 @@
 "You must fill a numeric value."
 msgstr ""
 
-#: ../editors/Viewer.py:557 ../editors/Viewer.py:2343
+#: ../editors/Viewer.py:557 ../editors/Viewer.py:2354
 msgid "Jump"
 msgstr ""
 
@@ -1952,7 +1963,7 @@
 msgid "Language:"
 msgstr ""
 
-#: ../ProjectController.py:1735
+#: ../ProjectController.py:1756
 msgid "Latest build already matches current target. Transfering anyway...\n"
 msgstr ""
 
@@ -1988,7 +1999,7 @@
 msgid "Library"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:143
+#: ../dialogs/AboutDialog.py:151
 msgid "License"
 msgstr ""
 
@@ -2008,7 +2019,7 @@
 msgid "Local entries"
 msgstr ""
 
-#: ../ProjectController.py:1641
+#: ../ProjectController.py:1662
 msgid "Local service discovery failed!\n"
 msgstr ""
 
@@ -2213,7 +2224,7 @@
 msgid "No Modifier"
 msgstr ""
 
-#: ../ProjectController.py:1763
+#: ../ProjectController.py:1784
 msgid "No PLC to transfer (did build succeed ?)\n"
 msgstr ""
 
@@ -2318,7 +2329,7 @@
 msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
 msgstr ""
 
-#: ../ProjectController.py:1815
+#: ../ProjectController.py:1836
 msgid "Open a file explorer to manage project files"
 msgstr ""
 
@@ -2344,7 +2355,7 @@
 
 #: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:39
 #: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:289
-#: ../editors/Viewer.py:1579 ../editors/TextViewer.py:307
+#: ../editors/Viewer.py:1590 ../editors/TextViewer.py:307
 #: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
 #: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
 msgid "Output"
@@ -2366,7 +2377,7 @@
 msgid "PLC Log"
 msgstr ""
 
-#: ../ProjectController.py:992
+#: ../ProjectController.py:1013
 msgid "PLC code generation failed !\n"
 msgstr ""
 
@@ -2438,7 +2449,7 @@
 msgid "Page Size (optional):"
 msgstr ""
 
-#: ../IDEFrame.py:2599
+#: ../IDEFrame.py:2598
 #, python-format
 msgid "Page: %d"
 msgstr ""
@@ -2451,7 +2462,7 @@
 msgid "Paste"
 msgstr ""
 
-#: ../IDEFrame.py:1865
+#: ../IDEFrame.py:1864
 msgid "Paste POU"
 msgstr ""
 
@@ -2463,7 +2474,7 @@
 msgid "Pin number:"
 msgstr ""
 
-#: ../editors/Viewer.py:2706 ../editors/Viewer.py:2963
+#: ../editors/Viewer.py:2717 ../editors/Viewer.py:2974
 #: ../editors/SFCViewer.py:770
 msgid "Please choose a target"
 msgstr ""
@@ -2472,7 +2483,7 @@
 msgid "Please enter a block name"
 msgstr ""
 
-#: ../editors/Viewer.py:2576 ../editors/Viewer.py:3005
+#: ../editors/Viewer.py:2587 ../editors/Viewer.py:3016
 msgid "Please enter comment text"
 msgstr ""
 
@@ -2498,7 +2509,7 @@
 msgid "Port number must be an integer!"
 msgstr ""
 
-#: ../editors/Viewer.py:536 ../editors/Viewer.py:2367
+#: ../editors/Viewer.py:536 ../editors/Viewer.py:2378
 msgid "Power Rail"
 msgstr ""
 
@@ -2556,8 +2567,8 @@
 msgid "Product Version (required):"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1744
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1743
+#: ../IDEFrame.py:1940
 msgid "Program"
 msgstr ""
 
@@ -2582,7 +2593,7 @@
 msgid "Project '%s':"
 msgstr ""
 
-#: ../ProjectController.py:1814
+#: ../ProjectController.py:1835
 msgid "Project Files"
 msgstr ""
 
@@ -2658,7 +2669,7 @@
 msgid "Range:"
 msgstr ""
 
-#: ../ProjectController.py:1810
+#: ../ProjectController.py:1831
 msgid "Raw IEC code"
 msgstr ""
 
@@ -2687,7 +2698,7 @@
 msgid "Regular expressions"
 msgstr ""
 
-#: ../editors/Viewer.py:1556
+#: ../editors/Viewer.py:1567
 msgid "Release value"
 msgstr ""
 
@@ -2700,11 +2711,11 @@
 msgid "Remove %s node"
 msgstr ""
 
-#: ../IDEFrame.py:2405
+#: ../IDEFrame.py:2404
 msgid "Remove Datatype"
 msgstr ""
 
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2409
 msgid "Remove Pou"
 msgstr ""
 
@@ -2736,7 +2747,7 @@
 msgid "Remove variable"
 msgstr ""
 
-#: ../IDEFrame.py:1945
+#: ../IDEFrame.py:1944
 msgid "Rename"
 msgstr ""
 
@@ -2804,15 +2815,15 @@
 msgid "Rounding up/down"
 msgstr ""
 
-#: ../ProjectController.py:1778
+#: ../ProjectController.py:1799
 msgid "Run"
 msgstr ""
 
-#: ../ProjectController.py:1037
+#: ../ProjectController.py:1058
 msgid "Runtime IO extensions C code generation failed !\n"
 msgstr ""
 
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1067
 msgid "Runtime library extensions C code generation failed !\n"
 msgstr ""
 
@@ -2868,7 +2879,7 @@
 msgid "Save as"
 msgstr ""
 
-#: ../ProjectController.py:420
+#: ../ProjectController.py:470
 msgid "Save path is the same as path of a project! \n"
 msgstr ""
 
@@ -2898,7 +2909,7 @@
 msgid "Select a variable class:"
 msgstr ""
 
-#: ../ProjectController.py:1195
+#: ../ProjectController.py:1216
 msgid "Select an editor:"
 msgstr ""
 
@@ -2910,7 +2921,7 @@
 msgid "Select an object"
 msgstr ""
 
-#: ../ProjectController.py:427
+#: ../ProjectController.py:477
 msgid "Selected directory already contains another project. Overwrite? \n"
 msgstr ""
 
@@ -2946,7 +2957,7 @@
 msgid "Shift right"
 msgstr ""
 
-#: ../ProjectController.py:1804
+#: ../ProjectController.py:1825
 msgid "Show IEC code generated by PLCGenerator"
 msgstr ""
 
@@ -2958,7 +2969,7 @@
 msgid "Show Master generated by config_utils"
 msgstr ""
 
-#: ../ProjectController.py:1802
+#: ../ProjectController.py:1823
 msgid "Show code"
 msgstr ""
 
@@ -2995,20 +3006,20 @@
 msgid "Standard function blocks"
 msgstr ""
 
-#: ../ProjectController.py:1780 ../Beremiz_service.py:261
+#: ../ProjectController.py:1801 ../Beremiz_service.py:261
 msgid "Start PLC"
 msgstr ""
 
-#: ../ProjectController.py:984
+#: ../ProjectController.py:1005
 #, python-format
 msgid "Start build in %s\n"
 msgstr ""
 
-#: ../ProjectController.py:1298
+#: ../ProjectController.py:1319
 msgid "Started"
 msgstr ""
 
-#: ../ProjectController.py:1586
+#: ../ProjectController.py:1607
 msgid "Starting PLC\n"
 msgstr ""
 
@@ -3016,11 +3027,11 @@
 msgid "Status ToolBar"
 msgstr ""
 
-#: ../editors/Viewer.py:553 ../editors/Viewer.py:2342
+#: ../editors/Viewer.py:553 ../editors/Viewer.py:2353
 msgid "Step"
 msgstr ""
 
-#: ../ProjectController.py:1783
+#: ../ProjectController.py:1804
 msgid "Stop"
 msgstr ""
 
@@ -3028,15 +3039,15 @@
 msgid "Stop PLC"
 msgstr ""
 
-#: ../ProjectController.py:1785
+#: ../ProjectController.py:1806
 msgid "Stop Running PLC"
 msgstr ""
 
-#: ../ProjectController.py:1299
+#: ../ProjectController.py:1320
 msgid "Stopped"
 msgstr ""
 
-#: ../ProjectController.py:1558
+#: ../ProjectController.py:1579
 msgid "Stopping debugger...\n"
 msgstr ""
 
@@ -3052,7 +3063,7 @@
 msgid "Subtraction"
 msgstr ""
 
-#: ../ProjectController.py:1023
+#: ../ProjectController.py:1044
 msgid "Successfully built.\n"
 msgstr ""
 
@@ -3099,7 +3110,7 @@
 msgid "There are changes, do you want to save?"
 msgstr ""
 
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1654 ../IDEFrame.py:1673
 #, python-format
 msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr ""
@@ -3156,23 +3167,23 @@
 msgid "Top"
 msgstr ""
 
-#: ../ProjectController.py:1792
+#: ../ProjectController.py:1813
 msgid "Transfer"
 msgstr ""
 
-#: ../ProjectController.py:1794
+#: ../ProjectController.py:1815
 msgid "Transfer PLC"
 msgstr ""
 
-#: ../ProjectController.py:1758
+#: ../ProjectController.py:1779
 msgid "Transfer completed successfully.\n"
 msgstr ""
 
-#: ../ProjectController.py:1760
+#: ../ProjectController.py:1781
 msgid "Transfer failed\n"
 msgstr ""
 
-#: ../editors/Viewer.py:554 ../editors/Viewer.py:2344 ../editors/Viewer.py:2371
+#: ../editors/Viewer.py:554 ../editors/Viewer.py:2355 ../editors/Viewer.py:2382
 msgid "Transition"
 msgstr ""
 
@@ -3208,7 +3219,7 @@
 msgid "Transitions"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:123
+#: ../dialogs/AboutDialog.py:131
 msgid "Translated by"
 msgstr ""
 
@@ -3277,7 +3288,7 @@
 msgid "Undo"
 msgstr ""
 
-#: ../ProjectController.py:332
+#: ../ProjectController.py:382
 msgid "Unknown"
 msgstr ""
 
@@ -3286,7 +3297,7 @@
 msgid "Unknown variable \"%s\" for this POU!"
 msgstr ""
 
-#: ../ProjectController.py:329 ../ProjectController.py:330
+#: ../ProjectController.py:379 ../ProjectController.py:380
 msgid "Unnamed"
 msgstr ""
 
@@ -3300,7 +3311,7 @@
 msgid "Unrecognized data size \"%s\""
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:632 ../controls/VariablePanel.py:798
+#: ../editors/DataTypeEditor.py:632 ../controls/VariablePanel.py:810
 msgid "User Data Types"
 msgstr ""
 
@@ -3321,7 +3332,7 @@
 msgstr ""
 
 #: ../dialogs/ActionBlockDialog.py:42 ../editors/Viewer.py:526
-#: ../editors/Viewer.py:2374
+#: ../editors/Viewer.py:2385
 msgid "Variable"
 msgstr ""
 
@@ -3387,7 +3398,7 @@
 msgid "Warning"
 msgstr ""
 
-#: ../ProjectController.py:616
+#: ../ProjectController.py:666
 msgid "Warnings in ST/IL/SFC code generator :\n"
 msgstr ""
 
@@ -3403,7 +3414,7 @@
 msgid "Wrap search"
 msgstr ""
 
-#: ../dialogs/AboutDialog.py:122
+#: ../dialogs/AboutDialog.py:130
 msgid "Written by"
 msgstr ""
 
@@ -3423,7 +3434,7 @@
 "Open wxGlade anyway ?"
 msgstr ""
 
-#: ../ProjectController.py:292
+#: ../ProjectController.py:342
 msgid ""
 "You must have permission to work on the project\n"
 "Work on a project copy ?"
Binary file locale/ru_RU/LC_MESSAGES/Beremiz.mo has changed