--- a/Beremiz_service.py Mon Jun 11 08:34:15 2018 +0200
+++ b/Beremiz_service.py Mon Jun 18 12:12:57 2018 +0300
@@ -205,24 +205,13 @@
stopicon = wx.Image(Bpath("images", "icostop24.png"))
class ParamsEntryDialog(wx.TextEntryDialog):
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id=None):
- if id is not None:
- event(self, id, function)
- else:
- event(self, function)
def __init__(self, parent, message, caption=_("Please enter text"), defaultValue="",
style=wx.OK | wx.CANCEL | wx.CENTRE, pos=wx.DefaultPosition):
wx.TextEntryDialog.__init__(self, parent, message, caption, defaultValue, style, pos)
self.Tests = []
- if wx.VERSION >= (2, 8, 0):
- self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
- elif wx.VERSION >= (2, 6, 0):
- self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetAffirmativeButton().GetId())
- else:
- self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetChildren()[0].GetSizer().GetChildren()[0].GetWindow().GetId())
+ self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
def OnOK(self, event):
value = self.GetValue()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CONTRIBUTING.md Mon Jun 18 12:12:57 2018 +0300
@@ -0,0 +1,21 @@
+How Do I Submit A Good Pull Request?
+----------------------------------
+
+It's highly recommended to write nice and clean python code. Beremiz
+project tries to follows most of PEP-8 recommendations. They are
+automatically checked on every push and merge by Bitbucket pipelines.
+
+To avoid pushing "unclean" code, i's recommended to add one of the following
+commands to pre commit Mercurial hook into .hg/hgrc configuration file.
+
+```
+[hooks]
+pretxncommit.linter = ./tests/tools/check_source.sh --only-changes
+```
+or the same done using Docker container, so result will be the same as
+on Bitbucket pipeline.
+
+```
+[hooks]
+pretxncommit.linter = hg status -m -n -a -n -I '**.py' --change $HG_NODE > files.lst && docker run --volume=$PWD:/beremiz --workdir="/beremiz" --volume=$PWD/../CanFestival-3:/CanFestival-3 --memory=1g --entrypoint=/beremiz/tests/tools/check_source.sh skvorl/beremiz-requirements --files-to-check files.lst
+```
--- a/ConfigTreeNode.py Mon Jun 11 08:34:15 2018 +0200
+++ b/ConfigTreeNode.py Mon Jun 18 12:12:57 2018 +0300
@@ -501,7 +501,7 @@
# Delete confnode dir
try:
shutil.rmtree(CTNInstance.CTNPath())
- except:
+ except Exception:
pass
# Remove child of Children
self.Children[CTNInstance.CTNType].remove(CTNInstance)
--- a/IDEFrame.py Mon Jun 11 08:34:15 2018 +0200
+++ b/IDEFrame.py Mon Jun 18 12:12:57 2018 +0300
@@ -211,13 +211,7 @@
def AppendMenu(parent, help, id, kind, text):
- """
- Compatibility function for wx versions < 2.6
- """
- if wx.VERSION >= (2, 6, 0):
- parent.Append(help=help, id=id, kind=kind, text=text)
- else:
- parent.Append(helpString=help, id=id, kind=kind, item=text)
+ parent.Append(help=help, id=id, kind=kind, text=text)
[
@@ -323,7 +317,7 @@
split = (wx.RIGHT, 1.0 - float(tab["size"][0]) / float(rect.width))
split_rect = wx.Rect(rect.x, rect.y,
rect.width - tab["size"][0] - TAB_BORDER, rect.height)
- split_id = id
+ split_id = idx
break
if split is not None:
split_tab = tabs.pop(split_id)
@@ -341,13 +335,6 @@
class IDEFrame(wx.Frame):
"""IDEFrame Base Class"""
- # Compatibility function for wx versions < 2.6
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id=None):
- if id is not None:
- event(self, id, function)
- else:
- event(self, function)
def _init_coll_MenuBar_Menus(self, parent):
parent.Append(menu=self.FileMenu, title=_(u'&File'))
@@ -953,11 +940,14 @@
return data
else:
wx.TheClipboard.UsePrimarySelection(primary_selection)
- if wx.TheClipboard.Open():
+
+ if not wx.TheClipboard.IsOpened():
dataobj = wx.TextDataObject()
- if wx.TheClipboard.GetData(dataobj):
- data = dataobj.GetText()
- wx.TheClipboard.Close()
+ if wx.TheClipboard.Open():
+ success = wx.TheClipboard.GetData(dataobj)
+ wx.TheClipboard.Close()
+ if success:
+ data = dataobj.GetText()
return data
def SetCopyBuffer(self, text, primary_selection=False):
@@ -965,13 +955,14 @@
return
else:
wx.TheClipboard.UsePrimarySelection(primary_selection)
- if wx.TheClipboard.Open():
+ if not wx.TheClipboard.IsOpened():
data = wx.TextDataObject()
data.SetText(text)
- wx.TheClipboard.SetData(data)
- wx.TheClipboard.Flush()
- wx.TheClipboard.Close()
- self.RefreshEditMenu()
+ if wx.TheClipboard.Open():
+ wx.TheClipboard.SetData(data)
+ wx.TheClipboard.Flush()
+ wx.TheClipboard.Close()
+ wx.CallAfter(self.RefreshEditMenu)
def GetDrawingMode(self):
return self.DrawingMode
@@ -2125,10 +2116,7 @@
EditorToolBar = self.Panes["EditorToolBar"]
for item in self.CurrentEditorToolBar:
- if wx.VERSION >= (2, 6, 0):
- self.Unbind(wx.EVT_MENU, id=item)
- else:
- self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED)
+ self.Unbind(wx.EVT_MENU, id=item)
if EditorToolBar:
EditorToolBar.DeleteTool(item)
--- a/PLCOpenEditor.py Mon Jun 11 08:34:15 2018 +0200
+++ b/PLCOpenEditor.py Mon Jun 18 12:12:57 2018 +0300
@@ -70,14 +70,6 @@
class PLCOpenEditor(IDEFrame):
- # Compatibility function for wx versions < 2.6
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id=None):
- if id is not None:
- event(self, id, function)
- else:
- event(self, function)
-
def _init_coll_FileMenu_Items(self, parent):
AppendMenu(parent, help='', id=wx.ID_NEW,
kind=wx.ITEM_NORMAL, text=_(u'New') + '\tCTRL+N')
--- a/connectors/PYRO/dialog.py Mon Jun 11 08:34:15 2018 +0200
+++ b/connectors/PYRO/dialog.py Mon Jun 18 12:12:57 2018 +0300
@@ -10,8 +10,9 @@
from __future__ import print_function
import wx
+from zope.interface import implementer
+
from controls.UriLocationEditor import IConnectorPanel
-from zope.interface import implementer
URITypes = ["LOCAL", "PYRO", "PYROS"]
@@ -19,7 +20,6 @@
def PYRO_connector_dialog(confnodesroot):
[ID_IPTEXT, ID_PORTTEXT] = [wx.NewId() for _init_ctrls in range(2)]
-
@implementer(IConnectorPanel)
class PYROConnectorPanel(wx.Panel):
def __init__(self, typeConnector, parrent, *args, **kwargs):
@@ -31,24 +31,18 @@
self.uri = None
def _init_ctrls(self):
- self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size = wx.Size(200, -1))
- self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size = wx.Size(200, -1))
+ self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size=wx.Size(200, -1))
+ self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size=wx.Size(200, -1))
def _init_sizers(self):
- self.mainSizer = wx.BoxSizer(wx.VERTICAL)
- self.uriSizer = wx.BoxSizer(wx.HORIZONTAL)
- self.portSizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.mainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=5, vgap=10)
+ self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI host:")),
+ flag=wx.ALIGN_CENTER_VERTICAL)
+ self.mainSizer.AddWindow(self.IpText, flag=wx.GROW)
- self.uriSizer.Add(wx.StaticText(self, wx.ID_ANY, "URI host:", size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
- self.uriSizer.AddSpacer((0,0))
- self.uriSizer.Add(self.IpText, proportion=1, flag=wx.ALIGN_RIGHT)
- self.mainSizer.Add(self.uriSizer, border=2, flag=wx.ALL)
-
- self.portSizer.Add(wx.StaticText(self, wx.ID_ANY, "URI port:", size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
- self.portSizer.AddSpacer((0,0))
- self.portSizer.Add(self.PortText, proportion=1, flag=wx.ALIGN_RIGHT)
- self.mainSizer.Add(self.portSizer, border=2, flag=wx.ALL)
-
+ self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI port:")),
+ flag=wx.ALIGN_CENTER_VERTICAL)
+ self.mainSizer.AddWindow(self.PortText, flag=wx.GROW)
self.SetSizer(self.mainSizer)
def SetURI(self, uri):
@@ -61,7 +55,6 @@
elif length == 2:
self.IpText.SetValue(uri_list[1].strip("/"))
-
def GetURI(self):
self.uri = self.type+"://"+self.IpText.GetValue()+":"+self.PortText.GetValue()
return self.uri
--- a/connectors/WAMP/dialog.py Mon Jun 11 08:34:15 2018 +0200
+++ b/connectors/WAMP/dialog.py Mon Jun 18 12:12:57 2018 +0300
@@ -8,9 +8,11 @@
from __future__ import absolute_import
from __future__ import print_function
+
import wx
+from zope.interface import implementer
+
from controls.UriLocationEditor import IConnectorPanel
-from zope.interface import implementer
URITypes = ["WAMP", "WAMPS"]
@@ -18,7 +20,6 @@
def WAMP_connector_dialog(confnodesroot):
[ID_IPTEXT, ID_PORTTEXT, ID_REALMTEXT, ID_WAMPIDTEXT, ID_SECURECHECKBOX] = [wx.NewId() for _init_ctrls in range(5)]
-
@implementer(IConnectorPanel)
class WAMPConnectorPanel(wx.Panel):
def __init__(self, typeConnector, parrent, *args, **kwargs):
@@ -30,40 +31,32 @@
self.uri = None
def _init_ctrls(self):
- self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size = wx.Size(200, -1))
- self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size = wx.Size(200, -1))
- self.RealmText = wx.TextCtrl(parent=self, id=ID_REALMTEXT, size = wx.Size(200, -1))
- self.WAMPIDText = wx.TextCtrl(parent=self, id=ID_WAMPIDTEXT, size = wx.Size(200, -1))
+ self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size=wx.Size(200, -1))
+ self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size=wx.Size(200, -1))
+ self.RealmText = wx.TextCtrl(parent=self, id=ID_REALMTEXT, size=wx.Size(200, -1))
+ self.WAMPIDText = wx.TextCtrl(parent=self, id=ID_WAMPIDTEXT, size=wx.Size(200, -1))
self.SecureCheckbox = wx.CheckBox(self, ID_SECURECHECKBOX, _("Is connection secure?"))
def _init_sizers(self):
- self.mainSizer = wx.BoxSizer(wx.VERTICAL)
- self.uriSizer = wx.BoxSizer(wx.HORIZONTAL)
- self.portSizer = wx.BoxSizer(wx.HORIZONTAL)
- self.realmSizer = wx.BoxSizer(wx.HORIZONTAL)
- self.wampIDSizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.mainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=5, vgap=10)
+ self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI host:")),
+ flag=wx.ALIGN_CENTER_VERTICAL)
+ self.mainSizer.AddWindow(self.IpText, flag=wx.GROW)
- self.uriSizer.Add(wx.StaticText(self, wx.ID_ANY, _("URI host:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
- self.uriSizer.AddSpacer((0,0))
- self.uriSizer.Add(self.IpText, proportion=1, flag=wx.ALIGN_RIGHT)
- self.mainSizer.Add(self.uriSizer, border=2, flag=wx.ALL)
+ self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI port:")),
+ flag=wx.ALIGN_CENTER_VERTICAL)
+ self.mainSizer.AddWindow(self.PortText, flag=wx.GROW)
- self.portSizer.Add(wx.StaticText(self, wx.ID_ANY, _("URI port:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
- self.portSizer.AddSpacer((0,0))
- self.portSizer.Add(self.PortText, proportion=1, flag=wx.ALIGN_RIGHT)
- self.mainSizer.Add(self.portSizer, border=2, flag=wx.ALL)
+ self.mainSizer.AddWindow(wx.StaticText(self, label=_("Realm:")),
+ flag=wx.ALIGN_CENTER_VERTICAL)
+ self.mainSizer.AddWindow(self.RealmText, flag=wx.GROW)
- self.realmSizer.Add(wx.StaticText(self, wx.ID_ANY, _("Realm:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
- self.realmSizer.AddSpacer((0, 0))
- self.realmSizer.Add(self.RealmText, proportion=1, flag=wx.ALIGN_RIGHT)
- self.mainSizer.Add(self.realmSizer, border=2, flag=wx.ALL)
+ self.mainSizer.AddWindow(wx.StaticText(self, label=_("WAMP ID:")),
+ flag=wx.ALIGN_CENTER_VERTICAL)
+ self.mainSizer.AddWindow(self.WAMPIDText, flag=wx.GROW)
- self.wampIDSizer.Add(wx.StaticText(self, wx.ID_ANY, _("WAMP ID:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
- self.wampIDSizer.AddSpacer((0, 0))
- self.wampIDSizer.Add(self.WAMPIDText, proportion=1, flag=wx.ALIGN_RIGHT)
- self.mainSizer.Add(self.wampIDSizer, border=2, flag=wx.ALL)
-
- self.mainSizer.Add(self.SecureCheckbox, proportion=1, flag=wx.ALIGN_LEFT)
+ self.mainSizer.AddWindow(wx.StaticText(self, label=""), flag=wx.ALIGN_CENTER_VERTICAL)
+ self.mainSizer.AddWindow(self.SecureCheckbox, flag=wx.GROW)
self.SetSizer(self.mainSizer)
--- a/connectors/__init__.py Mon Jun 11 08:34:15 2018 +0200
+++ b/connectors/__init__.py Mon Jun 18 12:12:57 2018 +0300
@@ -36,9 +36,11 @@
def _GetLocalConnectorClassFactory(name):
return lambda: getattr(__import__(name, globals(), locals()), name + "_connector_factory")
+
def _GetLocalConnectorClassDialog(name):
return lambda: getattr(__import__(name + '.dialog', globals(), locals(), fromlist=['dialog']), name + "_connector_dialog")
+
def _GetLocalConnectorURITypes(name):
return lambda: getattr(__import__(name + '.dialog', globals(), locals(), fromlist=['dialog']), "URITypes", None)
@@ -50,7 +52,7 @@
not name.startswith("__"))}
connectors_dialog = {name:
- {"function":_GetLocalConnectorClassDialog(name), "URITypes": _GetLocalConnectorURITypes(name)}
+ {"function": _GetLocalConnectorClassDialog(name), "URITypes": _GetLocalConnectorURITypes(name)}
for name in listdir(_base_path)
if (path.isdir(path.join(_base_path, name)) and
not name.startswith("__"))}
@@ -81,6 +83,7 @@
connectorclass = connectors[servicetype]()
return connectorclass(uri, confnodesroot)
+
def ConnectorDialog(conn_type, confnodesroot):
if conn_type not in connectors_dialog:
return None
@@ -88,6 +91,7 @@
connectorclass = connectors_dialog[conn_type]["function"]()
return connectorclass(confnodesroot)
+
def GetConnectorFromURI(uri):
typeOfConnector = None
for conn_type in connectors_dialog:
--- a/controls/SearchResultPanel.py Mon Jun 11 08:34:15 2018 +0200
+++ b/controls/SearchResultPanel.py Mon Jun 18 12:12:57 2018 +0300
@@ -58,13 +58,6 @@
class SearchResultPanel(wx.Panel):
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id=None):
- if id is not None:
- event(self, id, function)
- else:
- event(self, function)
-
def _init_coll_MainSizer_Items(self, parent):
parent.AddSizer(self.HeaderSizer, 0, border=0, flag=wx.GROW)
parent.AddWindow(self.SearchResultsTree, 1, border=0, flag=wx.GROW)
--- a/controls/UriLocationEditor.py Mon Jun 11 08:34:15 2018 +0200
+++ b/controls/UriLocationEditor.py Mon Jun 18 12:12:57 2018 +0300
@@ -1,52 +1,57 @@
+from __future__ import absolute_import
+
import wx
from zope.interface import Interface, Attribute
from zope.interface.verify import verifyObject
from connectors import connectors_dialog, ConnectorDialog, GetConnectorFromURI
-[ID_URIWIZARDDIALOG,ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)]
+[ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)]
+
class IConnectorPanel(Interface):
"""This is interface for panel of seperate connector type"""
uri = Attribute("""uri of connections""")
type = Attribute("""type of connector""")
- def SetURI(uri):
+ def SetURI(uri): # pylint: disable=no-self-argument
"""methode for set uri"""
- def GetURI():
+ def GetURI(): # pylint: disable=no-self-argument
"""metohde for get uri"""
class UriLocationEditor(wx.Dialog):
def _init_ctrls(self, parent):
- wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG,
- name='UriLocationEditor', parent=parent,
- title='Uri location')
- self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices = self.URITYPES)
+ self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices=self.URITYPES)
self.UriTypeChoice.SetSelection(0)
self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice)
self.PanelSizer = wx.BoxSizer(wx.HORIZONTAL)
- self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL)
+ self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL)
def _init_sizers(self):
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
typeSizer = wx.BoxSizer(wx.HORIZONTAL)
- typeSizer.Add(wx.StaticText(self,wx.ID_ANY,"URI type:"), border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
+ typeSizer.Add(wx.StaticText(self, wx.ID_ANY, _("URI type:")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL)
self.mainSizer.Add(typeSizer)
self.mainSizer.Add(self.PanelSizer, border=5, flag=wx.ALL)
- self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL)
+ self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL)
self.SetSizer(self.mainSizer)
+ self.Layout()
+ self.Fit()
def __init__(self, parent, uri):
- self.URITYPES = ["- Select URI type -"]
+ wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG,
+ name='UriLocationEditor', parent=parent,
+ title='Uri location')
+ self.URITYPES = [_("- Select URI type -")]
for connector_type, connector_function in connectors_dialog.iteritems():
try:
connector_function['function']()
self.URITYPES.append(connector_type)
- except Exception as e:
+ except Exception:
pass
self.selected = None
--- a/editors/ConfTreeNodeEditor.py Mon Jun 11 08:34:15 2018 +0200
+++ b/editors/ConfTreeNodeEditor.py Mon Jun 18 12:12:57 2018 +0300
@@ -359,7 +359,6 @@
dialog.Destroy()
-
def GenerateSizerElements(self, sizer, elements, path, clean=True):
if clean:
sizer.Clear(True)
--- a/editors/TextViewer.py Mon Jun 11 08:34:15 2018 +0200
+++ b/editors/TextViewer.py Mon Jun 18 12:12:57 2018 +0300
@@ -79,13 +79,6 @@
ID = ID_TEXTVIEWER
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id=None):
- if id is not None:
- event(self, id, function)
- else:
- event(self, function)
-
def _init_Editor(self, prnt):
self.Editor = CustomStyledTextCtrl(id=ID_TEXTVIEWERTEXTCTRL,
parent=prnt, name="TextViewer", size=wx.Size(0, 0), style=0)
--- a/editors/Viewer.py Mon Jun 11 08:34:15 2018 +0200
+++ b/editors/Viewer.py Mon Jun 18 12:12:57 2018 +0300
@@ -66,10 +66,7 @@
def AppendMenu(parent, help, id, kind, text):
- if wx.VERSION >= (2, 6, 0):
- parent.Append(help=help, id=id, kind=kind, text=text)
- else:
- parent.Append(helpString=help, id=id, kind=kind, item=text)
+ parent.Append(help=help, id=id, kind=kind, text=text)
if wx.Platform == '__WXMSW__':
@@ -535,13 +532,6 @@
manipulating graphic elements
"""
- if wx.VERSION < (2, 6, 0):
- def Bind(self, event, function, id=None):
- if id is not None:
- event(self, id, function)
- else:
- event(self, function)
-
# Add list of menu items to the given menu
def AddMenuItems(self, menu, items):
for item in items:
@@ -900,10 +890,7 @@
else:
dc = wx.ClientDC(self.Editor)
dc.SetFont(self.GetFont())
- if wx.VERSION >= (2, 6, 0):
- self.Editor.DoPrepareDC(dc)
- else:
- self.Editor.PrepareDC(dc)
+ self.Editor.DoPrepareDC(dc)
dc.SetUserScale(self.ViewScale[0], self.ViewScale[1])
return dc
--- a/i18n/app.fil Mon Jun 11 08:34:15 2018 +0200
+++ b/i18n/app.fil Mon Jun 18 12:12:57 2018 +0300
@@ -36,8 +36,10 @@
../graphics/SFC_Objects.py
../graphics/GraphicCommons.py
../connectors/PYRO/__init__.py
+../connectors/PYRO/dialog.py
../connectors/__init__.py
../connectors/WAMP/__init__.py
+../connectors/WAMP/dialog.py
../targets/Generic/XSD
../targets/XSD_toolchain_makefile
../targets/Xenomai/__init__.py
@@ -53,7 +55,9 @@
../py_ext/PythonEditor.py
../py_ext/PythonFileCTNMixin.py
../wxglade_hmi/wxglade_hmi.py
+../modbus/modbus.py
../runtime/NevowServer.py
+../runtime/WampClient.py
../runtime/PLCObject.py
../runtime/ServicePublisher.py
../ConfigTreeNode.py
@@ -77,6 +81,7 @@
../controls/CustomTable.py
../controls/EnhancedStatusBar.py
../controls/LibraryPanel.py
+../controls/UriLocationEditor.py
../controls/CustomToolTip.py
../controls/LogViewer.py
../controls/FolderTree.py
@@ -111,8 +116,15 @@
../svgui/svgui.py
../svgui/svgui_server.py
../svgui/svguilib.py
+../plcopen/InstancesPathCollector.py
+../plcopen/types_enums.py
+../plcopen/InstanceTagnameCollector.py
+../plcopen/BlockInstanceCollector.py
../plcopen/iec_std.csv
../plcopen/structures.py
+../plcopen/XSLTModelQuery.py
+../plcopen/POUVariablesCollector.py
+../plcopen/VariableInfoCollector.py
../plcopen/plcopen.py
../plcopen/definitions.py
../IDEFrame.py
--- a/i18n/messages.po Mon Jun 11 08:34:15 2018 +0200
+++ b/i18n/messages.po Mon Jun 18 12:12:57 2018 +0300
@@ -1,14 +1,14 @@
# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# Copyright (C) 2018 THE Beremiz'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# Automatically generated, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: Beremiz\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-07-05 13:02+0300\n"
-"PO-Revision-Date: 2017-07-05 13:02+0300\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: 2018-06-15 16:39+0300\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: en_US\n"
@@ -17,7 +17,7 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -42,151 +42,156 @@
"\n"
"Traceback:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr " External"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr " InOut"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr " Input"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr " Local"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr " Output"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr " Temp"
-#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69
-#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
#, python-format
msgid " and %s"
msgstr " and %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr " generation failed !\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "\"%s\" Data Type doesn't exist !!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "\"%s\" POU already exists !!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "\"%s\" POU doesn't exist !!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" can't use itself!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "\"%s\" config already exists!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "\"%s\" configuration already exists !!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "\"%s\" configuration doesn't exist !!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "\"%s\" data type already exists!"
-#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220
-#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263
-#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375
-#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301
-#: ../controls/VariablePanel.py:396
+#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220
+#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304
+#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418
+#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299
+#: ../controls/VariablePanel.py:425
#, python-format
msgid "\"%s\" element for this pou already exists!"
msgstr "\"%s\" element for this pou already exists!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "\"%s\" folder is not a valid Beremiz project\n"
-#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101
-#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50
-#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121
-#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484
-#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587
-#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773
-#: ../IDEFrame.py:1596
+#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108
+#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54
+#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129
+#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603
+#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787
+#: ../IDEFrame.py:1629
#, python-format
msgid "\"%s\" is a keyword. It can't be used!"
msgstr "\"%s\" is a keyword. It can't be used!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" is an invalid value!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" is not a valid folder!"
-#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99
-#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48
-#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119
-#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482
-#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774
-#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594
+#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106
+#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52
+#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127
+#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516
+#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772
+#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627
#, python-format
msgid "\"%s\" is not a valid identifier!"
msgstr "\"%s\" is not a valid identifier!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr "\"%s\" is used by one or more POUs. Do you wish to continue?"
-#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123
-#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346
-#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270
-#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350
-#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338
-#: ../IDEFrame.py:1614
+#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131
+#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389
+#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268
+#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351
+#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364
+#: ../IDEFrame.py:1647
#, python-format
msgid "\"%s\" pou already exists!"
msgstr "\"%s\" pou already exists!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "\"%s\" step already exists!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "\"%s\" value already defined!"
-#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
#, python-format
msgid "\"%s\" value isn't a valid array dimension!"
msgstr "\"%s\" value isn't a valid array dimension!"
-#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750
+#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766
#, python-format
msgid ""
"\"%s\" value isn't a valid array dimension!\n"
@@ -195,207 +200,203 @@
"\"%s\" value isn't a valid array dimension!\n"
"Right value must be greater than left value."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" is already used by \"{a2}\"!"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
msgstr "%03gms"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
msgstr "%dd"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
#, python-format
msgid "%dh"
msgstr "%dh"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
#, python-format
msgid "%dm"
msgstr "%dm"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
#, python-format
msgid "%dms"
msgstr "%dms"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
#, python-format
msgid "%ds"
msgstr "%ds"
-#: ../PLCControler.py:1533
+#: ../PLCControler.py:1114
#, python-format
msgid "%s Data Types"
msgstr "%s Data Types"
-#: ../PLCControler.py:1516
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
msgstr "%s POUs"
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr "%s Profile"
-#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657
-#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677
-#: ../plcopen/plcopen.py:1687
+#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908
+#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929
+#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950
#, python-format
msgid "%s body don't have instances!"
msgstr "%s body don't have instances!"
-#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712
-#: ../plcopen/plcopen.py:1719
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
#, python-format
msgid "%s body don't have text!"
msgstr "%s body don't have text!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Add Element"
-#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121
-#: ../dialogs/AboutDialog.py:158
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
msgid "&Close"
msgstr "&Close"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&Configuration"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&Data Type"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Delete"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Display"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Edit"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&File"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Function"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Help"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&License"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Program"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Properties"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&Recent Projects"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Resource"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}' - {a2} match in project"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} matches in project"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' is located at {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d matches)"
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409
-msgid ", "
-msgstr ", "
-
-#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94
-#: ../dialogs/PouDialog.py:116
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
#, python-format
msgid ", %s"
msgstr ", %s"
-#: ../PLCOpenEditor.py:404
-msgid ". "
-msgstr ". "
-
-#: ../controls/LogViewer.py:279
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr "- Select URI type -"
+
+#: ../controls/LogViewer.py:287
msgid "1d"
msgstr "1d"
-#: ../controls/LogViewer.py:280
+#: ../controls/LogViewer.py:288
msgid "1h"
msgstr "1h"
-#: ../controls/LogViewer.py:281
+#: ../controls/LogViewer.py:289
msgid "1m"
msgstr "1m"
-#: ../controls/LogViewer.py:282
+#: ../controls/LogViewer.py:290
msgid "1s"
msgstr "1s"
-#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663
-#: ../IDEFrame.py:1682
+#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696
+#: ../IDEFrame.py:1715
#, python-format
msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
msgstr "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
-#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103
-#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101
-#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644
+#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110
+#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108
+#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677
#, python-format
msgid "A POU named \"%s\" already exists!"
msgstr "A POU named \"%s\" already exists!"
@@ -405,26 +406,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "A child named \"{a1}\" already exists -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "A location must be selected!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "A task with the same name already exists!"
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777
-#: ../IDEFrame.py:1633 ../IDEFrame.py:1646
+#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791
+#: ../IDEFrame.py:1666 ../IDEFrame.py:1679
#, python-format
msgid "A variable with \"%s\" as name already exists in this pou!"
msgstr "A variable with \"%s\" as name already exists in this pou!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "A variable with \"%s\" as name already exists!"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "About"
@@ -432,125 +433,125 @@
msgid "Absolute number"
msgstr "Absolute number"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Action"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "Action Block"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Action Name"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Action Name:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "Action with name %s doesn't exist!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "Actions"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "Actions:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "Active"
-#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101
-#: ../BeremizIDE.py:965 ../editors/Viewer.py:647
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
msgid "Add"
msgstr "Add"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
msgstr "Add Action"
-#: ../features.py:32
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr "Add C code accessing located variables synchronously"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "Add Configuration"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "Add DataType"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Add Divergence Branch"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "Add IP"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "Add POU"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "Add Python code executed asynchronously"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "Add Resource"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "Add Transition"
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr "Add Wire Segment"
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr "Add a new initial step"
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr "Add a new jump"
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
msgstr "Add a new step"
-#: ../features.py:34
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
msgstr "Add a simple WxGlade based GUI."
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "Add action"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "Add element"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "Add instance"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Add slave"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "Add task"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "Add variable"
@@ -558,44 +559,44 @@
msgid "Addition"
msgstr "Addition"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "Additional function blocks"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "Adjust Block Size"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "Alignment"
-#: ../dialogs/BrowseLocationsDialog.py:40
-#: ../dialogs/BrowseLocationsDialog.py:48
-#: ../dialogs/BrowseLocationsDialog.py:141
-#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298
-#: ../controls/VariablePanel.py:70
+#: ../dialogs/BrowseLocationsDialog.py:42
+#: ../dialogs/BrowseLocationsDialog.py:53
+#: ../dialogs/BrowseLocationsDialog.py:152
+#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307
+#: ../controls/VariablePanel.py:88
msgid "All"
msgstr "All"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "Already connected. Please disconnect\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "An element named \"%s\" already exists in this structure!"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "An instance with the same name already exists!"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr "Apply name modification to all continuations with the same name"
@@ -615,8 +616,8 @@
msgid "Arithmetic"
msgstr "Arithmetic"
-#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633
-#: ../controls/VariablePanel.py:858
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
msgid "Array"
msgstr "Array"
@@ -624,45 +625,37 @@
msgid "Assignment"
msgstr "Assignment"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "At least a variable or an expression must be selected!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Author"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Author Name (optional):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Backward"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Bad domain name (circular) at "
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Bad domain name at "
-
-#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
#, python-format
msgid "Bad location size : %s"
msgstr "Bad location size : %s"
-#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175
-#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
msgid "Base Type:"
msgstr "Base Type:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "Base Types"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -694,85 +687,85 @@
msgid "Bitwise inverting"
msgstr "Bitwise inverting"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "Block"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "Block Properties"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "Block name"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "Bottom"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr "Broken"
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr "Browse %s values library"
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr "Browse Locations"
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "Build"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "Build directory already clean\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr "Build project into build folder"
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "C Build crashed !\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "C Build failed.\n"
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr "C code"
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr "C code generated successfully.\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr "C compilation failed.\n"
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr "C compilation of %s failed.\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "C extension"
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
msgstr "C&redits"
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
msgstr "CANOpen network"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "CANOpen slave"
@@ -780,34 +773,34 @@
msgid "CANopen support"
msgstr "CANopen support"
-#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603
-#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643
+#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853
+#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894
msgid "Can only generate execution order on FBD networks!"
msgstr "Can only generate execution order on FBD networks!"
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr "Can only give a location to local or global variables"
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr "Can't generate program to file %s!"
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr "Can't give a location to a function block instance"
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr "Can't save project to file %s!"
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr "Can't set an initial value to a function block instance"
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr "Cannot create child {a1} of type {a2} "
@@ -817,44 +810,48 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "Cannot find lower free IEC channel than %d\n"
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "Cannot get PLC status - connection failed.\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "Cannot open/parse VARIABLES.csv!\n"
-#: ../canfestival/config_utils.py:374
+#: ../canfestival/config_utils.py:400
#, python-brace-format
msgid "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))"
msgstr "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))"
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
+#: ../ProjectController.py:1761
+msgid "Cannot transfer while PLC is running. Stop it now?"
+msgstr "Cannot transfer while PLC is running. Stop it now?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr "Case sensitive"
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "Center"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "Change IP of interface to bind"
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "Change Name"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "Change POU Type To"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "Change Port Number"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "Change working directory"
@@ -862,115 +859,119 @@
msgid "Character string"
msgstr "Character string"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "Choose a SVG file"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "Choose a directory to save project"
-#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302
-#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
msgid "Choose a file"
msgstr "Choose a file"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../BeremizIDE.py:900
msgid "Choose a project"
msgstr "Choose a project"
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
msgstr "Choose a value for %s:"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "Choose a working directory "
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Choose an empty directory for new project"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr "Chosen folder doesn't contain a program. It's not a valid project!"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr "Chosen folder isn't empty. You can't use it for a new project!"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "Class"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "Class Filter:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "Class:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "Clean"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "Clean log messages"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "Clean project build folder"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "Cleaning the build directory\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "Clear Errors"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "Clear Execution Order"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "Close"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Close Application"
-#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110
-#: ../IDEFrame.py:1013
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
msgid "Close Project"
msgstr "Close Project"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "Close Tab"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "Coil"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Comment"
-#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161
-#: ../PLCOpenEditor.py:164
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
msgid "Community support"
msgstr "Community support"
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "Company Name"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "Company Name (required):"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "Company URL (optional):"
@@ -978,7 +979,7 @@
msgid "Comparison"
msgstr "Comparison"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "Compiling IEC Program into C code...\n"
@@ -986,93 +987,93 @@
msgid "Concatenation"
msgstr "Concatenation"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "Config"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "Config variables"
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr "Configuration"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr "Configurations"
-#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360
-#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342
-#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328
+#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403
+#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343
+#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354
msgid "Confirm or change variable name"
msgstr "Confirm or change variable name"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "Connect"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "Connect to the target PLC"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "Connected to URI: %s"
-#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586
-#: ../editors/Viewer.py:2408
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
msgid "Connection"
msgstr "Connection"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "Connection Properties"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "Connection canceled!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "Connection failed to %s!\n"
-#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
msgid "Connection lost!\n"
msgstr "Connection lost!\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "Connection to '%s' failed.\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "Connector"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "Connectors:"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "Console"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "Constant"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr "Contact"
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "Content Description (optional):"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "Continuation"
@@ -1092,20 +1093,20 @@
msgid "Conversion to time-of-day"
msgstr "Conversion to time-of-day"
-#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370
-#: ../IDEFrame.py:425
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
msgid "Copy"
msgstr "Copy"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "Copy POU"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "Copy file from left folder to right"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "Copy file from right folder to left"
@@ -1113,7 +1114,7 @@
msgid "Cosine"
msgstr "Cosine"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
@@ -1122,12 +1123,12 @@
"Could not add child \"{a1}\", type {a2} :\n"
"{a3}\n"
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr "Couldn't import old %s file."
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
@@ -1136,7 +1137,7 @@
"Couldn't load confnode base parameters {a1} :\n"
" {a2}"
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
#, python-brace-format
msgid ""
"Couldn't load confnode parameters {a1} :\n"
@@ -1145,111 +1146,107 @@
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Couldn't paste non-POU object."
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "Couldn't start PLC !\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "Couldn't stop PLC !\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Couldn't stop debugger.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "Create HMI"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "Create a new POU"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "Create a new action"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "Create a new action block"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "Create a new block"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "Create a new branch"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "Create a new coil"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "Create a new comment"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "Create a new connection"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "Create a new contact"
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr "Create a new divergence"
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr "Create a new divergence or convergence"
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "Create a new initial step"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "Create a new jump"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "Create a new power rail"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "Create a new rung"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "Create a new step"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "Create a new transition"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "Create a new variable"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "Credits"
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr "Current working directory :"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "Cut"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "Cyclic"
@@ -1261,19 +1258,19 @@
msgid "DEPRECATED"
msgstr "DEPRECATED"
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr "DS-301 Profile"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "DS-302 Profile"
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr "Data Type"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "Data Types"
@@ -1294,66 +1291,58 @@
msgid "Date subtraction"
msgstr "Date subtraction"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "Days:"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr "Debug does not match PLC - stop/transfert/start to re-enable\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "Debug instance"
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr "Debug: %s"
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr "Debug: Unknown variable '%s'\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Debug: Unsupported type to debug '%s'\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "Debugger"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Debugger disabled\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "Debugger ready\n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Debugger stopped.\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "Delete"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "Delete Divergence Branch"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "Delete File"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "Delete Wire Segment"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "Delete item"
@@ -1361,47 +1350,47 @@
msgid "Deletion (within)"
msgstr "Deletion (within)"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "Derivation Type:"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr "Description"
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr "Description:"
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "Dimensions:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr "Direction"
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "Direction:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "Directly"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "Disconnect"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "Disconnect from PLC"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "Disconnected"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "Divergence"
@@ -1409,120 +1398,120 @@
msgid "Division"
msgstr "Division"
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr "Do you really want to delete the file '%s'?"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "Documentation"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "Done"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Duration"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "EDS files (*.eds)|*.eds|All files|*.*"
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "Edit Block"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "Edit Coil Values"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "Edit Contact Values"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr "Edit Duration"
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr "Edit Step"
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "Edit a WxWidgets GUI with WXGlade"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "Edit action block properties"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "Edit array type properties"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "Edit comment"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "Edit file"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "Edit item"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "Edit jump target"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr "Edit raw IEC code added to code generated by PLCGenerator"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "Edit step name"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "Edit transition"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "Editor ToolBar"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "Editor selection"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "Elements :"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "Empty"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Enable Undo/Redo"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Empty dimension isn't allowed."
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "Enter a name "
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "Enter a port number "
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "Enter the IP of the interface to bind"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Enumerated"
@@ -1530,44 +1519,44 @@
msgid "Equal to"
msgstr "Equal to"
-#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197
-#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60
-#: ../dialogs/DurationEditorDialog.py:121
-#: ../dialogs/DurationEditorDialog.py:167 ../dialogs/PouTransitionDialog.py:107
-#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:74
-#: ../dialogs/ArrayTypeDialog.py:97 ../dialogs/ArrayTypeDialog.py:103
-#: ../dialogs/PouNameDialog.py:54 ../dialogs/BrowseLocationsDialog.py:218
-#: ../dialogs/BrowseValuesLibraryDialog.py:83 ../dialogs/PouActionDialog.py:105
-#: ../dialogs/PouDialog.py:135 ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350
-#: ../PLCOpenEditor.py:430 ../PLCOpenEditor.py:440
-#: ../editors/ResourceEditor.py:436 ../editors/Viewer.py:424
-#: ../editors/LDViewer.py:666 ../editors/LDViewer.py:882
-#: ../editors/LDViewer.py:886 ../editors/DataTypeEditor.py:550
-#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:574
-#: ../editors/DataTypeEditor.py:743 ../editors/DataTypeEditor.py:750
-#: ../editors/TextViewer.py:389 ../editors/CodeFileEditor.py:762
-#: ../ProjectController.py:372 ../ProjectController.py:512
-#: ../ProjectController.py:519 ../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:759
-#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658
-#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682
-#: ../Beremiz_service.py:213
+#: ../dialogs/ForceVariableDialog.py:213
+#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64
+#: ../dialogs/DurationEditorDialog.py:124
+#: ../dialogs/DurationEditorDialog.py:170 ../dialogs/PouTransitionDialog.py:114
+#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:80
+#: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58
+#: ../dialogs/BrowseLocationsDialog.py:229
+#: ../dialogs/BrowseValuesLibraryDialog.py:87 ../dialogs/PouActionDialog.py:112
+#: ../dialogs/PouDialog.py:143 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324
+#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467
+#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893
+#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590
+#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766
+#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760
+#: ../ProjectController.py:391 ../ProjectController.py:531
+#: ../ProjectController.py:538 ../controls/FolderTree.py:222
+#: ../controls/ProjectPropertiesPanel.py:306
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227
+#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773
+#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710
+#: ../IDEFrame.py:1715 ../Beremiz_service.py:221
msgid "Error"
msgstr "Error"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid "Error : At least one configuration and one resource must be declared in PLC !\n"
msgstr "Error : At least one configuration and one resource must be declared in PLC !\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Error : IEC to C compiler returned %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1576,37 +1565,42 @@
"Error in ST/IL/SFC code generator :\n"
"%s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "Error while saving \"%s\"\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr "Error: Export slave failed\n"
-#: ../canfestival/canfestival.py:371
+#: ../modbus/modbus.py:601
+#, python-brace-format
+msgid "Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n"
+msgstr "Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n"
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "Error: No Master generated\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "Error: No PLC built\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "Exception while connecting %s!\n"
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "Execution Control:"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "Execution Order:"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "Experimental web based HMI"
@@ -1618,77 +1612,77 @@
msgid "Exponentiation"
msgstr "Exponentiation"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "Export CanOpen slave to EDS file"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr "Export graph values to clipboard"
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr "Export slave"
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "Expression:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "External"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "Extracting Located Variables...\n"
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "FBD"
msgstr "FBD"
-#: ../ProjectController.py:1791
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
msgstr "Failed : Must build before transfer.\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "Falling Edge"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "Fatal : cannot get builder.\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr "Fetching %s"
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr "Field %s hasn't a valid value!"
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr "Fields %s haven't a valid value!"
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr "File '%s' already exists!"
-#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37
-#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
msgid "Find"
msgstr "Find"
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr "Find Next"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr "Find Previous"
@@ -1696,93 +1690,89 @@
msgid "Find position"
msgstr "Find position"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr "Find:"
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "Force runtime reload\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "Force value"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "Forcing Variable Value"
-#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97
-#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95
-#: ../dialogs/PouDialog.py:117
+#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104
+#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102
+#: ../dialogs/PouDialog.py:125
#, python-format
msgid "Form isn't complete. %s must be filled!"
msgstr "Form isn't complete. %s must be filled!"
-#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236
-#: ../dialogs/ConnectionDialog.py:163
+#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
msgid "Form isn't complete. Name must be filled!"
msgstr "Form isn't complete. Name must be filled!"
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr "Form isn't complete. Valid block type must be selected!"
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr "Forward"
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "Function"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "Function &Block"
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr "Function Block"
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr "Function Block Types"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr "Function Blocks"
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr "Function Blocks can't be used in Functions!"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "FunctionBlock \"%s\" can't be pasted in a Function!!!"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "Functions"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr "Generate Program"
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Global"
msgstr "Global"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
msgid "Go to current value"
msgstr "Go to current value"
-#: ../controls/ProjectPropertiesPanel.py:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "Graphics"
@@ -1794,110 +1784,114 @@
msgid "Greater than or equal to"
msgstr "Greater than or equal to"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "Grid Resolution:"
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr "HTTP interface port :"
-#: ../controls/ProjectPropertiesPanel.py:121
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr "Height:"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr "Home Directory:"
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "Horizontal:"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr "Hours:"
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "IL"
msgstr "IL"
-#: ../dialogs/DiscoveryDialog.py:94
+#: ../dialogs/DiscoveryDialog.py:91
msgid "IP"
msgstr "IP"
-#: ../Beremiz_service.py:310 ../Beremiz_service.py:311
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
msgid "IP is not valid!"
msgstr "IP is not valid!"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "Import SVG"
-#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629
-#: ../controls/VariablePanel.py:71
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
msgid "InOut"
msgstr "InOut"
-#: ../editors/Viewer.py:431
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+
+#: ../editors/Viewer.py:473
msgid "Inactive"
msgstr "Inactive"
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr "Incompatible data types between \"{a1}\" and \"{a2}\""
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "Incompatible size of data between \"%s\" and \"BOOL\""
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr "Incompatible size of data between \"{a1}\" and \"{a2}\""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "Indicator"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr "Initial"
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr "Initial Step"
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "Initial Value"
-#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216
-#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
msgid "Initial Value:"
msgstr "Initial Value:"
-#: ../svgui/svgui.py:48
+#: ../svgui/svgui.py:56
msgid "Inkscape"
msgstr "Inkscape"
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
msgid "Inline"
msgstr "Inline"
-#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38
-#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290
-#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307
-#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40
+#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
msgid "Input"
msgstr "Input"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "Inputs:"
@@ -1905,64 +1899,72 @@
msgid "Insertion (into)"
msgstr "Insertion (into)"
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "Instance with id %d doesn't exist!"
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr "Instances:"
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr "Interface"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr "Interrupt"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr "Interval"
-#: ../PLCControler.py:2331
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "Invalid plcopen element(s)!!!"
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162
#, python-format
msgid "Invalid value \"%s\" for debug variable"
msgstr "Invalid value \"%s\" for debug variable"
-#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
#, python-format
msgid "Invalid value \"%s\" for variable grid element"
msgstr "Invalid value \"%s\" for variable grid element"
-#: ../editors/Viewer.py:234 ../editors/Viewer.py:237
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
#, python-format
msgid "Invalid value \"%s\" for viewer block"
msgstr "Invalid value \"%s\" for viewer block"
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr "Invalid value \"{a1}\" for \"{a2}\" variable!"
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1970,51 +1972,55 @@
"Invalid value!\n"
"You must fill a numeric value."
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr "Is connection secure?"
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "Jump"
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "LD"
msgstr "LD"
-#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231
+#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240
#, python-format
msgid "Ladder element with id %d is on more than one rung."
msgstr "Ladder element with id %d is on more than one rung."
-#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84
-#: ../dialogs/PouDialog.py:105
+#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
msgid "Language"
msgstr "Language"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "Language (optional):"
-#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56
-#: ../dialogs/PouDialog.py:73
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
msgid "Language:"
msgstr "Language:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr "Latest build already matches current target. Transfering anyway...\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "Launch WX GUI inspector"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "Launch a live Python shell"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "Left"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "Left PowerRail"
@@ -2030,11 +2036,11 @@
msgid "Less than or equal to"
msgstr "Less than or equal to"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "Library"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "License"
@@ -2042,27 +2048,27 @@
msgid "Limitation"
msgstr "Limitation"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr "Linking :\n"
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "Local"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "Local entries"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr "Local service discovery failed!\n"
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "Location"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr "Locations available:"
@@ -2070,12 +2076,12 @@
msgid "Logarithm to base 10"
msgstr "Logarithm to base 10"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "MDNS resolution failure for '%s'\n"
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "Map Variable"
@@ -2083,11 +2089,15 @@
msgid "Map located variables over CANopen"
msgstr "Map located variables over CANopen"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr "Map located variables over Modbus"
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr "Master"
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr "Max count ({a1}) reached for this confnode of type {a2} "
@@ -2096,29 +2106,29 @@
msgid "Maximum"
msgstr "Maximum"
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr "Maximum:"
-#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290
-#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333
+#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103
+#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
msgid "Memory"
msgstr "Memory"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr "Menu ToolBar"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "Microseconds:"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "Middle"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "Milliseconds:"
@@ -2126,76 +2136,80 @@
msgid "Minimum"
msgstr "Minimum"
-#: ../editors/DataTypeEditor.py:226
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
msgstr "Minimum:"
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
msgstr "Minutes:"
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "Miscellaneous"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr "Modbus support"
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "Modifier:"
-#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230
+#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269
#, python-brace-format
msgid "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
msgstr "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "Move action down"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "Move action up"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "Move down"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "Move element down"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "Move element up"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "Move instance down"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "Move instance up"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "Move task down"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "Move task up"
-#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
msgid "Move the view"
msgstr "Move the view"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "Move up"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "Move variable down"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "Move variable up"
@@ -2207,26 +2221,26 @@
msgid "Multiplication"
msgstr "Multiplication"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "My Computer:"
-#: ../dialogs/DiscoveryDialog.py:92
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
msgstr "NAME"
-#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
msgid "Name"
msgstr "Name"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "Name must not be null!"
-#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86
-#: ../dialogs/ConnectionDialog.py:76
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
msgid "Name:"
msgstr "Name:"
@@ -2234,46 +2248,46 @@
msgid "Natural logarithm"
msgstr "Natural logarithm"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "Negated"
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
msgstr "Nevow Web service failed. "
-#: ../Beremiz_service.py:556
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
msgstr "Nevow/Athena import failed :"
-#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104
-#: ../PLCOpenEditor.py:146
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
msgid "New"
msgstr "New"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "New item"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "No Modifier"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "No PLC to transfer (did build succeed ?)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "No body defined in \"%s\" POU"
-#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
#, python-brace-format
msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
msgstr "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2281,58 +2295,58 @@
"No documentation available.\n"
"Coming soon."
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr "No informations found for \"%s\" block"
-#: ../PLCGenerator.py:1194
+#: ../PLCGenerator.py:1232
#, python-brace-format
msgid "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken"
msgstr "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken"
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "No search results available."
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "No such SVG file: %s\n"
-#: ../canfestival/config_utils.py:639
+#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
msgstr "No such index/subindex ({a1},{a2}) (variable {a3})"
-#: ../canfestival/config_utils.py:362
+#: ../canfestival/config_utils.py:387
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
msgstr "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "No valid value selected!"
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "No variable defined in \"%s\" POU"
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr "Non existing node ID : {a1} (variable {a2})"
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr "Non-Retain"
-#: ../dialogs/LDElementDialog.py:75
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
msgstr "Normal"
-#: ../canfestival/config_utils.py:389
+#: ../canfestival/config_utils.py:426
#, python-brace-format
msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
msgstr "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
@@ -2341,7 +2355,7 @@
msgid "Not equal to"
msgstr "Not equal to"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Number of sequences:"
@@ -2349,88 +2363,88 @@
msgid "Numerical"
msgstr "Numerical"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr "OnChange"
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "Only Elements"
-#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106
-#: ../PLCOpenEditor.py:147
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
msgid "Open"
msgstr "Open"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "Open Inkscape"
-#: ../version.py:77
+#: ../version.py:86
msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
msgstr "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr "Open a file explorer to manage project files"
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "Open wxGlade"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr "Option"
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr "Options"
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "Organization (optional):"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "Other Profile"
-#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40
-#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290
-#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307
-#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42
+#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
msgid "Output"
msgstr "Output"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO Receive"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "PDO Transmit"
-#: ../targets/toolchain_gcc.py:167
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr "PLC :\n"
-#: ../BeremizIDE.py:355
+#: ../BeremizIDE.py:383
msgid "PLC Log"
msgstr "PLC Log"
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr "PLC code generation failed !\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "PLC is empty or already started."
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "PLC is not started."
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
@@ -2439,15 +2453,15 @@
"PLC syntax error at line {a1}:\n"
"{a2}"
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "PLCOpen files (*.xml)|*.xml|All files|*.*"
-#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
msgid "PLCOpenEditor"
msgstr "PLCOpenEditor"
-#: ../PLCOpenEditor.py:365
+#: ../PLCOpenEditor.py:339
msgid ""
"PLCOpenEditor is part of Beremiz project.\n"
"\n"
@@ -2457,205 +2471,205 @@
"\n"
"Beremiz is an "
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr "PORT"
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "POU Name"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "POU Name:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "POU Type"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "POU Type:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr "PYRO connecting to URI : %s\n"
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr "PYRO using certificates in '%s' \n"
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "Page Setup"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "Page Size (optional):"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "Page: %d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr "Parent instance"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "Paste"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "Paste POU"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "Pattern to search:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "Pin number:"
-#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014
-#: ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
msgid "Please choose a target"
msgstr "Please choose a target"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr "Please enter a block name"
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
msgid "Please enter comment text"
msgstr "Please enter comment text"
-#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr "Please enter step name"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "Please enter text"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "Please enter value for a \"%s\" variable:"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "Port number must be 0 <= port <= 65535!"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "Port number must be an integer!"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr "Power Rail"
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "Power Rail Properties"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "Preview"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "Preview:"
-#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124
-#: ../PLCOpenEditor.py:150
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
msgid "Print"
msgstr "Print"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "Print preview"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "Priority"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "Priority:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "Problem starting PLC : error %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "Product Name"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "Product Name (required):"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "Product Release (optional):"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr "Product Version"
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "Product Version (required):"
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr "Program"
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr "Program was successfully generated!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "Programs"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr "Programs can't be used by other POUs!"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "Project"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr "Project '%s':"
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr "Project Files"
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr "Project Name"
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "Project Name (required):"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "Project Version (optional):"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2663,90 +2677,90 @@
"Project file syntax error:\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "Project properties"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr "Project tree layout do not match confnode.xml {a1}!={a2} "
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr "Propagate Name"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "Properties"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr "Publishing service on local network"
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr "Pyro exception: %s\n"
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr "Pyro object's uri :"
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr "Pyro port :"
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr "Python code"
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr "Python file"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr "Qualifier"
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr "Quit"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "Range:"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr "Raw IEC code"
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr "Really delete node '%s'?"
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr "Realm:"
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
msgstr "Redo"
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
msgstr "Reference"
-#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr "Refresh"
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "Regular expression"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr "Regular expressions"
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr "Release value"
@@ -2754,56 +2768,56 @@
msgid "Remainder (modulo)"
msgstr "Remainder (modulo)"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr "Remove %s node"
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr "Remove Datatype"
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr "Remove Pou"
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr "Remove action"
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr "Remove element"
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr "Remove file from left folder"
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr "Remove instance"
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "Remove slave"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr "Remove task"
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr "Remove variable"
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "Rename"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr "Replace File"
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr "Replace Wire by connections"
@@ -2811,43 +2825,43 @@
msgid "Replacement (within)"
msgstr "Replacement (within)"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr "Reset"
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr "Reset Execution Order"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr "Reset Perspective"
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr "Reset search result"
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "Resources"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "Retain"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "Return Type:"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "Right"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "Right PowerRail"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "Rising Edge"
@@ -2863,113 +2877,113 @@
msgid "Rounding up/down"
msgstr "Rounding up/down"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "Run"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr "Runtime IO extensions C code generation failed !\n"
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr "Runtime library extensions C code generation failed !\n"
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr "SDO Client"
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr "SDO Server"
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "SFC"
msgstr "SFC"
-#: ../PLCGenerator.py:1392
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr "SFC transition in POU \"%s\" must be connected."
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "ST"
msgstr "ST"
-#: ../PLCOpenEditor.py:334
+#: ../PLCOpenEditor.py:308
msgid "ST files (*.st)|*.st|All files|*.*"
msgstr "ST files (*.st)|*.st|All files|*.*"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "SVG files (*.svg)|*.svg|All files|*.*"
-#: ../features.py:35
+#: ../features.py:36
msgid "SVGUI"
msgstr "SVGUI"
-#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113
-#: ../PLCOpenEditor.py:148
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
msgid "Save"
msgstr "Save"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "Save As..."
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "Save as"
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr "Save path is the same as path of a project! \n"
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "Scope"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "Search"
-#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 ../IDEFrame.py:428
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430
msgid "Search in Project"
msgstr "Search in Project"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "Seconds:"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "Select All"
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305
+#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315
+#: ../controls/VariablePanel.py:378
msgid "Select a variable class:"
msgstr "Select a variable class:"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "Select an editor:"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "Select an instance"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "Select an object"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr "Selected directory already contains another project. Overwrite? \n"
@@ -2977,23 +2991,23 @@
msgid "Selection"
msgstr "Selection"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "Selection Convergence"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "Selection Divergence"
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "Service Discovery"
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "Services available:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "Set"
@@ -3005,27 +3019,27 @@
msgid "Shift right"
msgstr "Shift right"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "Show IEC code generated by PLCGenerator"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "Show Master"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "Show Master generated by config_utils"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "Show code"
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
msgid "Simultaneous Convergence"
msgstr "Simultaneous Convergence"
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
msgid "Simultaneous Divergence"
msgstr "Simultaneous Divergence"
@@ -3033,15 +3047,15 @@
msgid "Sine"
msgstr "Sine"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "Single"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "Source didn't change, no build.\n"
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid "Source signal has to be defined for single task '{a1}' in resource '{a2}.{a3}'."
msgstr "Source signal has to be defined for single task '{a1}' in resource '{a2}.{a3}'."
@@ -3050,60 +3064,56 @@
msgid "Square root (base 2)"
msgstr "Square root (base 2)"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "Standard function blocks"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "Start PLC"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "Start build in %s\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "Started"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "Starting PLC\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "Status ToolBar"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "Step"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "Stop"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "Stop PLC"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "Stop Running PLC"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "Stopped"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Stopping debugger...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "Structure"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "Subrange"
@@ -3111,19 +3121,19 @@
msgid "Subtraction"
msgstr "Subtraction"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "Successfully built.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr "Switch perspective"
-#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
msgid "Syntax error in regular expression of pattern to search!"
msgstr "Syntax error in regular expression of pattern to search!"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "TYPE"
@@ -3131,19 +3141,19 @@
msgid "Tangent"
msgstr "Tangent"
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr "Task"
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr "Tasks:"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr "Temp"
-#: ../version.py:30
+#: ../version.py:35
msgid ""
"The best place to ask questions about Beremiz/PLCOpenEditor\n"
"is project's mailing list: beremiz-devel@lists.sourceforge.net\n"
@@ -3163,7 +3173,7 @@
"You can subscribe to the list here:\n"
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
-#: ../editors/FileManagementPanel.py:180
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
@@ -3172,20 +3182,20 @@
"The file '%s' already exist.\n"
"Do you want to replace it?"
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "The group of block must be coherent!"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "There are changes, do you want to save?"
-#: ../IDEFrame.py:1658 ../IDEFrame.py:1677
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1710
#, python-format
msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
msgstr "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3193,11 +3203,11 @@
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "This option isn't available yet!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr "Tick: %d"
@@ -3235,89 +3245,89 @@
msgid "Time-of-day subtraction"
msgstr "Time-of-day subtraction"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr "Toggle value"
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "Top"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "Transfer"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "Transfer PLC"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "Transfer completed successfully.\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "Transfer failed\n"
-#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 ../editors/Viewer.py:2420
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453
msgid "Transition"
msgstr "Transition"
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
#, python-format
msgid "Transition \"%s\" body must contain an output variable or coil referring to its name"
msgstr "Transition \"%s\" body must contain an output variable or coil referring to its name"
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "Transition Name"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "Transition Name:"
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU"
msgstr "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU"
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "Transition with name %s doesn't exist!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "Transitions"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr "Translated by"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "Triggering"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr "Twisted unavailable."
-#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
msgid "Type"
msgstr "Type"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr "Type and derivated"
-#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
#, python-format
msgid "Type conflict for location \"%s\""
msgstr "Type conflict for location \"%s\""
@@ -3326,179 +3336,233 @@
msgid "Type conversion"
msgstr "Type conversion"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr "Type infos:"
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr "Type strict"
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58
-#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100
-#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59
+#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59
+#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111
+#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61
msgid "Type:"
msgstr "Type:"
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
+msgid "URI host:"
+msgstr "URI host:"
+
+#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46
+msgid "URI port:"
+msgstr "URI port:"
+
+#: ../controls/UriLocationEditor.py:35
+msgid "URI type:"
+msgstr "URI type:"
+
+#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515
#, python-format
msgid "Unable to define PDO mapping for node %02x"
msgstr "Unable to define PDO mapping for node %02x"
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr "Unable to get Xenomai's %s \n"
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr "Undefined block type \"{a1}\" in \"{a2}\" POU"
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "Undefined pou type \"%s\""
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "Undo"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "Unknown"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "Unknown variable \"%s\" for this POU!"
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr "Unnamed"
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "Unnamed%d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "Unrecognized data size \"%s\""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "User Data Types"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "User Type"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "User-defined POUs"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "Value"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "Values:"
-#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585
-#: ../editors/Viewer.py:2423
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
msgid "Variable"
msgstr "Variable"
-#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361
-#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343
-#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329
+#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404
+#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344
+#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355
msgid "Variable Drop"
msgstr "Variable Drop"
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "Variable Properties"
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306
+#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316
+#: ../controls/VariablePanel.py:379
msgid "Variable class"
msgstr "Variable class"
-#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387
+#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388
msgid "Variable don't belong to this POU!"
msgstr "Variable don't belong to this POU!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "Variable:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "Variables"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "Vertical:"
-#: ../Beremiz_service.py:588
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr "WAMP Client connection failed (%s) .. retrying .."
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr "WAMP Client connection lost (%s) .. retrying .."
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr "WAMP ID:"
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr "WAMP client connecting to :"
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr "WAMP client connection not established!"
+
+#: ../Beremiz_service.py:625
msgid "WAMP client startup failed. "
msgstr "WAMP client startup failed. "
-#: ../connectors/WAMP/__init__.py:91
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr "WAMP config is incomplete."
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr "WAMP config is missing."
+
+#: ../connectors/WAMP/__init__.py:99
#, python-format
msgid "WAMP connecting to URL : %s\n"
msgstr "WAMP connecting to URL : %s\n"
-#: ../connectors/WAMP/__init__.py:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr "WAMP connection timeout"
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr "WAMP connection to '%s' failed.\n"
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr "WAMP import failed :"
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr "WAMP load error: "
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr "WAMP session left"
+
+#: ../wxglade_hmi/wxglade_hmi.py:44
msgid "WXGLADE GUI"
msgstr "WXGLADE GUI"
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr "Wamp secret load error:"
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "Warning"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "Warnings in ST/IL/SFC code generator :\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "Whole Project"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "Width:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr "Wrap search"
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Written by"
-#: ../features.py:34
+#: ../features.py:35
msgid "WxGlade GUI"
msgstr "WxGlade GUI"
-#: ../svgui/svgui.py:142
+#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
@@ -3506,7 +3570,7 @@
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3514,7 +3578,7 @@
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3522,77 +3586,69 @@
"You must have permission to work on the project\n"
"Work on a project copy ?"
-#: ../editors/LDViewer.py:886
+#: ../editors/LDViewer.py:897
msgid "You must select the block or group of blocks around which a branch should be added!"
msgstr "You must select the block or group of blocks around which a branch should be added!"
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr "You must select the wire where a contact should be added!"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "You must type a name!"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "You must type a value!"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "Zoom"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr "days"
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "error: %s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr "exited with status {a1} (pid {a2})\n"
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "file : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr "function"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "function : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "functionBlock"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr "hours"
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "line : "
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "matiec installation is not found\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr "milliseconds"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr "minutes"
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "program"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr "seconds"
@@ -3608,27 +3664,27 @@
msgid "string right of"
msgstr "string right of"
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "update info unavailable."
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr "warning: %s\n"
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr "{a1} \"{a2}\" can't be pasted as a {a3}."
-#: ../ConfigTreeNode.py:56
+#: ../ConfigTreeNode.py:58
#, python-brace-format
msgid ""
-"{a1} XML file doesn't follow XSD schema at line %{a2}:\n"
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
"{a3}"
msgstr ""
-"{a1} XML file doesn't follow XSD schema at line %{a2}:\n"
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
"{a3}"
#: Extra XSD strings
@@ -3692,6 +3748,72 @@
msgid "Win32"
msgstr "Win32"
+msgid "ModbusRequest"
+msgstr "ModbusRequest"
+
+msgid "SlaveID"
+msgstr "SlaveID"
+
+msgid "Nr_of_Channels"
+msgstr "Nr_of_Channels"
+
+msgid "Start_Address"
+msgstr "Start_Address"
+
+msgid "Timeout_in_ms"
+msgstr "Timeout_in_ms"
+
+msgid "MemoryArea"
+msgstr "MemoryArea"
+
+msgid "MemoryAreaType"
+msgstr "MemoryAreaType"
+
+msgid "ModbusTCPclient"
+msgstr "ModbusTCPclient"
+
+msgid "Remote_IP_Address"
+msgstr "Remote_IP_Address"
+
+msgid "Remote_Port_Number"
+msgstr "Remote_Port_Number"
+
+msgid "Invocation_Rate_in_ms"
+msgstr "Invocation_Rate_in_ms"
+
+msgid "ModbusServerNode"
+msgstr "ModbusServerNode"
+
+msgid "Local_IP_Address"
+msgstr "Local_IP_Address"
+
+msgid "Local_Port_Number"
+msgstr "Local_Port_Number"
+
+msgid "ModbusRTUclient"
+msgstr "ModbusRTUclient"
+
+msgid "Serial_Port"
+msgstr "Serial_Port"
+
+msgid "Baud_Rate"
+msgstr "Baud_Rate"
+
+msgid "Parity"
+msgstr "Parity"
+
+msgid "Stop_Bits"
+msgstr "Stop_Bits"
+
+msgid "ModbusRTUslave"
+msgstr "ModbusRTUslave"
+
+msgid "ModbusRoot"
+msgstr "ModbusRoot"
+
+msgid "MaxRemoteTCPclients"
+msgstr "MaxRemoteTCPclients"
+
msgid "BaseParams"
msgstr "BaseParams"
@@ -3855,8 +3977,8 @@
msgid "The RS bistable is a latch where the Reset dominates."
msgstr "The RS bistable is a latch where the Reset dominates."
-msgid "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain ressources."
-msgstr "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain ressources."
+msgid "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain resources."
+msgstr "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain resources."
msgid "The output produces a single pulse when a rising edge is detected."
msgstr "The output produces a single pulse when a rising edge is detected."
--- a/i18n/messages.pot Mon Jun 11 08:34:15 2018 +0200
+++ b/i18n/messages.pot Mon Jun 18 12:12:57 2018 +0300
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: Beremiz\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-13 15:37+0300\n"
+"POT-Creation-Date: 2018-06-15 16:39+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"
@@ -17,7 +17,7 @@
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../util/ExceptionHandler.py:56
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -32,244 +32,244 @@
"Traceback:\n"
msgstr ""
+#: ../controls/VariablePanel.py:90
+msgid " External"
+msgstr ""
+
#: ../controls/VariablePanel.py:89
-msgid " External"
-msgstr ""
-
-#: ../controls/VariablePanel.py:88
msgid " InOut"
msgstr ""
-#: ../controls/VariablePanel.py:88
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr ""
+#: ../controls/VariablePanel.py:90
+msgid " Local"
+msgstr ""
+
#: ../controls/VariablePanel.py:89
-msgid " Local"
-msgstr ""
-
-#: ../controls/VariablePanel.py:88
msgid " Output"
msgstr ""
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:99 ../dialogs/ProjectDialog.py:72
-#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:120
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
#, python-format
msgid " and %s"
msgstr ""
-#: ../ProjectController.py:1177
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr ""
-#: ../plcopen/plcopen.py:936
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr ""
-#: ../plcopen/plcopen.py:954
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr ""
-#: ../plcopen/plcopen.py:975
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr ""
-#: ../editors/Viewer.py:285
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr ""
-#: ../IDEFrame.py:1692 ../IDEFrame.py:1711
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr ""
-#: ../plcopen/plcopen.py:509
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr ""
-#: ../plcopen/plcopen.py:518
+#: ../plcopen/plcopen.py:540
#, python-format
msgid "\"%s\" configuration doesn't exist !!!"
msgstr ""
-#: ../IDEFrame.py:1642
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:110 ../dialogs/BlockPreviewDialog.py:220
-#: ../dialogs/PouActionDialog.py:108 ../editors/Viewer.py:301
-#: ../editors/Viewer.py:371 ../editors/Viewer.py:395 ../editors/Viewer.py:415
-#: ../editors/TextViewer.py:275 ../editors/TextViewer.py:304
+#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220
+#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304
+#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418
+#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299
#: ../controls/VariablePanel.py:425
#, python-format
msgid "\"%s\" element for this pou already exists!"
msgstr ""
-#: ../BeremizIDE.py:933
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:53 ../dialogs/PouTransitionDialog.py:106
-#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:51
+#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108
+#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54
+#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129
+#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603
+#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787
+#: ../IDEFrame.py:1629
+#, python-format
+msgid "\"%s\" is a keyword. It can't be used!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:2836
+#, python-format
+msgid "\"%s\" is an invalid value!"
+msgstr ""
+
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
+#, python-format
+msgid "\"%s\" is not a valid folder!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106
+#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52
#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127
-#: ../editors/ResourceEditor.py:464 ../editors/ResourceEditor.py:499
-#: ../editors/DataTypeEditor.py:570 ../editors/DataTypeEditor.py:602
-#: ../editors/CodeFileEditor.py:789 ../controls/VariablePanel.py:808
-#: ../IDEFrame.py:1633
-#, python-format
-msgid "\"%s\" is a keyword. It can't be used!"
-msgstr ""
-
-#: ../plcopen/plcopen.py:2531
-#, python-format
-msgid "\"%s\" is an invalid value!"
-msgstr ""
-
-#: ../PLCOpenEditor.py:370 ../PLCOpenEditor.py:412
-#, python-format
-msgid "\"%s\" is not a valid folder!"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:51 ../dialogs/PouTransitionDialog.py:104
-#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:49
-#: ../dialogs/PouActionDialog.py:102 ../dialogs/PouDialog.py:125
-#: ../editors/ResourceEditor.py:462 ../editors/ResourceEditor.py:497
-#: ../editors/DataTypeEditor.py:600 ../editors/CodeFileEditor.py:787
-#: ../controls/VariablePanel.py:806 ../IDEFrame.py:1631
+#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516
+#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772
+#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627
#, python-format
msgid "\"%s\" is not a valid identifier!"
msgstr ""
-#: ../IDEFrame.py:2445
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr ""
-#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:129
-#: ../editors/Viewer.py:299 ../editors/Viewer.py:356 ../editors/Viewer.py:386
-#: ../editors/Viewer.py:408 ../editors/TextViewer.py:273
-#: ../editors/TextViewer.py:302 ../editors/TextViewer.py:356
-#: ../editors/TextViewer.py:379 ../controls/VariablePanel.py:364
-#: ../IDEFrame.py:1651
+#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131
+#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389
+#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268
+#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351
+#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364
+#: ../IDEFrame.py:1647
#, python-format
msgid "\"%s\" pou already exists!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:59
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr ""
-#: ../editors/DataTypeEditor.py:565
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:758
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
#, python-format
msgid "\"%s\" value isn't a valid array dimension!"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:107 ../editors/DataTypeEditor.py:765
+#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766
#, python-format
msgid ""
"\"%s\" value isn't a valid array dimension!\n"
"Right value must be greater than left value."
msgstr ""
-#: ../PLCGenerator.py:1114
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr ""
-#: ../editors/Viewer.py:289
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr ""
-#: ../plcopen/plcopen.py:535
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr ""
-#: ../plcopen/plcopen.py:555
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:577
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:568
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
msgstr ""
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#, python-format
+msgid "%dh"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
+#, python-format
+msgid "%dm"
+msgstr ""
+
#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
-#, python-format
-msgid "%dh"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:57
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570
-#, python-format
-msgid "%dm"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55
#, python-format
msgid "%dms"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
#, python-format
msgid "%ds"
msgstr ""
-#: ../PLCControler.py:1591
+#: ../PLCControler.py:1114
#, python-format
msgid "%s Data Types"
msgstr ""
-#: ../PLCControler.py:1574
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
msgstr ""
-#: ../canfestival/SlaveEditor.py:72 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr ""
-#: ../plcopen/plcopen.py:1727 ../plcopen/plcopen.py:1734
-#: ../plcopen/plcopen.py:1747 ../plcopen/plcopen.py:1755
-#: ../plcopen/plcopen.py:1765 ../plcopen/plcopen.py:1776
+#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908
+#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929
+#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950
#, python-format
msgid "%s body don't have instances!"
msgstr ""
-#: ../plcopen/plcopen.py:1783 ../plcopen/plcopen.py:1790
-#: ../plcopen/plcopen.py:1797
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
#, python-format
msgid "%s body don't have text!"
msgstr ""
-#: ../IDEFrame.py:400
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr ""
@@ -278,35 +278,35 @@
msgid "&Close"
msgstr ""
-#: ../IDEFrame.py:370
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr ""
-#: ../IDEFrame.py:359
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr ""
-#: ../IDEFrame.py:404
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr ""
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr ""
-#: ../IDEFrame.py:350
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr ""
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:340
msgid "&File"
msgstr ""
-#: ../IDEFrame.py:361
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr ""
-#: ../IDEFrame.py:352
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr ""
@@ -314,19 +314,19 @@
msgid "&License"
msgstr ""
-#: ../IDEFrame.py:365
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr ""
-#: ../PLCOpenEditor.py:145
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr ""
-#: ../BeremizIDE.py:249
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr ""
-#: ../IDEFrame.py:367
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr ""
@@ -340,52 +340,56 @@
msgid "'{a1}' - {a2} matches in project"
msgstr ""
-#: ../connectors/PYRO/__init__.py:93
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr ""
-#: ../controls/SearchResultPanel.py:299
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/PouActionDialog.py:99
-#: ../dialogs/PouDialog.py:122
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
#, python-format
msgid ", %s"
msgstr ""
-#: ../controls/LogViewer.py:286
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
msgid "1d"
msgstr ""
-#: ../controls/LogViewer.py:287
+#: ../controls/LogViewer.py:288
msgid "1h"
msgstr ""
-#: ../controls/LogViewer.py:288
+#: ../controls/LogViewer.py:289
msgid "1m"
msgstr ""
-#: ../controls/LogViewer.py:289
+#: ../controls/LogViewer.py:290
msgid "1s"
msgstr ""
-#: ../dialogs/PouDialog.py:131 ../IDEFrame.py:1654 ../IDEFrame.py:1700
-#: ../IDEFrame.py:1719
+#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696
+#: ../IDEFrame.py:1715
#, python-format
msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:55 ../dialogs/PouTransitionDialog.py:108
-#: ../dialogs/PouNameDialog.py:53 ../dialogs/PouActionDialog.py:106
-#: ../controls/VariablePanel.py:810 ../IDEFrame.py:1668 ../IDEFrame.py:1681
+#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110
+#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108
+#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677
#, python-format
msgid "A POU named \"%s\" already exists!"
msgstr ""
-#: ../ConfigTreeNode.py:427
+#: ../ConfigTreeNode.py:424
#, python-brace-format
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr ""
@@ -394,22 +398,22 @@
msgid "A location must be selected!"
msgstr ""
-#: ../editors/ResourceEditor.py:466
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:57 ../controls/VariablePanel.py:812
-#: ../IDEFrame.py:1670 ../IDEFrame.py:1683
+#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791
+#: ../IDEFrame.py:1666 ../IDEFrame.py:1679
#, python-format
msgid "A variable with \"%s\" as name already exists in this pou!"
msgstr ""
-#: ../editors/CodeFileEditor.py:793
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr ""
-#: ../BeremizIDE.py:316 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:189
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr ""
@@ -417,113 +421,113 @@
msgid "Absolute number"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:45
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr ""
-#: ../editors/Viewer.py:656 ../editors/Viewer.py:2437
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr ""
-#: ../dialogs/PouActionDialog.py:87
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr ""
-#: ../dialogs/PouActionDialog.py:54
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr ""
-#: ../plcopen/plcopen.py:1423
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr ""
-#: ../PLCControler.py:105
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr ""
-#: ../editors/Viewer.py:470
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr ""
-#: ../canfestival/SlaveEditor.py:83 ../canfestival/NetworkEditor.py:108
-#: ../BeremizIDE.py:1001 ../editors/Viewer.py:689
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
msgid "Add"
msgstr ""
-#: ../IDEFrame.py:1930 ../IDEFrame.py:1965
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
msgstr ""
-#: ../features.py:32
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr ""
-#: ../IDEFrame.py:1913
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr ""
-#: ../IDEFrame.py:1893
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr ""
-#: ../editors/Viewer.py:612
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:127
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr ""
-#: ../IDEFrame.py:1901
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr ""
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr ""
-#: ../IDEFrame.py:1941 ../IDEFrame.py:1991
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr ""
-#: ../IDEFrame.py:1919 ../IDEFrame.py:1962
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr ""
-#: ../editors/Viewer.py:599
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr ""
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr ""
-#: ../editors/Viewer.py:2801 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr ""
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
msgstr ""
-#: ../features.py:34
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:141
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr ""
-#: ../editors/DataTypeEditor.py:365
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr ""
-#: ../editors/ResourceEditor.py:281
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr ""
@@ -531,11 +535,11 @@
msgid "Add slave"
msgstr ""
-#: ../editors/ResourceEditor.py:250
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr ""
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:481
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr ""
@@ -543,44 +547,44 @@
msgid "Addition"
msgstr ""
-#: ../plcopen/definitions.py:50
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr ""
-#: ../editors/Viewer.py:672
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr ""
-#: ../editors/Viewer.py:1728
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr ""
#: ../dialogs/BrowseLocationsDialog.py:42
#: ../dialogs/BrowseLocationsDialog.py:53
#: ../dialogs/BrowseLocationsDialog.py:152
-#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:306
-#: ../controls/VariablePanel.py:87
+#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307
+#: ../controls/VariablePanel.py:88
msgid "All"
msgstr ""
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr ""
-#: ../ProjectController.py:1716
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr ""
-#: ../editors/DataTypeEditor.py:606
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr ""
-#: ../editors/ResourceEditor.py:501
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:101
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr ""
@@ -600,8 +604,8 @@
msgid "Arithmetic"
msgstr ""
-#: ../editors/DataTypeEditor.py:58 ../editors/DataTypeEditor.py:648
-#: ../controls/VariablePanel.py:893
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
msgid "Array"
msgstr ""
@@ -609,45 +613,37 @@
msgid "Assignment"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:225
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:103
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:78
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr ""
-#: ../util/Zeroconf.py:619
-msgid "Bad domain name (circular) at "
-msgstr ""
-
-#: ../util/Zeroconf.py:622
-msgid "Bad domain name at "
-msgstr ""
-
-#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
#, python-format
msgid "Bad location size : %s"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:55 ../editors/DataTypeEditor.py:183
-#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:308
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
msgid "Base Type:"
msgstr ""
-#: ../editors/DataTypeEditor.py:638 ../controls/VariablePanel.py:851
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr ""
-#: ../BeremizIDE.py:487
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr ""
@@ -679,27 +675,27 @@
msgid "Bitwise inverting"
msgstr ""
-#: ../editors/Viewer.py:624 ../editors/Viewer.py:2450
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:61
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr ""
-#: ../editors/TextViewer.py:265
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr ""
-#: ../editors/Viewer.py:590
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr ""
-#: ../ProjectController.py:1395
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr ""
@@ -708,44 +704,44 @@
msgid "Browse Locations"
msgstr ""
-#: ../ProjectController.py:1858
+#: ../ProjectController.py:1815
msgid "Build"
msgstr ""
-#: ../ProjectController.py:1330
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr ""
-#: ../ProjectController.py:1859
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr ""
-#: ../ProjectController.py:1106
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr ""
-#: ../ProjectController.py:1103
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr ""
-#: ../c_ext/CFileEditor.py:64
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr ""
-#: ../ProjectController.py:1181
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr ""
-#: ../targets/toolchain_makefile.py:124
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr ""
-#: ../targets/toolchain_gcc.py:195
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr ""
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr ""
@@ -757,7 +753,7 @@
msgid "CANOpen network"
msgstr ""
-#: ../canfestival/SlaveEditor.py:47
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr ""
@@ -765,8 +761,8 @@
msgid "CANopen support"
msgstr ""
-#: ../plcopen/plcopen.py:1665 ../plcopen/plcopen.py:1679
-#: ../plcopen/plcopen.py:1704 ../plcopen/plcopen.py:1720
+#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853
+#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894
msgid "Can only generate execution order on FBD networks!"
msgstr ""
@@ -774,7 +770,7 @@
msgid "Can only give a location to local or global variables"
msgstr ""
-#: ../PLCOpenEditor.py:365
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr ""
@@ -783,7 +779,7 @@
msgid "Can't give a location to a function block instance"
msgstr ""
-#: ../PLCOpenEditor.py:410
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr ""
@@ -797,29 +793,33 @@
msgid "Cannot create child {a1} of type {a2} "
msgstr ""
-#: ../ConfigTreeNode.py:457
+#: ../ConfigTreeNode.py:454
#, python-format
msgid "Cannot find lower free IEC channel than %d\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:134
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr ""
-#: ../ProjectController.py:965
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr ""
-#: ../canfestival/config_utils.py:394
+#: ../canfestival/config_utils.py:400
#, python-brace-format
msgid "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:62 ../dialogs/FindInPouDialog.py:87
+#: ../ProjectController.py:1761
+msgid "Cannot transfer while PLC is running. Stop it now?"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr ""
-#: ../editors/Viewer.py:585
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr ""
@@ -831,7 +831,7 @@
msgid "Change Name"
msgstr ""
-#: ../IDEFrame.py:1983
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr ""
@@ -847,24 +847,24 @@
msgid "Character string"
msgstr ""
-#: ../svgui/svgui.py:135
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr ""
-#: ../ProjectController.py:559
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr ""
-#: ../canfestival/canfestival.py:179 ../PLCOpenEditor.py:323
-#: ../PLCOpenEditor.py:355 ../PLCOpenEditor.py:404
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
msgid "Choose a file"
msgstr ""
-#: ../BeremizIDE.py:905
+#: ../BeremizIDE.py:900
msgid "Choose a project"
msgstr ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
msgstr ""
@@ -873,19 +873,19 @@
msgid "Choose a working directory "
msgstr ""
-#: ../BeremizIDE.py:869
+#: ../BeremizIDE.py:864
msgid "Choose an empty directory for new project"
msgstr ""
-#: ../ProjectController.py:466
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
-#: ../ProjectController.py:433
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
-#: ../controls/VariablePanel.py:59
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr ""
@@ -893,73 +893,73 @@
msgid "Class Filter:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:73
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr ""
-#: ../ProjectController.py:1864
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr ""
-#: ../controls/LogViewer.py:326
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr ""
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr ""
-#: ../ProjectController.py:1327
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr ""
-#: ../IDEFrame.py:449
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr ""
-#: ../editors/Viewer.py:683
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:106 ../dialogs/FindInPouDialog.py:110
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr ""
-#: ../BeremizIDE.py:631 ../PLCOpenEditor.py:230
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr ""
-#: ../BeremizIDE.py:258 ../BeremizIDE.py:570 ../PLCOpenEditor.py:128
-#: ../IDEFrame.py:1046
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
msgid "Close Project"
msgstr ""
-#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:126
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr ""
-#: ../editors/Viewer.py:641 ../editors/Viewer.py:2458
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr ""
-#: ../editors/Viewer.py:662 ../editors/LDViewer.py:515
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr ""
-#: ../BeremizIDE.py:308 ../BeremizIDE.py:312 ../PLCOpenEditor.py:181
-#: ../PLCOpenEditor.py:185
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
msgid "Community support"
msgstr ""
-#: ../dialogs/ProjectDialog.py:63
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:99
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr ""
@@ -967,7 +967,7 @@
msgid "Comparison"
msgstr ""
-#: ../ProjectController.py:754
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr ""
@@ -975,93 +975,93 @@
msgid "Concatenation"
msgstr ""
-#: ../editors/ConfTreeNodeEditor.py:240
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr ""
-#: ../editors/ProjectNodeEditor.py:37
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:42
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr ""
-#: ../PLCControler.py:106
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr ""
-#: ../editors/Viewer.py:348 ../editors/Viewer.py:378 ../editors/Viewer.py:400
-#: ../editors/TextViewer.py:294 ../editors/TextViewer.py:348
-#: ../editors/TextViewer.py:371 ../controls/VariablePanel.py:354
+#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403
+#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343
+#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354
msgid "Confirm or change variable name"
msgstr ""
-#: ../ProjectController.py:1885
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr ""
-#: ../ProjectController.py:1886
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr ""
-#: ../ProjectController.py:1386
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:626
-#: ../editors/Viewer.py:2451
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
msgid "Connection"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr ""
-#: ../ProjectController.py:1737
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr ""
-#: ../ProjectController.py:1760
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:118 ../connectors/WAMP/__init__.py:119
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
msgid "Connection lost!\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:105
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1684
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr ""
-#: ../BeremizIDE.py:383
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr ""
-#: ../controls/VariablePanel.py:74
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr ""
-#: ../editors/Viewer.py:637 ../editors/Viewer.py:2454
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:203
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1685
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr ""
@@ -1081,20 +1081,20 @@
msgid "Conversion to time-of-day"
msgstr ""
-#: ../editors/Viewer.py:698 ../controls/LogViewer.py:712 ../IDEFrame.py:384
-#: ../IDEFrame.py:439
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
msgid "Copy"
msgstr ""
-#: ../IDEFrame.py:1970
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr ""
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr ""
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr ""
@@ -1102,121 +1102,117 @@
msgid "Cosine"
msgstr ""
-#: ../ConfigTreeNode.py:661
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
"{a3}\n"
msgstr ""
-#: ../py_ext/PythonFileCTNMixin.py:80
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr ""
-#: ../ConfigTreeNode.py:631
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../ConfigTreeNode.py:648 ../CodeFileTreeNode.py:127
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
#, python-brace-format
msgid ""
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../PLCControler.py:1004
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr ""
-#: ../ProjectController.py:1682
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr ""
-#: ../ProjectController.py:1690
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr ""
-#: ../ProjectController.py:1654
-msgid "Couldn't stop debugger.\n"
-msgstr ""
-
-#: ../svgui/svgui.py:56
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr ""
-#: ../dialogs/PouDialog.py:52
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr ""
-#: ../dialogs/PouActionDialog.py:43
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr ""
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr ""
-#: ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:177
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr ""
-#: ../IDEFrame.py:138
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr ""
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr ""
-#: ../IDEFrame.py:108 ../IDEFrame.py:123 ../IDEFrame.py:153
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr ""
-#: ../IDEFrame.py:117 ../IDEFrame.py:147 ../IDEFrame.py:180
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr ""
-#: ../IDEFrame.py:135 ../IDEFrame.py:186
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr ""
-#: ../IDEFrame.py:168
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr ""
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr ""
-#: ../IDEFrame.py:156
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr ""
-#: ../IDEFrame.py:171
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr ""
-#: ../IDEFrame.py:126 ../IDEFrame.py:183
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr ""
-#: ../IDEFrame.py:129
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr ""
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:47 ../IDEFrame.py:162
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr ""
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr ""
@@ -1224,15 +1220,15 @@
msgid "Credits"
msgstr ""
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr ""
-#: ../editors/Viewer.py:697 ../IDEFrame.py:382 ../IDEFrame.py:438
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr ""
-#: ../editors/ResourceEditor.py:79
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr ""
@@ -1244,19 +1240,19 @@
msgid "DEPRECATED"
msgstr ""
-#: ../canfestival/SlaveEditor.py:79 ../canfestival/NetworkEditor.py:104
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr ""
-#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:105
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:38
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr ""
-#: ../PLCControler.py:105
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr ""
@@ -1277,66 +1273,58 @@
msgid "Date subtraction"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr ""
-#: ../ProjectController.py:1782
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
-#: ../controls/PouInstanceVariablesPanel.py:150
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr ""
-#: ../editors/Viewer.py:487
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr ""
-#: ../ProjectController.py:1444
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr ""
-#: ../ProjectController.py:1442
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr ""
-#: ../IDEFrame.py:675
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr ""
-#: ../ProjectController.py:1623
-msgid "Debugger disabled\n"
-msgstr ""
-
-#: ../ProjectController.py:1779
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr ""
-#: ../ProjectController.py:1656
-msgid "Debugger stopped.\n"
-msgstr ""
-
-#: ../BeremizIDE.py:1004 ../editors/Viewer.py:673 ../IDEFrame.py:1999
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr ""
-#: ../editors/Viewer.py:613
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr ""
-#: ../editors/FileManagementPanel.py:155
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr ""
-#: ../editors/Viewer.py:600
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr ""
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr ""
@@ -1348,7 +1336,7 @@
msgid "Derivation Type:"
msgstr ""
-#: ../editors/CodeFileEditor.py:750
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr ""
@@ -1356,11 +1344,11 @@
msgid "Description:"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:61 ../editors/DataTypeEditor.py:333
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:67
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr ""
@@ -1368,23 +1356,23 @@
msgid "Direction:"
msgstr ""
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr ""
-#: ../ProjectController.py:1898
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr ""
-#: ../ProjectController.py:1899
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr ""
-#: ../ProjectController.py:1396
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr ""
-#: ../editors/Viewer.py:657 ../editors/Viewer.py:2446
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr ""
@@ -1392,111 +1380,107 @@
msgid "Division"
msgstr ""
-#: ../editors/FileManagementPanel.py:154
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr ""
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr ""
-#: ../PLCOpenEditor.py:359
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr ""
-#: ../canfestival/canfestival.py:182
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr ""
-#: ../editors/Viewer.py:671
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr ""
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
#: ../dialogs/LDElementDialog.py:56
-msgid "Edit Coil Values"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:54
msgid "Edit Contact Values"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:60
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:42
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:125
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:45
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr ""
-#: ../editors/Viewer.py:2670 ../editors/Viewer.py:3112
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr ""
-#: ../editors/FileManagementPanel.py:67
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr ""
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr ""
-#: ../editors/Viewer.py:3069
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr ""
-#: ../ProjectController.py:1916
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr ""
-#: ../editors/SFCViewer.py:801
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr ""
-#: ../IDEFrame.py:647
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr ""
-#: ../ProjectController.py:1289
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr ""
-#: ../editors/DataTypeEditor.py:361
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr ""
-#: ../ProjectController.py:1394
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:98
+#: ../dialogs/ArrayTypeDialog.py:100
msgid "Empty dimension isn't allowed."
msgstr ""
-#: ../IDEFrame.py:379
-msgid "Enable Undo/Redo"
-msgstr ""
-
#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr ""
@@ -1509,7 +1493,7 @@
msgid "Enter the IP of the interface to bind"
msgstr ""
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr ""
@@ -1517,43 +1501,44 @@
msgid "Equal to"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:211
-#: ../dialogs/SearchInProjectDialog.py:171 ../dialogs/SFCStepNameDialog.py:61
-#: ../dialogs/DurationEditorDialog.py:122
-#: ../dialogs/DurationEditorDialog.py:168 ../dialogs/PouTransitionDialog.py:112
-#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:78
-#: ../dialogs/ArrayTypeDialog.py:112 ../dialogs/PouNameDialog.py:55
+#: ../dialogs/ForceVariableDialog.py:213
+#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64
+#: ../dialogs/DurationEditorDialog.py:124
+#: ../dialogs/DurationEditorDialog.py:170 ../dialogs/PouTransitionDialog.py:114
+#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:80
+#: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58
#: ../dialogs/BrowseLocationsDialog.py:229
-#: ../dialogs/BrowseValuesLibraryDialog.py:83 ../dialogs/PouActionDialog.py:110
-#: ../dialogs/PouDialog.py:141 ../PLCOpenEditor.py:366 ../PLCOpenEditor.py:371
-#: ../editors/ResourceEditor.py:451 ../editors/Viewer.py:464
-#: ../editors/LDViewer.py:675 ../editors/LDViewer.py:891
-#: ../editors/LDViewer.py:895 ../editors/DataTypeEditor.py:565
-#: ../editors/DataTypeEditor.py:570 ../editors/DataTypeEditor.py:589
-#: ../editors/DataTypeEditor.py:758 ../editors/DataTypeEditor.py:765
-#: ../editors/TextViewer.py:395 ../editors/CodeFileEditor.py:775
-#: ../ProjectController.py:389 ../ProjectController.py:529
-#: ../ProjectController.py:536 ../controls/FolderTree.py:220
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:170
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:232
-#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:794
-#: ../util/ExceptionHandler.py:68 ../IDEFrame.py:1042 ../IDEFrame.py:1654
-#: ../IDEFrame.py:1695 ../IDEFrame.py:1700 ../IDEFrame.py:1714
-#: ../IDEFrame.py:1719 ../Beremiz_service.py:221
+#: ../dialogs/BrowseValuesLibraryDialog.py:87 ../dialogs/PouActionDialog.py:112
+#: ../dialogs/PouDialog.py:143 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324
+#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467
+#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893
+#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590
+#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766
+#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760
+#: ../ProjectController.py:391 ../ProjectController.py:531
+#: ../ProjectController.py:538 ../controls/FolderTree.py:222
+#: ../controls/ProjectPropertiesPanel.py:306
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227
+#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773
+#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710
+#: ../IDEFrame.py:1715 ../Beremiz_service.py:221
msgid "Error"
msgstr ""
-#: ../ProjectController.py:809
+#: ../ProjectController.py:811
msgid "Error : At least one configuration and one resource must be declared in PLC !\n"
msgstr ""
-#: ../ProjectController.py:801
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr ""
-#: ../ProjectController.py:729
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1565,32 +1550,37 @@
msgid "Error while saving \"%s\"\n"
msgstr ""
-#: ../canfestival/canfestival.py:187
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr ""
-#: ../canfestival/canfestival.py:397
+#: ../modbus/modbus.py:601
+#, python-brace-format
+msgid "Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr ""
-#: ../canfestival/canfestival.py:392
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr ""
-#: ../ProjectController.py:1754
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:121
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:83 ../dialogs/FBDBlockDialog.py:109
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr ""
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr ""
@@ -1602,77 +1592,77 @@
msgid "Exponentiation"
msgstr ""
-#: ../canfestival/canfestival.py:194
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr ""
-#: ../canfestival/canfestival.py:193
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:93
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr ""
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr ""
-#: ../ProjectController.py:824
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42 ../controls/ProjectPropertiesPanel.py:148
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "FBD"
msgstr ""
-#: ../ProjectController.py:1816
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
msgstr ""
-#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:560
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr ""
-#: ../ProjectController.py:1096
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr ""
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:165
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:167
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr ""
-#: ../controls/FolderTree.py:219
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:101 ../dialogs/FindInPouDialog.py:38
-#: ../dialogs/FindInPouDialog.py:105 ../IDEFrame.py:389
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
msgid "Find"
msgstr ""
-#: ../IDEFrame.py:391
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr ""
-#: ../IDEFrame.py:393
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr ""
@@ -1680,93 +1670,89 @@
msgid "Find position"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:56
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr ""
-#: ../connectors/PYRO/__init__.py:166
-msgid "Force runtime reload\n"
-msgstr ""
-
-#: ../editors/Viewer.py:1641
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:174
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:183 ../dialogs/PouTransitionDialog.py:102
-#: ../dialogs/ProjectDialog.py:77 ../dialogs/PouActionDialog.py:100
-#: ../dialogs/PouDialog.py:123
+#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104
+#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102
+#: ../dialogs/PouDialog.py:125
#, python-format
msgid "Form isn't complete. %s must be filled!"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:148 ../dialogs/FBDBlockDialog.py:237
-#: ../dialogs/ConnectionDialog.py:164
+#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
msgid "Form isn't complete. Name must be filled!"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:233
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:73
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1786
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr ""
-#: ../IDEFrame.py:363
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1785
-#: ../IDEFrame.py:1978
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr ""
-#: ../controls/VariablePanel.py:889
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr ""
-#: ../PLCControler.py:104
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr ""
-#: ../editors/Viewer.py:287
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr ""
-#: ../PLCControler.py:2409
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr ""
-#: ../PLCControler.py:104
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr ""
-#: ../PLCOpenEditor.py:135
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr ""
-#: ../ProjectController.py:720
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr ""
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:91
msgid "Global"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
msgid "Go to current value"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:179
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr ""
@@ -1778,36 +1764,36 @@
msgid "Greater than or equal to"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:139
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr ""
-#: ../runtime/NevowServer.py:188
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:125
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr ""
-#: ../editors/FileManagementPanel.py:87
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:155
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "IL"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:101
+#: ../dialogs/DiscoveryDialog.py:91
msgid "IP"
msgstr ""
@@ -1815,16 +1801,21 @@
msgid "IP is not valid!"
msgstr ""
-#: ../svgui/svgui.py:49 ../svgui/svgui.py:50
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:40 ../editors/Viewer.py:1670
-#: ../controls/VariablePanel.py:88
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
msgid "InOut"
msgstr ""
-#: ../editors/Viewer.py:470
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr ""
+
+#: ../editors/Viewer.py:473
msgid "Inactive"
msgstr ""
@@ -1843,44 +1834,44 @@
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr ""
-#: ../editors/CodeFileEditor.py:749
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr ""
-#: ../editors/Viewer.py:653
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr ""
-#: ../editors/DataTypeEditor.py:53 ../controls/VariablePanel.py:62
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr ""
#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
-#: ../editors/DataTypeEditor.py:282 ../editors/DataTypeEditor.py:321
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
msgid "Initial Value:"
msgstr ""
-#: ../svgui/svgui.py:55
+#: ../svgui/svgui.py:56
msgid "Inkscape"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:45
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
msgid "Inline"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:39
-#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:330
-#: ../editors/Viewer.py:1668 ../editors/TextViewer.py:312
-#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:88
+#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40
+#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
msgid "Input"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:97
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr ""
@@ -1888,44 +1879,50 @@
msgid "Insertion (into)"
msgstr ""
-#: ../plcopen/plcopen.py:1774
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr ""
-#: ../editors/ResourceEditor.py:277
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr ""
-#: ../controls/VariablePanel.py:87
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr ""
-#: ../editors/ResourceEditor.py:79
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr ""
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr ""
-#: ../PLCControler.py:2397
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr ""
-#: ../canfestival/config_utils.py:401
+#: ../canfestival/config_utils.py:407
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr ""
-#: ../canfestival/config_utils.py:683
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:136
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:167
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162
#, python-format
msgid "Invalid value \"%s\" for debug variable"
msgstr ""
@@ -1935,51 +1932,55 @@
msgid "Invalid value \"%s\" for variable grid element"
msgstr ""
-#: ../editors/Viewer.py:272 ../editors/Viewer.py:275
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
#, python-format
msgid "Invalid value \"%s\" for viewer block"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:209
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:122
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
msgstr ""
-#: ../editors/Viewer.py:658 ../editors/Viewer.py:2435
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42 ../controls/ProjectPropertiesPanel.py:148
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "LD"
msgstr ""
-#: ../editors/LDViewer.py:219 ../editors/LDViewer.py:238
+#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240
#, python-format
msgid "Ladder element with id %d is on more than one rung."
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:91 ../dialogs/PouActionDialog.py:89
-#: ../dialogs/PouDialog.py:111
+#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
msgid "Language"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:192
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:65 ../dialogs/PouActionDialog.py:61
-#: ../dialogs/PouDialog.py:79
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
msgid "Language:"
msgstr ""
-#: ../ProjectController.py:1822
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
@@ -1991,11 +1992,11 @@
msgid "Launch a live Python shell"
msgstr ""
-#: ../editors/Viewer.py:584
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:62
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr ""
@@ -2011,7 +2012,7 @@
msgid "Less than or equal to"
msgstr ""
-#: ../IDEFrame.py:667
+#: ../IDEFrame.py:652
msgid "Library"
msgstr ""
@@ -2023,23 +2024,23 @@
msgid "Limitation"
msgstr ""
-#: ../targets/toolchain_gcc.py:205
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:121 ../controls/VariablePanel.py:89
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr ""
-#: ../canfestival/canfestival.py:368
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr ""
-#: ../ProjectController.py:1731
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr ""
-#: ../controls/VariablePanel.py:61
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr ""
@@ -2051,12 +2052,12 @@
msgid "Logarithm to base 10"
msgstr ""
-#: ../connectors/PYRO/__init__.py:97
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:92
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr ""
@@ -2064,6 +2065,10 @@
msgid "Map located variables over CANopen"
msgstr ""
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr ""
@@ -2077,29 +2082,29 @@
msgid "Maximum"
msgstr ""
-#: ../editors/DataTypeEditor.py:247
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:330
-#: ../editors/TextViewer.py:312 ../controls/LocationCellEditor.py:101
+#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333
+#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103
#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
msgid "Memory"
msgstr ""
-#: ../IDEFrame.py:632
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr ""
-#: ../editors/Viewer.py:589
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr ""
@@ -2107,76 +2112,80 @@
msgid "Minimum"
msgstr ""
-#: ../editors/DataTypeEditor.py:234
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:217
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr ""
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr ""
-#: ../PLCGenerator.py:794 ../PLCGenerator.py:1245
+#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269
#, python-brace-format
msgid "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:144
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:143
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr ""
-#: ../controls/CustomEditableListBox.py:44
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr ""
-#: ../editors/DataTypeEditor.py:368
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr ""
-#: ../editors/DataTypeEditor.py:367
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr ""
-#: ../editors/ResourceEditor.py:284
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr ""
-#: ../editors/ResourceEditor.py:283
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr ""
-#: ../editors/ResourceEditor.py:253
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr ""
-#: ../editors/ResourceEditor.py:252
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr ""
-#: ../IDEFrame.py:105 ../IDEFrame.py:120 ../IDEFrame.py:150 ../IDEFrame.py:191
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
msgid "Move the view"
msgstr ""
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr ""
-#: ../editors/CodeFileEditor.py:662 ../controls/VariablePanel.py:484
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr ""
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:483
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr ""
@@ -2188,17 +2197,17 @@
msgid "Multiplication"
msgstr ""
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:99
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
msgstr ""
-#: ../editors/ResourceEditor.py:74 ../editors/ResourceEditor.py:95
-#: ../editors/DataTypeEditor.py:53 ../editors/CodeFileEditor.py:747
-#: ../controls/VariablePanel.py:58
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
msgid "Name"
msgstr ""
@@ -2206,8 +2215,8 @@
msgid "Name must not be null!"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:87
-#: ../dialogs/ConnectionDialog.py:76
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
msgid "Name:"
msgstr ""
@@ -2215,57 +2224,57 @@
msgid "Natural logarithm"
msgstr ""
-#: ../dialogs/LDElementDialog.py:76 ../editors/Viewer.py:558
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr ""
-#: ../Beremiz_service.py:597
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
msgstr ""
-#: ../Beremiz_service.py:573
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
msgstr ""
-#: ../BeremizIDE.py:246 ../BeremizIDE.py:281 ../PLCOpenEditor.py:122
-#: ../PLCOpenEditor.py:164
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
msgid "New"
msgstr ""
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr ""
-#: ../editors/Viewer.py:557
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr ""
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr ""
-#: ../PLCGenerator.py:1654
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr ""
-#: ../PLCGenerator.py:815 ../PLCGenerator.py:1257
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
#, python-brace-format
msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
msgstr ""
-#: ../PLCOpenEditor.py:378
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
msgstr ""
-#: ../PLCGenerator.py:840
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr ""
-#: ../PLCGenerator.py:1208
+#: ../PLCGenerator.py:1232
#, python-brace-format
msgid "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken"
msgstr ""
@@ -2274,44 +2283,44 @@
msgid "No search results available."
msgstr ""
-#: ../svgui/svgui.py:141
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr ""
-#: ../canfestival/config_utils.py:676
+#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
msgstr ""
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:387
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
msgstr ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr ""
-#: ../PLCGenerator.py:1652
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr ""
-#: ../canfestival/config_utils.py:373
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr ""
-#: ../controls/VariablePanel.py:78
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr ""
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
msgstr ""
-#: ../canfestival/config_utils.py:420
+#: ../canfestival/config_utils.py:426
#, python-brace-format
msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
msgstr ""
@@ -2320,7 +2329,7 @@
msgid "Not equal to"
msgstr ""
-#: ../dialogs/SFCDivergenceDialog.py:90
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr ""
@@ -2328,76 +2337,76 @@
msgid "Numerical"
msgstr ""
-#: ../editors/CodeFileEditor.py:751
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:87
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr ""
-#: ../BeremizIDE.py:248 ../BeremizIDE.py:282 ../PLCOpenEditor.py:124
-#: ../PLCOpenEditor.py:165
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
msgid "Open"
msgstr ""
-#: ../svgui/svgui.py:150
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr ""
-#: ../version.py:85
+#: ../version.py:86
msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
msgstr ""
-#: ../ProjectController.py:1922
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:159
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr ""
-#: ../controls/VariablePanel.py:63
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:82 ../editors/CodeFileEditor.py:752
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:101
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr ""
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:102
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:41
-#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:330
-#: ../editors/Viewer.py:1669 ../editors/TextViewer.py:312
-#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:88
+#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42
+#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
msgid "Output"
msgstr ""
-#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:91
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr ""
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr ""
-#: ../targets/toolchain_gcc.py:170
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr ""
-#: ../BeremizIDE.py:388
+#: ../BeremizIDE.py:383
msgid "PLC Log"
msgstr ""
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr ""
@@ -2409,114 +2418,114 @@
msgid "PLC is not started."
msgstr ""
-#: ../PLCOpenEditor.py:227 ../PLCOpenEditor.py:340
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
"{a2}"
msgstr ""
-#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:404
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr ""
-#: ../PLCOpenEditor.py:172 ../PLCOpenEditor.py:240
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
msgid "PLCOpenEditor"
msgstr ""
-#: ../PLCOpenEditor.py:386
+#: ../PLCOpenEditor.py:339
msgid ""
"PLCOpenEditor is part of Beremiz project.\n"
"\n"
"Beremiz is an "
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:102
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr ""
-#: ../dialogs/PouDialog.py:107
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr ""
-#: ../dialogs/PouDialog.py:64
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr ""
-#: ../dialogs/PouDialog.py:109
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr ""
-#: ../dialogs/PouDialog.py:71
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr ""
-#: ../connectors/PYRO/__init__.py:47
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:63
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr ""
-#: ../BeremizIDE.py:261 ../PLCOpenEditor.py:138
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:114
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr ""
-#: ../IDEFrame.py:2651
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr ""
-#: ../controls/PouInstanceVariablesPanel.py:140
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr ""
-#: ../editors/Viewer.py:699 ../IDEFrame.py:386 ../IDEFrame.py:440
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr ""
-#: ../IDEFrame.py:1905
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:59
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:73
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr ""
-#: ../editors/Viewer.py:2802 ../editors/Viewer.py:3070
-#: ../editors/SFCViewer.py:771
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
msgid "Please choose a target"
msgstr ""
-#: ../editors/TextViewer.py:265
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr ""
-#: ../editors/Viewer.py:2671 ../editors/Viewer.py:3113
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
msgid "Please enter comment text"
msgstr ""
-#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455
-#: ../editors/SFCViewer.py:801
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr ""
-#: ../dialogs/PouNameDialog.py:34 ../Beremiz_service.py:204
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:175
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr ""
@@ -2529,196 +2538,196 @@
msgid "Port number must be an integer!"
msgstr ""
-#: ../editors/Viewer.py:636 ../editors/Viewer.py:2459
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:50
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr ""
-#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:140
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr ""
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr ""
-#: ../BeremizIDE.py:265 ../BeremizIDE.py:285 ../PLCOpenEditor.py:142
-#: ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
msgid "Print"
msgstr ""
-#: ../IDEFrame.py:1116
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr ""
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr ""
-#: ../runtime/PLCObject.py:375
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr ""
-#: ../dialogs/ProjectDialog.py:61
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:84
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:86
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr ""
+#: ../dialogs/ProjectDialog.py:64
+msgid "Product Version"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:91
+msgid "Product Version (required):"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
+msgid "Program"
+msgstr ""
+
+#: ../PLCOpenEditor.py:321
+msgid "Program was successfully generated!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Programs"
+msgstr ""
+
+#: ../editors/Viewer.py:285
+msgid "Programs can't be used by other POUs!"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
+msgid "Project"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:180
+#, python-format
+msgid "Project '%s':"
+msgstr ""
+
+#: ../ProjectController.py:1878
+msgid "Project Files"
+msgstr ""
+
#: ../dialogs/ProjectDialog.py:62
-msgid "Product Version"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:85
-msgid "Product Version (required):"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1784
-#: ../IDEFrame.py:1981
-msgid "Program"
-msgstr ""
-
-#: ../PLCOpenEditor.py:368
-msgid "Program was successfully generated!"
-msgstr ""
-
-#: ../PLCControler.py:105
-msgid "Programs"
-msgstr ""
-
-#: ../editors/Viewer.py:281
-msgid "Programs can't be used by other POUs!"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:88 ../IDEFrame.py:616
-msgid "Project"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:180
-#, python-format
-msgid "Project '%s':"
-msgstr ""
-
-#: ../ProjectController.py:1921
-msgid "Project Files"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:60
msgid "Project Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr ""
-#: ../PLCControler.py:3230
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
msgstr ""
-#: ../dialogs/ProjectDialog.py:34 ../editors/ProjectNodeEditor.py:38
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr ""
-#: ../ConfigTreeNode.py:572
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr ""
-#: ../dialogs/ConnectionDialog.py:99
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr ""
-#: ../PLCControler.py:106
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr ""
-#: ../Beremiz_service.py:450
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr ""
-#: ../connectors/PYRO/__init__.py:121
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr ""
-#: ../Beremiz_service.py:437
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:436
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr ""
-#: ../py_ext/PythonEditor.py:82
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr ""
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr ""
-#: ../BeremizIDE.py:268 ../PLCOpenEditor.py:148 ../Beremiz_service.py:283
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:224
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr ""
-#: ../ProjectController.py:1915
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr ""
-#: ../BeremizIDE.py:1085
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr ""
-#: ../IDEFrame.py:376 ../IDEFrame.py:436
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:115 ../IDEFrame.py:446
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:97
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr ""
-#: ../editors/Viewer.py:1644
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr ""
@@ -2726,32 +2735,32 @@
msgid "Remainder (modulo)"
msgstr ""
-#: ../BeremizIDE.py:1086
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr ""
-#: ../IDEFrame.py:2454
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr ""
-#: ../IDEFrame.py:2459
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:142
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr ""
-#: ../editors/DataTypeEditor.py:366
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr ""
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr ""
-#: ../editors/ResourceEditor.py:282
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr ""
@@ -2759,23 +2768,23 @@
msgid "Remove slave"
msgstr ""
-#: ../editors/ResourceEditor.py:251
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr ""
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:482
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr ""
-#: ../IDEFrame.py:1985
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr ""
-#: ../editors/FileManagementPanel.py:185
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr ""
-#: ../editors/Viewer.py:601
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr ""
@@ -2783,27 +2792,27 @@
msgid "Replacement (within)"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr ""
-#: ../editors/Viewer.py:684
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr ""
-#: ../IDEFrame.py:465
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr ""
-#: ../controls/SearchResultPanel.py:111
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr ""
-#: ../BeremizIDE.py:1015 ../PLCControler.py:106
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr ""
-#: ../controls/VariablePanel.py:76
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr ""
@@ -2811,15 +2820,15 @@
msgid "Return Type:"
msgstr ""
-#: ../editors/Viewer.py:586
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr ""
-#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:559
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr ""
@@ -2835,113 +2844,113 @@
msgid "Rounding up/down"
msgstr ""
-#: ../ProjectController.py:1871
+#: ../ProjectController.py:1828
msgid "Run"
msgstr ""
-#: ../ProjectController.py:1125
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr ""
-#: ../ProjectController.py:1134
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:89
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr ""
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:88
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr ""
-#: ../dialogs/PouDialog.py:42 ../controls/ProjectPropertiesPanel.py:148
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "SFC"
msgstr ""
-#: ../PLCGenerator.py:1409
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr ""
-#: ../PLCGenerator.py:779
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "ST"
msgstr ""
-#: ../PLCOpenEditor.py:355
+#: ../PLCOpenEditor.py:308
msgid "ST files (*.st)|*.st|All files|*.*"
msgstr ""
-#: ../svgui/svgui.py:135
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr ""
-#: ../features.py:35
+#: ../features.py:36
msgid "SVGUI"
msgstr ""
-#: ../BeremizIDE.py:252 ../BeremizIDE.py:283 ../PLCOpenEditor.py:131
-#: ../PLCOpenEditor.py:166
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
msgid "Save"
msgstr ""
-#: ../BeremizIDE.py:284 ../PLCOpenEditor.py:133 ../PLCOpenEditor.py:167
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr ""
-#: ../BeremizIDE.py:254
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr ""
-#: ../ProjectController.py:528
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:72
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr ""
-#: ../IDEFrame.py:659
+#: ../IDEFrame.py:644
msgid "Search"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:48 ../IDEFrame.py:396 ../IDEFrame.py:442
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430
msgid "Search in Project"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr ""
-#: ../IDEFrame.py:402
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr ""
-#: ../editors/Viewer.py:328 ../editors/TextViewer.py:310
-#: ../controls/LocationCellEditor.py:99 ../controls/VariablePanel.py:315
+#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305
+#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315
#: ../controls/VariablePanel.py:378
msgid "Select a variable class:"
msgstr ""
-#: ../ProjectController.py:1288
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr ""
-#: ../controls/PouInstanceVariablesPanel.py:298
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr ""
-#: ../IDEFrame.py:643
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr ""
-#: ../ProjectController.py:535
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr ""
@@ -2949,23 +2958,23 @@
msgid "Selection"
msgstr ""
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
#: ../dialogs/SFCDivergenceDialog.py:65
-msgid "Selection Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:64
msgid "Selection Divergence"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:87
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:91
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr ""
@@ -2977,27 +2986,27 @@
msgid "Shift right"
msgstr ""
-#: ../ProjectController.py:1906
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr ""
-#: ../canfestival/canfestival.py:416
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr ""
-#: ../canfestival/canfestival.py:417
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr ""
-#: ../ProjectController.py:1905
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr ""
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
#: ../dialogs/SFCDivergenceDialog.py:67
-msgid "Simultaneous Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Simultaneous Divergence"
msgstr ""
@@ -3005,15 +3014,15 @@
msgid "Sine"
msgstr ""
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr ""
-#: ../targets/toolchain_makefile.py:128
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr ""
-#: ../PLCGenerator.py:401
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid "Source signal has to be defined for single task '{a1}' in resource '{a2}.{a3}'."
msgstr ""
@@ -3022,36 +3031,36 @@
msgid "Square root (base 2)"
msgstr ""
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr ""
-#: ../ProjectController.py:1872 ../Beremiz_service.py:271
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr ""
-#: ../ProjectController.py:1072
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr ""
-#: ../ProjectController.py:1392
+#: ../ProjectController.py:1397
msgid "Started"
msgstr ""
-#: ../ProjectController.py:1679
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr ""
-#: ../BeremizIDE.py:398
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr ""
-#: ../editors/Viewer.py:654 ../editors/Viewer.py:2434
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr ""
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr ""
@@ -3059,23 +3068,19 @@
msgid "Stop PLC"
msgstr ""
-#: ../ProjectController.py:1879
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr ""
-#: ../ProjectController.py:1393
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr ""
-#: ../ProjectController.py:1651
-msgid "Stopping debugger...\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr ""
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr ""
@@ -3083,19 +3088,19 @@
msgid "Subtraction"
msgstr ""
-#: ../ProjectController.py:1111
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr ""
-#: ../IDEFrame.py:461
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/FindInPouDialog.py:116
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
msgid "Syntax error in regular expression of pattern to search!"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:100
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr ""
@@ -3103,19 +3108,19 @@
msgid "Tangent"
msgstr ""
-#: ../editors/ResourceEditor.py:95
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr ""
-#: ../editors/ResourceEditor.py:246
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr ""
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr ""
-#: ../version.py:34
+#: ../version.py:35
msgid ""
"The best place to ask questions about Beremiz/PLCOpenEditor\n"
"is project's mailing list: beremiz-devel@lists.sourceforge.net\n"
@@ -3127,37 +3132,37 @@
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
msgstr ""
-#: ../editors/FileManagementPanel.py:184
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
"Do you want to replace it?"
msgstr ""
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr ""
-#: ../BeremizIDE.py:577 ../IDEFrame.py:1052
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr ""
-#: ../IDEFrame.py:1695 ../IDEFrame.py:1714
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1710
#, python-format
msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
msgstr ""
-#: ../IDEFrame.py:1139
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
msgstr ""
-#: ../editors/LDViewer.py:900
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:564
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr ""
@@ -3195,63 +3200,63 @@
msgid "Time-of-day subtraction"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:186
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr ""
-#: ../editors/Viewer.py:588
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr ""
-#: ../ProjectController.py:1891
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr ""
-#: ../ProjectController.py:1892
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr ""
-#: ../ProjectController.py:1845
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr ""
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr ""
-#: ../editors/Viewer.py:655 ../editors/Viewer.py:2436 ../editors/Viewer.py:2463
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453
msgid "Transition"
msgstr ""
-#: ../PLCGenerator.py:1540
+#: ../PLCGenerator.py:1564
#, python-format
msgid "Transition \"%s\" body must contain an output variable or coil referring to its name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:89
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:58
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr ""
-#: ../PLCGenerator.py:1633
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:1622
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU"
msgstr ""
-#: ../plcopen/plcopen.py:1382
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr ""
-#: ../PLCControler.py:105
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr ""
@@ -3259,17 +3264,17 @@
msgid "Translated by"
msgstr ""
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr ""
-#: ../Beremiz_service.py:487
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:40 ../editors/ResourceEditor.py:95
-#: ../editors/DataTypeEditor.py:53 ../editors/CodeFileEditor.py:748
-#: ../controls/VariablePanel.py:60
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
msgid "Type"
msgstr ""
@@ -3277,7 +3282,7 @@
msgid "Type and derivated"
msgstr ""
-#: ../canfestival/config_utils.py:353 ../canfestival/config_utils.py:660
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
#, python-format
msgid "Type conflict for location \"%s\""
msgstr ""
@@ -3294,50 +3299,62 @@
msgid "Type strict"
msgstr ""
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58
-#: ../dialogs/LDPowerRailDialog.py:56 ../dialogs/BrowseLocationsDialog.py:111
-#: ../dialogs/FBDBlockDialog.py:67 ../dialogs/ConnectionDialog.py:59
+#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59
+#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111
+#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61
msgid "Type:"
msgstr ""
-#: ../canfestival/config_utils.py:494 ../canfestival/config_utils.py:509
+#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
+msgid "URI host:"
+msgstr ""
+
+#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46
+msgid "URI port:"
+msgstr ""
+
+#: ../controls/UriLocationEditor.py:35
+msgid "URI type:"
+msgstr ""
+
+#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515
#, python-format
msgid "Unable to define PDO mapping for node %02x"
msgstr ""
-#: ../targets/Xenomai/__init__.py:41
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr ""
-#: ../PLCGenerator.py:973 ../PLCGenerator.py:1228
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:257
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr ""
-#: ../IDEFrame.py:374 ../IDEFrame.py:435
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr ""
-#: ../ProjectController.py:440
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr ""
-#: ../editors/Viewer.py:434
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr ""
-#: ../ProjectController.py:437 ../ProjectController.py:438
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr ""
-#: ../PLCControler.py:667
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr ""
@@ -3347,73 +3364,103 @@
msgid "Unrecognized data size \"%s\""
msgstr ""
-#: ../editors/DataTypeEditor.py:645 ../controls/VariablePanel.py:862
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr ""
-#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:93
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr ""
-#: ../PLCControler.py:104
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr ""
-#: ../editors/DataTypeEditor.py:268
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:45 ../editors/Viewer.py:625
-#: ../editors/Viewer.py:2466
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
msgid "Variable"
msgstr ""
-#: ../editors/Viewer.py:349 ../editors/Viewer.py:379 ../editors/Viewer.py:401
-#: ../editors/TextViewer.py:295 ../editors/TextViewer.py:349
-#: ../editors/TextViewer.py:372 ../controls/VariablePanel.py:355
+#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404
+#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344
+#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355
msgid "Variable Drop"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:67
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr ""
-#: ../editors/Viewer.py:329 ../editors/TextViewer.py:311
-#: ../controls/LocationCellEditor.py:100 ../controls/VariablePanel.py:316
+#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306
+#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316
#: ../controls/VariablePanel.py:379
msgid "Variable class"
msgstr ""
-#: ../editors/Viewer.py:436 ../editors/TextViewer.py:393
+#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388
msgid "Variable don't belong to this POU!"
msgstr ""
-#: ../dialogs/LDElementDialog.py:90
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr ""
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:156
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr ""
-#: ../Beremiz_service.py:605
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr ""
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr ""
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr ""
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr ""
+
+#: ../Beremiz_service.py:625
msgid "WAMP client startup failed. "
msgstr ""
-#: ../connectors/WAMP/__init__.py:97
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr ""
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:99
#, python-format
msgid "WAMP connecting to URL : %s\n"
msgstr ""
-#: ../connectors/WAMP/__init__.py:139
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr ""
@@ -3422,31 +3469,43 @@
msgid "WAMP connection to '%s' failed.\n"
msgstr ""
-#: ../Beremiz_service.py:581
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:41
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr ""
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:44
msgid "WXGLADE GUI"
msgstr ""
-#: ../dialogs/PouDialog.py:135 ../editors/LDViewer.py:900
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr ""
-#: ../ProjectController.py:724
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:81
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:124
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:92
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr ""
@@ -3454,91 +3513,91 @@
msgid "Written by"
msgstr ""
-#: ../features.py:34
+#: ../features.py:35
msgid "WxGlade GUI"
msgstr ""
-#: ../svgui/svgui.py:149
+#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:158
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
msgstr ""
-#: ../ProjectController.py:388
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
msgstr ""
-#: ../editors/LDViewer.py:895
+#: ../editors/LDViewer.py:897
msgid "You must select the block or group of blocks around which a branch should be added!"
msgstr ""
-#: ../editors/LDViewer.py:675
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:49 ../dialogs/PouNameDialog.py:47
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:207
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr ""
-#: ../IDEFrame.py:452
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr ""
-#: ../PLCOpenEditor.py:364
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr ""
-#: ../util/ProcessLogger.py:174
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr ""
-#: ../dialogs/PouDialog.py:34
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr ""
-#: ../dialogs/PouDialog.py:34
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr ""
-#: ../ProjectController.py:751
+#: ../ProjectController.py:753
msgid "matiec installation is not found\n"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:158
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr ""
-#: ../dialogs/PouDialog.py:34
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr ""
@@ -3554,16 +3613,16 @@
msgid "string right of"
msgstr ""
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr ""
-#: ../PLCOpenEditor.py:362
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr ""
-#: ../PLCControler.py:1028
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr ""
@@ -3638,6 +3697,72 @@
msgid "Win32"
msgstr ""
+msgid "ModbusRequest"
+msgstr ""
+
+msgid "SlaveID"
+msgstr ""
+
+msgid "Nr_of_Channels"
+msgstr ""
+
+msgid "Start_Address"
+msgstr ""
+
+msgid "Timeout_in_ms"
+msgstr ""
+
+msgid "MemoryArea"
+msgstr ""
+
+msgid "MemoryAreaType"
+msgstr ""
+
+msgid "ModbusTCPclient"
+msgstr ""
+
+msgid "Remote_IP_Address"
+msgstr ""
+
+msgid "Remote_Port_Number"
+msgstr ""
+
+msgid "Invocation_Rate_in_ms"
+msgstr ""
+
+msgid "ModbusServerNode"
+msgstr ""
+
+msgid "Local_IP_Address"
+msgstr ""
+
+msgid "Local_Port_Number"
+msgstr ""
+
+msgid "ModbusRTUclient"
+msgstr ""
+
+msgid "Serial_Port"
+msgstr ""
+
+msgid "Baud_Rate"
+msgstr ""
+
+msgid "Parity"
+msgstr ""
+
+msgid "Stop_Bits"
+msgstr ""
+
+msgid "ModbusRTUslave"
+msgstr ""
+
+msgid "ModbusRoot"
+msgstr ""
+
+msgid "MaxRemoteTCPclients"
+msgstr ""
+
msgid "BaseParams"
msgstr ""
--- a/modbus/modbus.py Mon Jun 11 08:34:15 2018 +0200
+++ b/modbus/modbus.py Mon Jun 18 12:12:57 2018 +0300
@@ -598,10 +598,11 @@
for j in range(i + 1, len(IPServer_port_numbers)):
if IPServer_port_numbers[i][1] == IPServer_port_numbers[j][1]:
self.GetCTRoot().logger.write_warning(
- _("Error: Modbus/IP Servers %s.x and %s.x use the same port number %s.\n") % (
- _lt_to_str(IPServer_port_numbers[i][0]),
- _lt_to_str(IPServer_port_numbers[j][0]),
- IPServer_port_numbers[j][1]))
+ _("Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n").
+ format(
+ a1=_lt_to_str(IPServer_port_numbers[i][0]),
+ a2=_lt_to_str(IPServer_port_numbers[j][0]),
+ a3=IPServer_port_numbers[j][1]))
raise Exception
# TODO: return an error code instead of raising an
# exception
--- a/targets/Linux/plc_Linux_main.c Mon Jun 11 08:34:15 2018 +0200
+++ b/targets/Linux/plc_Linux_main.c Mon Jun 18 12:12:57 2018 +0300
@@ -82,6 +82,10 @@
int PLC_shutdown = 0;
+int ForceSaveRetainReq(void) {
+ return PLC_shutdown;
+}
+
void PLC_thread_proc(void *arg)
{
while (!PLC_shutdown) {
@@ -117,7 +121,7 @@
pthread_mutex_lock(&debug_wait_mutex);
pthread_mutex_lock(&python_wait_mutex);
- timer_create (CLOCK_REALTIME, &sigev, &PLC_timer);
+ timer_create (CLOCK_MONOTONIC, &sigev, &PLC_timer);
if( __init(argc,argv) == 0 ){
PLC_SetTimer(common_ticktime__,common_ticktime__);
@@ -231,34 +235,3 @@
{
pthread_mutex_lock(&python_mutex);
}
-
-#ifndef HAVE_RETAIN
-void InitRetain(void)
-{
-}
-
-void CleanupRetain(void)
-{
-}
-
-int CheckRetainBuffer(void)
-{
- return 1;
-}
-
-void ValidateRetainBuffer(void)
-{
-}
-
-void InValidateRetainBuffer(void)
-{
-}
-
-void Retain(unsigned int offset, unsigned int count, void *p)
-{
-}
-
-void Remind(unsigned int offset, unsigned int count, void *p)
-{
-}
-#endif // !HAVE_RETAIN
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/Linux/plc_Linux_main_retain.c Mon Jun 18 12:12:57 2018 +0300
@@ -0,0 +1,311 @@
+/*
+ This file is part of Beremiz, a Integrated Development Environment for
+ programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
+
+ See COPYING.runtime
+
+ Copyright (C) 2018: Sergey Surkov <surkov.sv@summatechnology.ru>
+ Copyright (C) 2018: Andrey Skvortsov <andrej.skvortzov@gmail.com>
+
+*/
+
+#ifndef HAVE_RETAIN
+#include <stdio.h>
+#include <stdint.h>
+#include <unistd.h>
+#include "iec_types.h"
+
+int GetRetainSize();
+
+/* Retain buffer. */
+FILE *retain_buffer;
+const char rb_file[] = "retain_buffer_file";
+const char rb_file_bckp[] = "retain_buffer_file.bak";
+
+
+/* Retain header struct. */
+struct retain_info_t {
+ uint32_t retain_size;
+ uint32_t hash_size;
+ uint8_t* hash;
+ uint32_t header_offset;
+ uint32_t header_crc;
+};
+
+/* Init retain info structure. */
+struct retain_info_t retain_info;
+
+/* CRC lookup table and initial state. */
+uint32_t crc32_table[256];
+uint32_t retain_crc;
+
+
+/* Generate CRC32 lookup table. */
+void GenerateCRC32Table(void)
+{
+ unsigned int i, j;
+ /* Use CRC-32-IEEE 802.3 polynomial 0x04C11DB7 (bit reflected). */
+ uint32_t poly = 0xEDB88320;
+
+ for (i = 0; i <= 0xFF; i++)
+ {
+ uint32_t c = i;
+ for (j = 0 ; j < 8 ; j++)
+ c = (c & 1) ? (c >> 1 ) ^ poly : (c >> 1);
+ crc32_table[i] = c;
+ }
+}
+
+
+/* Calculate CRC32 for len bytes from pointer buf with init starting value. */
+uint32_t GenerateCRC32Sum(const void* buf, unsigned int len, uint32_t init)
+{
+ uint32_t crc = ~init;
+ unsigned char* current = (unsigned char*) buf;
+ while (len--)
+ crc = crc32_table[(crc ^ *current++) & 0xFF] ^ (crc >> 8);
+ return ~crc;
+}
+
+/* Calc CRC32 for retain file byte by byte. */
+int CheckFileCRC(FILE* file_buffer)
+{
+ /* Set the magic constant for one-pass CRC calc according to ZIP CRC32. */
+ const uint32_t magic_number = 0x2144df1c;
+
+ /* CRC initial state. */
+ uint32_t calc_crc32 = 0;
+ char data_block = 0;
+
+ while(!feof(file_buffer)){
+ if (fread(&data_block, sizeof(data_block), 1, file_buffer))
+ calc_crc32 = GenerateCRC32Sum(&data_block, sizeof(char), calc_crc32);
+ }
+
+ /* Compare crc result with a magic number. */
+ return (calc_crc32 == magic_number) ? 1 : 0;
+}
+
+/* Compare current hash with hash from file byte by byte. */
+int CheckFilehash(void)
+{
+ int k;
+ int offset = sizeof(retain_info.retain_size);
+
+ rewind(retain_buffer);
+ fseek(retain_buffer, offset , SEEK_SET);
+
+ uint32_t size;
+ fread(&size, sizeof(size), 1, retain_buffer);
+ if (size != retain_info.hash_size)
+ return 0;
+
+ for(k = 0; k < retain_info.hash_size; k++){
+ uint8_t file_digit;
+ fread(&file_digit, sizeof(char), 1, retain_buffer);
+ if (file_digit != *(retain_info.hash+k))
+ return 0;
+ }
+
+ return 1;
+}
+
+void InitRetain(void)
+{
+ int i;
+
+ /* Generate CRC32 lookup table. */
+ GenerateCRC32Table();
+
+ /* Get retain size in bytes */
+ retain_info.retain_size = GetRetainSize();
+
+ /* Hash stored in retain file as array of char in hex digits
+ (that's why we divide strlen in two). */
+ retain_info.hash_size = PLC_ID ? strlen(PLC_ID)/2 : 0;
+ //retain_info.hash_size = 0;
+ retain_info.hash = malloc(retain_info.hash_size);
+
+ /* Transform hash string into byte sequence. */
+ for (i = 0; i < retain_info.hash_size; i++) {
+ int byte = 0;
+ sscanf((PLC_ID + i*2), "%02X", &byte);
+ retain_info.hash[i] = byte;
+ }
+
+ /* Calc header offset. */
+ retain_info.header_offset = sizeof(retain_info.retain_size) + \
+ sizeof(retain_info.hash_size) + \
+ retain_info.hash_size;
+
+ /* Set header CRC initial state. */
+ retain_info.header_crc = 0;
+
+ /* Calc crc for header. */
+ retain_info.header_crc = GenerateCRC32Sum(
+ &retain_info.retain_size,
+ sizeof(retain_info.retain_size),
+ retain_info.header_crc);
+
+ retain_info.header_crc = GenerateCRC32Sum(
+ &retain_info.hash_size,
+ sizeof(retain_info.hash_size),
+ retain_info.header_crc);
+
+ retain_info.header_crc = GenerateCRC32Sum(
+ retain_info.hash,
+ retain_info.hash_size,
+ retain_info.header_crc);
+}
+
+void CleanupRetain(void)
+{
+ /* Free hash memory. */
+ free(retain_info.hash);
+}
+
+int CheckRetainFile(const char * file)
+{
+ retain_buffer = fopen(file, "rb");
+ if (retain_buffer) {
+ /* Check CRC32 and hash. */
+ if (CheckFileCRC(retain_buffer))
+ if (CheckFilehash())
+ return 1;
+ fclose(retain_buffer);
+ retain_buffer = NULL;
+ }
+ return 0;
+}
+
+int CheckRetainBuffer(void)
+{
+ retain_buffer = NULL;
+ if (!retain_info.retain_size)
+ return 1;
+
+ /* Check latest retain file. */
+ if (CheckRetainFile(rb_file))
+ return 1;
+
+ /* Check if we have backup. */
+ if (CheckRetainFile(rb_file_bckp))
+ return 1;
+
+ /* We don't have any valid retain buffer - nothing to remind. */
+ return 0;
+}
+
+#ifndef FILE_RETAIN_SAVE_PERIOD_S
+#define FILE_RETAIN_SAVE_PERIOD_S 1.0
+#endif
+
+static double CalcDiffSeconds(IEC_TIME* t1, IEC_TIME *t2)
+{
+ IEC_TIME dt ={
+ t1->tv_sec - t2->tv_sec,
+ t1->tv_nsec - t2->tv_nsec
+ };
+
+ if ((dt.tv_nsec < -1000000000) || ((dt.tv_sec > 0) && (dt.tv_nsec < 0))){
+ dt.tv_sec--;
+ dt.tv_nsec += 1000000000;
+ }
+ if ((dt.tv_nsec > +1000000000) || ((dt.tv_sec < 0) && (dt.tv_nsec > 0))){
+ dt.tv_sec++;
+ dt.tv_nsec -= 1000000000;
+ }
+ return dt.tv_sec + 1e-9*dt.tv_nsec;
+}
+
+
+int RetainSaveNeeded(void)
+{
+ int ret = 0;
+ static IEC_TIME last_save;
+ IEC_TIME now;
+ double diff_s;
+
+ /* no retain */
+ if (!retain_info.retain_size)
+ return 0;
+
+ /* periodic retain flush to avoid high I/O load */
+ PLC_GetTime(&now);
+
+ diff_s = CalcDiffSeconds(&now, &last_save);
+
+ if ((diff_s > FILE_RETAIN_SAVE_PERIOD_S) || ForceSaveRetainReq()) {
+ ret = 1;
+ last_save = now;
+ }
+ return ret;
+}
+
+void ValidateRetainBuffer(void)
+{
+ if (!retain_buffer)
+ return;
+
+ /* Add retain data CRC to the end of buffer file. */
+ fseek(retain_buffer, 0, SEEK_END);
+ fwrite(&retain_crc, sizeof(uint32_t), 1, retain_buffer);
+
+ /* Sync file buffer and close file. */
+#ifdef __WIN32
+ fflush(retain_buffer);
+#else
+ fsync(fileno(retain_buffer));
+#endif
+
+ fclose(retain_buffer);
+ retain_buffer = NULL;
+}
+
+void InValidateRetainBuffer(void)
+{
+ if (!RetainSaveNeeded())
+ return;
+
+ /* Rename old retain file into *.bak if it exists. */
+ rename(rb_file, rb_file_bckp);
+
+ /* Set file CRC initial value. */
+ retain_crc = retain_info.header_crc;
+
+ /* Create new retain file. */
+ retain_buffer = fopen(rb_file, "wb+");
+ if (!retain_buffer) {
+ fprintf(stderr, "Failed to create retain file : %s\n", rb_file);
+ return;
+ }
+
+ /* Write header to the new file. */
+ fwrite(&retain_info.retain_size,
+ sizeof(retain_info.retain_size), 1, retain_buffer);
+ fwrite(&retain_info.hash_size,
+ sizeof(retain_info.hash_size), 1, retain_buffer);
+ fwrite(retain_info.hash ,
+ sizeof(char), retain_info.hash_size, retain_buffer);
+}
+
+void Retain(unsigned int offset, unsigned int count, void *p)
+{
+ if (!retain_buffer)
+ return;
+
+ /* Generate CRC 32 for each data block. */
+ retain_crc = GenerateCRC32Sum(p, count, retain_crc);
+
+ /* Save current var in file. */
+ fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+ fwrite(p, count, 1, retain_buffer);
+}
+
+void Remind(unsigned int offset, unsigned int count, void *p)
+{
+ /* Remind variable from file. */
+ fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+ fread((void *)p, count, 1, retain_buffer);
+}
+#endif // !HAVE_RETAIN
--- a/targets/Win32/plc_Win32_main.c Mon Jun 11 08:34:15 2018 +0200
+++ b/targets/Win32/plc_Win32_main.c Mon Jun 18 12:12:57 2018 +0300
@@ -54,11 +54,19 @@
}
}
+int PLC_shutdown;
+
+int ForceSaveRetainReq(void) {
+ return PLC_shutdown;
+}
+
/* Variable used to stop plcloop thread */
void PlcLoop()
{
- while(WaitForSingleObject(PLC_timer, INFINITE) == WAIT_OBJECT_0)
- {
+ PLC_shutdown = 0;
+ while(!PLC_shutdown) {
+ if (WaitForSingleObject(PLC_timer, INFINITE) != WAIT_OBJECT_0)
+ PLC_shutdown = 1;
PLC_timer_notify();
}
}
@@ -241,43 +249,6 @@
WaitForSingleObject(python_sem, INFINITE);
}
-#ifndef HAVE_RETAIN
-void InitRetain(void)
-{
-}
-
-void CleanupRetain(void)
-{
-}
-
-int CheckRetainBuffer(void)
-{
- return 1;
-}
-
-void ValidateRetainBuffer(void)
-{
-}
-
-void InValidateRetainBuffer(void)
-{
-}
-
-void Retain(unsigned int offset, unsigned int count, void * p)
-{
- /*
- unsigned int position;
- for(position=0; position<count; position++ ){
- printf("%d : 0x%2.2x\n", offset+position, ((char*)p)[position]);
- }
- */
-}
-
-void Remind(unsigned int offset, unsigned int count, void *p)
-{
-}
-#endif // !HAVE_RETAIN
-
static void __attribute__((constructor))
beremiz_dll_init(void)
{
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/Win32/plc_Win32_main_retain.c Mon Jun 18 12:12:57 2018 +0300
@@ -0,0 +1,311 @@
+/*
+ This file is part of Beremiz, a Integrated Development Environment for
+ programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
+
+ See COPYING.runtime
+
+ Copyright (C) 2018: Sergey Surkov <surkov.sv@summatechnology.ru>
+ Copyright (C) 2018: Andrey Skvortsov <andrej.skvortzov@gmail.com>
+
+*/
+
+#ifndef HAVE_RETAIN
+#include <stdio.h>
+#include <stdint.h>
+#include <unistd.h>
+#include "iec_types.h"
+
+int GetRetainSize();
+
+/* Retain buffer. */
+FILE *retain_buffer;
+const char rb_file[] = "retain_buffer_file";
+const char rb_file_bckp[] = "retain_buffer_file.bak";
+
+
+/* Retain header struct. */
+struct retain_info_t {
+ uint32_t retain_size;
+ uint32_t hash_size;
+ uint8_t* hash;
+ uint32_t header_offset;
+ uint32_t header_crc;
+};
+
+/* Init retain info structure. */
+struct retain_info_t retain_info;
+
+/* CRC lookup table and initial state. */
+uint32_t crc32_table[256];
+uint32_t retain_crc;
+
+
+/* Generate CRC32 lookup table. */
+void GenerateCRC32Table(void)
+{
+ unsigned int i, j;
+ /* Use CRC-32-IEEE 802.3 polynomial 0x04C11DB7 (bit reflected). */
+ uint32_t poly = 0xEDB88320;
+
+ for (i = 0; i <= 0xFF; i++)
+ {
+ uint32_t c = i;
+ for (j = 0 ; j < 8 ; j++)
+ c = (c & 1) ? (c >> 1 ) ^ poly : (c >> 1);
+ crc32_table[i] = c;
+ }
+}
+
+
+/* Calculate CRC32 for len bytes from pointer buf with init starting value. */
+uint32_t GenerateCRC32Sum(const void* buf, unsigned int len, uint32_t init)
+{
+ uint32_t crc = ~init;
+ unsigned char* current = (unsigned char*) buf;
+ while (len--)
+ crc = crc32_table[(crc ^ *current++) & 0xFF] ^ (crc >> 8);
+ return ~crc;
+}
+
+/* Calc CRC32 for retain file byte by byte. */
+int CheckFileCRC(FILE* file_buffer)
+{
+ /* Set the magic constant for one-pass CRC calc according to ZIP CRC32. */
+ const uint32_t magic_number = 0x2144df1c;
+
+ /* CRC initial state. */
+ uint32_t calc_crc32 = 0;
+ char data_block = 0;
+
+ while(!feof(file_buffer)){
+ if (fread(&data_block, sizeof(data_block), 1, file_buffer))
+ calc_crc32 = GenerateCRC32Sum(&data_block, sizeof(char), calc_crc32);
+ }
+
+ /* Compare crc result with a magic number. */
+ return (calc_crc32 == magic_number) ? 1 : 0;
+}
+
+/* Compare current hash with hash from file byte by byte. */
+int CheckFilehash(void)
+{
+ int k;
+ int offset = sizeof(retain_info.retain_size);
+
+ rewind(retain_buffer);
+ fseek(retain_buffer, offset , SEEK_SET);
+
+ uint32_t size;
+ fread(&size, sizeof(size), 1, retain_buffer);
+ if (size != retain_info.hash_size)
+ return 0;
+
+ for(k = 0; k < retain_info.hash_size; k++){
+ uint8_t file_digit;
+ fread(&file_digit, sizeof(char), 1, retain_buffer);
+ if (file_digit != *(retain_info.hash+k))
+ return 0;
+ }
+
+ return 1;
+}
+
+void InitRetain(void)
+{
+ int i;
+
+ /* Generate CRC32 lookup table. */
+ GenerateCRC32Table();
+
+ /* Get retain size in bytes */
+ retain_info.retain_size = GetRetainSize();
+
+ /* Hash stored in retain file as array of char in hex digits
+ (that's why we divide strlen in two). */
+ retain_info.hash_size = PLC_ID ? strlen(PLC_ID)/2 : 0;
+ //retain_info.hash_size = 0;
+ retain_info.hash = malloc(retain_info.hash_size);
+
+ /* Transform hash string into byte sequence. */
+ for (i = 0; i < retain_info.hash_size; i++) {
+ int byte = 0;
+ sscanf((PLC_ID + i*2), "%02X", &byte);
+ retain_info.hash[i] = byte;
+ }
+
+ /* Calc header offset. */
+ retain_info.header_offset = sizeof(retain_info.retain_size) + \
+ sizeof(retain_info.hash_size) + \
+ retain_info.hash_size;
+
+ /* Set header CRC initial state. */
+ retain_info.header_crc = 0;
+
+ /* Calc crc for header. */
+ retain_info.header_crc = GenerateCRC32Sum(
+ &retain_info.retain_size,
+ sizeof(retain_info.retain_size),
+ retain_info.header_crc);
+
+ retain_info.header_crc = GenerateCRC32Sum(
+ &retain_info.hash_size,
+ sizeof(retain_info.hash_size),
+ retain_info.header_crc);
+
+ retain_info.header_crc = GenerateCRC32Sum(
+ retain_info.hash,
+ retain_info.hash_size,
+ retain_info.header_crc);
+}
+
+void CleanupRetain(void)
+{
+ /* Free hash memory. */
+ free(retain_info.hash);
+}
+
+int CheckRetainFile(const char * file)
+{
+ retain_buffer = fopen(file, "rb");
+ if (retain_buffer) {
+ /* Check CRC32 and hash. */
+ if (CheckFileCRC(retain_buffer))
+ if (CheckFilehash())
+ return 1;
+ fclose(retain_buffer);
+ retain_buffer = NULL;
+ }
+ return 0;
+}
+
+int CheckRetainBuffer(void)
+{
+ retain_buffer = NULL;
+ if (!retain_info.retain_size)
+ return 1;
+
+ /* Check latest retain file. */
+ if (CheckRetainFile(rb_file))
+ return 1;
+
+ /* Check if we have backup. */
+ if (CheckRetainFile(rb_file_bckp))
+ return 1;
+
+ /* We don't have any valid retain buffer - nothing to remind. */
+ return 0;
+}
+
+#ifndef FILE_RETAIN_SAVE_PERIOD_S
+#define FILE_RETAIN_SAVE_PERIOD_S 1.0
+#endif
+
+static double CalcDiffSeconds(IEC_TIME* t1, IEC_TIME *t2)
+{
+ IEC_TIME dt ={
+ t1->tv_sec - t2->tv_sec,
+ t1->tv_nsec - t2->tv_nsec
+ };
+
+ if ((dt.tv_nsec < -1000000000) || ((dt.tv_sec > 0) && (dt.tv_nsec < 0))){
+ dt.tv_sec--;
+ dt.tv_nsec += 1000000000;
+ }
+ if ((dt.tv_nsec > +1000000000) || ((dt.tv_sec < 0) && (dt.tv_nsec > 0))){
+ dt.tv_sec++;
+ dt.tv_nsec -= 1000000000;
+ }
+ return dt.tv_sec + 1e-9*dt.tv_nsec;
+}
+
+
+int RetainSaveNeeded(void)
+{
+ int ret = 0;
+ static IEC_TIME last_save;
+ IEC_TIME now;
+ double diff_s;
+
+ /* no retain */
+ if (!retain_info.retain_size)
+ return 0;
+
+ /* periodic retain flush to avoid high I/O load */
+ PLC_GetTime(&now);
+
+ diff_s = CalcDiffSeconds(&now, &last_save);
+
+ if ((diff_s > FILE_RETAIN_SAVE_PERIOD_S) || ForceSaveRetainReq()) {
+ ret = 1;
+ last_save = now;
+ }
+ return ret;
+}
+
+void ValidateRetainBuffer(void)
+{
+ if (!retain_buffer)
+ return;
+
+ /* Add retain data CRC to the end of buffer file. */
+ fseek(retain_buffer, 0, SEEK_END);
+ fwrite(&retain_crc, sizeof(uint32_t), 1, retain_buffer);
+
+ /* Sync file buffer and close file. */
+#ifdef __WIN32
+ fflush(retain_buffer);
+#else
+ fsync(fileno(retain_buffer));
+#endif
+
+ fclose(retain_buffer);
+ retain_buffer = NULL;
+}
+
+void InValidateRetainBuffer(void)
+{
+ if (!RetainSaveNeeded())
+ return;
+
+ /* Rename old retain file into *.bak if it exists. */
+ rename(rb_file, rb_file_bckp);
+
+ /* Set file CRC initial value. */
+ retain_crc = retain_info.header_crc;
+
+ /* Create new retain file. */
+ retain_buffer = fopen(rb_file, "wb+");
+ if (!retain_buffer) {
+ fprintf(stderr, "Failed to create retain file : %s\n", rb_file);
+ return;
+ }
+
+ /* Write header to the new file. */
+ fwrite(&retain_info.retain_size,
+ sizeof(retain_info.retain_size), 1, retain_buffer);
+ fwrite(&retain_info.hash_size,
+ sizeof(retain_info.hash_size), 1, retain_buffer);
+ fwrite(retain_info.hash ,
+ sizeof(char), retain_info.hash_size, retain_buffer);
+}
+
+void Retain(unsigned int offset, unsigned int count, void *p)
+{
+ if (!retain_buffer)
+ return;
+
+ /* Generate CRC 32 for each data block. */
+ retain_crc = GenerateCRC32Sum(p, count, retain_crc);
+
+ /* Save current var in file. */
+ fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+ fwrite(p, count, 1, retain_buffer);
+}
+
+void Remind(unsigned int offset, unsigned int count, void *p)
+{
+ /* Remind variable from file. */
+ fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+ fread((void *)p, count, 1, retain_buffer);
+}
+#endif // !HAVE_RETAIN
--- a/targets/beremiz.h Mon Jun 11 08:34:15 2018 +0200
+++ b/targets/beremiz.h Mon Jun 18 12:12:57 2018 +0300
@@ -9,6 +9,12 @@
#define LOG_DEBUG 3
extern unsigned long long common_ticktime__;
-int LogMessage(uint8_t level, char* buf, uint32_t size);
+
+#ifdef TARGET_LOGGING_DISABLE
+#define LogMessage(level, buf, size)
+#else
+int LogMessage(uint8_t level, char* buf, uint32_t size);
+#endif
+
long AtomicCompareExchange(long* atomicvar,long compared, long exchange);
--- a/targets/plc_debug.c Mon Jun 11 08:34:15 2018 +0200
+++ b/targets/plc_debug.c Mon Jun 18 12:12:57 2018 +0300
@@ -211,6 +211,31 @@
BufferIterator(dsc, 0);
}
+
+unsigned int retain_size = 0;
+
+/* GetRetainSizeIterator */
+void GetRetainSizeIterator(dbgvardsc_t *dsc)
+{
+ void *real_value_p = NULL;
+ char flags = 0;
+ UnpackVar(dsc, &real_value_p, &flags);
+
+ if(flags & __IEC_RETAIN_FLAG){
+ USINT size = __get_type_enum_size(dsc->type);
+ /* Calc retain buffer size */
+ retain_size += size;
+ }
+}
+
+/* Return size of all retain variables */
+unsigned int GetRetainSize(void)
+{
+ __for_each_variable_do(GetRetainSizeIterator);
+ return retain_size;
+}
+
+
extern void PLC_GetTime(IEC_TIME*);
extern int TryEnterDebugSection(void);
extern long AtomicCompareExchange(long*, long, long);
--- a/targets/toolchain_gcc.py Mon Jun 11 08:34:15 2018 +0200
+++ b/targets/toolchain_gcc.py Mon Jun 18 12:12:57 2018 +0300
@@ -190,7 +190,7 @@
status, _result, _err_result = ProcessLogger(
self.CTRInstance.logger,
- "\"%s\" -c \"%s\" -o \"%s\" %s %s" %
+ "\"%s\" -c \"%s\" -o \"%s\" -O2 %s %s" %
(self.compiler, CFile, objectfilename, Builder_CFLAGS, CFLAGS)
).spin()
--- a/tests/first_steps/plc.xml Mon Jun 11 08:34:15 2018 +0200
+++ b/tests/first_steps/plc.xml Mon Jun 18 12:12:57 2018 +0300
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="Beremiz" productName="Beremiz" productVersion="1" creationDateTime="2016-10-24T18:09:22"/>
- <contentHeader name="First Steps" modificationDateTime="2016-10-26T20:18:02">
+ <contentHeader name="First Steps" modificationDateTime="2018-05-31T12:59:20">
<coordinateInfo>
<fbd>
<scaling x="0" y="0"/>
@@ -17,6 +17,58 @@
<types>
<dataTypes/>
<pous>
+ <pou name="AverageVal" pouType="function">
+ <interface>
+ <returnType>
+ <REAL/>
+ </returnType>
+ <inputVars>
+ <variable name="Cnt1">
+ <type>
+ <INT/>
+ </type>
+ </variable>
+ <variable name="Cnt2">
+ <type>
+ <INT/>
+ </type>
+ </variable>
+ <variable name="Cnt3">
+ <type>
+ <INT/>
+ </type>
+ </variable>
+ <variable name="Cnt4">
+ <type>
+ <INT/>
+ </type>
+ </variable>
+ <variable name="Cnt5">
+ <type>
+ <INT/>
+ </type>
+ </variable>
+ </inputVars>
+ <localVars>
+ <variable name="InputsNumber">
+ <type>
+ <REAL/>
+ </type>
+ <initialValue>
+ <simpleValue value="5.0"/>
+ </initialValue>
+ <documentation>
+ <xhtml:p><![CDATA[Количество входных значений]]></xhtml:p>
+ </documentation>
+ </variable>
+ </localVars>
+ </interface>
+ <body>
+ <ST>
+ <xhtml:p><![CDATA[AverageVal := INT_TO_REAL(Cnt1+Cnt2+Cnt3+Cnt4+Cnt5)/InputsNumber;]]></xhtml:p>
+ </ST>
+ </body>
+ </pou>
<pou name="plc_prg" pouType="program">
<interface>
<inputVars>
@@ -79,6 +131,11 @@
<derived name="CounterLD"/>
</type>
</variable>
+ <variable name="AVCnt">
+ <type>
+ <REAL/>
+ </type>
+ </variable>
</localVars>
</interface>
<body>
@@ -105,24 +162,13 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="2" executionOrderId="0" height="24" width="79" negated="false">
+ <inVariable localId="2" executionOrderId="0" height="30" width="79" negated="false">
<position x="35" y="81"/>
<connectionPointOut>
- <relPosition x="79" y="12"/>
+ <relPosition x="79" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
- <outVariable localId="3" executionOrderId="0" height="24" width="106" negated="false">
- <position x="424" y="81"/>
- <connectionPointIn>
- <relPosition x="0" y="12"/>
- <connection refLocalId="1" formalParameter="OUT">
- <position x="424" y="93"/>
- <position x="332" y="93"/>
- </connection>
- </connectionPointIn>
- <expression>Cnt1</expression>
- </outVariable>
<block localId="4" typeName="CounterFBD" instanceName="CounterFBD0" executionOrderId="0" height="54" width="121">
<position x="211" y="145"/>
<inputVariables>
@@ -145,19 +191,8 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="5" executionOrderId="0" height="24" width="103" negated="false">
- <position x="426" y="170"/>
- <connectionPointIn>
- <relPosition x="0" y="12"/>
- <connection refLocalId="4" formalParameter="OUT">
- <position x="426" y="182"/>
- <position x="332" y="182"/>
- </connection>
- </connectionPointIn>
- <expression>Cnt2</expression>
- </outVariable>
- <comment localId="6" height="264" width="417">
- <position x="569" y="55"/>
+ <comment localId="6" height="306" width="434">
+ <position x="620" y="130"/>
<content>
<xhtml:p><![CDATA[In this example function block with the same functionality
is created using all five IEC 61131-3 programing languages:
@@ -199,17 +234,6 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="8" executionOrderId="0" height="24" width="97" negated="false">
- <position x="431" y="261"/>
- <connectionPointIn>
- <relPosition x="0" y="12"/>
- <connection refLocalId="7" formalParameter="OUT">
- <position x="431" y="273"/>
- <position x="332" y="273"/>
- </connection>
- </connectionPointIn>
- <expression>Cnt3</expression>
- </outVariable>
<block localId="9" typeName="CounterIL" instanceName="CounterIL0" executionOrderId="0" height="62" width="121">
<position x="211" y="322"/>
<inputVariables>
@@ -232,35 +256,24 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="10" executionOrderId="0" height="24" width="67" negated="false">
+ <inVariable localId="10" executionOrderId="0" height="30" width="67" negated="false">
<position x="34" y="351"/>
<connectionPointOut>
- <relPosition x="67" y="12"/>
+ <relPosition x="67" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
- <outVariable localId="11" executionOrderId="0" height="24" width="91" negated="false">
- <position x="434" y="351"/>
- <connectionPointIn>
- <relPosition x="0" y="12"/>
- <connection refLocalId="9" formalParameter="OUT">
- <position x="434" y="363"/>
- <position x="332" y="363"/>
- </connection>
- </connectionPointIn>
- <expression>Cnt4</expression>
- </outVariable>
- <inVariable localId="12" executionOrderId="0" height="24" width="67" negated="false">
+ <inVariable localId="12" executionOrderId="0" height="30" width="67" negated="false">
<position x="36" y="261"/>
<connectionPointOut>
- <relPosition x="67" y="12"/>
+ <relPosition x="67" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
- <inVariable localId="13" executionOrderId="0" height="24" width="79" negated="false">
+ <inVariable localId="13" executionOrderId="0" height="30" width="79" negated="false">
<position x="36" y="170"/>
<connectionPointOut>
- <relPosition x="79" y="12"/>
+ <relPosition x="79" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
@@ -286,24 +299,156 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="15" executionOrderId="0" height="24" width="88" negated="false">
- <position x="437" y="440"/>
- <connectionPointIn>
- <relPosition x="0" y="12"/>
- <connection refLocalId="14" formalParameter="Out">
- <position x="437" y="452"/>
- <position x="334" y="452"/>
- </connection>
- </connectionPointIn>
- <expression>Cnt5</expression>
- </outVariable>
- <inVariable localId="16" executionOrderId="0" height="24" width="64" negated="false">
+ <inVariable localId="16" executionOrderId="0" height="30" width="64" negated="false">
<position x="36" y="440"/>
<connectionPointOut>
- <relPosition x="64" y="12"/>
+ <relPosition x="64" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
+ <block localId="17" typeName="AverageVal" executionOrderId="0" height="470" width="90">
+ <position x="514" y="28"/>
+ <inputVariables>
+ <variable formalParameter="Cnt1">
+ <connectionPointIn>
+ <relPosition x="0" y="65"/>
+ <connection refLocalId="3">
+ <position x="514" y="93"/>
+ <position x="474" y="93"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="Cnt2">
+ <connectionPointIn>
+ <relPosition x="0" y="155"/>
+ <connection refLocalId="5">
+ <position x="514" y="183"/>
+ <position x="497" y="183"/>
+ <position x="497" y="182"/>
+ <position x="473" y="182"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="Cnt3">
+ <connectionPointIn>
+ <relPosition x="0" y="245"/>
+ <connection refLocalId="8">
+ <position x="514" y="273"/>
+ <position x="472" y="273"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="Cnt4">
+ <connectionPointIn>
+ <relPosition x="0" y="335"/>
+ <connection refLocalId="11">
+ <position x="514" y="363"/>
+ <position x="469" y="363"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="Cnt5">
+ <connectionPointIn>
+ <relPosition x="0" y="425"/>
+ <connection refLocalId="15">
+ <position x="514" y="453"/>
+ <position x="495" y="453"/>
+ <position x="495" y="452"/>
+ <position x="469" y="452"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="90" y="65"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <outVariable localId="18" executionOrderId="0" height="30" width="50" negated="false">
+ <position x="649" y="78"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="17" formalParameter="OUT">
+ <position x="649" y="93"/>
+ <position x="604" y="93"/>
+ </connection>
+ </connectionPointIn>
+ <expression>AVCnt</expression>
+ </outVariable>
+ <inOutVariable localId="3" executionOrderId="0" height="30" width="106" negatedOut="false" negatedIn="false">
+ <position x="368" y="78"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="1" formalParameter="OUT">
+ <position x="368" y="93"/>
+ <position x="332" y="93"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="106" y="15"/>
+ </connectionPointOut>
+ <expression>Cnt1</expression>
+ </inOutVariable>
+ <inOutVariable localId="5" executionOrderId="0" height="30" width="103" negatedOut="false" negatedIn="false">
+ <position x="370" y="167"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="4" formalParameter="OUT">
+ <position x="370" y="182"/>
+ <position x="332" y="182"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="103" y="15"/>
+ </connectionPointOut>
+ <expression>Cnt2</expression>
+ </inOutVariable>
+ <inOutVariable localId="8" executionOrderId="0" height="30" width="97" negatedOut="false" negatedIn="false">
+ <position x="375" y="258"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="7" formalParameter="OUT">
+ <position x="375" y="273"/>
+ <position x="332" y="273"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="97" y="15"/>
+ </connectionPointOut>
+ <expression>Cnt3</expression>
+ </inOutVariable>
+ <inOutVariable localId="11" executionOrderId="0" height="30" width="91" negatedOut="false" negatedIn="false">
+ <position x="378" y="348"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="9" formalParameter="OUT">
+ <position x="378" y="363"/>
+ <position x="332" y="363"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="91" y="15"/>
+ </connectionPointOut>
+ <expression>Cnt4</expression>
+ </inOutVariable>
+ <inOutVariable localId="15" executionOrderId="0" height="30" width="88" negatedOut="false" negatedIn="false">
+ <position x="381" y="437"/>
+ <connectionPointIn>
+ <relPosition x="0" y="15"/>
+ <connection refLocalId="14" formalParameter="Out">
+ <position x="381" y="452"/>
+ <position x="334" y="452"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="88" y="15"/>
+ </connectionPointOut>
+ <expression>Cnt5</expression>
+ </inOutVariable>
</FBD>
</body>
</pou>
--- a/tests/tools/check_source.sh Mon Jun 11 08:34:15 2018 +0200
+++ b/tests/tools/check_source.sh Mon Jun 18 12:12:57 2018 +0300
@@ -35,8 +35,6 @@
compile_checks()
{
echo "Syntax checking using python ..."
- py_files=$(find . -name '*.py')
-
python --version
# remove compiled Python files
@@ -93,7 +91,7 @@
ignore=$user_ignore,$default_ignore
# $pep8 --ignore $ignore --exclude build ./
- $pep8 --max-line-length 300 --exclude build ./
+ $pep8 --max-line-length 300 --exclude build $py_files
if [ $? -ne 0 ]; then
set_exit_error
fi
@@ -164,7 +162,7 @@
user_select=$user_select,E402 # E402 module level import not at top of file
user_select=$user_select,W503 # W503 line break before binary operator
- $pep8 --select $user_select --exclude=build .
+ $pep8 --select $user_select --exclude=build $py_files
if [ $? -ne 0 ]; then
set_exit_error
fi
@@ -187,7 +185,7 @@
echo -n "flake8 version: "
flake8 --version
- flake8 --max-line-length=300 --exclude=build --builtins="_" ./
+ flake8 --max-line-length=300 --exclude=build --builtins="_" $py_files
if [ $? -ne 0 ]; then
set_exit_error
fi
@@ -219,7 +217,7 @@
disable=$disable,W1401 # (anomalous-backslash-in-string) Anomalous backslash in string: '\.'. String constant might be missing an r prefix.
disable=$disable,W0613 # (unused-argument) Unused argument 'X'
disable=$disable,W0622 # (redefined-builtin) Redefining built-in
- disable=$disable,W0621 # (redefined-outer-name) Redefining name 'Y' from outer scope (line X)
+ disable=$disable,W0621 # (redefined-outer-name) Redefining name 'Y' from outer scope (line X)
disable=$disable,W0122 # (exec-used) Use of exec
disable=$disable,W0123 # (eval-used) Use of eval
disable=$disable,I0011 # (locally-disabled) Locally disabling ungrouped-imports (C0412)
@@ -233,7 +231,7 @@
disable=$disable,W0703 # broad-except
disable=$disable,C0301 # Line too long
disable=$disable,C0302 # Too many lines in module
- disable=$disable,W0511 # fixme
+ disable=$disable,W0511 # fixme
disable=$disable,R0901 # (too-many-ancestors) Too many ancestors (9/7)
disable=$disable,R0902 # (too-many-instance-attributes) Too many instance attributes (10/7)
disable=$disable,R0903 # (too-few-public-methods) Too few public methods (0/2)
@@ -250,14 +248,14 @@
enable=
enable=$enable,E1601 # print statement used
- enable=$enable,C0325 # (superfluous-parens) Unnecessary parens after keyword
- enable=$enable,W0404 # reimported module
+ enable=$enable,C0325 # (superfluous-parens) Unnecessary parens after keyword
+ enable=$enable,W0404 # reimported module
enable=$enable,C0411 # (wrong-import-order) standard import "import x" comes before "import y"
enable=$enable,W0108 # (unnecessary-lambda) Lambda may not be necessary
enable=$enable,C0412 # (ungrouped-imports) Imports from package X are not grouped
enable=$enable,C0321 # (multiple-statements) More than one statement on a single line
enable=$enable,W0231 # (super-init-not-called) __init__ method from base class is not called
- enable=$enable,W0105 # (pointless-string-statement) String statement has no effect
+ enable=$enable,W0105 # (pointless-string-statement) String statement has no effect
enable=$enable,W0311 # (bad-indentation) Bad indentation. Found 16 spaces, expected 12
enable=$enable,W0101 # (unreachable) Unreachable code
enable=$enable,E0102 # (function-redefined) method already defined
@@ -306,23 +304,81 @@
fi
# echo $options
- find ./ -name '*.py' | grep -v '/build/' | xargs pylint $options
- if [ $? -ne 0 ]; then
- set_exit_error
- fi
-
- echo "DONE"
- echo ""
+ echo $py_files | xargs pylint $options
+ if [ $? -ne 0 ]; then
+ set_exit_error
+ fi
+
+ echo "DONE"
+ echo ""
+}
+
+
+get_files_to_check()
+{
+ py_files=$(find . -name '*.py' -not -path '*/build/*')
+ if [ "$1" = "--only-changes" ]; then
+ if which hg > /dev/null; then
+ if [ ! -z "$HG_NODE" ]; then
+ hg_change="--change $HG_NODE"
+ msg="for commit $HG_NODE"
+ else
+ hg_change=""
+ msg="in local repository"
+ fi
+ echo "Only changes ${msg} will be checked"
+ echo ""
+ py_files=$(hg status -m -a -n -I '**.py' $hg_change)
+ if [ $? -ne 0 ]; then
+ exit 1;
+ fi
+ fi
+ fi
+ if [ "$1" = "--files-to-check" ]; then
+ list="$2"
+ if [ -z "$list" ]; then
+ echo "--files-to-check requires filename as argument"
+ print_help
+ fi
+ if [ -e "$list" ]; then
+ py_files=$(cat $2 | grep '\.py$')
+ fi
+ fi
+ if [ -z "$py_files" ]; then
+ echo "No files to check"
+ exit 0;
+ fi
+}
+
+
+print_help()
+{
+ echo "Usage: check_source.sh [--only-changes | --files-to-check <filename> ]"
+ echo ""
+ echo "By default without arguments script checks all python source files"
+ echo ""
+ echo "--only-changes"
+ echo " only files with local changes are checked. "
+ echo " If script is called from mercurial pretxncommit hook,"
+ echo " then only commited files are checked"
+ echo ""
+ echo "--files-to-check <file.lst>"
+ echo " script read list of files to check from file.lst"
+
+ exit 1
}
main()
{
+ get_files_to_check $@
compile_checks
pep8_checks_default
# pep8_checks_selected
+
# flake8_checks
pylint_checks
exit $exit_code
}
-main
+[ "$1" = "--help" -o "$1" = "-h" ] && print_help
+main $@