--- a/.hgignore Thu Nov 22 23:39:54 2018 +0100
+++ b/.hgignore Fri Nov 23 00:33:04 2018 +0100
@@ -1,6 +1,9 @@
.project
.directory
+.pytest_cache
+.cache
+.coverage_full
syntax: regexp
^tests/.*/build$
--- a/.pylint Thu Nov 22 23:39:54 2018 +0100
+++ b/.pylint Fri Nov 23 00:33:04 2018 +0100
@@ -110,7 +110,7 @@
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
-additional-builtins=_,website,JS,cobalt
+additional-builtins=_,website,JS,cobalt,PLCBinary
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
@@ -270,7 +270,7 @@
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
-ignored-modules=_ctypes,_winreg,winreg,django.core.serializers,__pyjamas__,gluon.contrib.simplejson
+ignored-modules=_ctypes,_winreg,winreg,django.core.serializers,__pyjamas__,gluon.contrib.simplejson,MotionLibrary
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
--- a/Beremiz_service.py Thu Nov 22 23:39:54 2018 +0100
+++ b/Beremiz_service.py Fri Nov 23 00:33:04 2018 +0100
@@ -163,7 +163,9 @@
# Define locale for wx
loc = __builtin__.__dict__.get('loc', None)
if loc is None:
+ wx.LogGui.EnableLogging(False)
loc = wx.Locale(langid)
+ wx.LogGui.EnableLogging(True)
__builtin__.__dict__['loc'] = loc
# Define location for searching translation files
loc.AddCatalogLookupPathPrefix(localedir)
--- a/CodeFileTreeNode.py Thu Nov 22 23:39:54 2018 +0100
+++ b/CodeFileTreeNode.py Fri Nov 23 00:33:04 2018 +0100
@@ -123,7 +123,7 @@
(fname, lnum, src) = ((self.CODEFILE_NAME,) + error)
self.GetCTRoot().logger.write_warning(XSDSchemaErrorMessage.format(a1=fname, a2=lnum, a3=src))
self.CreateCodeFileBuffer(True)
- except Exception, exc:
+ except Exception as exc:
msg = _("Couldn't load confnode parameters {a1} :\n {a2}").format(a1=self.CTNName(), a2=unicode(exc))
self.GetCTRoot().logger.write_error(msg)
self.GetCTRoot().logger.write_error(traceback.format_exc())
--- a/ConfigTreeNode.py Thu Nov 22 23:39:54 2018 +0100
+++ b/ConfigTreeNode.py Fri Nov 23 00:33:04 2018 +0100
@@ -277,7 +277,7 @@
LDFLAGS = []
if CTNLDFLAGS is not None:
# LDFLAGS can be either string
- if isinstance(CTNLDFLAGS, str) or isinstance(CTNLDFLAGS, unicode):
+ if isinstance(CTNLDFLAGS, (str, unicode)):
LDFLAGS += [CTNLDFLAGS]
# or list of strings
elif isinstance(CTNLDFLAGS, list):
@@ -626,7 +626,7 @@
self.GetCTRoot().logger.write_warning(XSDSchemaErrorMessage.format(a1=fname, a2=lnum, a3=src))
self.MandatoryParams = ("BaseParams", self.BaseParams)
basexmlfile.close()
- except Exception, exc:
+ except Exception as exc:
msg = _("Couldn't load confnode base parameters {a1} :\n {a2}").format(a1=ConfNodeName, a2=unicode(exc))
self.GetCTRoot().logger.write_error(msg)
self.GetCTRoot().logger.write_error(traceback.format_exc())
@@ -643,7 +643,7 @@
setattr(self, name, obj)
self.CTNParams = (name, obj)
xmlfile.close()
- except Exception, exc:
+ except Exception as exc:
msg = _("Couldn't load confnode parameters {a1} :\n {a2}").format(a1=ConfNodeName, a2=unicode(exc))
self.GetCTRoot().logger.write_error(msg)
self.GetCTRoot().logger.write_error(traceback.format_exc())
@@ -656,7 +656,7 @@
pname, ptype = CTNDir.split(NameTypeSeparator)
try:
self.CTNAddChild(pname, ptype)
- except Exception, exc:
+ except Exception as exc:
msg = _("Could not add child \"{a1}\", type {a2} :\n{a3}\n").format(a1=pname, a2=ptype, a3=unicode(exc))
self.GetCTRoot().logger.write_error(msg)
self.GetCTRoot().logger.write_error(traceback.format_exc())
--- a/IDEFrame.py Thu Nov 22 23:39:54 2018 +0100
+++ b/IDEFrame.py Fri Nov 23 00:33:04 2018 +0100
@@ -2628,6 +2628,8 @@
def OnPrintPage(self, page):
dc = self.GetDC()
+ dc.SetBackground(wx.WHITE_BRUSH)
+ dc.Clear()
dc.SetUserScale(1.0, 1.0)
dc.SetDeviceOrigin(0, 0)
dc.printing = not self.Preview
--- a/PLCControler.py Thu Nov 22 23:39:54 2018 +0100
+++ b/PLCControler.py Fri Nov 23 00:33:04 2018 +0100
@@ -460,7 +460,7 @@
programfile.close()
self.ProgramFilePath = filepath
return program_text, errors, warnings
- except PLCGenException, ex:
+ except PLCGenException as ex:
errors.append(ex.message)
else:
errors.append("No project opened")
--- a/PLCGenerator.py Thu Nov 22 23:39:54 2018 +0100
+++ b/PLCGenerator.py Fri Nov 23 00:33:04 2018 +0100
@@ -1024,7 +1024,7 @@
format(a1=block_type, a2=self.Name))
try:
self.GenerateBlock(instance, block_infos, body, None)
- except ValueError, e:
+ except ValueError as e:
raise PLCGenException(e.message)
elif isinstance(instance, ConnectorClass):
connector = instance.getname()
@@ -1302,7 +1302,7 @@
format(a1=block_type, a2=self.Name))
try:
paths.append(str(self.GenerateBlock(next, block_infos, body, connection, order, to_inout)))
- except ValueError, e:
+ except ValueError as e:
raise PLCGenException(e.message)
elif isinstance(next, ContinuationClass):
name = next.getname()
--- a/PSKManagement.py Thu Nov 22 23:39:54 2018 +0100
+++ b/PSKManagement.py Fri Nov 23 00:33:04 2018 +0100
@@ -52,8 +52,10 @@
def GetData(project_path):
loaded_data = _LoadData(project_path)
- psk_files = os.listdir(_pskpath(project_path))
- return _filterData(psk_files, loaded_data)
+ if loaded_data:
+ psk_files = os.listdir(_pskpath(project_path))
+ return _filterData(psk_files, loaded_data)
+ return []
def DeleteID(project_path, ID):
secret_path = os.path.join(_pskpath(project_path), ID+'.secret')
--- a/ProjectController.py Thu Nov 22 23:39:54 2018 +0100
+++ b/ProjectController.py Fri Nov 23 00:33:04 2018 +0100
@@ -61,6 +61,7 @@
from plcopen.types_enums import ComputeConfigurationResourceName, ITEM_CONFNODE
import targets
from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer
+from runtime import PlcStatus
from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage
base_folder = paths.AbsParentDir(__file__)
@@ -798,7 +799,7 @@
status, result, err_result = ProcessLogger(self.logger, buildcmd,
no_stdout=True,
no_stderr=True).spin()
- except Exception, e:
+ except Exception as e:
self.logger.write_error(buildcmd + "\n")
self.logger.write_error(repr(e) + "\n")
return False
@@ -1328,7 +1329,7 @@
self.AppFrame.TabsOpened, self, name, self._getProjectFilesPath(), True)
extensions = []
- for extension, name, editor in features.file_editors:
+ for extension, _name, _editor in features.file_editors:
if extension not in extensions:
extensions.append(extension)
self._ProjectFilesView.SetEditableFileExtensions(extensions)
@@ -1427,20 +1428,20 @@
}
MethodsFromStatus = {
- "Started": {"_Stop": True,
- "_Transfer": True,
- "_Connect": False,
- "_Disconnect": True},
- "Stopped": {"_Run": True,
- "_Transfer": True,
- "_Connect": False,
- "_Disconnect": True},
- "Empty": {"_Transfer": True,
- "_Connect": False,
- "_Disconnect": True},
- "Broken": {"_Connect": False,
- "_Disconnect": True},
- "Disconnected": {},
+ PlcStatus.Started: {"_Stop": True,
+ "_Transfer": True,
+ "_Connect": False,
+ "_Disconnect": True},
+ PlcStatus.Stopped: {"_Run": True,
+ "_Transfer": True,
+ "_Connect": False,
+ "_Disconnect": True},
+ PlcStatus.Empty: {"_Transfer": True,
+ "_Connect": False,
+ "_Disconnect": True},
+ PlcStatus.Broken: {"_Connect": False,
+ "_Disconnect": True},
+ PlcStatus.Disconnected: {},
}
def UpdateMethodsFromPLCStatus(self):
@@ -1453,7 +1454,7 @@
self.UpdatePLCLog(log_count)
if status is None:
self._SetConnector(None, False)
- status = "Disconnected"
+ status = PlcStatus.Disconnected
if self.previous_plcstate != status:
allmethods = self.DefaultMethods.copy()
allmethods.update(
@@ -1464,31 +1465,21 @@
if self.AppFrame is not None:
updated = True
self.AppFrame.RefreshStatusToolBar()
- if status == "Disconnected":
+ if status == PlcStatus.Disconnected:
self.AppFrame.ConnectionStatusBar.SetStatusText(
- self.GetTextStatus(status), 1)
+ _(status), 1)
self.AppFrame.ConnectionStatusBar.SetStatusText('', 2)
else:
self.AppFrame.ConnectionStatusBar.SetStatusText(
_("Connected to URI: %s") % self.BeremizRoot.getURI_location().strip(), 1)
self.AppFrame.ConnectionStatusBar.SetStatusText(
- self.GetTextStatus(status), 2)
+ _(status), 2)
return updated
- def GetTextStatus(self, status):
- msgs = {
- "Started": _("Started"),
- "Stopped": _("Stopped"),
- "Empty": _("Empty"),
- "Broken": _("Broken"),
- "Disconnected": _("Disconnected")
- }
- return msgs.get(status, status)
-
def ShowPLCProgress(self, status="", progress=0):
self.AppFrame.ProgressStatusBar.Show()
self.AppFrame.ConnectionStatusBar.SetStatusText(
- self.GetTextStatus(status), 1)
+ _(status), 1)
self.AppFrame.ProgressStatusBar.SetValue(progress)
def HidePLCProgress(self):
@@ -1506,7 +1497,7 @@
plc_status, Traces = self._connector.GetTraceVariables()
# print [dict.keys() for IECPath, (dict, log, status, fvalue) in
# self.IECdebug_datas.items()]
- if plc_status == "Started":
+ if plc_status == PlcStatus.Started:
if len(Traces) > 0:
for debug_tick, debug_buff in Traces:
debug_vars = UnpackDebugBuffer(
@@ -1575,7 +1566,7 @@
self.SnapshotAndResetDebugValuesBuffers()
def IsPLCStarted(self):
- return self.previous_plcstate == "Started"
+ return self.previous_plcstate == PlcStatus.Started
def ReArmDebugRegisterTimer(self):
if self.DebugTimer is not None:
@@ -1814,7 +1805,7 @@
# Init with actual PLC status and print it
self.UpdateMethodsFromPLCStatus()
- if self.previous_plcstate in ["Started", "Stopped"]:
+ if self.previous_plcstate in [PlcStatus.Started, PlcStatus.Stopped]:
if self.DebugAvailable() and self.GetIECProgramsAndVariables():
self.logger.write(_("Debugger ready\n"))
self._connect_debug()
--- a/bacnet/bacnet.py Thu Nov 22 23:39:54 2018 +0100
+++ b/bacnet/bacnet.py Fri Nov 23 00:33:04 2018 +0100
@@ -570,14 +570,16 @@
# the GUI) are valid...
if self.HasDuplicateObjectNames():
self.GetCTRoot().logger.write_warning(
- _("Error: BACnet server '%s.x: %s' contains objects with duplicate object names.\n") % (locstr, self.CTNName()))
+ _("Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n").
+ format(a1=locstr, a2=self.CTNName()))
raise Exception(False)
# TODO: return an error code instead of raising an exception
# (currently unsupported by Beremiz)
if self.HasDuplicateObjectIDs():
self.GetCTRoot().logger.write_warning(
- _("Error: BACnet server '%s.x: %s' contains objects with duplicate object identifiers.\n") % (locstr, self.CTNName()))
+ _("Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n").
+ format(a1=locstr, a2=self.CTNName()))
raise Exception(False)
# TODO: return an error code instead of raising an exception
# (currently unsupported by Beremiz)
--- a/canfestival/canfestival.py Thu Nov 22 23:39:54 2018 +0100
+++ b/canfestival/canfestival.py Fri Nov 23 00:33:04 2018 +0100
@@ -451,7 +451,7 @@
# Create a new copy of the model with DCF loaded with PDO mappings for desired location
try:
master, pointers = config_utils.GenerateConciseDCF(locations, current_location, self, self.CanFestivalNode.getSync_TPDOs(), "OD_%s" % prefix)
- except config_utils.PDOmappingException, e:
+ except config_utils.PDOmappingException as e:
raise Exception(e.message)
# Do generate C file.
res = gen_cfile.GenerateFile(Gen_OD_path, master, pointers)
--- a/canfestival/config_utils.py Thu Nov 22 23:39:54 2018 +0100
+++ b/canfestival/config_utils.py Fri Nov 23 00:33:04 2018 +0100
@@ -765,7 +765,7 @@
# Generate MasterNode configuration
try:
masternode, pointedvariables = GenerateConciseDCF(locations, (0, 1), nodelist, True, "TestNode")
- except ValueError, message:
+ except ValueError as message:
print("%s\nTest Failed!" % message)
sys.exit()
--- a/connectors/PYRO/__init__.py Thu Nov 22 23:39:54 2018 +0100
+++ b/connectors/PYRO/__init__.py Fri Nov 23 00:33:04 2018 +0100
@@ -37,6 +37,7 @@
from Pyro.errors import PyroError
import PSKManagement as PSK
+from runtime import PlcStatus
zeroconf_service_type = '_PYRO._tcp.local.'
# this module attribute contains a list of DNS-SD (Zeroconf) service types
@@ -91,7 +92,7 @@
# Try to get the proxy object
try:
RemotePLCObjectProxy = Pyro.core.getAttrProxyForURI(schemename + "://" + location + "/PLCObject")
- except Exception,e:
+ except Exception:
confnodesroot.logger.write_error(_("Connection to '%s' failed with exception '%s'\n") % (location, str(e)))
#confnodesroot.logger.write_error(traceback.format_exc())
return None
@@ -104,12 +105,12 @@
def catcher_func(*args, **kwargs):
try:
return func(*args, **kwargs)
- except Pyro.errors.ConnectionClosedError, e:
+ except Pyro.errors.ConnectionClosedError as e:
confnodesroot.logger.write_error(_("Connection lost!\n"))
confnodesroot._SetConnector(None)
- except Pyro.errors.ProtocolError, e:
+ except Pyro.errors.ProtocolError as e:
confnodesroot.logger.write_error(_("Pyro exception: %s\n") % e)
- except Exception, e:
+ except Exception as e:
# confnodesroot.logger.write_error(traceback.format_exc())
errmess = ''.join(Pyro.util.getPyroTraceback(e))
confnodesroot.logger.write_error(errmess + "\n")
@@ -130,8 +131,8 @@
_special_return_funcs = {
"StartPLC": False,
- "GetTraceVariables": ("Broken", None),
- "GetPLCstatus": ("Broken", None),
+ "GetTraceVariables": (PlcStatus.Broken, None),
+ "GetPLCstatus": (PlcStatus.Broken, None),
"RemoteExec": (-1, "RemoteExec script failed!")
}
@@ -140,7 +141,6 @@
A proxy proxy class to handle Beremiz Pyro interface specific behavior.
And to put Pyro exception catcher in between caller and Pyro proxy
"""
-
def __getattr__(self, attrName):
member = self.__dict__.get(attrName, None)
if member is None:
@@ -151,4 +151,3 @@
return member
return PyroProxyProxy()
-
--- a/connectors/WAMP/__init__.py Thu Nov 22 23:39:54 2018 +0100
+++ b/connectors/WAMP/__init__.py Fri Nov 23 00:33:04 2018 +0100
@@ -36,6 +36,7 @@
from autobahn.wamp.exception import TransportLost
from autobahn.wamp.serializer import MsgPackSerializer
+from runtime import PlcStatus
_WampSession = None
_WampConnection = None
@@ -59,7 +60,7 @@
PLCObjDefaults = {
"StartPLC": False,
"GetTraceVariables": ("Broken", None),
- "GetPLCstatus": ("Broken", None),
+ "GetPLCstatus": (PlcStatus.Broken, None),
"RemoteExec": (-1, "RemoteExec script failed!")
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dialogs/CommentEditDialog.py Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,86 @@
+#
+# This file is part of Beremiz, a Integrated Development Environment for
+# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
+#
+# Copyright (C) 2018: Andrey Skvortsov <andrej.skvortzov@gmail.com>
+#
+# See COPYING file for copyrights details.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+from __future__ import absolute_import
+
+import wx
+
+
+class CommentEditDialog(wx.Dialog):
+ """
+ This dialog behaves like wx.TextEntryDialog,
+ but additionaly it allows to set custom font and
+ exact size for wx.TextCtrl.
+ That allows to edit comment and immediately
+ see how it'll be shown on wiresheet.
+ """
+
+ def __init__(self, parent, font, value="", size=wx.Size(400, 200)):
+ """
+ Constructor
+
+ :param parent:
+ parent window (wx.Window)
+ :param font:
+ the font for text control
+ :param value:
+ the default value, which may be the empty string
+ :param size:
+ desired initial size for text control.
+ Minimal size of text control is limited
+ by (100,100)
+ """
+ wx.Dialog.__init__(self, parent, title=_("Please enter comment text"))
+ msg_label = wx.StaticText(self, label=_("Edit comment"))
+ input_size = wx.Size(max(size[0], 100), max(size[1], 100))
+ input = wx.TextCtrl(self, style=wx.TE_MULTILINE)
+ input.SetInitialSize(input_size)
+ input.SetFont(font)
+ input.SetValue(value)
+ buttons = self.CreateButtonSizer(wx.OK | wx.CANCEL)
+ sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10)
+ border = 20
+
+ sizer.Add(msg_label, 0,
+ flag=wx.TOP | wx.LEFT | wx.RIGHT,
+ border=border)
+ sizer.Add(input, 1,
+ flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
+ border=border)
+ sizer.Add(buttons, 0,
+ flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+ border=border)
+
+ self.SetSizerAndFit(sizer)
+ self.input = input
+
+ def SetValue(self, value):
+ """Sets text value"""
+ self.input.SetValue(value)
+
+ def GetValue(self):
+ """
+ Returns the text that the user has entered
+ if the user has pressed wx.OK,
+ or the original value if the user has pressed Cancel.
+ """
+ return self.input.GetValue()
--- a/dialogs/SFCStepNameDialog.py Thu Nov 22 23:39:54 2018 +0100
+++ b/dialogs/SFCStepNameDialog.py Fri Nov 23 00:33:04 2018 +0100
@@ -34,7 +34,7 @@
class SFCStepNameDialog(wx.TextEntryDialog):
- def __init__(self, parent, message, caption="Please enter text", defaultValue="",
+ 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)
--- a/dialogs/__init__.py Thu Nov 22 23:39:54 2018 +0100
+++ b/dialogs/__init__.py Fri Nov 23 00:33:04 2018 +0100
@@ -27,6 +27,7 @@
from __future__ import absolute_import
+from dialogs.CommentEditDialog import CommentEditDialog
from dialogs.ConnectionDialog import ConnectionDialog
from dialogs.ActionBlockDialog import ActionBlockDialog
from dialogs.FBDBlockDialog import FBDBlockDialog
--- a/editors/LDViewer.py Thu Nov 22 23:39:54 2018 +0100
+++ b/editors/LDViewer.py Fri Nov 23 00:33:04 2018 +0100
@@ -1062,17 +1062,17 @@
rungindex = self.FindRung(wires[0])
rung = self.Rungs[rungindex]
old_bbox = rung.GetBoundingBox()
- for wire in wires:
- connections = wire.GetSelectedSegmentConnections()
- left_block = wire.EndConnected.GetParentBlock()
- if wire.EndConnected not in left_elements:
- left_elements.append(wire.EndConnected)
- if wire.StartConnected not in right_elements:
- right_elements.append(wire.StartConnected)
+ for w in wires:
+ connections = w.GetSelectedSegmentConnections()
+ left_block = w.EndConnected.GetParentBlock()
+ if w.EndConnected not in left_elements:
+ left_elements.append(w.EndConnected)
+ if w.StartConnected not in right_elements:
+ right_elements.append(w.StartConnected)
if connections == (False, False) or connections == (False, True) and isinstance(left_block, LD_PowerRail):
- wire.Clean()
- self.RemoveWire(wire)
- rung.SelectElement(wire)
+ w.Clean()
+ self.RemoveWire(w)
+ rung.SelectElement(w)
for left_element in left_elements:
left_block = left_element.GetParentBlock()
if isinstance(left_block, LD_PowerRail):
@@ -1082,8 +1082,8 @@
else:
connectors = left_block.GetConnectors()
for connector in connectors["outputs"]:
- for wire, _handle in connector.GetWires():
- self.RefreshPosition(wire.StartConnected.GetParentBlock())
+ for lwire, _handle in connector.GetWires():
+ self.RefreshPosition(lwire.StartConnected.GetParentBlock())
for right_element in right_elements:
self.RefreshPosition(right_element.GetParentBlock())
rung.RefreshBoundingBox()
--- a/editors/SFCViewer.py Thu Nov 22 23:39:54 2018 +0100
+++ b/editors/SFCViewer.py Fri Nov 23 00:33:04 2018 +0100
@@ -548,7 +548,7 @@
dialog.Destroy()
def AddDivergence(self):
- if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, Graphic_Group) or isinstance(self.SelectedElement, SFC_Step):
+ if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, (Graphic_Group, SFC_Step)):
dialog = SFCDivergenceDialog(self.ParentWindow, self.Controler, self.TagName)
dialog.SetPreviewFont(self.GetFont())
if dialog.ShowModal() == wx.ID_OK:
--- a/editors/TextViewer.py Thu Nov 22 23:39:54 2018 +0100
+++ b/editors/TextViewer.py Fri Nov 23 00:33:04 2018 +0100
@@ -963,4 +963,5 @@
self.StartStyling(highlight_start_pos, 0xff)
self.SetStyling(highlight_end_pos - highlight_start_pos, highlight_type)
self.StartStyling(highlight_start_pos, 0x00)
- self.SetStyling(len(self.Editor.GetText()) - highlight_end_pos, wx.stc.STC_STYLE_DEFAULT)
+ until_end = max(0, len(self.Editor.GetText()) - highlight_end_pos)
+ self.SetStyling(until_end, wx.stc.STC_STYLE_DEFAULT)
--- a/editors/Viewer.py Thu Nov 22 23:39:54 2018 +0100
+++ b/editors/Viewer.py Fri Nov 23 00:33:04 2018 +0100
@@ -83,7 +83,7 @@
'mono': 'Courier',
'helv': 'Helvetica',
'other': 'new century schoolbook',
- 'size': 12,
+ 'size': 10,
}
if wx.Platform == '__WXMSW__':
@@ -764,15 +764,14 @@
self.ElementRefreshList_lock = Lock()
dc = wx.ClientDC(self.Editor)
- font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["mono"])
- dc.SetFont(font)
- width, _height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- while width > 260:
- faces["size"] -= 1
+ while True:
font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["mono"])
dc.SetFont(font)
width, _height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- self.SetFont(font)
+ if width < 260:
+ break
+ faces["size"] -= 1
+ self.Editor.SetFont(font)
self.MiniTextDC = wx.MemoryDC(wx.EmptyBitmap(1, 1))
self.MiniTextDC.SetFont(wx.Font(faces["size"] * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["helv"]))
@@ -2659,11 +2658,8 @@
self.AddNewElement(connection, bbox, wire)
def AddNewComment(self, bbox):
- dialog = wx.TextEntryDialog(self.ParentWindow,
- _("Edit comment"),
- _("Please enter comment text"),
- "", wx.OK | wx.CANCEL | wx.TE_MULTILINE)
- dialog.SetClientSize(wx.Size(400, 200))
+ dialog = CommentEditDialog(self.ParentWindow,
+ self.GetFont())
if dialog.ShowModal() == wx.ID_OK:
value = dialog.GetValue()
id = self.GetNewId()
@@ -3101,14 +3097,10 @@
dialog.Destroy()
def EditCommentContent(self, comment):
- dialog = wx.TextEntryDialog(self.ParentWindow,
- _("Edit comment"),
- _("Please enter comment text"),
- comment.GetContent(),
- wx.OK | wx.CANCEL | wx.TE_MULTILINE)
- width, height = comment.GetSize()
- dialogSize = wx.Size(max(width + 30, 400), max(height + 60, 200))
- dialog.SetClientSize(dialogSize)
+ dialog = CommentEditDialog(self.ParentWindow,
+ self.GetFont(),
+ comment.GetContent(),
+ comment.GetSize())
if dialog.ShowModal() == wx.ID_OK:
value = dialog.GetValue()
rect = comment.GetRedrawRect(1, 1)
@@ -3565,7 +3557,7 @@
self.SearchResults = []
blocks = []
for infos, start, end, _text in self.Controler.SearchInPou(self.TagName, search_params, self.Debug):
- if (infos[0] == self.TagName or self.TagName.split("::")[0] in ['A', 'T']) and infos[1] is not 'name':
+ if (infos[0] == self.TagName or self.TagName.split("::")[0] in ['A', 'T']) and infos[1] != 'name':
if infos[1] in ["var_local", "var_input", "var_output", "var_inout"]:
self.SearchResults.append((infos[1:], start, end, SEARCH_RESULT_HIGHLIGHT))
else:
@@ -3717,12 +3709,14 @@
dc.SetPen(self.PagePen)
xstart, ystart = self.GetViewStart()
window_size = self.Editor.GetClientSize()
- for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]):
- dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]),
- xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0]))
- for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]):
- dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1,
- int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1)
+ if self.PageSize[0] != 0:
+ for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]):
+ dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]),
+ xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0]))
+ if self.PageSize[1] != 0:
+ for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]):
+ dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1,
+ int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1)
# Draw all elements
for comment in self.Comments.itervalues():
--- a/etherlab/CommonEtherCATFunction.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/CommonEtherCATFunction.py Fri Nov 23 00:33:04 2018 +0100
@@ -1,1591 +1,1602 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-
-# This file is part of Beremiz
-#
-# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab. University of Seoul, Korea
-#
-# See COPYING file for copyrights details.
-
-import os
-import wx
-
-mailbox_protocols = ["AoE", "EoE", "CoE", "FoE", "SoE", "VoE"]
-
-def ExtractHexDecValue(value):
- """
- convert numerical value in string format into decimal or hex format.
- @param value : hex or decimal data
- @return integer data
- """
- try:
- return int(value)
- except:
- pass
- try:
- return int(value.replace("#", "0"), 16)
-
- except:
- raise ValueError, "Invalid value for HexDecValue \"%s\"" % value
-
-def ExtractName(names, default=None):
- """
- Extract "name" field from XML entries.
- @param names : XML entry
- @default : if it fails to extract from the designated XML entry, return the default value ("None").
- @return default or the name extracted
- """
- if len(names) == 1:
- return names[0].getcontent()
- else:
- for name in names:
- if name.getLcId() == 1033:
- return name.getcontent()
- return default
-
-#--------------------------------------------------
-# Remote Exec Etherlab Commands
-#--------------------------------------------------
-
-# --------------------- for master ---------------------------
-MASTER_STATE = """
-import commands
-result = commands.getoutput("ethercat master")
-returnVal =result
-"""
-
-# --------------------- for slave ----------------------------
-# ethercat state -p (slave position) (state (INIT, PREOP, SAFEOP, OP))
-SLAVE_STATE = """
-import commands
-result = commands.getoutput("ethercat state -p %d %s")
-returnVal = result
-"""
-
-# ethercat slave
-GET_SLAVE = """
-import commands
-result = commands.getoutput("ethercat slaves")
-returnVal =result
-"""
-
-# ethercat xml -p (slave position)
-SLAVE_XML = """
-import commands
-result = commands.getoutput("ethercat xml -p %d")
-returnVal = result
-"""
-
-# ethercat sdos -p (slave position)
-SLAVE_SDO = """
-import commands
-result = commands.getoutput("ethercat sdos -p %d")
-returnVal =result
-"""
-
-# ethercat upload -p (slave position) (main index) (sub index)
-GET_SLOW_SDO = """
-import commands
-result = commands.getoutput("ethercat upload -p %d %s %s")
-returnVal =result
-"""
-
-# ethercat download -p (slave position) (main index) (sub index) (value)
-SDO_DOWNLOAD = """
-import commands
-result = commands.getoutput("ethercat download --type %s -p %d %s %s %s")
-returnVal =result
-"""
-
-# ethercat sii_read -p (slave position)
-SII_READ = """
-import commands
-result = commands.getoutput("ethercat sii_read -p %d")
-returnVal =result
-"""
-
-# ethercat reg_read -p (slave position) (address) (size)
-REG_READ = """
-import commands
-result = commands.getoutput("ethercat reg_read -p %d %s %s")
-returnVal =result
-"""
-
-# ethercat sii_write -p (slave position) - (contents)
-SII_WRITE = """
-import subprocess
-process = subprocess.Popen(
- ["ethercat", "-f", "sii_write", "-p", "%d", "-"],
- stdin=subprocess.PIPE)
-process.communicate(sii_data)
-returnVal = process.returncode
-"""
-
-# ethercat reg_write -p (slave position) -t (uinit16) (address) (data)
-REG_WRITE = """
-import commands
-result = commands.getoutput("ethercat reg_write -p %d -t uint16 %s %s")
-returnVal =result
-"""
-
-# ethercat rescan -p (slave position)
-RESCAN = """
-import commands
-result = commands.getoutput("ethercat rescan -p %d")
-returnVal =result
-"""
-
-#--------------------------------------------------
-# Common Method For EtherCAT Management
-#--------------------------------------------------
-class _CommonSlave:
-
- # ----- Data Structure for ethercat management ----
- SlaveState = ""
-
- # category of SDO data
- DatatypeDescription, CommunicationObject, ManufacturerSpecific, \
- ProfileSpecific, Reserved, AllSDOData = range(6)
-
- # store the execution result of "ethercat sdos" command into SaveSDOData.
- SaveSDOData = []
-
- # Flags for checking "write" permission of OD entries
- CheckPREOP = False
- CheckSAFEOP = False
- CheckOP = False
-
- # Save PDO Data
- TxPDOInfo = []
- TxPDOCategory = []
- RxPDOInfo = []
- RxPDOCategory = []
-
- # Save EEPROM Data
- SiiData = ""
-
- # Save Register Data
- RegData = ""
- CrtRegSpec = {"ESCType": "",
- "FMMUNumber": "",
- "SMNumber": "",
- "PDIType": ""}
-
- def __init__(self, controler):
- """
- Constructor
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- self.Controler = controler
-
- self.ClearSDODataSet()
-
- #-------------------------------------------------------------------------------
- # Used Master State
- #-------------------------------------------------------------------------------
- def GetMasterState(self):
- """
- Execute "ethercat master" command and parse the execution result
- @return MasterState
- """
-
- # exectute "ethercat master" command
- error, return_val = self.Controler.RemoteExec(MASTER_STATE, return_val = None)
- master_state = {}
- # parse the reslut
- for each_line in return_val.splitlines():
- if len(each_line) > 0 :
- chunks = each_line.strip().split(':', 1)
- key = chunks[0]
- value = []
- if len(chunks) > 1 :
- value = chunks[1].split()
- if '(attached)' in value:
- value.remove('(attached)')
- master_state[key] = value
-
- return master_state
-
- #-------------------------------------------------------------------------------
- # Used Slave State
- #-------------------------------------------------------------------------------
- def RequestSlaveState(self, command):
- """
- Set slave state to the specified one using "ethercat states -p %d %s" command.
- Command example : "ethercat states -p 0 PREOP" (target slave position and target state are given.)
- @param command : target slave state
- """
- error, return_val = self.Controler.RemoteExec(SLAVE_STATE%(self.Controler.GetSlavePos(), command), return_val = None)
-
- def GetSlaveStateFromSlave(self):
- """
- Get slave information using "ethercat slaves" command and store the information into internal data structure
- (self.SlaveState) for "Slave State"
- return_val example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)
- """
- error, return_val = self.Controler.RemoteExec(GET_SLAVE, return_val = None)
- self.SlaveState = return_val
- return return_val
-
- #-------------------------------------------------------------------------------
- # Used SDO Management
- #-------------------------------------------------------------------------------
- def GetSlaveSDOFromSlave(self):
- """
- Get SDO objects information of current slave using "ethercat sdos -p %d" command.
- Command example : "ethercat sdos -p 0"
- @return return_val : execution results of "ethercat sdos" command (need to be parsed later)
- """
- error, return_val = self.Controler.RemoteExec(SLAVE_SDO%(self.Controler.GetSlavePos()), return_val = None)
- return return_val
-
- def SDODownload(self, data_type, idx, sub_idx, value):
- """
- Set an SDO object value to user-specified value using "ethercat download" command.
- Command example : "ethercat download --type int32 -p 0 0x8020 0x12 0x00000000"
- @param data_type : data type of SDO entry
- @param idx : index of the SDO entry
- @param sub_idx : subindex of the SDO entry
- @param value : value of SDO entry
- """
- error, return_val = self.Controler.RemoteExec(SDO_DOWNLOAD%(data_type, self.Controler.GetSlavePos(), idx, sub_idx, value), return_val = None)
-
- def BackupSDODataSet(self):
- """
- Back-up current SDO entry information to restore the SDO data
- in case that the user cancels SDO update operation.
- """
- self.BackupDatatypeDescription = self.SaveDatatypeDescription
- self.BackupCommunicationObject = self.SaveCommunicationObject
- self.BackupManufacturerSpecific = self.SaveManufacturerSpecific
- self.BackupProfileSpecific = self.SaveProfileSpecific
- self.BackupReserved = self.SaveReserved
- self.BackupAllSDOData = self.SaveAllSDOData
-
- def ClearSDODataSet(self):
- """
- Clear the specified SDO entry information.
- """
- for count in range(6):
- self.SaveSDOData.append([])
-
- #-------------------------------------------------------------------------------
- # Used PDO Monitoring
- #-------------------------------------------------------------------------------
- def RequestPDOInfo(self):
- """
- Load slave information from RootClass (XML data) and parse the information (calling SlavePDOData() method).
- """
- # Load slave information from ESI XML file (def EthercatMaster.py)
- slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos())
-
- type_infos = slave.getType()
- device, alignment = self.Controler.CTNParent.GetModuleInfos(type_infos)
- # Initialize PDO data set
- self.ClearDataSet()
-
- # if 'device' object is valid, call SavePDOData() to parse PDO data
- if device is not None :
- self.SavePDOData(device)
-
- def SavePDOData(self, device):
- """
- Parse PDO data and store the results in TXPDOCategory and RXPDOCategory
- Tx(Rx)PDOCategory : index, name, entry number
- Tx(Rx)Info : entry index, sub index, name, length, type
- @param device : Slave information extracted from ESI XML file
- """
- # Parsing TXPDO entries
- for pdo, pdo_info in ([(pdo, "Inputs") for pdo in device.getTxPdo()]):
- # Save pdo_index, entry, and name of each entry
- pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
- entries = pdo.getEntry()
- pdo_name = ExtractName(pdo.getName())
-
- # Initialize entry number count
- count = 0
-
- # Parse entries
- for entry in entries:
- # Save index and subindex
- index = ExtractHexDecValue(entry.getIndex().getcontent())
- subindex = ExtractHexDecValue(entry.getSubIndex())
- # if entry name exists, save entry data
- if ExtractName(entry.getName()) is not None :
- entry_infos = {
- "entry_index" : index,
- "subindex" : subindex,
- "name" : ExtractName(entry.getName()),
- "bitlen" : entry.getBitLen(),
- "type" : entry.getDataType().getcontent()
- }
- self.TxPDOInfo.append(entry_infos)
- count += 1
-
- categorys = {"pdo_index" : pdo_index, "name" : pdo_name, "number_of_entry" : count}
- self.TxPDOCategory.append(categorys)
-
- # Parsing RxPDO entries
- for pdo, pdo_info in ([(pdo, "Outputs") for pdo in device.getRxPdo()]):
- # Save pdo_index, entry, and name of each entry
- pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
- entries = pdo.getEntry()
- pdo_name = ExtractName(pdo.getName())
-
- # Initialize entry number count
- count = 0
-
- # Parse entries
- for entry in entries:
- # Save index and subindex
- index = ExtractHexDecValue(entry.getIndex().getcontent())
- subindex = ExtractHexDecValue(entry.getSubIndex())
- # if entry name exists, save entry data
- if ExtractName(entry.getName()) is not None :
- entry_infos = {
- "entry_index" : index,
- "subindex" : subindex,
- "name" : ExtractName(entry.getName()),
- "bitlen" : str(entry.getBitLen()),
- "type" : entry.getDataType().getcontent()
- }
- self.RxPDOInfo.append(entry_infos)
- count += 1
-
- categorys = {"pdo_index" : pdo_index, "name" : pdo_name, "number_of_entry" : count}
- self.RxPDOCategory.append(categorys)
-
- def GetTxPDOCategory(self):
- """
- Get TxPDOCategory data structure (Meta informaton of TxPDO).
- TxPDOCategorys : index, name, number of entries
- @return TxPDOCategorys
- """
- return self.TxPDOCategory
-
- def GetRxPDOCategory(self):
- """
- Get RxPDOCategory data structure (Meta information of RxPDO).
- RxPDOCategorys : index, name, number of entries
- @return RxPDOCategorys
- """
- return self.RxPDOCategory
-
- def GetTxPDOInfo(self):
- """
- Get TxPDOInfo data structure (Detailed information on TxPDO entries).
- TxPDOInfos : entry index, sub index, name, length, type
- @return TxPDOInfos
- """
- return self.TxPDOInfo
-
- def GetRxPDOInfo(self):
- """
- Get RxPDOInfo data structure (Detailed information on RxPDO entries).
- RxPDOInfos : entry index, sub index, name, length, type
- @return RxPDOInfos
- """
- return self.RxPDOInfo
-
- def ClearDataSet(self):
- """
- Initialize PDO management data structure.
- """
- self.TxPDOInfos = []
- self.TxPDOCategorys = []
- self.RxPDOInfos = []
- self.RxPDOCategorys = []
-
- #-------------------------------------------------------------------------------
- # Used EEPROM Management
- #-------------------------------------------------------------------------------
- # Base data types in ETG2000; format = {"Name": "BitSize"}
- BaseDataTypeDict = {"BOOL": "01",
- "SINT": "02",
- "INT": "03",
- "DINT": "04",
- "USINT": "05",
- "UINT": "06",
- "UDINT": "07",
- "REAL": "08",
- "INT24": "10",
- "LREAL": "11",
- "INT40": "12",
- "INT48": "13",
- "INT56": "14",
- "LINT": "15",
- "UINT24": "16",
- "UINT40": "18",
- "UINT48": "19",
- "UINT56": "1a",
- "ULINT": "1b",
- "USINT": "1e",
- "BITARR8": "2d",
- "BITARR16": "2e",
- "BITARR32": "2f",
- "BIT1": "30",
- "BIT2": "31",
- "BIT3": "32",
- "BIT4": "33",
- "BIT5": "34",
- "BIT6": "35",
- "BIT7": "36",
- "BIT8": "37"}
-
- def GetSmartViewInfos(self):
- """
- Parse XML data for "Smart View" of EEPROM contents.
- @return smartview_infos : EEPROM contents dictionary
- """
-
- smartview_infos = {"eeprom_size": 128,
- "pdi_type": 0,
- "device_emulation": "False",
- "vendor_id": '0x00000000',
- "product_code": '0x00000000',
- "revision_no": '0x00000000',
- "serial_no": '0x00000000',
- "supported_mailbox": "",
- "mailbox_bootstrapconf_outstart": '0',
- "mailbox_bootstrapconf_outlength": '0',
- "mailbox_bootstrapconf_instart": '0',
- "mailbox_bootstrapconf_inlength": '0',
- "mailbox_standardconf_outstart": '0',
- "mailbox_standardconf_outlength": '0',
- "mailbox_standardconf_instart": '0',
- "mailbox_standardconf_inlength": '0'}
-
- slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos())
- type_infos = slave.getType()
- device, alignment = self.Controler.CTNParent.GetModuleInfos(type_infos)
-
- # 'device' represents current slave device selected by user
- if device is not None:
- for eeprom_element in device.getEeprom().getcontent():
- # get EEPROM size; <Device>-<Eeprom>-<ByteSize>
- if eeprom_element["name"] == "ByteSize":
- smartview_infos["eeprom_size"] = eeprom_element
-
- elif eeprom_element["name"] == "ConfigData":
- configData_data = self.DecimalToHex(eeprom_element)
- # get PDI type; <Device>-<Eeprom>-<ConfigData> address 0x00
- smartview_infos["pdi_type"] = int(configData_data[0:2], 16)
- # get state of device emulation; <Device>-<Eeprom>-<ConfigData> address 0x01
- if "{:0>8b}".format(int(configData_data[2:4], 16))[7] == '1':
- smartview_infos["device_emulation"] = "True"
-
- elif eeprom_element["name"] == "BootStrap":
- bootstrap_data = "{:0>16x}".format(eeprom_element)
- # get bootstrap configuration; <Device>-<Eeprom>-<BootStrap>
- for cfg, iter in [("mailbox_bootstrapconf_outstart", 0),
- ("mailbox_bootstrapconf_outlength", 1),
- ("mailbox_bootstrapconf_instart", 2),
- ("mailbox_bootstrapconf_inlength", 3)]:
- smartview_infos[cfg] = str(int(bootstrap_data[4*iter+2:4*(iter+1)]+bootstrap_data[4*iter:4*iter+2], 16))
-
- # get protocol (profile) types supported by mailbox; <Device>-<Mailbox>
- mb = device.getMailbox()
- if mb is not None:
- for mailbox_protocol in mailbox_protocols:
- if getattr(mb,"get%s"%mailbox_protocol)() is not None:
- smartview_infos["supported_mailbox"] += "%s, "%mailbox_protocol
- smartview_infos["supported_mailbox"] = smartview_infos["supported_mailbox"].strip(", ")
-
- # get standard configuration of mailbox; <Device>-<Sm>
- for sm_element in device.getSm():
- if sm_element.getcontent() == "MBoxOut":
- smartview_infos["mailbox_standardconf_outstart"] = str(ExtractHexDecValue(sm_element.getStartAddress()))
- smartview_infos["mailbox_standardconf_outlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize()))
- elif sm_element.getcontent() == "MBoxIn":
- smartview_infos["mailbox_standardconf_instart"] = str(ExtractHexDecValue(sm_element.getStartAddress()))
- smartview_infos["mailbox_standardconf_inlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize()))
- else:
- pass
-
- # get device identity from <Device>-<Type>
- # vendor ID; by default, pre-defined value in self.ModulesLibrary
- # if device type in 'vendor' item equals to actual slave device type, set 'vendor_id' to vendor ID.
- for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
- for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]:
- if available_device[0] == type_infos["device_type"]:
- smartview_infos["vendor_id"] = "0x" + "{:0>8x}".format(vendor_id)
-
- # product code;
- if device.getType().getProductCode() is not None:
- product_code = device.getType().getProductCode()
- smartview_infos["product_code"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(product_code))
-
- # revision number;
- if device.getType().getRevisionNo() is not None:
- revision_no = device.getType().getRevisionNo()
- smartview_infos["revision_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(revision_no))
-
- # serial number;
- if device.getType().getSerialNo() is not None:
- serial_no = device.getType().getSerialNo()
- smartview_infos["serial_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(serial_no))
-
- return smartview_infos
-
- else:
- return None
-
- def DecimalToHex(self, decnum):
- """
- Convert decimal value into hexadecimal representation.
- @param decnum : decimal value
- @return hex_data : hexadecimal representation of input value in decimal
- """
- value = "%x" % decnum
- value_len = len(value)
- if (value_len % 2) == 0:
- hex_len = value_len
- else:
- hex_len = (value_len / 2) * 2 + 2
-
- hex_data = ("{:0>"+str(hex_len)+"x}").format(decnum)
-
- return hex_data
-
- def SiiRead(self):
- """
- Get slave EEPROM contents maintained by master device using "ethercat sii_read -p %d" command.
- Command example : "ethercat sii_read -p 0"
- @return return_val : result of "ethercat sii_read" (binary data)
- """
- error, return_val = self.Controler.RemoteExec(SII_READ%(self.Controler.GetSlavePos()), return_val = None)
- self.SiiData = return_val
- return return_val
-
- def SiiWrite(self, binary):
- """
- Overwrite slave EEPROM contents using "ethercat sii_write -p %d" command.
- Command example : "ethercat sii_write -p 0 - (binary contents)"
- @param binary : EEPROM contents in binary data format
- @return return_val : result of "ethercat sii_write" (If it succeeds, the return value is NULL.)
- """
- error, return_val = self.Controler.RemoteExec(SII_WRITE%(self.Controler.GetSlavePos()), return_val = None, sii_data = binary)
- return return_val
-
- def LoadData(self):
- """
- Loading data from EEPROM use Sii_Read Method
- @return self.BinaryCode : slave EEPROM data in binary format (zero-padded)
- """
- return_val = self.Controler.CommonMethod.SiiRead()
- self.BinaryCode = return_val
- self.Controler.SiiData = self.BinaryCode
-
- # append zero-filled padding data up to EEPROM size
- for index in range(self.SmartViewInfosFromXML["eeprom_size"] - len(self.BinaryCode)):
- self.BinaryCode = self.BinaryCode +'ff'.decode('hex')
-
- return self.BinaryCode
-
- def HexRead(self, binary):
- """
- Convert binary digit representation into hexadecimal representation for "Hex View" menu.
- @param binary : binary digits
- @return hexCode : hexadecimal digits
- @return hexview_table_row, hexview_table_col : Grid size for "Hex View" UI
- """
- row_code = []
- row_text = ""
- row = 0
- hex_code = []
-
- hexview_table_col = 17
-
- for index in range(0, len(binary)) :
- if len(binary[index]) != 1:
- break
- else:
- digithexstr = hex(ord(binary[index]))
-
- tempvar2 = digithexstr[2:4]
- if len(tempvar2) == 1:
- tempvar2 = "0" + tempvar2
- row_code.append(tempvar2)
-
- if int(digithexstr, 16)>=32 and int(digithexstr, 16)<=126:
- row_text = row_text + chr(int(digithexstr, 16))
- else:
- row_text = row_text + "."
-
- if index != 0 :
- if len(row_code) == (hexview_table_col - 1):
- row_code.append(row_text)
- hex_code.append(row_code)
- row_text = ""
- row_code = []
- row = row + 1
-
- hexview_table_row = row
-
- return hex_code, hexview_table_row, hexview_table_col
-
- def GenerateEEPROMList(self, data, direction, length):
- """
- Generate EEPROM data list by reconstructing 'data' string.
- example : data="12345678", direction=0, length=8 -> eeprom_list=['12', '34', '56', '78']
- data="12345678", direction=1, length=8 -> eeprom_list=['78', '56', '34', '12']
- @param data : string to be reconstructed
- @param direction : endianness
- @param length : data length
- @return eeprom_list : reconstructed list data structure
- """
- eeprom_list = []
-
- if direction is 0 or 1:
- for i in range(length/2):
- if data == "":
- eeprom_list.append("00")
- else:
- eeprom_list.append(data[direction*(length-2):direction*(length-2)+2])
- data = data[(1-direction)*2:length-direction*2]
- length -= 2
- return eeprom_list
-
- def XmlToEeprom(self):
- """
- Extract slave EEPROM contents using slave ESI XML file.
- - Mandatory parts
- - String category : ExtractEEPROMStringCategory()
- - General category : ExtractEEPROMGeneralCategory()
- - FMMU category : ExtractEEPROMFMMUCategory
- - SyncM category : ExtractEEPROMSyncMCategory()
- - Tx/RxPDO category : ExtractEEPROMPDOCategory()
- - DC category : ExtractEEPROMDCCategory()
- @return eeprom_binary
- """
- eeprom = []
- data = ""
- eeprom_size = 0
- eeprom_binary = ""
-
- # 'device' is the slave device of the current EtherCAT slave plugin
- slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos())
- type_infos = slave.getType()
- device, alignment = self.Controler.CTNParent.GetModuleInfos(type_infos)
-
- if device is not None:
- # get ConfigData for EEPROM offset 0x0000-0x000d; <Device>-<Eeprom>-<ConfigData>
- for eeprom_element in device.getEeprom().getcontent():
- if eeprom_element["name"] == "ConfigData":
- data = self.DecimalToHex(eeprom_element)
- eeprom += self.GenerateEEPROMList(data, 0, 28)
-
- # calculate CRC for EEPROM offset 0x000e-0x000f
- crc = 0x48
- for segment in eeprom:
- for i in range(8):
- bit = crc & 0x80
- crc = (crc << 1) | ((int(segment, 16) >> (7 - i)) & 0x01)
- if bit:
- crc ^= 0x07
- for k in range(8):
- bit = crc & 0x80
- crc <<= 1
- if bit:
- crc ^= 0x07
- eeprom.append(hex(crc)[len(hex(crc))-3:len(hex(crc))-1])
- eeprom.append("00")
-
- # get VendorID for EEPROM offset 0x0010-0x0013;
- data = ""
- for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
- for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]:
- if available_device[0] == type_infos["device_type"]:
- data = "{:0>8x}".format(vendor_id)
- eeprom += self.GenerateEEPROMList(data, 1, 8)
-
- # get Product Code for EEPROM offset 0x0014-0x0017;
- data = ""
- if device.getType().getProductCode() is not None:
- data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getProductCode()))
- eeprom += self.GenerateEEPROMList(data, 1, 8)
-
- # get Revision Number for EEPROM offset 0x0018-0x001b;
- data = ""
- if device.getType().getRevisionNo() is not None:
- data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getRevisionNo()))
- eeprom += self.GenerateEEPROMList(data, 1, 8)
-
- # get Serial Number for EEPROM 0x001c-0x001f;
- data = ""
- if device.getType().getSerialNo() is not None:
- data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getSerialNo()))
- eeprom += self.GenerateEEPROMList(data, 1, 8)
-
- # get Execution Delay for EEPROM 0x0020-0x0021; not analyzed yet
- eeprom.append("00")
- eeprom.append("00")
-
- # get Port0/1 Delay for EEPROM offset 0x0022-0x0025; not analyzed yet
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
-
- # reserved for EEPROM offset 0x0026-0x0027;
- eeprom.append("00")
- eeprom.append("00")
-
- # get BootStrap for EEPROM offset 0x0028-0x002e; <Device>-<Eeprom>-<BootStrap>
- data = ""
- for eeprom_element in device.getEeprom().getcontent():
- if eeprom_element["name"] == "BootStrap":
- data = "{:0>16x}".format(eeprom_element)
- eeprom += self.GenerateEEPROMList(data, 0, 16)
-
- # get Standard Mailbox for EEPROM offset 0x0030-0x0037; <Device>-<sm>
- data = ""
- standard_send_mailbox_offset = None
- standard_send_mailbox_size = None
- standard_receive_mailbox_offset = None
- standard_receive_mailbox_size = None
- for sm_element in device.getSm():
- if sm_element.getcontent() == "MBoxOut":
- standard_receive_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress()))
- standard_receive_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize()))
- elif sm_element.getcontent() == "MBoxIn":
- standard_send_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress()))
- standard_send_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize()))
-
- if standard_receive_mailbox_offset is None:
- eeprom.append("00")
- eeprom.append("00")
- else:
- eeprom.append(standard_receive_mailbox_offset[2:4])
- eeprom.append(standard_receive_mailbox_offset[0:2])
- if standard_receive_mailbox_size is None:
- eeprom.append("00")
- eeprom.append("00")
- else:
- eeprom.append(standard_receive_mailbox_size[2:4])
- eeprom.append(standard_receive_mailbox_size[0:2])
- if standard_send_mailbox_offset is None:
- eeprom.append("00")
- eeprom.append("00")
- else:
- eeprom.append(standard_send_mailbox_offset[2:4])
- eeprom.append(standard_send_mailbox_offset[0:2])
- if standard_send_mailbox_size is None:
- eeprom.append("00")
- eeprom.append("00")
- else:
- eeprom.append(standard_send_mailbox_size[2:4])
- eeprom.append(standard_send_mailbox_size[0:2])
-
- # get supported mailbox protocols for EEPROM offset 0x0038-0x0039;
- data = 0
- mb = device.getMailbox()
- if mb is not None :
- for bit,mbprot in enumerate(mailbox_protocols):
- if getattr(mb,"get%s"%mbprot)() is not None:
- data += 1<<bit
- data = "{:0>4x}".format(data)
- eeprom.append(data[2:4])
- eeprom.append(data[0:2])
-
- # resereved for EEPROM offset 0x003a-0x007b;
- for i in range(0x007b-0x003a+0x0001):
- eeprom.append("00")
-
- # get EEPROM size for EEPROM offset 0x007c-0x007d;
- data = ""
- for eeprom_element in device.getEeprom().getcontent():
- if eeprom_element["name"] == "ByteSize":
- eeprom_size = int(str(eeprom_element))
- data = "{:0>4x}".format(int(eeprom_element)/1024*8-1)
-
- if data == "":
- eeprom.append("00")
- eeprom.append("00")
- else:
- eeprom.append(data[2:4])
- eeprom.append(data[0:2])
-
- # Version for EEPROM 0x007e-0x007f;
- # According to "EtherCAT Slave Device Description(V0.3.0)"
- eeprom.append("01")
- eeprom.append("00")
-
- # append String Category data
- for data in self.ExtractEEPROMStringCategory(device):
- eeprom.append(data)
-
- # append General Category data
- for data in self.ExtractEEPROMGeneralCategory(device):
- eeprom.append(data)
-
- # append FMMU Category data
- for data in self.ExtractEEPROMFMMUCategory(device):
- eeprom.append(data)
-
- # append SyncM Category data
- for data in self.ExtractEEPROMSyncMCategory(device):
- eeprom.append(data)
-
- # append TxPDO Category data
- for data in self.ExtractEEPROMPDOCategory(device, "TxPdo"):
- eeprom.append(data)
-
- # append RxPDO Category data
- for data in self.ExtractEEPROMPDOCategory(device, "RxPdo"):
- eeprom.append(data)
-
- # append DC Category data
- for data in self.ExtractEEPROMDCCategory(device):
- eeprom.append(data)
-
- # append padding
- padding = eeprom_size-len(eeprom)
- for i in range(padding):
- eeprom.append("ff")
-
- # convert binary code
- for index in range(eeprom_size):
- eeprom_binary = eeprom_binary + eeprom[index].decode('hex')
-
- return eeprom_binary
-
- def ExtractEEPROMStringCategory(self, device):
- """
- Extract "Strings" category data from slave ESI XML and generate EEPROM image data.
- @param device : 'device' object in the slave ESI XML
- @return eeprom : "Strings" category EEPROM image data
- """
- eeprom = []
- self.Strings = []
- data = ""
- count = 0 # string counter
- padflag = False # padding flag if category length is odd
-
- # index information for General Category in EEPROM
- self.GroupIdx = 0
- self.ImgIdx = 0
- self.OrderIdx = 0
- self.NameIdx = 0
-
- # flag for preventing duplicated vendor specific data
- typeflag = False
- grouptypeflag = False
- groupnameflag = False
- devnameflag = False
- imageflag = False
-
- # vendor specific data
- # element1; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Type>
- # vendor_specific_data : vendor specific data (binary type)
- vendor_specific_data = ""
- # vendor_spec_strings : list of vendor specific "strings" for preventing duplicated strings
- vendor_spec_strings = []
- for element in device.getType().getcontent():
- data += element
- if data is not "" and type(data) == unicode:
- for vendor_spec_string in vendor_spec_strings:
- if data == vendor_spec_string:
- self.OrderIdx = vendor_spec_strings.index(data)+1
- typeflag = True
- break
- if typeflag is False:
- count += 1
- self.Strings.append(data)
- vendor_spec_strings.append(data)
- typeflag = True
- self.OrderIdx = count
- vendor_specific_data += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- vendor_specific_data += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # element2-1; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<GroupType>
- data = device.getGroupType()
- if data is not None and type(data) == unicode:
- for vendor_spec_string in vendor_spec_strings:
- if data == vendor_spec_string:
- self.GroupIdx = vendor_spec_strings.index(data)+1
- grouptypeflag = True
- break
- if grouptypeflag is False:
- grouptype = data
- count += 1
- self.Strings.append(data)
- vendor_spec_strings.append(data)
- grouptypeflag = True
- self.GroupIdx = count
- vendor_specific_data += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- vendor_specific_data += "{:0>2x}".format(ord(data[character]))
-
- # element2-2; <EtherCATInfo>-<Groups>-<Group>-<Type>
- if grouptypeflag is False:
- if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None:
- for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
- for group_type, group_etc in vendor["groups"].iteritems():
- for device_item in group_etc["devices"]:
- if device == device_item[1]:
- data = group_type
- if data is not None and type(data) == unicode:
- for vendor_spec_string in vendor_spec_strings:
- if data == vendor_spec_string:
- self.GroupIdx = vendor_spec_strings.index(data)+1
- grouptypeflag = True
- break
- if grouptypeflag is False:
- grouptype = data
- count += 1
- self.Strings.append(data)
- vendor_spec_strings.append(data)
- grouptypeflag = True
- self.GroupIdx = count
- vendor_specific_data += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- vendor_specific_data += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # element3; <EtherCATInfo>-<Descriptions>-<Groups>-<Group>-<Name(LcId is "1033")>
- if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None:
- for vendorId, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
- for group_type, group_etc in vendor["groups"].iteritems():
- for device_item in group_etc["devices"]:
- if device == device_item[1]:
- data = group_etc["name"]
- if data is not "" and type(data) == unicode:
- for vendor_spec_string in vendor_spec_strings:
- if data == vendor_spec_string:
- groupnameflag = True
- break
- if groupnameflag is False:
- count += 1
- self.Strings.append(data)
- vendor_spec_strings.append(data)
- groupnameflag = True
- vendor_specific_data += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- vendor_specific_data += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # element4; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Name(LcId is "1033" or "1"?)>
- for element in device.getName():
- if element.getLcId() == 1 or element.getLcId()==1033:
- data = element.getcontent()
- if data is not "" and type(data) == unicode:
- for vendor_spec_string in vendor_spec_strings:
- if data == vendor_spec_string:
- self.NameIdx = vendor_spec_strings.index(data)+1
- devnameflag = True
- break
- if devnameflag is False:
- count += 1
- self.Strings.append(data)
- vendor_spec_strings.append(data)
- devnameflag = True
- self.NameIdx = count
- vendor_specific_data += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- vendor_specific_data += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # element5-1; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Image16x14>
- if device.getcontent() is not None:
- data = device.getcontent()
- if data is not None and type(data) == unicode:
- for vendor_spec_string in vendor_spec_strings:
- if data == vendor_spec_string:
- self.ImgIdx = vendor_spec_strings.index(data)+1
- imageflag = True
- break
- if imageflag is False:
- count += 1
- self.Strings.append(data)
- vendor_spec_strings.append(data)
- imageflag = True
- self.ImgIdx = count
- vendor_specific_data += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- vendor_specific_data += "{:0>2x}".format(ord(data[character]))
-
- # element5-2; <EtherCATInfo>-<Descriptions>-<Groups>-<Group>-<Image16x14>
- if imageflag is False:
- if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None:
- for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
- for group_type, group_etc in vendor["groups"].iteritems():
- for device_item in group_etc["devices"]:
- if device == device_item[1]:
- data = group_etc
- if data is not None and type(data) == unicode:
- for vendor_spec_string in vendor_spec_strings:
- if data == vendor_spec_string:
- self.ImgIdx = vendor_spec_strings.index(data)+1
- imageflag = True
- break
- if imageflag is False:
- count += 1
- self.Strings.append(data)
- vendor_spec_strings.append(data)
- imageflag = True
- self.ImgIdx = count
- vendor_specific_data += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- vendor_specific_data += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # DC related elements
- # <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Dc>-<OpMode>-<Name>
- dc_related_elements = ""
- if device.getDc() is not None:
- for element in device.getDc().getOpMode():
- data = element.getName()
- if data is not "":
- count += 1
- self.Strings.append(data)
- dc_related_elements += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- dc_related_elements += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # Input elements(TxPDO)
- # <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<TxPdo>; Name
- input_elements = ""
- inputs = []
- for element in device.getTxPdo():
- for name in element.getName():
- data = name.getcontent()
- for input in inputs:
- if data == input:
- data = ""
- if data is not "":
- count += 1
- self.Strings.append(data)
- inputs.append(data)
- input_elements += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- input_elements += "{:0>2x}".format(ord(data[character]))
- data = ""
- for entry in element.getEntry():
- for name in entry.getName():
- data = name.getcontent()
- for input in inputs:
- if data == input:
- data = ""
- if data is not "":
- count += 1
- self.Strings.append(data)
- inputs.append(data)
- input_elements += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- input_elements += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # Output elements(RxPDO)
- # <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<RxPdo>; Name
- output_elements = ""
- outputs = []
- for element in device.getRxPdo():
- for name in element.getName():
- data = name.getcontent()
- for output in outputs:
- if data == output:
- data = ""
- if data is not "":
- count += 1
- self.Strings.append(data)
- outputs.append(data)
- output_elements += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- output_elements += "{:0>2x}".format(ord(data[character]))
- data = ""
- for entry in element.getEntry():
- for name in entry.getName():
- data = name.getcontent()
- for output in outputs:
- if data == output:
- data = ""
- if data is not "":
- count += 1
- self.Strings.append(data)
- outputs.append(data)
- output_elements += "{:0>2x}".format(len(data))
- for character in range(len(data)):
- output_elements += "{:0>2x}".format(ord(data[character]))
- data = ""
-
- # form eeprom data
- # category header
- eeprom.append("0a")
- eeprom.append("00")
- # category length (word); 1 word is 4 bytes. "+2" is the length of string's total number
- length = len(vendor_specific_data + dc_related_elements + input_elements + output_elements) + 2
- if length%4 == 0:
- pass
- else:
- length +=length%4
- padflag = True
- eeprom.append("{:0>4x}".format(length/4)[2:4])
- eeprom.append("{:0>4x}".format(length/4)[0:2])
- # total numbers of strings
- eeprom.append("{:0>2x}".format(count))
- for element in [vendor_specific_data,
- dc_related_elements,
- input_elements,
- output_elements]:
- for iter in range(len(element)/2):
- if element == "":
- eeprom.append("00")
- else:
- eeprom.append(element[0:2])
- element = element[2:len(element)]
- # padding if length is odd bytes
- if padflag is True:
- eeprom.append("ff")
-
- return eeprom
-
- def ExtractEEPROMGeneralCategory(self, device):
- """
- Extract "General" category data from slave ESI XML and generate EEPROM image data.
- @param device : 'device' object in the slave ESI XML
- @return eeprom : "Strings" category EEPROM image data
- """
- eeprom = []
- data = ""
-
- # category header
- eeprom.append("1e")
- eeprom.append("00")
-
- # category length
- eeprom.append("10")
- eeprom.append("00")
-
- # word 1 : Group Type index and Image index in STRINGS Category
- eeprom.append("{:0>2x}".format(self.GroupIdx))
- eeprom.append("{:0>2x}".format(self.ImgIdx))
-
- # word 2 : Device Type index and Device Name index in STRINGS Category
- eeprom.append("{:0>2x}".format(self.OrderIdx))
- eeprom.append("{:0>2x}".format(self.NameIdx))
-
- # word 3 : Physical Layer Port info. and CoE Details
- eeprom.append("01") # Physical Layer Port info - assume 01
- # CoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<CoE>
- coe_details = 0
- mb = device.getMailbox()
- coe_details = 1 # sdo enabled
- if mb is not None :
- coe = mb.getCoE()
- if coe is not None:
- for bit,flag in enumerate(["SdoInfo", "PdoAssign", "PdoConfig",
- "PdoUpload", "CompleteAccess"]):
- if getattr(coe,"get%s"%flag)() is not None:
- coe_details += 1<<bit
- eeprom.append("{:0>2x}".format(coe_details))
-
- # word 4 : FoE Details and EoE Details
- # FoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<FoE>
- if mb is not None and mb.getFoE() is not None:
- eeprom.append("01")
- else:
- eeprom.append("00")
- # EoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<EoE>
- if mb is not None and mb.getEoE() is not None:
- eeprom.append("01")
- else:
- eeprom.append("00")
-
- # word 5 : SoE Channels(reserved) and DS402 Channels
- # SoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<SoE>
- if mb is not None and mb.getSoE() is not None:
- eeprom.append("01")
- else:
- eeprom.append("00")
- # DS402Channels; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<CoE>: DS402Channels
- ds402ch = False
- if mb is not None :
- coe = mb.getCoE()
- if coe is not None :
- ds402ch = coe.getDS402Channels()
- eeprom.append("01" if ds402ch in [True,1] else "00")
-
- # word 6 : SysmanClass(reserved) and Flags
- eeprom.append("00") # reserved
- # Flags
- en_safeop = False
- en_lrw = False
- if device.getType().getTcCfgModeSafeOp() == True \
- or device.getType().getTcCfgModeSafeOp() == 1:
- en_safeop = True
- if device.getType().getUseLrdLwr() == True \
- or device.getType().getUseLrdLwr() == 1:
- en_lrw = True
-
- flags = "0b"+"000000"+str(int(en_lrw))+str(int(en_safeop))
- eeprom.append("{:0>2x}".format(int(flags, 2)))
-
- # word 7 : Current On EBus (assume 0x0000)
- eeprom.append("00")
- eeprom.append("00")
- # after word 7; couldn't analyze yet
- eeprom.append("03")
- eeprom.append("00")
- eeprom.append("11")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
- eeprom.append("00")
-
- return eeprom
-
- def ExtractEEPROMFMMUCategory(self, device):
- """
- Extract "FMMU" category data from slave ESI XML and generate EEPROM image data.
- @param device : 'device' object in the slave ESI XML
- @return eeprom : "Strings" category EEPROM image data
- """
- eeprom = []
- data = ""
- count = 0 # number of FMMU
- padflag = False
-
- for fmmu in device.getFmmu():
- count += 1
- if fmmu.getcontent() == "Outputs":
- data += "01"
- if fmmu.getcontent() == "Inputs":
- data += "02"
- if fmmu.getcontent() == "MBoxState":
- data += "03"
-
- # construct of EEPROM data
- if data is not "":
- # category header
- eeprom.append("28")
- eeprom.append("00")
- # category length
- if count%2 == 1:
- padflag = True
- eeprom.append("{:0>4x}".format((count+1)/2)[2:4])
- eeprom.append("{:0>4x}".format((count+1)/2)[0:2])
- else:
- eeprom.append("{:0>4x}".format((count)/2)[2:4])
- eeprom.append("{:0>4x}".format((count)/2)[0:2])
- for i in range(count):
- if data == "":
- eeprom.append("00")
- else:
- eeprom.append(data[0:2])
- data = data[2:len(data)]
- # padding if length is odd bytes
- if padflag is True:
- eeprom.append("ff")
-
- return eeprom
-
- def ExtractEEPROMSyncMCategory(self, device):
- """
- Extract "SyncM" category data from slave ESI XML and generate EEPROM image data.
- @param device : 'device' object in the slave ESI XML
- @return eeprom : "Strings" category EEPROM image data
- """
- eeprom = []
- data = ""
- number = {"MBoxOut":"01", "MBoxIn":"02", "Outputs":"03", "Inputs":"04"}
-
- for sm in device.getSm():
- for attr in [sm.getStartAddress(),
- sm.getDefaultSize(),
- sm.getControlByte()]:
- if attr is not None:
- data += "{:0>4x}".format(ExtractHexDecValue(attr))[2:4]
- data += "{:0>4x}".format(ExtractHexDecValue(attr))[0:2]
- else:
- data += "0000"
- if sm.getEnable() == "1" or sm.getEnable() == True:
- data += "01"
- else:
- data += "00"
- data += number[sm.getcontent()]
-
- if data is not "":
- # category header
- eeprom.append("29")
- eeprom.append("00")
- # category length
- eeprom.append("{:0>4x}".format(len(data)/4)[2:4])
- eeprom.append("{:0>4x}".format(len(data)/4)[0:2])
- for i in range(len(data)/2):
- if data == "":
- eeprom.append("00")
- else:
- eeprom.append(data[0:2])
- data = data[2:len(data)]
-
- return eeprom
-
- def ExtractEEPROMPDOCategory(self, device, pdotype):
- """
- Extract ""PDO (Tx, Rx)"" category data from slave ESI XML and generate EEPROM image data.
- @param device : 'device' object in the slave ESI XML
- @param pdotype : identifier whether "TxPDO" or "RxPDO".
- @return eeprom : "Strings" category EEPROM image data
- """
- eeprom = []
- data = ""
- count = 0
- en_fixed = False
- en_mandatory = False
- en_virtual = False
-
- for element in eval("device.get%s()"%pdotype):
- # PDO Index
- data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[2:4]
- data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[0:2]
- # Number of Entries
- data += "{:0>2x}".format(len(element.getEntry()))
- # About Sync Manager
- if element.getSm() is not None:
- data += "{:0>2x}".format(element.getSm())
- else:
- data += "ff"
- # Reference to DC Synch (according to ET1100 documentation) - assume 0
- data += "00"
- # Name Index
- objname = ""
- for name in element.getName():
- objname = name.getcontent()
- for name in self.Strings:
- count += 1
- if objname == name:
- break
- if len(self.Strings)+1 == count:
- data += "00"
- else:
- data += "{:0>2x}".format(count)
- count = 0
- # Flags; by Fixed, Mandatory, Virtual attributes ?
- if element.getFixed() == True or 1:
- en_fixed = True
- if element.getMandatory() == True or 1:
- en_mandatory = True
- if element.getVirtual() == True or element.getVirtual():
- en_virtual = True
- data += str(int(en_fixed)) + str(int(en_mandatory)) + str(int(en_virtual)) + "0"
-
- for entry in element.getEntry():
- # Entry Index
- data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[2:4]
- data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[0:2]
- # Subindex
- data += "{:0>2x}".format(int(entry.getSubIndex()))
- # Entry Name Index
- objname = ""
- for name in entry.getName():
- objname = name.getcontent()
- for name in self.Strings:
- count += 1
- if objname == name:
- break
- if len(self.Strings)+1 == count:
- data += "00"
- else:
- data += "{:0>2x}".format(count)
- count = 0
- # DataType
- if entry.getDataType() is not None:
- if entry.getDataType().getcontent() in self.BaseDataTypeDict:
- data += self.BaseDataTypeDict[entry.getDataType().getcontent()]
- else:
- data += "00"
- else:
- data += "00"
- # BitLen
- if entry.getBitLen() is not None:
- data += "{:0>2x}".format(int(entry.getBitLen()))
- else:
- data += "00"
- # Flags; by Fixed attributes ?
- en_fixed = False
- if entry.getFixed() == True or entry.getFixed() == 1:
- en_fixed = True
- data += str(int(en_fixed)) + "000"
-
- if data is not "":
- # category header
- if pdotype == "TxPdo":
- eeprom.append("32")
- elif pdotype == "RxPdo":
- eeprom.append("33")
- else:
- eeprom.append("00")
- eeprom.append("00")
- # category length
- eeprom.append("{:0>4x}".format(len(data)/4)[2:4])
- eeprom.append("{:0>4x}".format(len(data)/4)[0:2])
- data = str(data.lower())
- for i in range(len(data)/2):
- if data == "":
- eeprom.append("00")
- else:
- eeprom.append(data[0:2])
- data = data[2:len(data)]
-
- return eeprom
-
- def ExtractEEPROMDCCategory(self, device):
- """
- Extract "DC(Distributed Clock)" category data from slave ESI XML and generate EEPROM image data.
- @param device : 'device' object in the slave ESI XML
- @return eeprom : "Strings" category EEPROM image data
- """
- eeprom = []
- data = ""
- count = 0
- namecount = 0
-
- if device.getDc() is not None:
- for element in device.getDc().getOpMode():
- count += 1
- # assume that word 1-7 are 0x0000
- data += "0000"
- data += "0000"
- data += "0000"
- data += "0000"
- data += "0000"
- data += "0000"
- data += "0000"
- # word 8-10
- # AssignActivate
- if element.getAssignActivate() is not None:
- data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[2:4]
- data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[0:2]
- else:
- data += "0000"
- # Factor of CycleTimeSync0 ? and default is 1?
- if element.getCycleTimeSync0() is not None:
- if element.getCycleTimeSync0().getFactor() is not None:
- data += "{:0>2x}".format(int(element.getCycleTimeSync0().getFactor()))
- data += "00"
- else:
- data += "0100"
- else:
- data += "0100"
- # Index of Name in STRINGS Category
- # Name Index
- objname = ""
- for name in element.getName():
- objname += name
- for name in self.Strings:
- namecount += 1
- if objname == name:
- break
- if len(self.Strings)+1 == namecount:
- data += "00"
- else:
- data += "{:0>2x}".format(namecount)
- namecount = 0
- data += "00"
- # assume that word 11-12 are 0x0000
- data += "0000"
- data += "0000"
-
- if data is not "":
- # category header
- eeprom.append("3c")
- eeprom.append("00")
- # category length
- eeprom.append("{:0>4x}".format(len(data)/4)[2:4])
- eeprom.append("{:0>4x}".format(len(data)/4)[0:2])
- data = str(data.lower())
- for i in range(len(data)/2):
- if data == "":
- eeprom.append("00")
- else:
- eeprom.append(data[0:2])
- data = data[2:len(data)]
-
- return eeprom
-
- #-------------------------------------------------------------------------------
- # Used Register Access
- #-------------------------------------------------------------------------------
- def RegRead(self, offset, length):
- """
- Read slave ESC register content using "ethercat reg_read -p %d %s %s" command.
- Command example : "ethercat reg_read -p 0 0x0c00 0x0400"
- @param offset : register address
- @param length : register length
- @return return_val : register data
- """
- error, return_val = self.Controler.RemoteExec(REG_READ%(self.Controler.GetSlavePos(), offset, length), return_val = None)
- return return_val
-
- def RegWrite(self, address, data):
- """
- Write data to slave ESC register using "ethercat reg_write -p %d %s %s" command.
- Command example : "ethercat reg_write -p 0 0x0c04 0x0001"
- @param address : register address
- @param data : data to write
- @return return_val : the execution result of "ethercat reg_write" (for error check)
- """
- error, return_val = self.Controler.RemoteExec(REG_WRITE%(self.Controler.GetSlavePos(), address, data), return_val = None)
- return return_val
-
- def Rescan(self):
- """
- Synchronize EEPROM data in master controller with the data in slave device after EEPROM write.
- Command example : "ethercat rescan -p 0"
- """
- error, return_val = self.Controler.RemoteExec(RESCAN%(self.Controler.GetSlavePos()), return_val = None)
-
- #-------------------------------------------------------------------------------
- # Common Use Methods
- #-------------------------------------------------------------------------------
- def CheckConnect(self, cyclic_flag):
- """
- Check connection status (1) between Beremiz and the master (2) between the master and the slave.
- @param cyclic_flag: 0 - one shot, 1 - periodic
- @return True or False
- """
- if self.Controler.GetCTRoot()._connector is not None:
- # Check connection between the master and the slave.
- # Command example : "ethercat xml -p 0"
- error, return_val = self.Controler.RemoteExec(SLAVE_XML%(self.Controler.GetSlavePos()), return_val = None)
- number_of_lines = return_val.split("\n")
- if len(number_of_lines) <= 2 : # No slave connected to the master controller
- if not cyclic_flag :
- self.CreateErrorDialog('No connected slaves')
- return False
-
- elif len(number_of_lines) > 2 :
- return True
- else:
- # The master controller is not connected to Beremiz host
- if not cyclic_flag :
- self.CreateErrorDialog('PLC not connected!')
- return False
-
- def CreateErrorDialog(self, mention):
- """
- Create a dialog to indicate error or warning.
- @param mention : Error String
- """
- app_frame = self.Controler.GetCTRoot().AppFrame
- dlg = wx.MessageDialog (app_frame, mention,
- ' Warning...',
- wx.OK | wx.ICON_INFORMATION)
- dlg.ShowModal()
- dlg.Destroy()
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+
+# This file is part of Beremiz
+#
+# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab. University of Seoul, Korea
+#
+# See COPYING file for copyrights details.
+
+from __future__ import absolute_import
+import wx
+
+mailbox_protocols = ["AoE", "EoE", "CoE", "FoE", "SoE", "VoE"]
+
+
+def ExtractHexDecValue(value):
+ """
+ convert numerical value in string format into decimal or hex format.
+ @param value : hex or decimal data
+ @return integer data
+ """
+ try:
+ return int(value)
+ except Exception:
+ pass
+ try:
+ return int(value.replace("#", "0"), 16)
+
+ except Exception:
+ raise ValueError(_("Invalid value for HexDecValue \"%s\"") % value)
+
+
+def ExtractName(names, default=None):
+ """
+ Extract "name" field from XML entries.
+ @param names : XML entry
+ @default : if it fails to extract from the designated XML entry, return the default value ("None").
+ @return default or the name extracted
+ """
+ if len(names) == 1:
+ return names[0].getcontent()
+ else:
+ for name in names:
+ if name.getLcId() == 1033:
+ return name.getcontent()
+ return default
+
+# --------------------------------------------------
+# Remote Exec Etherlab Commands
+# --------------------------------------------------
+
+
+# --------------------- for master ---------------------------
+MASTER_STATE = """
+import commands
+result = commands.getoutput("ethercat master")
+returnVal =result
+"""
+
+# --------------------- for slave ----------------------------
+# ethercat state -p (slave position) (state (INIT, PREOP, SAFEOP, OP))
+SLAVE_STATE = """
+import commands
+result = commands.getoutput("ethercat state -p %d %s")
+returnVal = result
+"""
+
+# ethercat slave
+GET_SLAVE = """
+import commands
+result = commands.getoutput("ethercat slaves")
+returnVal =result
+"""
+
+# ethercat xml -p (slave position)
+SLAVE_XML = """
+import commands
+result = commands.getoutput("ethercat xml -p %d")
+returnVal = result
+"""
+
+# ethercat sdos -p (slave position)
+SLAVE_SDO = """
+import commands
+result = commands.getoutput("ethercat sdos -p %d")
+returnVal =result
+"""
+
+# ethercat upload -p (slave position) (main index) (sub index)
+GET_SLOW_SDO = """
+import commands
+result = commands.getoutput("ethercat upload -p %d %s %s")
+returnVal =result
+"""
+
+# ethercat download -p (slave position) (main index) (sub index) (value)
+SDO_DOWNLOAD = """
+import commands
+result = commands.getoutput("ethercat download --type %s -p %d %s %s %s")
+returnVal =result
+"""
+
+# ethercat sii_read -p (slave position)
+SII_READ = """
+import commands
+result = commands.getoutput("ethercat sii_read -p %d")
+returnVal =result
+"""
+
+# ethercat reg_read -p (slave position) (address) (size)
+REG_READ = """
+import commands
+result = commands.getoutput("ethercat reg_read -p %d %s %s")
+returnVal =result
+"""
+
+# ethercat sii_write -p (slave position) - (contents)
+SII_WRITE = """
+import subprocess
+process = subprocess.Popen(
+ ["ethercat", "-f", "sii_write", "-p", "%d", "-"],
+ stdin=subprocess.PIPE)
+process.communicate(sii_data)
+returnVal = process.returncode
+"""
+
+# ethercat reg_write -p (slave position) -t (uinit16) (address) (data)
+REG_WRITE = """
+import commands
+result = commands.getoutput("ethercat reg_write -p %d -t uint16 %s %s")
+returnVal =result
+"""
+
+# ethercat rescan -p (slave position)
+RESCAN = """
+import commands
+result = commands.getoutput("ethercat rescan -p %d")
+returnVal =result
+"""
+
+
+# --------------------------------------------------
+# Common Method For EtherCAT Management
+# --------------------------------------------------
+class _CommonSlave(object):
+
+ # ----- Data Structure for ethercat management ----
+ SlaveState = ""
+
+ # category of SDO data
+ DatatypeDescription, CommunicationObject, ManufacturerSpecific, \
+ ProfileSpecific, Reserved, AllSDOData = range(6)
+
+ # store the execution result of "ethercat sdos" command into SaveSDOData.
+ SaveSDOData = []
+
+ # Flags for checking "write" permission of OD entries
+ CheckPREOP = False
+ CheckSAFEOP = False
+ CheckOP = False
+
+ # Save PDO Data
+ TxPDOInfo = []
+ TxPDOCategory = []
+ RxPDOInfo = []
+ RxPDOCategory = []
+
+ # Save EEPROM Data
+ SiiData = ""
+
+ # Save Register Data
+ RegData = ""
+ CrtRegSpec = {"ESCType": "",
+ "FMMUNumber": "",
+ "SMNumber": "",
+ "PDIType": ""}
+
+ def __init__(self, controler):
+ """
+ Constructor
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ self.Controler = controler
+
+ self.ClearSDODataSet()
+
+ # -------------------------------------------------------------------------------
+ # Used Master State
+ # -------------------------------------------------------------------------------
+ def GetMasterState(self):
+ """
+ Execute "ethercat master" command and parse the execution result
+ @return MasterState
+ """
+
+ # exectute "ethercat master" command
+ _error, return_val = self.Controler.RemoteExec(MASTER_STATE, return_val=None)
+ master_state = {}
+ # parse the reslut
+ for each_line in return_val.splitlines():
+ if len(each_line) > 0:
+ chunks = each_line.strip().split(':', 1)
+ key = chunks[0]
+ value = []
+ if len(chunks) > 1:
+ value = chunks[1].split()
+ if '(attached)' in value:
+ value.remove('(attached)')
+ master_state[key] = value
+
+ return master_state
+
+ # -------------------------------------------------------------------------------
+ # Used Slave State
+ # -------------------------------------------------------------------------------
+ def RequestSlaveState(self, command):
+ """
+ Set slave state to the specified one using "ethercat states -p %d %s" command.
+ Command example : "ethercat states -p 0 PREOP" (target slave position and target state are given.)
+ @param command : target slave state
+ """
+ _error, _return_val = self.Controler.RemoteExec(
+ SLAVE_STATE % (self.Controler.GetSlavePos(), command),
+ return_val=None)
+
+ def GetSlaveStateFromSlave(self):
+ """
+ Get slave information using "ethercat slaves" command and store the information into internal data structure
+ (self.SlaveState) for "Slave State"
+ return_val example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)
+ """
+ _error, return_val = self.Controler.RemoteExec(GET_SLAVE, return_val=None)
+ self.SlaveState = return_val
+ return return_val
+
+ # -------------------------------------------------------------------------------
+ # Used SDO Management
+ # -------------------------------------------------------------------------------
+ def GetSlaveSDOFromSlave(self):
+ """
+ Get SDO objects information of current slave using "ethercat sdos -p %d" command.
+ Command example : "ethercat sdos -p 0"
+ @return return_val : execution results of "ethercat sdos" command (need to be parsed later)
+ """
+ _error, return_val = self.Controler.RemoteExec(SLAVE_SDO % (self.Controler.GetSlavePos()), return_val=None)
+ return return_val
+
+ def SDODownload(self, data_type, idx, sub_idx, value):
+ """
+ Set an SDO object value to user-specified value using "ethercat download" command.
+ Command example : "ethercat download --type int32 -p 0 0x8020 0x12 0x00000000"
+ @param data_type : data type of SDO entry
+ @param idx : index of the SDO entry
+ @param sub_idx : subindex of the SDO entry
+ @param value : value of SDO entry
+ """
+ _error, _return_val = self.Controler.RemoteExec(
+ SDO_DOWNLOAD % (data_type, self.Controler.GetSlavePos(), idx, sub_idx, value),
+ return_val=None)
+
+ def BackupSDODataSet(self):
+ """
+ Back-up current SDO entry information to restore the SDO data
+ in case that the user cancels SDO update operation.
+ """
+ self.BackupDatatypeDescription = self.SaveDatatypeDescription
+ self.BackupCommunicationObject = self.SaveCommunicationObject
+ self.BackupManufacturerSpecific = self.SaveManufacturerSpecific
+ self.BackupProfileSpecific = self.SaveProfileSpecific
+ self.BackupReserved = self.SaveReserved
+ self.BackupAllSDOData = self.SaveAllSDOData
+
+ def ClearSDODataSet(self):
+ """
+ Clear the specified SDO entry information.
+ """
+ for dummy in range(6):
+ self.SaveSDOData.append([])
+
+ # -------------------------------------------------------------------------------
+ # Used PDO Monitoring
+ # -------------------------------------------------------------------------------
+ def RequestPDOInfo(self):
+ """
+ Load slave information from RootClass (XML data) and parse the information (calling SlavePDOData() method).
+ """
+ # Load slave information from ESI XML file (def EthercatMaster.py)
+ slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos())
+
+ type_infos = slave.getType()
+ device, _alignment = self.Controler.CTNParent.GetModuleInfos(type_infos)
+ # Initialize PDO data set
+ self.ClearDataSet()
+
+ # if 'device' object is valid, call SavePDOData() to parse PDO data
+ if device is not None:
+ self.SavePDOData(device)
+
+ def SavePDOData(self, device):
+ """
+ Parse PDO data and store the results in TXPDOCategory and RXPDOCategory
+ Tx(Rx)PDOCategory : index, name, entry number
+ Tx(Rx)Info : entry index, sub index, name, length, type
+ @param device : Slave information extracted from ESI XML file
+ """
+ # Parsing TXPDO entries
+ for pdo, _pdo_info in ([(pdo, "Inputs") for pdo in device.getTxPdo()]):
+ # Save pdo_index, entry, and name of each entry
+ pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
+ entries = pdo.getEntry()
+ pdo_name = ExtractName(pdo.getName())
+
+ # Initialize entry number count
+ count = 0
+
+ # Parse entries
+ for entry in entries:
+ # Save index and subindex
+ index = ExtractHexDecValue(entry.getIndex().getcontent())
+ subindex = ExtractHexDecValue(entry.getSubIndex())
+ # if entry name exists, save entry data
+ if ExtractName(entry.getName()) is not None:
+ entry_infos = {
+ "entry_index": index,
+ "subindex": subindex,
+ "name": ExtractName(entry.getName()),
+ "bitlen": entry.getBitLen(),
+ "type": entry.getDataType().getcontent()
+ }
+ self.TxPDOInfo.append(entry_infos)
+ count += 1
+
+ categorys = {"pdo_index": pdo_index, "name": pdo_name, "number_of_entry": count}
+ self.TxPDOCategory.append(categorys)
+
+ # Parsing RxPDO entries
+ for pdo, _pdo_info in ([(rxpdo, "Outputs") for rxpdo in device.getRxPdo()]):
+ # Save pdo_index, entry, and name of each entry
+ pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
+ entries = pdo.getEntry()
+ pdo_name = ExtractName(pdo.getName())
+
+ # Initialize entry number count
+ count = 0
+
+ # Parse entries
+ for entry in entries:
+ # Save index and subindex
+ index = ExtractHexDecValue(entry.getIndex().getcontent())
+ subindex = ExtractHexDecValue(entry.getSubIndex())
+ # if entry name exists, save entry data
+ if ExtractName(entry.getName()) is not None:
+ entry_infos = {
+ "entry_index": index,
+ "subindex": subindex,
+ "name": ExtractName(entry.getName()),
+ "bitlen": str(entry.getBitLen()),
+ "type": entry.getDataType().getcontent()
+ }
+ self.RxPDOInfo.append(entry_infos)
+ count += 1
+
+ categorys = {"pdo_index": pdo_index, "name": pdo_name, "number_of_entry": count}
+ self.RxPDOCategory.append(categorys)
+
+ def GetTxPDOCategory(self):
+ """
+ Get TxPDOCategory data structure (Meta informaton of TxPDO).
+ TxPDOCategorys : index, name, number of entries
+ @return TxPDOCategorys
+ """
+ return self.TxPDOCategory
+
+ def GetRxPDOCategory(self):
+ """
+ Get RxPDOCategory data structure (Meta information of RxPDO).
+ RxPDOCategorys : index, name, number of entries
+ @return RxPDOCategorys
+ """
+ return self.RxPDOCategory
+
+ def GetTxPDOInfo(self):
+ """
+ Get TxPDOInfo data structure (Detailed information on TxPDO entries).
+ TxPDOInfos : entry index, sub index, name, length, type
+ @return TxPDOInfos
+ """
+ return self.TxPDOInfo
+
+ def GetRxPDOInfo(self):
+ """
+ Get RxPDOInfo data structure (Detailed information on RxPDO entries).
+ RxPDOInfos : entry index, sub index, name, length, type
+ @return RxPDOInfos
+ """
+ return self.RxPDOInfo
+
+ def ClearDataSet(self):
+ """
+ Initialize PDO management data structure.
+ """
+ self.TxPDOInfos = []
+ self.TxPDOCategorys = []
+ self.RxPDOInfos = []
+ self.RxPDOCategorys = []
+
+ # -------------------------------------------------------------------------------
+ # Used EEPROM Management
+ # -------------------------------------------------------------------------------
+ # Base data types in ETG2000; format = {"Name": "BitSize"}
+ BaseDataTypeDict = {"BOOL": "01",
+ "SINT": "02",
+ "INT": "03",
+ "DINT": "04",
+ "USINT": "05",
+ "UINT": "06",
+ "UDINT": "07",
+ "REAL": "08",
+ "INT24": "10",
+ "LREAL": "11",
+ "INT40": "12",
+ "INT48": "13",
+ "INT56": "14",
+ "LINT": "15",
+ "UINT24": "16",
+ "UINT40": "18",
+ "UINT48": "19",
+ "UINT56": "1a",
+ "ULINT": "1b",
+ "BITARR8": "2d",
+ "BITARR16": "2e",
+ "BITARR32": "2f",
+ "BIT1": "30",
+ "BIT2": "31",
+ "BIT3": "32",
+ "BIT4": "33",
+ "BIT5": "34",
+ "BIT6": "35",
+ "BIT7": "36",
+ "BIT8": "37"}
+
+ def GetSmartViewInfos(self):
+ """
+ Parse XML data for "Smart View" of EEPROM contents.
+ @return smartview_infos : EEPROM contents dictionary
+ """
+
+ smartview_infos = {"eeprom_size": 128,
+ "pdi_type": 0,
+ "device_emulation": "False",
+ "vendor_id": '0x00000000',
+ "product_code": '0x00000000',
+ "revision_no": '0x00000000',
+ "serial_no": '0x00000000',
+ "supported_mailbox": "",
+ "mailbox_bootstrapconf_outstart": '0',
+ "mailbox_bootstrapconf_outlength": '0',
+ "mailbox_bootstrapconf_instart": '0',
+ "mailbox_bootstrapconf_inlength": '0',
+ "mailbox_standardconf_outstart": '0',
+ "mailbox_standardconf_outlength": '0',
+ "mailbox_standardconf_instart": '0',
+ "mailbox_standardconf_inlength": '0'}
+
+ slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos())
+ type_infos = slave.getType()
+ device, _alignment = self.Controler.CTNParent.GetModuleInfos(type_infos)
+
+ # 'device' represents current slave device selected by user
+ if device is not None:
+ for eeprom_element in device.getEeprom().getcontent():
+ # get EEPROM size; <Device>-<Eeprom>-<ByteSize>
+ if eeprom_element["name"] == "ByteSize":
+ smartview_infos["eeprom_size"] = eeprom_element
+
+ elif eeprom_element["name"] == "ConfigData":
+ configData_data = self.DecimalToHex(eeprom_element)
+ # get PDI type; <Device>-<Eeprom>-<ConfigData> address 0x00
+ smartview_infos["pdi_type"] = int(configData_data[0:2], 16)
+ # get state of device emulation; <Device>-<Eeprom>-<ConfigData> address 0x01
+ if "{:0>8b}".format(int(configData_data[2:4], 16))[7] == '1':
+ smartview_infos["device_emulation"] = "True"
+
+ elif eeprom_element["name"] == "BootStrap":
+ bootstrap_data = "{:0>16x}".format(eeprom_element)
+ # get bootstrap configuration; <Device>-<Eeprom>-<BootStrap>
+ for cfg, iter in [("mailbox_bootstrapconf_outstart", 0),
+ ("mailbox_bootstrapconf_outlength", 1),
+ ("mailbox_bootstrapconf_instart", 2),
+ ("mailbox_bootstrapconf_inlength", 3)]:
+ smartview_infos[cfg] = str(int(bootstrap_data[4*iter+2:4*(iter+1)]+bootstrap_data[4*iter:4*iter+2], 16))
+
+ # get protocol (profile) types supported by mailbox; <Device>-<Mailbox>
+ mb = device.getMailbox()
+ if mb is not None:
+ for mailbox_protocol in mailbox_protocols:
+ if getattr(mb, "get%s" % mailbox_protocol)() is not None:
+ smartview_infos["supported_mailbox"] += "%s, " % mailbox_protocol
+ smartview_infos["supported_mailbox"] = smartview_infos["supported_mailbox"].strip(", ")
+
+ # get standard configuration of mailbox; <Device>-<Sm>
+ for sm_element in device.getSm():
+ if sm_element.getcontent() == "MBoxOut":
+ smartview_infos["mailbox_standardconf_outstart"] = str(ExtractHexDecValue(sm_element.getStartAddress()))
+ smartview_infos["mailbox_standardconf_outlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize()))
+ elif sm_element.getcontent() == "MBoxIn":
+ smartview_infos["mailbox_standardconf_instart"] = str(ExtractHexDecValue(sm_element.getStartAddress()))
+ smartview_infos["mailbox_standardconf_inlength"] = str(ExtractHexDecValue(sm_element.getDefaultSize()))
+ else:
+ pass
+
+ # get device identity from <Device>-<Type>
+ # vendor ID; by default, pre-defined value in self.ModulesLibrary
+ # if device type in 'vendor' item equals to actual slave device type, set 'vendor_id' to vendor ID.
+ for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
+ for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]:
+ if available_device[0] == type_infos["device_type"]:
+ smartview_infos["vendor_id"] = "0x" + "{:0>8x}".format(vendor_id)
+
+ # product code;
+ if device.getType().getProductCode() is not None:
+ product_code = device.getType().getProductCode()
+ smartview_infos["product_code"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(product_code))
+
+ # revision number;
+ if device.getType().getRevisionNo() is not None:
+ revision_no = device.getType().getRevisionNo()
+ smartview_infos["revision_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(revision_no))
+
+ # serial number;
+ if device.getType().getSerialNo() is not None:
+ serial_no = device.getType().getSerialNo()
+ smartview_infos["serial_no"] = "0x"+"{:0>8x}".format(ExtractHexDecValue(serial_no))
+
+ return smartview_infos
+
+ else:
+ return None
+
+ def DecimalToHex(self, decnum):
+ """
+ Convert decimal value into hexadecimal representation.
+ @param decnum : decimal value
+ @return hex_data : hexadecimal representation of input value in decimal
+ """
+ value = "%x" % decnum
+ value_len = len(value)
+ if (value_len % 2) == 0:
+ hex_len = value_len
+ else:
+ hex_len = (value_len / 2) * 2 + 2
+
+ hex_data = ("{:0>"+str(hex_len)+"x}").format(decnum)
+
+ return hex_data
+
+ def SiiRead(self):
+ """
+ Get slave EEPROM contents maintained by master device using "ethercat sii_read -p %d" command.
+ Command example : "ethercat sii_read -p 0"
+ @return return_val : result of "ethercat sii_read" (binary data)
+ """
+ _error, return_val = self.Controler.RemoteExec(SII_READ % (self.Controler.GetSlavePos()), return_val=None)
+ self.SiiData = return_val
+ return return_val
+
+ def SiiWrite(self, binary):
+ """
+ Overwrite slave EEPROM contents using "ethercat sii_write -p %d" command.
+ Command example : "ethercat sii_write -p 0 - (binary contents)"
+ @param binary : EEPROM contents in binary data format
+ @return return_val : result of "ethercat sii_write" (If it succeeds, the return value is NULL.)
+ """
+ _error, return_val = self.Controler.RemoteExec(
+ SII_WRITE % (self.Controler.GetSlavePos()),
+ return_val=None,
+ sii_data=binary)
+ return return_val
+
+ def LoadData(self):
+ """
+ Loading data from EEPROM use Sii_Read Method
+ @return self.BinaryCode : slave EEPROM data in binary format (zero-padded)
+ """
+ return_val = self.Controler.CommonMethod.SiiRead()
+ self.BinaryCode = return_val
+ self.Controler.SiiData = self.BinaryCode
+
+ # append zero-filled padding data up to EEPROM size
+ for dummy in range(self.SmartViewInfosFromXML["eeprom_size"] - len(self.BinaryCode)):
+ self.BinaryCode = self.BinaryCode + 'ff'.decode('hex')
+
+ return self.BinaryCode
+
+ def HexRead(self, binary):
+ """
+ Convert binary digit representation into hexadecimal representation for "Hex View" menu.
+ @param binary : binary digits
+ @return hexCode : hexadecimal digits
+ @return hexview_table_row, hexview_table_col : Grid size for "Hex View" UI
+ """
+ row_code = []
+ row_text = ""
+ row = 0
+ hex_code = []
+
+ hexview_table_col = 17
+
+ for index in range(0, len(binary)):
+ if len(binary[index]) != 1:
+ break
+ else:
+ digithexstr = hex(ord(binary[index]))
+
+ tempvar2 = digithexstr[2:4]
+ if len(tempvar2) == 1:
+ tempvar2 = "0" + tempvar2
+ row_code.append(tempvar2)
+
+ if int(digithexstr, 16) >= 32 and int(digithexstr, 16) <= 126:
+ row_text = row_text + chr(int(digithexstr, 16))
+ else:
+ row_text = row_text + "."
+
+ if index != 0:
+ if len(row_code) == (hexview_table_col - 1):
+ row_code.append(row_text)
+ hex_code.append(row_code)
+ row_text = ""
+ row_code = []
+ row = row + 1
+
+ hexview_table_row = row
+
+ return hex_code, hexview_table_row, hexview_table_col
+
+ def GenerateEEPROMList(self, data, direction, length):
+ """
+ Generate EEPROM data list by reconstructing 'data' string.
+ example : data="12345678", direction=0, length=8 -> eeprom_list=['12', '34', '56', '78']
+ data="12345678", direction=1, length=8 -> eeprom_list=['78', '56', '34', '12']
+ @param data : string to be reconstructed
+ @param direction : endianness
+ @param length : data length
+ @return eeprom_list : reconstructed list data structure
+ """
+ eeprom_list = []
+
+ if direction is 0 or 1:
+ for dummy in range(length/2):
+ if data == "":
+ eeprom_list.append("00")
+ else:
+ eeprom_list.append(data[direction*(length-2):direction*(length-2)+2])
+ data = data[(1-direction)*2:length-direction*2]
+ length -= 2
+ return eeprom_list
+
+ def XmlToEeprom(self):
+ """
+ Extract slave EEPROM contents using slave ESI XML file.
+ - Mandatory parts
+ - String category : ExtractEEPROMStringCategory()
+ - General category : ExtractEEPROMGeneralCategory()
+ - FMMU category : ExtractEEPROMFMMUCategory
+ - SyncM category : ExtractEEPROMSyncMCategory()
+ - Tx/RxPDO category : ExtractEEPROMPDOCategory()
+ - DC category : ExtractEEPROMDCCategory()
+ @return eeprom_binary
+ """
+ eeprom = []
+ data = ""
+ eeprom_size = 0
+ eeprom_binary = ""
+
+ # 'device' is the slave device of the current EtherCAT slave plugin
+ slave = self.Controler.CTNParent.GetSlave(self.Controler.GetSlavePos())
+ type_infos = slave.getType()
+ device, _alignment = self.Controler.CTNParent.GetModuleInfos(type_infos)
+
+ if device is not None:
+ # get ConfigData for EEPROM offset 0x0000-0x000d; <Device>-<Eeprom>-<ConfigData>
+ for eeprom_element in device.getEeprom().getcontent():
+ if eeprom_element["name"] == "ConfigData":
+ data = self.DecimalToHex(eeprom_element)
+ eeprom += self.GenerateEEPROMList(data, 0, 28)
+
+ # calculate CRC for EEPROM offset 0x000e-0x000f
+ crc = 0x48
+ for segment in eeprom:
+ for i in range(8):
+ bit = crc & 0x80
+ crc = (crc << 1) | ((int(segment, 16) >> (7 - i)) & 0x01)
+ if bit:
+ crc ^= 0x07
+ for dummy in range(8):
+ bit = crc & 0x80
+ crc <<= 1
+ if bit:
+ crc ^= 0x07
+ eeprom.append(hex(crc)[len(hex(crc))-3:len(hex(crc))-1])
+ eeprom.append("00")
+
+ # get VendorID for EEPROM offset 0x0010-0x0013;
+ data = ""
+ for vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
+ for available_device in vendor["groups"][vendor["groups"].keys()[0]]["devices"]:
+ if available_device[0] == type_infos["device_type"]:
+ data = "{:0>8x}".format(vendor_id)
+ eeprom += self.GenerateEEPROMList(data, 1, 8)
+
+ # get Product Code for EEPROM offset 0x0014-0x0017;
+ data = ""
+ if device.getType().getProductCode() is not None:
+ data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getProductCode()))
+ eeprom += self.GenerateEEPROMList(data, 1, 8)
+
+ # get Revision Number for EEPROM offset 0x0018-0x001b;
+ data = ""
+ if device.getType().getRevisionNo() is not None:
+ data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getRevisionNo()))
+ eeprom += self.GenerateEEPROMList(data, 1, 8)
+
+ # get Serial Number for EEPROM 0x001c-0x001f;
+ data = ""
+ if device.getType().getSerialNo() is not None:
+ data = "{:0>8x}".format(ExtractHexDecValue(device.getType().getSerialNo()))
+ eeprom += self.GenerateEEPROMList(data, 1, 8)
+
+ # get Execution Delay for EEPROM 0x0020-0x0021; not analyzed yet
+ eeprom.append("00")
+ eeprom.append("00")
+
+ # get Port0/1 Delay for EEPROM offset 0x0022-0x0025; not analyzed yet
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+
+ # reserved for EEPROM offset 0x0026-0x0027;
+ eeprom.append("00")
+ eeprom.append("00")
+
+ # get BootStrap for EEPROM offset 0x0028-0x002e; <Device>-<Eeprom>-<BootStrap>
+ data = ""
+ for eeprom_element in device.getEeprom().getcontent():
+ if eeprom_element["name"] == "BootStrap":
+ data = "{:0>16x}".format(eeprom_element)
+ eeprom += self.GenerateEEPROMList(data, 0, 16)
+
+ # get Standard Mailbox for EEPROM offset 0x0030-0x0037; <Device>-<sm>
+ data = ""
+ standard_send_mailbox_offset = None
+ standard_send_mailbox_size = None
+ standard_receive_mailbox_offset = None
+ standard_receive_mailbox_size = None
+ for sm_element in device.getSm():
+ if sm_element.getcontent() == "MBoxOut":
+ standard_receive_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress()))
+ standard_receive_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize()))
+ elif sm_element.getcontent() == "MBoxIn":
+ standard_send_mailbox_offset = "{:0>4x}".format(ExtractHexDecValue(sm_element.getStartAddress()))
+ standard_send_mailbox_size = "{:0>4x}".format(ExtractHexDecValue(sm_element.getDefaultSize()))
+
+ if standard_receive_mailbox_offset is None:
+ eeprom.append("00")
+ eeprom.append("00")
+ else:
+ eeprom.append(standard_receive_mailbox_offset[2:4])
+ eeprom.append(standard_receive_mailbox_offset[0:2])
+ if standard_receive_mailbox_size is None:
+ eeprom.append("00")
+ eeprom.append("00")
+ else:
+ eeprom.append(standard_receive_mailbox_size[2:4])
+ eeprom.append(standard_receive_mailbox_size[0:2])
+ if standard_send_mailbox_offset is None:
+ eeprom.append("00")
+ eeprom.append("00")
+ else:
+ eeprom.append(standard_send_mailbox_offset[2:4])
+ eeprom.append(standard_send_mailbox_offset[0:2])
+ if standard_send_mailbox_size is None:
+ eeprom.append("00")
+ eeprom.append("00")
+ else:
+ eeprom.append(standard_send_mailbox_size[2:4])
+ eeprom.append(standard_send_mailbox_size[0:2])
+
+ # get supported mailbox protocols for EEPROM offset 0x0038-0x0039;
+ data = 0
+ mb = device.getMailbox()
+ if mb is not None:
+ for bit, mbprot in enumerate(mailbox_protocols):
+ if getattr(mb, "get%s" % mbprot)() is not None:
+ data += 1 << bit
+ data = "{:0>4x}".format(data)
+ eeprom.append(data[2:4])
+ eeprom.append(data[0:2])
+
+ # resereved for EEPROM offset 0x003a-0x007b;
+ for i in range(0x007b-0x003a+0x0001):
+ eeprom.append("00")
+
+ # get EEPROM size for EEPROM offset 0x007c-0x007d;
+ data = ""
+ for eeprom_element in device.getEeprom().getcontent():
+ if eeprom_element["name"] == "ByteSize":
+ eeprom_size = int(str(eeprom_element))
+ data = "{:0>4x}".format(int(eeprom_element)/1024*8-1)
+
+ if data == "":
+ eeprom.append("00")
+ eeprom.append("00")
+ else:
+ eeprom.append(data[2:4])
+ eeprom.append(data[0:2])
+
+ # Version for EEPROM 0x007e-0x007f;
+ # According to "EtherCAT Slave Device Description(V0.3.0)"
+ eeprom.append("01")
+ eeprom.append("00")
+
+ # append String Category data
+ for data in self.ExtractEEPROMStringCategory(device):
+ eeprom.append(data)
+
+ # append General Category data
+ for data in self.ExtractEEPROMGeneralCategory(device):
+ eeprom.append(data)
+
+ # append FMMU Category data
+ for data in self.ExtractEEPROMFMMUCategory(device):
+ eeprom.append(data)
+
+ # append SyncM Category data
+ for data in self.ExtractEEPROMSyncMCategory(device):
+ eeprom.append(data)
+
+ # append TxPDO Category data
+ for data in self.ExtractEEPROMPDOCategory(device, "TxPdo"):
+ eeprom.append(data)
+
+ # append RxPDO Category data
+ for data in self.ExtractEEPROMPDOCategory(device, "RxPdo"):
+ eeprom.append(data)
+
+ # append DC Category data
+ for data in self.ExtractEEPROMDCCategory(device):
+ eeprom.append(data)
+
+ # append padding
+ padding = eeprom_size-len(eeprom)
+ for i in range(padding):
+ eeprom.append("ff")
+
+ # convert binary code
+ for index in range(eeprom_size):
+ eeprom_binary = eeprom_binary + eeprom[index].decode('hex')
+
+ return eeprom_binary
+
+ def ExtractEEPROMStringCategory(self, device):
+ """
+ Extract "Strings" category data from slave ESI XML and generate EEPROM image data.
+ @param device : 'device' object in the slave ESI XML
+ @return eeprom : "Strings" category EEPROM image data
+ """
+ eeprom = []
+ self.Strings = []
+ data = ""
+ count = 0 # string counter
+ padflag = False # padding flag if category length is odd
+
+ # index information for General Category in EEPROM
+ self.GroupIdx = 0
+ self.ImgIdx = 0
+ self.OrderIdx = 0
+ self.NameIdx = 0
+
+ # flag for preventing duplicated vendor specific data
+ typeflag = False
+ grouptypeflag = False
+ groupnameflag = False
+ devnameflag = False
+ imageflag = False
+
+ # vendor specific data
+ # element1; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Type>
+ # vendor_specific_data : vendor specific data (binary type)
+ vendor_specific_data = ""
+ # vendor_spec_strings : list of vendor specific "strings" for preventing duplicated strings
+ vendor_spec_strings = []
+ for element in device.getType().getcontent():
+ data += element
+ if data != "" and isinstance(data, unicode):
+ for vendor_spec_string in vendor_spec_strings:
+ if data == vendor_spec_string:
+ self.OrderIdx = vendor_spec_strings.index(data)+1
+ typeflag = True
+ break
+ if typeflag is False:
+ count += 1
+ self.Strings.append(data)
+ vendor_spec_strings.append(data)
+ typeflag = True
+ self.OrderIdx = count
+ vendor_specific_data += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ vendor_specific_data += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # element2-1; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<GroupType>
+ data = device.getGroupType()
+ if data is not None and isinstance(data, unicode):
+ for vendor_spec_string in vendor_spec_strings:
+ if data == vendor_spec_string:
+ self.GroupIdx = vendor_spec_strings.index(data)+1
+ grouptypeflag = True
+ break
+ if grouptypeflag is False:
+ count += 1
+ self.Strings.append(data)
+ vendor_spec_strings.append(data)
+ grouptypeflag = True
+ self.GroupIdx = count
+ vendor_specific_data += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ vendor_specific_data += "{:0>2x}".format(ord(data[character]))
+
+ # element2-2; <EtherCATInfo>-<Groups>-<Group>-<Type>
+ if grouptypeflag is False:
+ if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None:
+ for _vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
+ for group_type, group_etc in vendor["groups"].iteritems():
+ for device_item in group_etc["devices"]:
+ if device == device_item[1]:
+ data = group_type
+ if data is not None and isinstance(data, unicode):
+ for vendor_spec_string in vendor_spec_strings:
+ if data == vendor_spec_string:
+ self.GroupIdx = vendor_spec_strings.index(data)+1
+ grouptypeflag = True
+ break
+ if grouptypeflag is False:
+ count += 1
+ self.Strings.append(data)
+ vendor_spec_strings.append(data)
+ grouptypeflag = True
+ self.GroupIdx = count
+ vendor_specific_data += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ vendor_specific_data += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # element3; <EtherCATInfo>-<Descriptions>-<Groups>-<Group>-<Name(LcId is "1033")>
+ if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None:
+ for _vendorId, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
+ for group_type, group_etc in vendor["groups"].iteritems():
+ for device_item in group_etc["devices"]:
+ if device == device_item[1]:
+ data = group_etc["name"]
+ if data != "" and isinstance(data, unicode):
+ for vendor_spec_string in vendor_spec_strings:
+ if data == vendor_spec_string:
+ groupnameflag = True
+ break
+ if groupnameflag is False:
+ count += 1
+ self.Strings.append(data)
+ vendor_spec_strings.append(data)
+ groupnameflag = True
+ vendor_specific_data += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ vendor_specific_data += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # element4; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Name(LcId is "1033" or "1"?)>
+ for element in device.getName():
+ if element.getLcId() == 1 or element.getLcId() == 1033:
+ data = element.getcontent()
+ if data != "" and isinstance(data, unicode):
+ for vendor_spec_string in vendor_spec_strings:
+ if data == vendor_spec_string:
+ self.NameIdx = vendor_spec_strings.index(data)+1
+ devnameflag = True
+ break
+ if devnameflag is False:
+ count += 1
+ self.Strings.append(data)
+ vendor_spec_strings.append(data)
+ devnameflag = True
+ self.NameIdx = count
+ vendor_specific_data += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ vendor_specific_data += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # element5-1; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Image16x14>
+ if device.getcontent() is not None:
+ data = device.getcontent()
+ if data is not None and isinstance(data, unicode):
+ for vendor_spec_string in vendor_spec_strings:
+ if data == vendor_spec_string:
+ self.ImgIdx = vendor_spec_strings.index(data)+1
+ imageflag = True
+ break
+ if imageflag is False:
+ count += 1
+ self.Strings.append(data)
+ vendor_spec_strings.append(data)
+ imageflag = True
+ self.ImgIdx = count
+ vendor_specific_data += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ vendor_specific_data += "{:0>2x}".format(ord(data[character]))
+
+ # element5-2; <EtherCATInfo>-<Descriptions>-<Groups>-<Group>-<Image16x14>
+ if imageflag is False:
+ if self.Controler.CTNParent.CTNParent.ModulesLibrary.Library is not None:
+ for _vendor_id, vendor in self.Controler.CTNParent.CTNParent.ModulesLibrary.Library.iteritems():
+ for group_type, group_etc in vendor["groups"].iteritems():
+ for device_item in group_etc["devices"]:
+ if device == device_item[1]:
+ data = group_etc
+ if data is not None and isinstance(data, unicode):
+ for vendor_spec_string in vendor_spec_strings:
+ if data == vendor_spec_string:
+ self.ImgIdx = vendor_spec_strings.index(data)+1
+ imageflag = True
+ break
+ if imageflag is False:
+ count += 1
+ self.Strings.append(data)
+ vendor_spec_strings.append(data)
+ imageflag = True
+ self.ImgIdx = count
+ vendor_specific_data += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ vendor_specific_data += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # DC related elements
+ # <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Dc>-<OpMode>-<Name>
+ dc_related_elements = ""
+ if device.getDc() is not None:
+ for element in device.getDc().getOpMode():
+ data = element.getName()
+ if data != "":
+ count += 1
+ self.Strings.append(data)
+ dc_related_elements += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ dc_related_elements += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # Input elements(TxPDO)
+ # <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<TxPdo>; Name
+ input_elements = ""
+ inputs = []
+ for element in device.getTxPdo():
+ for name in element.getName():
+ data = name.getcontent()
+ for input in inputs:
+ if data == input:
+ data = ""
+ if data != "":
+ count += 1
+ self.Strings.append(data)
+ inputs.append(data)
+ input_elements += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ input_elements += "{:0>2x}".format(ord(data[character]))
+ data = ""
+ for entry in element.getEntry():
+ for name in entry.getName():
+ data = name.getcontent()
+ for input in inputs:
+ if data == input:
+ data = ""
+ if data != "":
+ count += 1
+ self.Strings.append(data)
+ inputs.append(data)
+ input_elements += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ input_elements += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # Output elements(RxPDO)
+ # <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<RxPdo>; Name
+ output_elements = ""
+ outputs = []
+ for element in device.getRxPdo():
+ for name in element.getName():
+ data = name.getcontent()
+ for output in outputs:
+ if data == output:
+ data = ""
+ if data != "":
+ count += 1
+ self.Strings.append(data)
+ outputs.append(data)
+ output_elements += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ output_elements += "{:0>2x}".format(ord(data[character]))
+ data = ""
+ for entry in element.getEntry():
+ for name in entry.getName():
+ data = name.getcontent()
+ for output in outputs:
+ if data == output:
+ data = ""
+ if data != "":
+ count += 1
+ self.Strings.append(data)
+ outputs.append(data)
+ output_elements += "{:0>2x}".format(len(data))
+ for character in range(len(data)):
+ output_elements += "{:0>2x}".format(ord(data[character]))
+ data = ""
+
+ # form eeprom data
+ # category header
+ eeprom.append("0a")
+ eeprom.append("00")
+ # category length (word); 1 word is 4 bytes. "+2" is the length of string's total number
+ length = len(vendor_specific_data + dc_related_elements + input_elements + output_elements) + 2
+ if length % 4 == 0:
+ pass
+ else:
+ length += length % 4
+ padflag = True
+ eeprom.append("{:0>4x}".format(length/4)[2:4])
+ eeprom.append("{:0>4x}".format(length/4)[0:2])
+ # total numbers of strings
+ eeprom.append("{:0>2x}".format(count))
+ for element in [vendor_specific_data,
+ dc_related_elements,
+ input_elements,
+ output_elements]:
+ for dummy in range(len(element)/2):
+ if element == "":
+ eeprom.append("00")
+ else:
+ eeprom.append(element[0:2])
+ element = element[2:len(element)]
+ # padding if length is odd bytes
+ if padflag is True:
+ eeprom.append("ff")
+
+ return eeprom
+
+ def ExtractEEPROMGeneralCategory(self, device):
+ """
+ Extract "General" category data from slave ESI XML and generate EEPROM image data.
+ @param device : 'device' object in the slave ESI XML
+ @return eeprom : "Strings" category EEPROM image data
+ """
+ eeprom = []
+
+ # category header
+ eeprom.append("1e")
+ eeprom.append("00")
+
+ # category length
+ eeprom.append("10")
+ eeprom.append("00")
+
+ # word 1 : Group Type index and Image index in STRINGS Category
+ eeprom.append("{:0>2x}".format(self.GroupIdx))
+ eeprom.append("{:0>2x}".format(self.ImgIdx))
+
+ # word 2 : Device Type index and Device Name index in STRINGS Category
+ eeprom.append("{:0>2x}".format(self.OrderIdx))
+ eeprom.append("{:0>2x}".format(self.NameIdx))
+
+ # word 3 : Physical Layer Port info. and CoE Details
+ eeprom.append("01") # Physical Layer Port info - assume 01
+ # CoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<CoE>
+ coe_details = 0
+ mb = device.getMailbox()
+ coe_details = 1 # sdo enabled
+ if mb is not None:
+ coe = mb.getCoE()
+ if coe is not None:
+ for bit, flag in enumerate(["SdoInfo", "PdoAssign", "PdoConfig",
+ "PdoUpload", "CompleteAccess"]):
+ if getattr(coe, "get%s" % flag)() is not None:
+ coe_details += 1 << bit
+ eeprom.append("{:0>2x}".format(coe_details))
+
+ # word 4 : FoE Details and EoE Details
+ # FoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<FoE>
+ if mb is not None and mb.getFoE() is not None:
+ eeprom.append("01")
+ else:
+ eeprom.append("00")
+ # EoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<EoE>
+ if mb is not None and mb.getEoE() is not None:
+ eeprom.append("01")
+ else:
+ eeprom.append("00")
+
+ # word 5 : SoE Channels(reserved) and DS402 Channels
+ # SoE Details; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<SoE>
+ if mb is not None and mb.getSoE() is not None:
+ eeprom.append("01")
+ else:
+ eeprom.append("00")
+ # DS402Channels; <EtherCATInfo>-<Descriptions>-<Devices>-<Device>-<Mailbox>-<CoE>: DS402Channels
+ ds402ch = False
+ if mb is not None:
+ coe = mb.getCoE()
+ if coe is not None:
+ ds402ch = coe.getDS402Channels()
+ eeprom.append("01" if ds402ch in [True, 1] else "00")
+
+ # word 6 : SysmanClass(reserved) and Flags
+ eeprom.append("00") # reserved
+ # Flags
+ en_safeop = False
+ en_lrw = False
+ if device.getType().getTcCfgModeSafeOp() is True \
+ or device.getType().getTcCfgModeSafeOp() == 1:
+ en_safeop = True
+ if device.getType().getUseLrdLwr() is True \
+ or device.getType().getUseLrdLwr() == 1:
+ en_lrw = True
+
+ flags = "0b"+"000000"+str(int(en_lrw))+str(int(en_safeop))
+ eeprom.append("{:0>2x}".format(int(flags, 2)))
+
+ # word 7 : Current On EBus (assume 0x0000)
+ eeprom.append("00")
+ eeprom.append("00")
+ # after word 7; couldn't analyze yet
+ eeprom.append("03")
+ eeprom.append("00")
+ eeprom.append("11")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+ eeprom.append("00")
+
+ return eeprom
+
+ def ExtractEEPROMFMMUCategory(self, device):
+ """
+ Extract "FMMU" category data from slave ESI XML and generate EEPROM image data.
+ @param device : 'device' object in the slave ESI XML
+ @return eeprom : "Strings" category EEPROM image data
+ """
+ eeprom = []
+ data = ""
+ count = 0 # number of FMMU
+ padflag = False
+
+ for fmmu in device.getFmmu():
+ count += 1
+ if fmmu.getcontent() == "Outputs":
+ data += "01"
+ if fmmu.getcontent() == "Inputs":
+ data += "02"
+ if fmmu.getcontent() == "MBoxState":
+ data += "03"
+
+ # construct of EEPROM data
+ if data != "":
+ # category header
+ eeprom.append("28")
+ eeprom.append("00")
+ # category length
+ if count % 2 == 1:
+ padflag = True
+ eeprom.append("{:0>4x}".format((count+1)/2)[2:4])
+ eeprom.append("{:0>4x}".format((count+1)/2)[0:2])
+ else:
+ eeprom.append("{:0>4x}".format((count)/2)[2:4])
+ eeprom.append("{:0>4x}".format((count)/2)[0:2])
+ for dummy in range(count):
+ if data == "":
+ eeprom.append("00")
+ else:
+ eeprom.append(data[0:2])
+ data = data[2:len(data)]
+ # padding if length is odd bytes
+ if padflag is True:
+ eeprom.append("ff")
+
+ return eeprom
+
+ def ExtractEEPROMSyncMCategory(self, device):
+ """
+ Extract "SyncM" category data from slave ESI XML and generate EEPROM image data.
+ @param device : 'device' object in the slave ESI XML
+ @return eeprom : "Strings" category EEPROM image data
+ """
+ eeprom = []
+ data = ""
+ number = {"MBoxOut": "01", "MBoxIn": "02", "Outputs": "03", "Inputs": "04"}
+
+ for sm in device.getSm():
+ for attr in [sm.getStartAddress(),
+ sm.getDefaultSize(),
+ sm.getControlByte()]:
+ if attr is not None:
+ data += "{:0>4x}".format(ExtractHexDecValue(attr))[2:4]
+ data += "{:0>4x}".format(ExtractHexDecValue(attr))[0:2]
+ else:
+ data += "0000"
+ if sm.getEnable() == "1" or sm.getEnable() is True:
+ data += "01"
+ else:
+ data += "00"
+ data += number[sm.getcontent()]
+
+ if data != "":
+ # category header
+ eeprom.append("29")
+ eeprom.append("00")
+ # category length
+ eeprom.append("{:0>4x}".format(len(data)/4)[2:4])
+ eeprom.append("{:0>4x}".format(len(data)/4)[0:2])
+ for dummy in range(len(data)/2):
+ if data == "":
+ eeprom.append("00")
+ else:
+ eeprom.append(data[0:2])
+ data = data[2:len(data)]
+
+ return eeprom
+
+ def ExtractEEPROMPDOCategory(self, device, pdotype):
+ """
+ Extract ""PDO (Tx, Rx)"" category data from slave ESI XML and generate EEPROM image data.
+ @param device : 'device' object in the slave ESI XML
+ @param pdotype : identifier whether "TxPDO" or "RxPDO".
+ @return eeprom : "Strings" category EEPROM image data
+ """
+ eeprom = []
+ data = ""
+ count = 0
+ en_fixed = False
+ en_mandatory = False
+ en_virtual = False
+
+ for element in eval("device.get%s()" % pdotype):
+ # PDO Index
+ data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[2:4]
+ data += "{:0>4x}".format(ExtractHexDecValue(element.getIndex().getcontent()))[0:2]
+ # Number of Entries
+ data += "{:0>2x}".format(len(element.getEntry()))
+ # About Sync Manager
+ if element.getSm() is not None:
+ data += "{:0>2x}".format(element.getSm())
+ else:
+ data += "ff"
+ # Reference to DC Synch (according to ET1100 documentation) - assume 0
+ data += "00"
+ # Name Index
+ objname = ""
+ for name in element.getName():
+ objname = name.getcontent()
+ for name in self.Strings:
+ count += 1
+ if objname == name:
+ break
+ if len(self.Strings)+1 == count:
+ data += "00"
+ else:
+ data += "{:0>2x}".format(count)
+ count = 0
+ # Flags; by Fixed, Mandatory, Virtual attributes ?
+ if element.getFixed() is True or 1:
+ en_fixed = True
+ if element.getMandatory() is True or 1:
+ en_mandatory = True
+ if element.getVirtual() is True or element.getVirtual():
+ en_virtual = True
+ data += str(int(en_fixed)) + str(int(en_mandatory)) + str(int(en_virtual)) + "0"
+
+ for entry in element.getEntry():
+ # Entry Index
+ data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[2:4]
+ data += "{:0>4x}".format(ExtractHexDecValue(entry.getIndex().getcontent()))[0:2]
+ # Subindex
+ data += "{:0>2x}".format(int(entry.getSubIndex()))
+ # Entry Name Index
+ objname = ""
+ for name in entry.getName():
+ objname = name.getcontent()
+ for name in self.Strings:
+ count += 1
+ if objname == name:
+ break
+ if len(self.Strings)+1 == count:
+ data += "00"
+ else:
+ data += "{:0>2x}".format(count)
+ count = 0
+ # DataType
+ if entry.getDataType() is not None:
+ if entry.getDataType().getcontent() in self.BaseDataTypeDict:
+ data += self.BaseDataTypeDict[entry.getDataType().getcontent()]
+ else:
+ data += "00"
+ else:
+ data += "00"
+ # BitLen
+ if entry.getBitLen() is not None:
+ data += "{:0>2x}".format(int(entry.getBitLen()))
+ else:
+ data += "00"
+ # Flags; by Fixed attributes ?
+ en_fixed = False
+ if entry.getFixed() is True or entry.getFixed() == 1:
+ en_fixed = True
+ data += str(int(en_fixed)) + "000"
+
+ if data != "":
+ # category header
+ if pdotype == "TxPdo":
+ eeprom.append("32")
+ elif pdotype == "RxPdo":
+ eeprom.append("33")
+ else:
+ eeprom.append("00")
+ eeprom.append("00")
+ # category length
+ eeprom.append("{:0>4x}".format(len(data)/4)[2:4])
+ eeprom.append("{:0>4x}".format(len(data)/4)[0:2])
+ data = str(data.lower())
+ for dummy in range(len(data)/2):
+ if data == "":
+ eeprom.append("00")
+ else:
+ eeprom.append(data[0:2])
+ data = data[2:len(data)]
+
+ return eeprom
+
+ def ExtractEEPROMDCCategory(self, device):
+ """
+ Extract "DC(Distributed Clock)" category data from slave ESI XML and generate EEPROM image data.
+ @param device : 'device' object in the slave ESI XML
+ @return eeprom : "Strings" category EEPROM image data
+ """
+ eeprom = []
+ data = ""
+ count = 0
+ namecount = 0
+
+ if device.getDc() is not None:
+ for element in device.getDc().getOpMode():
+ count += 1
+ # assume that word 1-7 are 0x0000
+ data += "0000"
+ data += "0000"
+ data += "0000"
+ data += "0000"
+ data += "0000"
+ data += "0000"
+ data += "0000"
+ # word 8-10
+ # AssignActivate
+ if element.getAssignActivate() is not None:
+ data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[2:4]
+ data += "{:0>4x}".format(ExtractHexDecValue(element.getAssignActivate()))[0:2]
+ else:
+ data += "0000"
+ # Factor of CycleTimeSync0 ? and default is 1?
+ if element.getCycleTimeSync0() is not None:
+ if element.getCycleTimeSync0().getFactor() is not None:
+ data += "{:0>2x}".format(int(element.getCycleTimeSync0().getFactor()))
+ data += "00"
+ else:
+ data += "0100"
+ else:
+ data += "0100"
+ # Index of Name in STRINGS Category
+ # Name Index
+ objname = ""
+ for name in element.getName():
+ objname += name
+ for name in self.Strings:
+ namecount += 1
+ if objname == name:
+ break
+ if len(self.Strings)+1 == namecount:
+ data += "00"
+ else:
+ data += "{:0>2x}".format(namecount)
+ namecount = 0
+ data += "00"
+ # assume that word 11-12 are 0x0000
+ data += "0000"
+ data += "0000"
+
+ if data != "":
+ # category header
+ eeprom.append("3c")
+ eeprom.append("00")
+ # category length
+ eeprom.append("{:0>4x}".format(len(data)/4)[2:4])
+ eeprom.append("{:0>4x}".format(len(data)/4)[0:2])
+ data = str(data.lower())
+ for dummy in range(len(data)/2):
+ if data == "":
+ eeprom.append("00")
+ else:
+ eeprom.append(data[0:2])
+ data = data[2:len(data)]
+
+ return eeprom
+
+ # -------------------------------------------------------------------------------
+ # Used Register Access
+ # -------------------------------------------------------------------------------
+ def RegRead(self, offset, length):
+ """
+ Read slave ESC register content using "ethercat reg_read -p %d %s %s" command.
+ Command example : "ethercat reg_read -p 0 0x0c00 0x0400"
+ @param offset : register address
+ @param length : register length
+ @return return_val : register data
+ """
+ _error, return_val = self.Controler.RemoteExec(
+ REG_READ % (self.Controler.GetSlavePos(), offset, length),
+ return_val=None)
+ return return_val
+
+ def RegWrite(self, address, data):
+ """
+ Write data to slave ESC register using "ethercat reg_write -p %d %s %s" command.
+ Command example : "ethercat reg_write -p 0 0x0c04 0x0001"
+ @param address : register address
+ @param data : data to write
+ @return return_val : the execution result of "ethercat reg_write" (for error check)
+ """
+ _error, return_val = self.Controler.RemoteExec(
+ REG_WRITE % (self.Controler.GetSlavePos(), address, data),
+ return_val=None)
+ return return_val
+
+ def Rescan(self):
+ """
+ Synchronize EEPROM data in master controller with the data in slave device after EEPROM write.
+ Command example : "ethercat rescan -p 0"
+ """
+ _error, _return_val = self.Controler.RemoteExec(RESCAN % (self.Controler.GetSlavePos()), return_val=None)
+
+ # -------------------------------------------------------------------------------
+ # Common Use Methods
+ # -------------------------------------------------------------------------------
+ def CheckConnect(self, cyclic_flag):
+ """
+ Check connection status (1) between Beremiz and the master (2) between the master and the slave.
+ @param cyclic_flag: 0 - one shot, 1 - periodic
+ @return True or False
+ """
+ if self.Controler.GetCTRoot()._connector is not None:
+ # Check connection between the master and the slave.
+ # Command example : "ethercat xml -p 0"
+ _error, return_val = self.Controler.RemoteExec(SLAVE_XML % (self.Controler.GetSlavePos()), return_val=None)
+ number_of_lines = return_val.split("\n")
+ if len(number_of_lines) <= 2: # No slave connected to the master controller
+ if not cyclic_flag:
+ self.CreateErrorDialog(_('No connected slaves'))
+ return False
+
+ elif len(number_of_lines) > 2:
+ return True
+ else:
+ # The master controller is not connected to Beremiz host
+ if not cyclic_flag:
+ self.CreateErrorDialog(_('PLC not connected!'))
+ return False
+
+ def CreateErrorDialog(self, mention):
+ """
+ Create a dialog to indicate error or warning.
+ @param mention : Error String
+ """
+ app_frame = self.Controler.GetCTRoot().AppFrame
+ dlg = wx.MessageDialog(app_frame, mention,
+ _(' Warning...'),
+ wx.OK | wx.ICON_INFORMATION)
+ dlg.ShowModal()
+ dlg.Destroy()
--- a/etherlab/ConfigEditor.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/ConfigEditor.py Fri Nov 23 00:33:04 2018 +0100
@@ -9,6 +9,7 @@
#
# See COPYING file for copyrights details.
+from __future__ import absolute_import
import os
import re
from types import TupleType
@@ -20,40 +21,46 @@
from plcopen.structures import IEC_KEYWORDS, TestIdentifier
from controls import CustomGrid, CustomTable, FolderTree
+from controls.CustomStyledTextCtrl import NAVIGATION_KEYS
from editors.ConfTreeNodeEditor import ConfTreeNodeEditor, SCROLLBAR_UNIT
from util.BitmapLibrary import GetBitmap
-from controls.CustomStyledTextCtrl import NAVIGATION_KEYS
+from util.TranslationCatalogs import NoTranslate
# -----------------------------------------------------------------------
-from EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass
-# -----------------------------------------------------------------------
-
+from etherlab.EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass
+# -----------------------------------------------------------------------
+
[ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE] = range(3)
+
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)
+
def GetVariablesTableColnames(position=False):
- _ = lambda x : x
+ _ = NoTranslate
colname = ["#"]
if position:
colname.append(_("Position"))
return colname + [_("Name"), _("Index"), _("SubIndex"), _("Type"), _("Access")]
+
ACCESS_TYPES = {
'ro': 'R',
'wo': 'W',
'rw': 'R/W'}
+
def GetAccessValue(access, pdo_mapping):
value = "SDO: %s" % ACCESS_TYPES.get(access, "")
if pdo_mapping != "":
value += ", PDO: %s" % pdo_mapping
return value
+
VARIABLES_FILTERS = [
(_("All"), (0x0000, 0xffff)),
(_("Communication Parameters"), (0x1000, 0x1fff)),
@@ -66,71 +73,72 @@
ETHERCAT_SUBINDEX_MODEL = re.compile("#x([0-9a-fA-F]{0,2})$")
LOCATION_MODEL = re.compile("(?:%[IQM](?:[XBWLD]?([0-9]+(?:\.[0-9]+)*)))$")
+
class NodeVariablesSizer(wx.FlexGridSizer):
-
+
def __init__(self, parent, controler, position_column=False):
wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=2, vgap=5)
self.AddGrowableCol(0)
self.AddGrowableRow(1)
-
+
self.Controler = controler
self.PositionColumn = position_column
-
+
self.VariablesFilter = wx.ComboBox(parent, style=wx.TE_PROCESS_ENTER)
self.VariablesFilter.Bind(wx.EVT_COMBOBOX, self.OnVariablesFilterChanged)
self.VariablesFilter.Bind(wx.EVT_TEXT_ENTER, self.OnVariablesFilterChanged)
self.VariablesFilter.Bind(wx.EVT_CHAR, self.OnVariablesFilterKeyDown)
self.AddWindow(self.VariablesFilter, flag=wx.GROW)
-
- self.VariablesGrid = wx.gizmos.TreeListCtrl(parent,
- style=wx.TR_DEFAULT_STYLE |
- wx.TR_ROW_LINES |
- wx.TR_COLUMN_LINES |
- wx.TR_HIDE_ROOT |
- wx.TR_FULL_ROW_HIGHLIGHT)
+
+ self.VariablesGrid = wx.gizmos.TreeListCtrl(parent,
+ style=wx.TR_DEFAULT_STYLE |
+ wx.TR_ROW_LINES |
+ wx.TR_COLUMN_LINES |
+ wx.TR_HIDE_ROOT |
+ wx.TR_FULL_ROW_HIGHLIGHT)
self.VariablesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN,
- self.OnVariablesGridLeftClick)
+ self.OnVariablesGridLeftClick)
self.AddWindow(self.VariablesGrid, flag=wx.GROW)
-
+
self.Filters = []
for desc, value in VARIABLES_FILTERS:
self.VariablesFilter.Append(desc)
self.Filters.append(value)
-
+
self.VariablesFilter.SetSelection(0)
self.CurrentFilter = self.Filters[0]
self.VariablesFilterFirstCharacter = True
-
+
if position_column:
for colname, colsize, colalign in zip(GetVariablesTableColnames(position_column),
[40, 80, 350, 80, 100, 80, 150],
- [wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT,
- wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT,
+ [wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT,
+ wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT,
wx.ALIGN_LEFT]):
self.VariablesGrid.AddColumn(_(colname), colsize, colalign)
self.VariablesGrid.SetMainColumn(2)
else:
for colname, colsize, colalign in zip(GetVariablesTableColnames(),
[40, 350, 80, 100, 80, 150],
- [wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT,
+ [wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT,
wx.ALIGN_RIGHT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]):
self.VariablesGrid.AddColumn(_(colname), colsize, colalign)
self.VariablesGrid.SetMainColumn(1)
-
+
def RefreshView(self):
entries = self.Controler.GetSlaveVariables(self.CurrentFilter)
self.RefreshVariablesGrid(entries)
-
+
def RefreshVariablesGrid(self, entries):
root = self.VariablesGrid.GetRootItem()
if not root.IsOk():
root = self.VariablesGrid.AddRoot(_("Slave entries"))
self.GenerateVariablesGridBranch(root, entries, GetVariablesTableColnames(self.PositionColumn))
self.VariablesGrid.Expand(root)
-
+
def GenerateVariablesGridBranch(self, root, entries, colnames, idx=0):
item, root_cookie = self.VariablesGrid.GetFirstChild(root)
-
+
no_more_items = not item.IsOk()
for entry in entries:
idx += 1
@@ -153,7 +161,7 @@
if not no_more_items:
item, root_cookie = self.VariablesGrid.GetNextChild(root, root_cookie)
no_more_items = not item.IsOk()
-
+
if not no_more_items:
to_delete = []
while item.IsOk():
@@ -161,9 +169,9 @@
item, root_cookie = self.VariablesGrid.GetNextChild(root, root_cookie)
for item in to_delete:
self.VariablesGrid.Delete(item)
-
+
return idx
-
+
def OnVariablesFilterChanged(self, event):
filter = self.VariablesFilter.GetSelection()
if filter != -1:
@@ -183,36 +191,36 @@
self.CurrentFilter = (index, index)
self.VariablesFilter.SetValue(VARIABLE_INDEX_FILTER_FORMAT % index)
self.RefreshView()
- except:
+ except Exception:
if self.CurrentFilter in self.Filters:
self.VariablesFilter.SetSelection(self.Filters.index(self.CurrentFilter))
else:
self.VariablesFilter.SetValue(VARIABLE_INDEX_FILTER_FORMAT % self.CurrentFilter[0])
self.VariablesFilterFirstCharacter = True
event.Skip()
-
+
def OnVariablesFilterKeyDown(self, event):
if self.VariablesFilterFirstCharacter:
keycode = event.GetKeyCode()
- if keycode not in [wx.WXK_RETURN,
+ if keycode not in [wx.WXK_RETURN,
wx.WXK_NUMPAD_ENTER]:
self.VariablesFilterFirstCharacter = False
if keycode not in NAVIGATION_KEYS:
self.VariablesFilter.SetValue("")
- if keycode not in [wx.WXK_DELETE,
- wx.WXK_NUMPAD_DELETE,
+ if keycode not in [wx.WXK_DELETE,
+ wx.WXK_NUMPAD_DELETE,
wx.WXK_BACK]:
event.Skip()
else:
event.Skip()
-
+
def OnVariablesGridLeftClick(self, event):
- item, flags, col = self.VariablesGrid.HitTest(event.GetPosition())
+ item, _flags, col = self.VariablesGrid.HitTest(event.GetPosition())
if item.IsOk():
entry = self.VariablesGrid.GetItemPyData(item)
data_type = entry.get("Type", "")
data_size = self.Controler.GetSizeOfType(data_type)
-
+
if col == -1 and data_size is not None:
pdo_mapping = entry.get("PDOMapping", "")
access = entry.get("Access", "")
@@ -225,7 +233,7 @@
node_name = self.Controler.GetSlaveName(slave_pos)
else:
node_name = self.Controler.CTNName()
-
+
if pdo_mapping != "":
var_name = "%s_%4.4x_%2.2x" % (node_name, entry_index, entry_subindex)
if pdo_mapping == "T":
@@ -233,14 +241,14 @@
else:
dir = "%Q"
location = "%s%s" % (dir, data_size) + \
- ".".join(map(lambda x:str(x), location + (entry_index, entry_subindex)))
-
+ ".".join(map(str, location + (entry_index, entry_subindex)))
+
data = wx.TextDataObject(str((location, "location", data_type, var_name, "", access)))
dragSource = wx.DropSource(self.VariablesGrid)
dragSource.SetData(data)
dragSource.DoDragDrop()
return
-
+
elif self.PositionColumn:
location = self.Controler.GetCurrentLocation() +\
(slave_pos, entry_index, entry_subindex)
@@ -249,67 +257,68 @@
dragSource.SetData(data)
dragSource.DoDragDrop()
return
-
+
event.Skip()
+
class NodeEditor(ConfTreeNodeEditor):
-
+
CONFNODEEDITOR_TABS = [
(_("Ethercat node"), "_create_EthercatNodeEditor"),
# Add Notebook Tab for EtherCAT Management Treebook
(_("EtherCAT Management"), "_create_EtherCATManagementEditor")
]
-
+
def _create_EthercatNodeEditor(self, prnt):
self.EthercatNodeEditor = wx.Panel(prnt, style=wx.TAB_TRAVERSAL)
-
+
main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
main_sizer.AddGrowableCol(0)
main_sizer.AddGrowableRow(1)
-
+
variables_label = wx.StaticText(self.EthercatNodeEditor,
- label=_('Variable entries:'))
- main_sizer.AddWindow(variables_label, border=10, flag=wx.TOP|wx.LEFT|wx.RIGHT)
-
+ label=_('Variable entries:'))
+ main_sizer.AddWindow(variables_label, border=10, flag=wx.TOP | wx.LEFT | wx.RIGHT)
+
self.NodeVariables = NodeVariablesSizer(self.EthercatNodeEditor, self.Controler)
- main_sizer.AddSizer(self.NodeVariables, border=10,
- flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
-
+ main_sizer.AddSizer(self.NodeVariables, border=10,
+ flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
+
self.EthercatNodeEditor.SetSizer(main_sizer)
return self.EthercatNodeEditor
-
+
def __init__(self, parent, controler, window):
ConfTreeNodeEditor.__init__(self, parent, controler, window)
-
+
# add Contoler for use EthercatSlave.py Method
self.Controler = controler
-
+
def GetBufferState(self):
return False, False
-
+
def RefreshView(self):
ConfTreeNodeEditor.RefreshView(self)
-
+
self.NodeVariables.RefreshView()
- # -------------------For EtherCAT Management ----------------------------------------------
+ # -------------------For EtherCAT Management ----------------------------------------------
def _create_EtherCATManagementEditor(self, prnt):
self.EtherCATManagementEditor = wx.ScrolledWindow(prnt,
- style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
+ style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
self.EtherCATManagementEditor.Bind(wx.EVT_SIZE, self.OnResize)
self.EtherCATManagermentEditor_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
self.EtherCATManagermentEditor_Main_Sizer.AddGrowableCol(0)
self.EtherCATManagermentEditor_Main_Sizer.AddGrowableRow(0)
-
+
self.EtherCATManagementTreebook = EtherCATManagementTreebook(self.EtherCATManagementEditor, self.Controler, self)
-
+
self.EtherCATManagermentEditor_Main_Sizer.AddSizer(self.EtherCATManagementTreebook, border=10, flag=wx.GROW)
self.EtherCATManagementEditor.SetSizer(self.EtherCATManagermentEditor_Main_Sizer)
return self.EtherCATManagementEditor
-
+
def OnResize(self, event):
self.EtherCATManagementEditor.GetBestSize()
xstart, ystart = self.EtherCATManagementEditor.GetViewStart()
@@ -318,23 +327,27 @@
posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT))
posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT))
self.EtherCATManagementEditor.Scroll(posx, posy)
- self.EtherCATManagementEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
- maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
+ self.EtherCATManagementEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
+ maxx / SCROLLBAR_UNIT,
+ maxy / SCROLLBAR_UNIT,
+ posx, posy)
event.Skip()
# -------------------------------------------------------------------------------------------------------
+
CIA402NodeEditor = NodeEditor
def GetProcessVariablesTableColnames():
- _ = lambda x : x
- return ["#", _("Name"),
- _("Read from (nodeid, index, subindex)"),
+ _ = NoTranslate
+ return ["#", _("Name"),
+ _("Read from (nodeid, index, subindex)"),
_("Write to (nodeid, index, subindex)"),
_("Description")]
+
class ProcessVariablesTable(CustomTable):
-
+
def GetValue(self, row, col):
if row < self.GetNumberRows():
if col == 0:
@@ -351,7 +364,7 @@
return value
return "%d, #x%0.4X, #x%0.2X" % value
return self.data[row].get(colname, "")
-
+
def SetValue(self, row, col, value):
if col < len(self.colnames):
colname = self.GetColLabelValue(col, False)
@@ -361,7 +374,7 @@
self.data[row]["WriteTo"] = value
else:
self.data[row][colname] = value
-
+
def _updateColAttrs(self, grid):
"""
wx.grid.Grid -> update the column attributes to add the
@@ -380,18 +393,19 @@
grid.SetReadOnly(row, col, False)
else:
grid.SetReadOnly(row, col, True)
-
+
grid.SetCellEditor(row, col, editor)
grid.SetCellRenderer(row, col, renderer)
-
+
self.ResizeRow(grid, row)
+
class ProcessVariableDropTarget(wx.TextDropTarget):
-
+
def __init__(self, parent):
wx.TextDropTarget.__init__(self)
self.ParentWindow = parent
-
+
def OnDropText(self, x, y, data):
self.ParentWindow.Select()
x, y = self.ParentWindow.ProcessVariablesGrid.CalcUnscrolledPosition(x, y)
@@ -400,11 +414,11 @@
message = None
try:
values = eval(data)
- except:
- message = _("Invalid value \"%s\" for process variable")%data
+ except Exception:
+ message = _("Invalid value \"%s\" for process variable") % data
values = None
if not isinstance(values, TupleType):
- message = _("Invalid value \"%s\" for process variable")%data
+ message = _("Invalid value \"%s\" for process variable") % data
values = None
if values is not None and col != wx.NOT_FOUND and row != wx.NOT_FOUND and 2 <= col <= 3:
location = None
@@ -413,8 +427,8 @@
if result is not None:
location = map(int, result.group(1).split('.'))
master_location = self.ParentWindow.GetMasterLocation()
- if (master_location == tuple(location[:len(master_location)]) and
- len(location) - len(master_location) == 3):
+ if master_location == tuple(location[:len(master_location)]) and \
+ len(location) - len(master_location) == 3:
values = tuple(location[len(master_location):])
var_type = self.ParentWindow.Controler.GetSlaveVariableDataType(*values)
if col == 2:
@@ -435,36 +449,38 @@
else:
message = _("'Read from' and 'Write to' variables types are not compatible")
else:
- message = _("Invalid value \"%s\" for process variable")%data
-
+ message = _("Invalid value \"%s\" for process variable") % data
+
if message is not None:
wx.CallAfter(self.ShowMessage, message)
-
+
def ShowMessage(self, message):
- message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR)
+ message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
+
def GetStartupCommandsTableColnames():
- _ = lambda x : x
+ _ = NoTranslate
return [_("Position"), _("Index"), _("Subindex"), _("Value"), _("Description")]
+
class StartupCommandDropTarget(wx.TextDropTarget):
-
+
def __init__(self, parent):
wx.TextDropTarget.__init__(self)
self.ParentWindow = parent
-
+
def OnDropText(self, x, y, data):
self.ParentWindow.Select()
message = None
try:
values = eval(data)
- except:
- message = _("Invalid value \"%s\" for startup command")%data
+ except Exception:
+ message = _("Invalid value \"%s\" for startup command") % data
values = None
if not isinstance(values, TupleType):
- message = _("Invalid value \"%s\" for startup command")%data
+ message = _("Invalid value \"%s\" for startup command") % data
values = None
if values is not None:
location = None
@@ -478,23 +494,24 @@
access = values[2]
if location is not None:
master_location = self.ParentWindow.GetMasterLocation()
- if (master_location == tuple(location[:len(master_location)]) and
- len(location) - len(master_location) == 3):
+ if master_location == tuple(location[:len(master_location)]) and \
+ len(location) - len(master_location) == 3:
if access in ["wo", "rw"]:
self.ParentWindow.AddStartupCommand(*location[len(master_location):])
else:
message = _("Entry can't be write through SDO")
else:
- message = _("Invalid value \"%s\" for startup command")%data
-
+ message = _("Invalid value \"%s\" for startup command") % data
+
if message is not None:
wx.CallAfter(self.ShowMessage, message)
-
+
def ShowMessage(self, message):
- message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR)
+ message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
+
class StartupCommandsTable(CustomTable):
"""
@@ -514,7 +531,7 @@
elif colname == "Subindex":
return "#x%0.2X" % value
return value
-
+
def SetValue(self, row, col, value):
if col < len(self.colnames):
colname = self.GetColLabelValue(col, False)
@@ -532,10 +549,10 @@
self.old_value = self.data[row][colname]
value = int(value)
self.data[row][colname] = value
-
+
def GetOldValue(self):
return self.old_value
-
+
def _updateColAttrs(self, grid):
"""
wx.grid.Grid -> update the column attributes to add the
@@ -554,29 +571,30 @@
else:
editor = wx.grid.GridCellTextEditor()
renderer = wx.grid.GridCellStringRenderer()
-
+
grid.SetCellEditor(row, col, editor)
grid.SetCellRenderer(row, col, renderer)
grid.SetReadOnly(row, col, False)
-
+
self.ResizeRow(grid, row)
-
+
def GetCommandIndex(self, position, command_idx):
for row, command in enumerate(self.data):
if command["Position"] == position and command["command_idx"] == command_idx:
return row
return None
+
class MasterNodesVariablesSizer(NodeVariablesSizer):
-
+
def __init__(self, parent, controler):
NodeVariablesSizer.__init__(self, parent, controler, True)
-
+
self.CurrentNodesFilter = {}
-
+
def SetCurrentNodesFilter(self, nodes_filter):
self.CurrentNodesFilter = nodes_filter
-
+
def RefreshView(self):
if self.CurrentNodesFilter is not None:
args = self.CurrentNodesFilter.copy()
@@ -584,174 +602,164 @@
entries = self.Controler.GetNodesVariables(**args)
self.RefreshVariablesGrid(entries)
+
NODE_POSITION_FILTER_FORMAT = _("Node Position: %d")
+
class MasterEditor(ConfTreeNodeEditor):
-
+
CONFNODEEDITOR_TABS = [
(_("Network"), "_create_EthercatMasterEditor"),
(_("Master State"), "_create_MasterStateEditor")
]
-
+
def _create_MasterStateEditor(self, prnt):
- self.MasterStateEditor = wx.ScrolledWindow(prnt, style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
+ self.MasterStateEditor = wx.ScrolledWindow(prnt, style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
self.MasterStateEditor.Bind(wx.EVT_SIZE, self.OnResize)
-
+
self.MasterStateEditor_Panel_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
self.MasterStateEditor_Panel_Main_Sizer.AddGrowableCol(0)
self.MasterStateEditor_Panel_Main_Sizer.AddGrowableRow(0)
-
+
self.MasterStateEditor_Panel = MasterStatePanelClass(self.MasterStateEditor, self.Controler)
-
+
self.MasterStateEditor_Panel_Main_Sizer.AddSizer(self.MasterStateEditor_Panel, border=10, flag=wx.GROW)
-
+
self.MasterStateEditor.SetSizer(self.MasterStateEditor_Panel_Main_Sizer)
return self.MasterStateEditor
-
- def OnResize(self, event):
- self.MasterStateEditor.GetBestSize()
- xstart, ystart = self.MasterStateEditor.GetViewStart()
- window_size = self.MasterStateEditor.GetClientSize()
- maxx, maxy = self.MasterStateEditor.GetMinSize()
- posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT))
- posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT))
- self.MasterStateEditor.Scroll(posx, posy)
- self.MasterStateEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
- maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
- event.Skip()
-
+
def _create_EthercatMasterEditor(self, prnt):
- self.EthercatMasterEditor = wx.ScrolledWindow(prnt,
- style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
+ self.EthercatMasterEditor = wx.ScrolledWindow(prnt,
+ style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
self.EthercatMasterEditor.Bind(wx.EVT_SIZE, self.OnResize)
-
+
self.EthercatMasterEditorSizer = wx.BoxSizer(wx.VERTICAL)
-
+
self.NodesFilter = wx.ComboBox(self.EthercatMasterEditor,
- style=wx.TE_PROCESS_ENTER)
+ style=wx.TE_PROCESS_ENTER)
self.Bind(wx.EVT_COMBOBOX, self.OnNodesFilterChanged, self.NodesFilter)
self.Bind(wx.EVT_TEXT_ENTER, self.OnNodesFilterChanged, self.NodesFilter)
self.NodesFilter.Bind(wx.EVT_CHAR, self.OnNodesFilterKeyDown)
-
+
process_variables_header = wx.BoxSizer(wx.HORIZONTAL)
-
+
process_variables_label = wx.StaticText(self.EthercatMasterEditor,
- label=_("Process variables mapped between nodes:"))
+ label=_("Process variables mapped between nodes:"))
process_variables_header.AddWindow(process_variables_label, 1,
- flag=wx.ALIGN_CENTER_VERTICAL)
-
+ flag=wx.ALIGN_CENTER_VERTICAL)
+
for name, bitmap, help in [
("AddVariableButton", "add_element", _("Add process variable")),
("DeleteVariableButton", "remove_element", _("Remove process variable")),
("UpVariableButton", "up", _("Move process variable up")),
("DownVariableButton", "down", _("Move process variable down"))]:
- button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
- size=wx.Size(28, 28), style=wx.NO_BORDER)
+ button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
+ size=wx.Size(28, 28), style=wx.NO_BORDER)
button.SetToolTipString(help)
setattr(self, name, button)
process_variables_header.AddWindow(button, border=5, flag=wx.LEFT)
-
+
self.ProcessVariablesGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
self.ProcessVariablesGrid.SetMinSize(wx.Size(0, 150))
self.ProcessVariablesGrid.SetDropTarget(ProcessVariableDropTarget(self))
- self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
- self.OnProcessVariablesGridCellChange)
- self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK,
- self.OnProcessVariablesGridCellLeftClick)
+ self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
+ self.OnProcessVariablesGridCellChange)
+ self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK,
+ self.OnProcessVariablesGridCellLeftClick)
self.ProcessVariablesGrid.Bind(wx.EVT_KEY_DOWN, self.OnProcessVariablesGridKeyDown)
-
+
startup_commands_header = wx.BoxSizer(wx.HORIZONTAL)
-
+
startup_commands_label = wx.StaticText(self.EthercatMasterEditor,
- label=_("Startup service variables assignments:"))
+ label=_("Startup service variables assignments:"))
startup_commands_header.AddWindow(startup_commands_label, 1,
- flag=wx.ALIGN_CENTER_VERTICAL)
-
+ flag=wx.ALIGN_CENTER_VERTICAL)
+
for name, bitmap, help in [
("AddCommandButton", "add_element", _("Add startup service variable")),
("DeleteCommandButton", "remove_element", _("Remove startup service variable"))]:
- button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
- size=wx.Size(28, 28), style=wx.NO_BORDER)
+ button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
+ size=wx.Size(28, 28), style=wx.NO_BORDER)
button.SetToolTipString(help)
setattr(self, name, button)
startup_commands_header.AddWindow(button, border=5, flag=wx.LEFT)
-
+
self.StartupCommandsGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
self.StartupCommandsGrid.SetDropTarget(StartupCommandDropTarget(self))
self.StartupCommandsGrid.SetMinSize(wx.Size(0, 150))
- self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
- self.OnStartupCommandsGridCellChange)
- self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
- self.OnStartupCommandsGridEditorShow)
-
+ self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
+ self.OnStartupCommandsGridCellChange)
+ self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
+ self.OnStartupCommandsGridEditorShow)
+
self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler)
-
+
main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:"))
staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL)
- self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW|wx.ALL)
-
+ self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW | wx.ALL)
+
main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0)
main_staticbox_sizer.AddGrowableCol(0)
main_staticbox_sizer.AddGrowableRow(2)
main_staticbox_sizer.AddGrowableRow(4)
main_staticbox_sizer.AddGrowableRow(5)
staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW)
- main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW|wx.ALL)
- main_staticbox_sizer.AddSizer(process_variables_header, border=5,
- flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
- main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1,
- border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
- main_staticbox_sizer.AddSizer(startup_commands_header,
- border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
- main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1,
- border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
-
+ main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW | wx.ALL)
+ main_staticbox_sizer.AddSizer(process_variables_header, border=5,
+ flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
+ main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1,
+ border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
+ main_staticbox_sizer.AddSizer(startup_commands_header,
+ border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
+ main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1,
+ border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
+
second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
- second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW|wx.ALL)
-
- main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1,
- border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
-
+ second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW | wx.ALL)
+
+ main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1,
+ border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
+
self.EthercatMasterEditor.SetSizer(self.EthercatMasterEditorSizer)
-
+
return self.EthercatMasterEditor
def __init__(self, parent, controler, window):
ConfTreeNodeEditor.__init__(self, parent, controler, window)
-
+
# ------------------------------------------------------------------
self.Controler = controler
# ------------------------------------------------------------------
-
+
self.ProcessVariables = []
self.CellShown = None
self.NodesFilterFirstCharacter = True
-
+
self.ProcessVariablesDefaultValue = {"Name": "", "ReadFrom": "", "WriteTo": "", "Description": ""}
self.ProcessVariablesTable = ProcessVariablesTable(self, [], GetProcessVariablesTableColnames())
self.ProcessVariablesColSizes = [40, 100, 150, 150, 200]
self.ProcessVariablesColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
-
+
self.ProcessVariablesGrid.SetTable(self.ProcessVariablesTable)
self.ProcessVariablesGrid.SetButtons({"Add": self.AddVariableButton,
"Delete": self.DeleteVariableButton,
"Up": self.UpVariableButton,
"Down": self.DownVariableButton})
-
+
def _AddVariablesElement(new_row):
self.ProcessVariablesTable.InsertRow(new_row, self.ProcessVariablesDefaultValue.copy())
self.SaveProcessVariables()
self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid)
return new_row
setattr(self.ProcessVariablesGrid, "_AddRow", _AddVariablesElement)
-
+
def _DeleteVariablesElement(row):
self.ProcessVariablesTable.RemoveRow(row)
self.SaveProcessVariables()
self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid)
setattr(self.ProcessVariablesGrid, "_DeleteRow", _DeleteVariablesElement)
-
+
def _MoveVariablesElement(row, move):
new_row = self.ProcessVariablesTable.MoveRow(row, move)
if new_row != row:
@@ -759,8 +767,9 @@
self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid)
return new_row
setattr(self.ProcessVariablesGrid, "_MoveRow", _MoveVariablesElement)
-
+
_refresh_buttons = getattr(self.ProcessVariablesGrid, "RefreshButtons")
+
def _RefreshButtons():
if self.NodesFilter.GetSelection() == 0:
_refresh_buttons()
@@ -770,7 +779,7 @@
self.UpVariableButton.Enable(False)
self.DownVariableButton.Enable(False)
setattr(self.ProcessVariablesGrid, "RefreshButtons", _RefreshButtons)
-
+
self.ProcessVariablesGrid.SetRowLabelSize(0)
for col in range(self.ProcessVariablesTable.GetNumberCols()):
attr = wx.grid.GridCellAttr()
@@ -779,16 +788,16 @@
self.ProcessVariablesGrid.SetColMinimalWidth(col, self.ProcessVariablesColSizes[col])
self.ProcessVariablesGrid.AutoSizeColumn(col, False)
self.ProcessVariablesGrid.RefreshButtons()
-
+
self.StartupCommandsDefaultValue = {"Position": 0, "Index": 0, "Subindex": 0, "Value": 0, "Description": ""}
self.StartupCommandsTable = StartupCommandsTable(self, [], GetStartupCommandsTableColnames())
self.StartupCommandsColSizes = [100, 100, 50, 100, 200]
self.StartupCommandsColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT, wx.ALIGN_LEFT]
-
+
self.StartupCommandsGrid.SetTable(self.StartupCommandsTable)
self.StartupCommandsGrid.SetButtons({"Add": self.AddCommandButton,
"Delete": self.DeleteCommandButton})
-
+
def _AddCommandsElement(new_row):
command = self.StartupCommandsDefaultValue.copy()
command_idx = self.Controler.AppendStartupCommand(command)
@@ -796,14 +805,14 @@
self.RefreshBuffer()
return self.StartupCommandsTable.GetCommandIndex(command["Position"], command_idx)
setattr(self.StartupCommandsGrid, "_AddRow", _AddCommandsElement)
-
+
def _DeleteCommandsElement(row):
command = self.StartupCommandsTable.GetRow(row)
self.Controler.RemoveStartupCommand(command["Position"], command["command_idx"])
self.RefreshStartupCommands()
self.RefreshBuffer()
setattr(self.StartupCommandsGrid, "_DeleteRow", _DeleteCommandsElement)
-
+
self.StartupCommandsGrid.SetRowLabelSize(0)
for col in range(self.StartupCommandsTable.GetNumberCols()):
attr = wx.grid.GridCellAttr()
@@ -812,32 +821,32 @@
self.StartupCommandsGrid.SetColMinimalWidth(col, self.StartupCommandsColSizes[col])
self.StartupCommandsGrid.AutoSizeColumn(col, False)
self.StartupCommandsGrid.RefreshButtons()
-
+
def RefreshBuffer(self):
self.ParentWindow.RefreshTitle()
self.ParentWindow.RefreshFileMenu()
self.ParentWindow.RefreshEditMenu()
self.ParentWindow.RefreshPageTitles()
-
+
def GetBufferState(self):
return self.Controler.GetBufferState()
-
+
def Undo(self):
self.Controler.LoadPrevious()
self.RefreshView()
-
+
def Redo(self):
self.Controler.LoadNext()
self.RefreshView()
-
+
def RefreshView(self):
ConfTreeNodeEditor.RefreshView(self)
-
+
self.RefreshNodesFilter()
self.RefreshProcessVariables()
self.RefreshStartupCommands()
self.NodesVariables.RefreshView()
-
+
def RefreshNodesFilter(self):
value = self.NodesFilter.GetValue()
self.NodesFilter.Clear()
@@ -854,10 +863,10 @@
try:
int(value)
self.NodesFilter.SetValue(value)
- except:
+ except Exception:
self.NodesFilter.SetSelection(0)
self.RefreshCurrentNodesFilter()
-
+
def RefreshCurrentNodesFilter(self):
filter = self.NodesFilter.GetSelection()
if filter != -1:
@@ -872,27 +881,27 @@
position = int(self.NodesFilter.GetValue())
self.CurrentNodesFilter = {"slave_pos": position}
self.NodesFilter.SetValue(NODE_POSITION_FILTER_FORMAT % position)
- except:
+ except Exception:
if self.CurrentNodesFilter in self.NodesFilterValues:
self.NodesFilter.SetSelection(self.NodesFilterValues.index(self.CurrentNodesFilter))
else:
self.NodesFilter.SetValue(NODE_POSITION_FILTER_FORMAT % self.CurrentNodesFilter["slave_pos"])
self.NodesFilterFirstCharacter = True
self.NodesVariables.SetCurrentNodesFilter(self.CurrentNodesFilter)
-
+
def RefreshProcessVariables(self):
if self.CurrentNodesFilter is not None:
self.ProcessVariables = self.Controler.GetProcessVariables()
slaves = self.Controler.GetSlaves(**self.CurrentNodesFilter)
data = []
for variable in self.ProcessVariables:
- if (variable["ReadFrom"] == "" or variable["ReadFrom"][0] in slaves or
- variable["WriteTo"] == "" or variable["WriteTo"][0] in slaves):
+ if variable["ReadFrom"] == "" or variable["ReadFrom"][0] in slaves or \
+ variable["WriteTo"] == "" or variable["WriteTo"][0] in slaves:
data.append(variable)
self.ProcessVariablesTable.SetData(data)
self.ProcessVariablesTable.ResetView(self.ProcessVariablesGrid)
self.ProcessVariablesGrid.RefreshButtons()
-
+
def SaveProcessVariables(self):
if self.CurrentNodesFilter is not None:
if len(self.CurrentNodesFilter) > 0:
@@ -900,7 +909,7 @@
else:
self.Controler.SetProcessVariables(self.ProcessVariablesTable.GetData())
self.RefreshBuffer()
-
+
def RefreshStartupCommands(self, position=None, command_idx=None):
if self.CurrentNodesFilter is not None:
col = max(self.StartupCommandsGrid.GetGridCursorCol(), 0)
@@ -909,15 +918,15 @@
self.StartupCommandsTable.ResetView(self.StartupCommandsGrid)
if position is not None and command_idx is not None:
self.SelectStartupCommand(position, command_idx, col)
-
+
def SelectStartupCommand(self, position, command_idx, col):
self.StartupCommandsGrid.SetSelectedCell(
self.StartupCommandsTable.GetCommandIndex(position, command_idx),
col)
-
+
def GetMasterLocation(self):
return self.Controler.GetCurrentLocation()
-
+
def AddStartupCommand(self, position, index, subindex):
col = max(self.StartupCommandsGrid.GetGridCursorCol(), 0)
command = self.StartupCommandsDefaultValue.copy()
@@ -928,7 +937,7 @@
self.RefreshStartupCommands()
self.RefreshBuffer()
self.SelectStartupCommand(position, command_idx, col)
-
+
def OnNodesFilterChanged(self, event):
self.RefreshCurrentNodesFilter()
if self.CurrentNodesFilter is not None:
@@ -936,22 +945,22 @@
self.RefreshStartupCommands()
self.NodesVariables.RefreshView()
event.Skip()
-
+
def OnNodesFilterKeyDown(self, event):
if self.NodesFilterFirstCharacter:
keycode = event.GetKeyCode()
- if keycode not in [wx.WXK_RETURN,
+ if keycode not in [wx.WXK_RETURN,
wx.WXK_NUMPAD_ENTER]:
self.NodesFilterFirstCharacter = False
if keycode not in NAVIGATION_KEYS:
self.NodesFilter.SetValue("")
- if keycode not in [wx.WXK_DELETE,
- wx.WXK_NUMPAD_DELETE,
+ if keycode not in [wx.WXK_DELETE,
+ wx.WXK_NUMPAD_DELETE,
wx.WXK_BACK]:
event.Skip()
else:
event.Skip()
-
+
def OnProcessVariablesGridCellChange(self, event):
row, col = event.GetRow(), event.GetCol()
colname = self.ProcessVariablesTable.GetColLabelValue(col, False)
@@ -969,11 +978,11 @@
wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid)
event.Skip()
else:
- dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
+ dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
dialog.ShowModal()
dialog.Destroy()
event.Veto()
-
+
def OnProcessVariablesGridCellLeftClick(self, event):
row = event.GetRow()
if event.GetCol() == 0:
@@ -983,31 +992,31 @@
data_size = self.Controler.GetSizeOfType(var_type)
number = self.ProcessVariablesTable.GetValueByName(row, "Number")
location = "%%M%s" % data_size + \
- ".".join(map(lambda x:str(x), self.Controler.GetCurrentLocation() + (number,)))
-
+ ".".join(map(str, self.Controler.GetCurrentLocation() + (number,)))
+
data = wx.TextDataObject(str((location, "location", var_type, var_name, "")))
dragSource = wx.DropSource(self.ProcessVariablesGrid)
dragSource.SetData(data)
dragSource.DoDragDrop()
event.Skip()
-
+
def OnProcessVariablesGridKeyDown(self, event):
keycode = event.GetKeyCode()
col = self.ProcessVariablesGrid.GetGridCursorCol()
row = self.ProcessVariablesGrid.GetGridCursorRow()
colname = self.ProcessVariablesTable.GetColLabelValue(col, False)
- if (keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and
- (colname.startswith("Read from") or colname.startswith("Write to"))):
+ if keycode in (wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE) and \
+ (colname.startswith("Read from") or colname.startswith("Write to")):
self.ProcessVariablesTable.SetValue(row, col, "")
self.SaveProcessVariables()
wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid)
else:
event.Skip()
-
+
def OnStartupCommandsGridEditorShow(self, event):
self.CellShown = event.GetRow(), event.GetCol()
event.Skip()
-
+
def OnStartupCommandsGridCellChange(self, event):
row, col = event.GetRow(), event.GetCol()
if self.CellShown == (row, col):
@@ -1029,19 +1038,19 @@
else:
command = self.StartupCommandsTable.GetRow(row)
self.Controler.SetStartupCommandInfos(command)
- if colname in ["Index", "SubIndex"]:
+ if colname in ["Index", "SubIndex"]:
wx.CallAfter(self.RefreshStartupCommands, command["Position"], command["command_idx"])
if message is None:
self.RefreshBuffer()
event.Skip()
else:
- dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
+ dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
dialog.ShowModal()
dialog.Destroy()
event.Veto()
else:
event.Veto()
-
+
def OnResize(self, event):
self.EthercatMasterEditor.GetBestSize()
xstart, ystart = self.EthercatMasterEditor.GetViewStart()
@@ -1050,11 +1059,13 @@
posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT))
posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT))
self.EthercatMasterEditor.Scroll(posx, posy)
- self.EthercatMasterEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
- maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
+ self.EthercatMasterEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
+ maxx / SCROLLBAR_UNIT,
+ maxy / SCROLLBAR_UNIT,
+ posx, posy)
event.Skip()
-
- #def OnButtonClick(self, event):
+
+ # def OnButtonClick(self, event):
# self.MasterState = self.Controler.getMasterState()
# if self.MasterState:
# self.Phase.SetValue(self.MasterState["phase"])
@@ -1067,7 +1078,7 @@
# self.TxByte.SetValue(self.MasterState["TXbyte"])
# self.TxError.SetValue(self.MasterState["TXerror"])
# self.LostFrames.SetValue(self.MasterState["lost"])
-
+
# self.TxFrameRate1.SetValue(self.MasterState["TXframerate1"])
# self.TxFrameRate2.SetValue(self.MasterState["TXframerate2"])
# self.TxFrameRate3.SetValue(self.MasterState["TXframerate3"])
@@ -1080,42 +1091,44 @@
# self.FrameLoss1.SetValue(self.MasterState["frameloss1"])
# self.FrameLoss2.SetValue(self.MasterState["frameloss2"])
# self.FrameLoss3.SetValue(self.MasterState["frameloss3"])
-
+
+
class LibraryEditorSizer(wx.FlexGridSizer):
-
+
def __init__(self, parent, module_library, buttons):
wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=4, vgap=5)
-
+
self.ModuleLibrary = module_library
self.ParentWindow = parent
-
+
self.AddGrowableCol(0)
self.AddGrowableRow(1)
self.AddGrowableRow(3)
-
- ESI_files_label = wx.StaticText(parent,
- label=_("ESI Files:"))
- self.AddWindow(ESI_files_label, border=10,
- flag=wx.TOP|wx.LEFT|wx.RIGHT)
-
+
+ ESI_files_label = wx.StaticText(parent,
+ label=_("ESI Files:"))
+ self.AddWindow(ESI_files_label, border=10,
+ flag=wx.TOP | wx.LEFT | wx.RIGHT)
+
folder_tree_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=0)
folder_tree_sizer.AddGrowableCol(0)
folder_tree_sizer.AddGrowableRow(0)
- self.AddSizer(folder_tree_sizer, border=10,
- flag=wx.GROW|wx.LEFT|wx.RIGHT)
-
+ self.AddSizer(folder_tree_sizer, border=10,
+ flag=wx.GROW | wx.LEFT | wx.RIGHT)
+
self.ESIFiles = FolderTree(parent, self.GetPath(), editable=False)
self.ESIFiles.SetFilter(".xml")
folder_tree_sizer.AddWindow(self.ESIFiles, flag=wx.GROW)
-
+
buttons_sizer = wx.BoxSizer(wx.VERTICAL)
- folder_tree_sizer.AddSizer(buttons_sizer,
- flag=wx.ALIGN_CENTER_VERTICAL)
-
+ folder_tree_sizer.AddSizer(buttons_sizer,
+ flag=wx.ALIGN_CENTER_VERTICAL)
+
for idx, (name, bitmap, help, callback) in enumerate(buttons):
- button = wx.lib.buttons.GenBitmapButton(parent,
- bitmap=GetBitmap(bitmap),
- size=wx.Size(28, 28), style=wx.NO_BORDER)
+ button = wx.lib.buttons.GenBitmapButton(parent,
+ bitmap=GetBitmap(bitmap),
+ size=wx.Size(28, 28),
+ style=wx.NO_BORDER)
button.SetToolTipString(help)
setattr(self, name, button)
if idx > 0:
@@ -1127,78 +1140,78 @@
if callback is not None:
parent.Bind(wx.EVT_BUTTON, callback, button)
buttons_sizer.AddWindow(button, border=10, flag=flag)
-
- modules_label = wx.StaticText(parent,
- label=_("Modules library:"))
- self.AddSizer(modules_label, border=10,
- flag=wx.LEFT|wx.RIGHT)
-
+
+ modules_label = wx.StaticText(parent,
+ label=_("Modules library:"))
+ self.AddSizer(modules_label, border=10,
+ flag=wx.LEFT | wx.RIGHT)
+
self.ModulesGrid = wx.gizmos.TreeListCtrl(parent,
- style=wx.TR_DEFAULT_STYLE |
- wx.TR_ROW_LINES |
- wx.TR_COLUMN_LINES |
- wx.TR_HIDE_ROOT |
- wx.TR_FULL_ROW_HIGHLIGHT)
+ style=wx.TR_DEFAULT_STYLE |
+ wx.TR_ROW_LINES |
+ wx.TR_COLUMN_LINES |
+ wx.TR_HIDE_ROOT |
+ wx.TR_FULL_ROW_HIGHLIGHT)
self.ModulesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN,
- self.OnModulesGridLeftDown)
+ self.OnModulesGridLeftDown)
self.ModulesGrid.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT,
- self.OnModulesGridBeginLabelEdit)
+ self.OnModulesGridBeginLabelEdit)
self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT,
- self.OnModulesGridEndLabelEdit)
- self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION,
- self.OnModulesGridHeaderMotion)
- self.AddWindow(self.ModulesGrid, border=10,
- flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
-
+ self.OnModulesGridEndLabelEdit)
+ self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION,
+ self.OnModulesGridHeaderMotion)
+ self.AddWindow(self.ModulesGrid, border=10,
+ flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
+
for colname, colsize, colalign in zip(
- [_("Name")] + [param_infos["column_label"]
- for param, param_infos in
+ [_("Name")] + [param_infos["column_label"]
+ for _param, param_infos in
self.ModuleLibrary.MODULES_EXTRA_PARAMS],
- [400] + [param_infos["column_size"]
- for param, param_infos in
+ [400] + [param_infos["column_size"]
+ for _param, param_infos in
self.ModuleLibrary.MODULES_EXTRA_PARAMS],
[wx.ALIGN_LEFT] + [wx.ALIGN_RIGHT] * len(self.ModuleLibrary.MODULES_EXTRA_PARAMS)):
self.ModulesGrid.AddColumn(_(colname), colsize, colalign, edit=True)
self.ModulesGrid.SetMainColumn(0)
-
+
self.CurrentSelectedCol = None
self.LastToolTipCol = None
-
+
def GetPath(self):
return self.ModuleLibrary.GetPath()
-
+
def SetControlMinSize(self, size):
self.ESIFiles.SetMinSize(size)
self.ModulesGrid.SetMinSize(size)
-
+
def GetSelectedFilePath(self):
return self.ESIFiles.GetPath()
-
+
def RefreshView(self):
self.ESIFiles.RefreshTree()
self.RefreshModulesGrid()
-
+
def RefreshModulesGrid(self):
root = self.ModulesGrid.GetRootItem()
if not root.IsOk():
root = self.ModulesGrid.AddRoot("Modules")
- self.GenerateModulesGridBranch(root,
- self.ModuleLibrary.GetModulesLibrary(),
- GetVariablesTableColnames())
+ self.GenerateModulesGridBranch(root,
+ self.ModuleLibrary.GetModulesLibrary(),
+ GetVariablesTableColnames())
self.ModulesGrid.Expand(root)
-
+
def GenerateModulesGridBranch(self, root, modules, colnames):
item, root_cookie = self.ModulesGrid.GetFirstChild(root)
-
+
no_more_items = not item.IsOk()
for module in modules:
if no_more_items:
item = self.ModulesGrid.AppendItem(root, "")
self.ModulesGrid.SetItemText(item, module["name"], 0)
if module["infos"] is not None:
- for param_idx, (param, param_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS):
- self.ModulesGrid.SetItemText(item,
- str(module["infos"][param]),
+ for param_idx, (param, _param_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS):
+ self.ModulesGrid.SetItemText(item,
+ str(module["infos"][param]),
param_idx + 1)
else:
self.ModulesGrid.SetItemBackgroundColour(item, wx.LIGHT_GREY)
@@ -1207,7 +1220,7 @@
if not no_more_items:
item, root_cookie = self.ModulesGrid.GetNextChild(root, root_cookie)
no_more_items = not item.IsOk()
-
+
if not no_more_items:
to_delete = []
while item.IsOk():
@@ -1215,46 +1228,49 @@
item, root_cookie = self.ModulesGrid.GetNextChild(root, root_cookie)
for item in to_delete:
self.ModulesGrid.Delete(item)
-
+
def OnImportButton(self, event):
dialog = wx.FileDialog(self.ParentWindow,
- _("Choose an XML file"),
- os.getcwd(), "",
- _("XML files (*.xml)|*.xml|All files|*.*"), wx.OPEN)
-
+ _("Choose an XML file"),
+ os.getcwd(), "",
+ _("XML files (*.xml)|*.xml|All files|*.*"),
+ wx.OPEN)
+
if dialog.ShowModal() == wx.ID_OK:
filepath = dialog.GetPath()
if self.ModuleLibrary.ImportModuleLibrary(filepath):
wx.CallAfter(self.RefreshView)
else:
- message = wx.MessageDialog(self,
- _("No such XML file: %s\n") % filepath,
- _("Error"), wx.OK|wx.ICON_ERROR)
+ message = wx.MessageDialog(self,
+ _("No such XML file: %s\n") % filepath,
+ _("Error"),
+ wx.OK | wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
dialog.Destroy()
-
+
event.Skip()
-
+
def OnDeleteButton(self, event):
filepath = self.GetSelectedFilePath()
if os.path.isfile(filepath):
- folder, filename = os.path.split(filepath)
-
- dialog = wx.MessageDialog(self.ParentWindow,
- _("Do you really want to delete the file '%s'?") % filename,
- _("Delete File"), wx.YES_NO|wx.ICON_QUESTION)
+ _folder, filename = os.path.split(filepath)
+
+ dialog = wx.MessageDialog(self.ParentWindow,
+ _("Do you really want to delete the file '%s'?") % filename,
+ _("Delete File"),
+ wx.YES_NO | wx.ICON_QUESTION)
remove = dialog.ShowModal() == wx.ID_YES
dialog.Destroy()
-
+
if remove:
os.remove(filepath)
self.ModuleLibrary.LoadModules()
wx.CallAfter(self.RefreshView)
event.Skip()
-
+
def OnModulesGridLeftDown(self, event):
- item, flags, col = self.ModulesGrid.HitTest(event.GetPosition())
+ item, _flags, col = self.ModulesGrid.HitTest(event.GetPosition())
if item.IsOk():
entry_infos = self.ModulesGrid.GetItemPyData(item)
if entry_infos is not None and col > 0:
@@ -1293,9 +1309,10 @@
wx.CallAfter(self.RefreshModulesGrid)
event.Skip()
except ValueError:
- message = wx.MessageDialog(self,
- _("Module %s must be an integer!") % stripped_column_label,
- _("Error"), wx.OK|wx.ICON_ERROR)
+ message = wx.MessageDialog(self,
+ _("Module %s must be an integer!") % stripped_column_label,
+ _("Error"),
+ wx.OK | wx.ICON_ERROR)
message.ShowModal()
message.Destroy()
event.Veto()
@@ -1303,91 +1320,100 @@
event.Veto()
else:
event.Veto()
-
+
def OnModulesGridHeaderMotion(self, event):
- item, flags, col = self.ModulesGrid.HitTest(event.GetPosition())
+ _item, _flags, col = self.ModulesGrid.HitTest(event.GetPosition())
if col != self.LastToolTipCol and self.LastToolTipCol is not None:
self.ModulesGrid.GetHeaderWindow().SetToolTip(None)
self.LastToolTipCol = None
if col > 0 and self.LastToolTipCol != col:
self.LastToolTipCol = col
- param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1]
- wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString,
+ _param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1]
+ wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString,
param_infos["description"])
event.Skip()
+
class DatabaseManagementDialog(wx.Dialog):
-
+
def __init__(self, parent, database):
wx.Dialog.__init__(self, parent,
- size=wx.Size(700, 500), title=_('ESI Files Database management'),
- style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
-
+ size=wx.Size(700, 500),
+ title=_('ESI Files Database management'),
+ style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
+
main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
main_sizer.AddGrowableCol(0)
main_sizer.AddGrowableRow(0)
-
- self.DatabaseSizer = LibraryEditorSizer(self, database,
- [("ImportButton", "ImportESI", _("Import file to ESI files database"), None),
- ("DeleteButton", "remove_element", _("Remove file from database"), None)])
+
+ self.DatabaseSizer = LibraryEditorSizer(
+ self, database,
+ [
+ ("ImportButton", "ImportESI", _("Import file to ESI files database"), None),
+ ("DeleteButton", "remove_element", _("Remove file from database"), None)
+ ])
self.DatabaseSizer.SetControlMinSize(wx.Size(0, 0))
main_sizer.AddSizer(self.DatabaseSizer, border=10,
- flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
-
- button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
+ flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
+
+ button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project"))
button_sizer.GetCancelButton().SetLabel(_("Close"))
- main_sizer.AddSizer(button_sizer, border=10,
- flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
-
+ main_sizer.AddSizer(button_sizer, border=10,
+ flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
+
self.SetSizer(main_sizer)
-
+
self.DatabaseSizer.RefreshView()
-
+
def GetValue(self):
return self.DatabaseSizer.GetSelectedFilePath()
+
class LibraryEditor(ConfTreeNodeEditor):
-
+
CONFNODEEDITOR_TABS = [
(_("Modules Library"), "_create_ModuleLibraryEditor")]
-
+
def _create_ModuleLibraryEditor(self, prnt):
self.ModuleLibraryEditor = wx.ScrolledWindow(prnt,
- style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
+ style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
self.ModuleLibraryEditor.Bind(wx.EVT_SIZE, self.OnResize)
-
- self.ModuleLibrarySizer = LibraryEditorSizer(self.ModuleLibraryEditor,
+
+ self.ModuleLibrarySizer = LibraryEditorSizer(
+ self.ModuleLibraryEditor,
self.Controler.GetModulesLibraryInstance(),
- [("ImportButton", "ImportESI", _("Import ESI file"), None),
- ("AddButton", "ImportDatabase", _("Add file from ESI files database"), self.OnAddButton),
- ("DeleteButton", "remove_element", _("Remove file from library"), None)])
+ [
+ ("ImportButton", "ImportESI", _("Import ESI file"), None),
+ ("AddButton", "ImportDatabase", _("Add file from ESI files database"), self.OnAddButton),
+ ("DeleteButton", "remove_element", _("Remove file from library"), None)
+ ])
self.ModuleLibrarySizer.SetControlMinSize(wx.Size(0, 200))
self.ModuleLibraryEditor.SetSizer(self.ModuleLibrarySizer)
-
+
return self.ModuleLibraryEditor
def __init__(self, parent, controler, window):
ConfTreeNodeEditor.__init__(self, parent, controler, window)
-
+
self.RefreshView()
-
+
def RefreshView(self):
ConfTreeNodeEditor.RefreshView(self)
self.ModuleLibrarySizer.RefreshView()
def OnAddButton(self, event):
- dialog = DatabaseManagementDialog(self,
- self.Controler.GetModulesDatabaseInstance())
-
+ dialog = DatabaseManagementDialog(self,
+ self.Controler.GetModulesDatabaseInstance())
+
if dialog.ShowModal() == wx.ID_OK:
module_library = self.Controler.GetModulesLibraryInstance()
module_library.ImportModuleLibrary(dialog.GetValue())
-
+
dialog.Destroy()
-
+
wx.CallAfter(self.ModuleLibrarySizer.RefreshView)
-
+
event.Skip()
def OnResize(self, event):
@@ -1398,7 +1424,8 @@
posx = max(0, min(xstart, (maxx - window_size[0]) / SCROLLBAR_UNIT))
posy = max(0, min(ystart, (maxy - window_size[1]) / SCROLLBAR_UNIT))
self.ModuleLibraryEditor.Scroll(posx, posy)
- self.ModuleLibraryEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
- maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
+ self.ModuleLibraryEditor.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT,
+ maxx / SCROLLBAR_UNIT,
+ maxy / SCROLLBAR_UNIT,
+ posx, posy)
event.Skip()
-
--- a/etherlab/EtherCATManagementEditor.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/EtherCATManagementEditor.py Fri Nov 23 00:33:04 2018 +0100
@@ -1,2207 +1,2160 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# This file is part of Beremiz
-#
-# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab., University of Seoul
-#
-# See COPYING file for copyrights details.
-
-import os
-
-import wx
-import wx.grid
-import wx.gizmos
-import wx.lib.buttons
-
-# --------------------------------------------------------------------
-from controls import CustomGrid, CustomTable
-# --------------------------------------------------------------------
-
-# ------------ for SDO Management --------------------
-import string
-import wx.grid as gridlib
-#-------------------------------------------------------------
-
-# ------------ for register management ---------------
-from xml.dom import minidom
-#-------------------------------------------------------------
-
-# ----------------------------- For Sync Manager Table -----------------------------------
-def GetSyncManagersTableColnames():
- """
- Returns column names of SyncManager Table in Slave state panel.
- """
- _ = lambda x : x
- return ["#", _("Name"), _("Start Address"), _("Default Size"), _("Control Byte"), _("Enable")]
-
-#-------------------------------------------------------------------------------
-# Sync Managers Table
-#-------------------------------------------------------------------------------
-class SyncManagersTable(CustomTable):
- def GetValue(self, row, col):
- if row < self.GetNumberRows():
- if col == 0:
- return row
- return self.data[row].get(self.GetColLabelValue(col, False), "")
-
-#-------------------------------------------------------------------------------
-# EtherCAT Management Treebook
-#-------------------------------------------------------------------------------
-class EtherCATManagementTreebook(wx.Treebook):
- def __init__(self, parent, controler, node_editor):
- """
- Constructor
- @param parent: Reference to the parent wx.ScrolledWindow object
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- @param node_editor: Reference to Beremiz frame
- """
- wx.Treebook.__init__(self, parent, -1, size=wx.DefaultSize, style=wx.BK_DEFAULT)
- self.parent = parent
- self.Controler = controler
- self.NodeEditor = node_editor
-
- self.EtherCATManagementClassObject = {}
-
- # fill EtherCAT Management Treebook
- for pname, pclass, subs in [
- ("Slave State", SlaveStatePanelClass, []),
- ("SDO Management", SDOPanelClass, []),
- ("PDO Monitoring", PDOPanelClass, []),
- ("ESC Management", EEPROMAccessPanel, [
- ("Smart View", SlaveSiiSmartView),
- ("Hex View", HexView)]),
- ("Register Access", RegisterAccessPanel, [])]:
- self.AddPage(pclass(self, self.Controler), pname)
- for spname, spclass in subs:
- self.AddSubPage(spclass(self, self.Controler), spname)
-
- self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGED, self.OnPageChanged)
- self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGING, self.OnPageChanging)
-
- def OnPageChanged(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = event.GetSelection()
- event.Skip()
-
- def OnPageChanging(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = event.GetSelection()
- event.Skip()
-
-#-------------------------------------------------------------------------------
-# For SlaveState Panel
-#-------------------------------------------------------------------------------
-class SlaveStatePanelClass(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent EtherCATManagementTreebook class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Panel.__init__(self, parent, -1, (0, 0), size=wx.DefaultSize, style = wx.SUNKEN_BORDER)
- self.Controler = controler
- self.parent = parent
-
- # initialize SlaveStatePanel UI dictionaries
- self.StaticBoxDic = {}
- self.StaticTextDic = {}
- self.TextCtrlDic = {}
- self.ButtonDic = {}
-
- # iniitalize BoxSizer and FlexGridSizer
- self.SizerDic = {
- "SlaveState_main_sizer" : wx.BoxSizer(wx.VERTICAL),
- "SlaveState_inner_main_sizer" : wx.FlexGridSizer(cols=1, hgap=50, rows=3, vgap=10),
- "SlaveInfosDetailsInnerSizer" : wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10),
- "SyncManagerInnerSizer" : wx.FlexGridSizer(cols=1, hgap=5, rows=1, vgap=5),
- "SlaveState_sizer" : wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10),
- "SlaveState_up_sizer" : wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10),
- "SlaveState_down_sizer" : wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10)}
-
- # initialize StaticBox and StaticBoxSizer
- for box_name, box_label in [
- ("SlaveInfosDetailsBox", "Slave Informations"),
- ("SyncManagerBox", "Sync Manager"),
- ("SlaveStateBox", "Slave State Transition && Monitoring")]:
- self.StaticBoxDic[box_name] = wx.StaticBox(self, label=_(box_label))
- self.SizerDic[box_name] = wx.StaticBoxSizer(self.StaticBoxDic[box_name])
-
- for statictext_name, statictext_label, textctrl_name in [
- ("VendorLabel", "Vendor:", "vendor"),
- ("ProductcodeLabel", "Product code:", "product_code"),
- ("RevisionnumberLabel", "Slave Count:", "revision_number"),
- ("PhysicsLabel", "Physics:", "physics")]:
- self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label))
- self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
- self.SizerDic["SlaveInfosDetailsInnerSizer"].AddMany([self.StaticTextDic[statictext_name],
- self.TextCtrlDic[textctrl_name]])
-
- self.SizerDic["SlaveInfosDetailsBox"].AddSizer(self.SizerDic["SlaveInfosDetailsInnerSizer"])
-
- self.SyncManagersGrid = CustomGrid(self, size=wx.Size(605,155), style=wx.VSCROLL)
-
- self.SizerDic["SyncManagerInnerSizer"].Add(self.SyncManagersGrid)
- self.SizerDic["SyncManagerBox"].Add(self.SizerDic["SyncManagerInnerSizer"])
-
- for button_name, button_id, button_label, button_tooltipstring, event_method, sub_item in [
- ("InitButton", 0, "INIT", "State Transition to \"Init\" State", self.OnButtonClick, []),
- ("PreOPButton", 1, "PREOP", "State Transition to \"PreOP\" State", self.OnButtonClick, [
- ("TargetStateLabel", "Target State:" , "TargetState")]),
- ("SafeOPButton", 2, "SAFEOP", "State Transition to \"SafeOP\" State", self.OnButtonClick, []),
- ("OPButton", 3, "OP", "State Transition to \"OP\" State", self.OnButtonClick, [
- ("CurrentStateLabel", "Current State:", "CurrentState")])]:
- self.ButtonDic[button_name] = wx.Button(self, id=button_id ,label=_(button_label))
- self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method)
- self.ButtonDic[button_name].SetToolTipString(button_tooltipstring)
- self.SizerDic["SlaveState_up_sizer"].Add(self.ButtonDic[button_name])
- for statictext_name, statictext_label, textctrl_name in sub_item :
- self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label))
- self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.DefaultSize, style=wx.TE_READONLY)
- self.SizerDic["SlaveState_up_sizer"].AddMany([self.StaticTextDic[statictext_name],
- self.TextCtrlDic[textctrl_name]])
-
- for button_name, button_label, button_tooltipstring, event_method in [
- ("StartTimerButton", "Start State Monitoring", "Slave State Update Restart", self.StartTimer),
- ("StopTimerButton", "Stop State Monitoring", "Slave State Update Stop", self.CurrentStateThreadStop)]:
- self.ButtonDic[button_name] = wx.Button(self, label=_(button_label))
- self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method)
- self.ButtonDic[button_name].SetToolTipString(button_tooltipstring)
- self.SizerDic["SlaveState_down_sizer"].Add(self.ButtonDic[button_name])
-
- self.SizerDic["SlaveState_sizer"].AddMany([self.SizerDic["SlaveState_up_sizer"],
- self.SizerDic["SlaveState_down_sizer"]])
-
- self.SizerDic["SlaveStateBox"].Add(self.SizerDic["SlaveState_sizer"])
-
- self.SizerDic["SlaveState_inner_main_sizer"].AddMany([
- self.SizerDic["SlaveInfosDetailsBox"], self.SizerDic["SyncManagerBox"],
- self.SizerDic["SlaveStateBox"]])
-
- self.SizerDic["SlaveState_main_sizer"].Add(self.SizerDic["SlaveState_inner_main_sizer"])
-
- self.SetSizer(self.SizerDic["SlaveState_main_sizer"])
-
- # register a timer for periodic exectuion of slave state update (period: 1000 ms)
- self.Bind(wx.EVT_TIMER, self.GetCurrentState)
-
- self.CreateSyncManagerTable()
-
- self.Centre()
-
- def CreateSyncManagerTable(self):
- """
- Create grid for "SyncManager"
- """
- # declare Table object
- self.SyncManagersTable = SyncManagersTable(self, [], GetSyncManagersTableColnames())
- self.SyncManagersGrid.SetTable(self.SyncManagersTable)
- # set grid alignment attr. (CENTER)
- self.SyncManagersGridColAlignements = [wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE,
- wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE]
- # set grid size
- self.SyncManagersGridColSizes = [40, 150, 100, 100, 100, 100]
- self.SyncManagersGrid.SetRowLabelSize(0)
- for col in range(self.SyncManagersTable.GetNumberCols()):
- attr = wx.grid.GridCellAttr()
- attr.SetAlignment(self.SyncManagersGridColAlignements[col], wx.ALIGN_CENTRE)
- self.SyncManagersGrid.SetColAttr(col, attr)
- self.SyncManagersGrid.SetColMinimalWidth(col, self.SyncManagersGridColSizes[col])
- self.SyncManagersGrid.AutoSizeColumn(col, False)
-
- self.RefreshSlaveInfos()
-
- def RefreshSlaveInfos(self):
- """
- Fill data in "Slave Information" and "SyncManager"
- """
- slave_infos = self.Controler.GetSlaveInfos()
- sync_manager_section = ["vendor", "product_code", "revision_number", "physics"]
- if slave_infos is not None:
- # this method is same as "TextCtrl.SetValue"
- for textctrl_name in sync_manager_section:
- self.TextCtrlDic[textctrl_name].SetValue(slave_infos[textctrl_name])
- self.SyncManagersTable.SetData(slave_infos["sync_managers"])
- self.SyncManagersTable.ResetView(self.SyncManagersGrid)
- else:
- for textctrl_name in sync_manager_section:
- self.TextCtrlDic[textctrl_name].SetValue("")
- self.SyncManagersTable.SetData([])
- self.SyncManagersTable.ResetView(self.SyncManagersGrid)
-
- def OnButtonClick(self, event):
- """
- Event handler for slave state transition button click (Init, PreOP, SafeOP, OP button)
- @param event : wx.EVT_BUTTON object
- """
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
- if check_connect_flag :
- state_dic = ["INIT", "PREOP", "SAFEOP", "OP"]
-
- # If target state is one of {INIT, PREOP, SAFEOP}, request slave state transition immediately.
- if event.GetId() < 3 :
- self.Controler.CommonMethod.RequestSlaveState(state_dic[event.GetId()])
- self.TextCtrlDic["TargetState"].SetValue(state_dic[event.GetId()])
-
- # If target state is OP, first check "PLC status".
- # (1) If current PLC status is "Started", then request slave state transition
- # (2) Otherwise, show error message and return
- else :
- status, count = self.Controler.GetCTRoot()._connector.GetPLCstatus()
- if status == "Started" :
- self.Controler.CommonMethod.RequestSlaveState("OP")
- self.TextCtrlDic["TargetState"].SetValue("OP")
- else :
- self.Controler.CommonMethod.CreateErrorDialog("PLC is Not Started")
-
- def GetCurrentState(self, event):
- """
- Timer event handler for periodic slave state monitoring (Default period: 1 sec = 1000 msec).
- @param event : wx.TIMER object
- """
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(True)
- if check_connect_flag:
- returnVal = self.Controler.CommonMethod.GetSlaveStateFromSlave()
- line = returnVal.split("\n")
- try :
- self.SetCurrentState(line[self.Controler.GetSlavePos()])
- except :
- pass
-
- def SetCurrentState(self, line):
- """
- Show current slave state using the executiob result of "ethercat slaves" command.
- @param line : result of "ethercat slaves" command
- """
- state_array = ["INIT", "PREOP", "SAFEOP", "OP"]
- try :
- # parse the execution result of "ethercat slaves" command
- # Result example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)
- token = line.split(" ")
- if token[2] in state_array:
- self.TextCtrlDic["CurrentState"].SetValue(token[2])
- except :
- pass
-
- def StartTimer(self, event):
- """
- Event handler for "Start State Monitoring" button.
- - start slave state monitoring thread
- @param event : wx.EVT_BUTTON object
- """
- self.SlaveStateThread = wx.Timer(self)
- # set timer period (1000 ms)
- self.SlaveStateThread.Start(1000)
-
- def CurrentStateThreadStop(self, event):
- """
- Event handler for "Stop State Monitoring" button.
- - stop slave state monitoring thread
- @param event : wx.EVT_BUTTON object
- """
- try:
- self.SlaveStateThread.Stop()
- except:
- pass
-
-#-------------------------------------------------------------------------------
-# For SDO Management Panel
-#-------------------------------------------------------------------------------
-class SDOPanelClass(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent EtherCATManagementTreebook class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Panel.__init__(self, parent, -1)
-
- self.DatatypeDescription, self.CommunicationObject, self.ManufacturerSpecific, \
- self.ProfileSpecific, self.Reserved, self.AllSDOData = range(6)
-
- self.Controler = controler
-
- self.SDOManagementMainSizer = wx.BoxSizer(wx.VERTICAL)
- self.SDOManagementInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10)
-
- self.SDOUpdate = wx.Button(self, label=_('update'))
- self.SDOUpdate.Bind(wx.EVT_BUTTON, self.SDOInfoUpdate)
-
- self.CallSDONoteBook = SDONoteBook(self, controler=self.Controler)
- self.SDOManagementInnerMainSizer.Add(self.SDOUpdate)
- self.SDOManagementInnerMainSizer.Add(self.CallSDONoteBook, wx.ALL | wx.EXPAND)
-
- self.SDOManagementMainSizer.Add(self.SDOManagementInnerMainSizer)
-
- self.SetSizer(self.SDOManagementMainSizer)
-
- def SDOInfoUpdate(self, event):
- """
- Evenet handler for SDO "update" button.
- - Load SDO data from current slave
- @param event : wx.EVT_BUTTON object
- """
- self.Controler.CommonMethod.SaveSDOData = []
- self.Controler.CommonMethod.ClearSDODataSet()
- self.SDOFlag = False
-
- # Check whether beremiz connected or not.
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
- if check_connect_flag:
- self.SDOs = self.Controler.CommonMethod.GetSlaveSDOFromSlave()
- # SDOFlag is "False", user click "Cancel" button
- self.SDOFlag = self.SDOParser()
-
- if self.SDOFlag :
- self.CallSDONoteBook.CreateNoteBook()
- self.Refresh()
-
- def SDOParser(self):
- """
- Parse SDO data set that obtain "SDOInfoUpdate" Method
- @return True or False
- """
-
- slaveSDO_progress = wx.ProgressDialog("Slave SDO Monitoring", "Now Uploading...",
- maximum = len(self.SDOs.splitlines()), parent=self,
- style = wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME |
- wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME |
- wx.PD_AUTO_HIDE | wx.PD_SMOOTH)
-
- # If keep_going flag is False, SDOParser method is stop and return "False".
- keep_going = True
- count = 0
-
- # SDO data example
- # SDO 0x1000, "Device type"
- # 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474
- for details_line in self.SDOs.splitlines():
- count += 1
- line_token = details_line.split("\"")
- # len(line_token[2]) case : SDO 0x1000, "Device type"
- if len(line_token[2]) == 0:
- title_name = line_token[1]
- # else case : 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474
- else :
- # line_token = ['0x1000:00,r-r-r-,uint32,32 bit,', 'Device type', ',0x00020192, 131474']
- token_head, name, token_tail = line_token
-
- # token_head = ['0x1000:00', 'r-r-r-', 'uint32', '32 bit', '']
- token_head = token_head.split(",")
- ful_idx, access, type, size, empty = token_head
- # ful_idx.split(":") = ['0x1000', '00']
- idx, sub_idx = ful_idx.split(":")
-
- # token_tail = ['', '0x00020192', '131474']
- token_tail = token_tail.split(",")
- try :
- empty, hex_val, dec_val = token_tail
-
- # SDO data is not return "dec value"
- # line example :
- # 0x1702:01,rwr-r-,uint32,32 bit," 1st mapping", ----
- except :
- empty, hex_val = token_tail
-
- name_after_check = self.StringTest(name)
-
- # convert hex type
- sub_idx = "0x" + sub_idx
-
- if type == "octet_string":
- hex_val = ' ---- '
-
- # SResult of SlaveSDO data parsing. (data type : dictionary)
- self.Data = {'idx':idx.strip(), 'subIdx':sub_idx.strip(), 'access':access.strip(),
- 'type':type.strip(), 'size':size.strip(), 'name':name_after_check.strip("\""),
- 'value':hex_val.strip(), "category":title_name.strip("\"")}
-
- category_divide_value = [0x1000, 0x2000, 0x6000, 0xa000, 0xffff]
-
- for count in range(len(category_divide_value)) :
- if int(idx, 0) < category_divide_value[count]:
- self.Controler.CommonMethod.SaveSDOData[count].append(self.Data)
- break
-
- self.Controler.CommonMethod.SaveSDOData[self.AllSDOData].append(self.Data)
-
- if count >= len(self.SDOs.splitlines()) / 2:
- (keep_going, skip) = slaveSDO_progress.Update(count, "Please waiting a moment!!")
- else:
- (keep_going, skip) = slaveSDO_progress.Update(count)
-
- # If user click "Cancel" loop suspend immediately
- if (keep_going == False):
- break
-
- slaveSDO_progress.Destroy()
- return keep_going
-
- def StringTest(self, check_string):
- """
- Test value 'name' is alphanumeric
- @param check_string : input data for check
- @return result : output data after check
- """
- # string.printable is print this result
- #'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- #!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c
- allow_range = string.printable
- result = check_string
- for i in range(0, len(check_string)):
- # string.isalnum() is check whether string is alphanumeric or not
- if check_string[len(check_string)-1-i:len(check_string)-i] in allow_range :
- result = check_string[:len(check_string) - i]
- break
- return result
-
-
-#-------------------------------------------------------------------------------
-# For SDO Notebook (divide category)
-#-------------------------------------------------------------------------------
-class SDONoteBook(wx.Notebook):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent SDOPanelClass class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Notebook.__init__(self, parent, id = -1, size=(850,500))
- self.Controler = controler
- self.parent = parent
-
- self.CreateNoteBook()
-
- self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGED, self.OnPageChanged)
- self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGING, self.OnPageChanging)
-
- def CreateNoteBook(self):
- """
- Create each NoteBook page, divided SDO index
- According to EtherCAT Communication(03/2011), 158p
- """
- self.Data = []
- count = 1
-
- page_texts = [("all", self.parent.AllSDOData),
- ("0x0000 - 0x0ff", self.parent.DatatypeDescription),
- ("0x1000 - 0x1fff", self.parent.CommunicationObject),
- ("0x2000 - 0x5fff", self.parent.ManufacturerSpecific),
- ("0x6000 - 0x9fff", self.parent.ProfileSpecific),
- ("0xa000 - 0xffff", self.parent.Reserved)]
-
- page_tooltip_string = ["SDO Index 0x0000 - 0x0fff : Data Type Description",
- "SDO Index 0x1000 - 0x1fff : Communication object",
- "SDO Index 0x2000 - 0x5fff : Manufacturer specific",
- "SDO Index 0x6000 - 0x9fff : Profile specific",
- "SDO Index 0xa000 - 0xffff : Reserved",
- "All SDO Object"]
-
- self.DeleteAllPages()
-
- for txt, count in page_texts:
- self.Data = self.Controler.CommonMethod.SaveSDOData[count]
- self.Win = SlaveSDOTable(self, self.Data)
- self.AddPage(self.Win, txt)
-
- def OnPageChanged(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
- def OnPageChanging(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
-#-------------------------------------------------------------------------------
-# For SDO Grid (fill index, subindex, etc...)
-#-------------------------------------------------------------------------------
-class SlaveSDOTable(wx.grid.Grid):
- def __init__(self, parent, data):
- """
- Constructor
- @param parent: Reference to the parent SDOPanelClass class
- @param data: SDO data after parsing "SDOParser" method
- """
- wx.grid.Grid.__init__(self, parent, -1, size=(830,490),
- style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL)
-
- self.Controler = parent.Controler
- self.parent = parent
- self.SDOFlag = True
- if data is None :
- self.SDOs = []
- else :
- self.SDOs = data
-
- self.CreateGrid(len(self.SDOs), 8)
- SDOCellSize = [(0, 65), (1, 65), (2, 50), (3, 55),
- (4, 40), (5, 200), (6, 250), (7, 85)]
-
- for (index, size) in SDOCellSize:
- self.SetColSize(index, size)
-
- self.SetRowLabelSize(0)
-
- SDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Access"),
- (3, "Type"), (4, "Size"), (5, "Category"),
- (6, "Name"), (7, "Value")]
-
- for (index, label) in SDOTableLabel:
- self.SetColLabelValue(index, label)
- self.SetColLabelAlignment(index, wx.ALIGN_CENTRE)
-
- attr = wx.grid.GridCellAttr()
-
- # for SDO download
- self.Bind(gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.SDOModifyDialog)
-
- for i in range(7):
- self.SetColAttr(i,attr)
-
- self.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)
-
- self.SetTableValue()
-
- def SetTableValue(self):
- """
- Cell is filled by new parsing data
- """
- sdo_list = ['idx', 'subIdx', 'access', 'type', 'size', 'category', 'name', 'value']
- for row_idx in range(len(self.SDOs)):
- for col_idx in range(len(self.SDOs[row_idx])):
- self.SetCellValue(row_idx, col_idx, self.SDOs[row_idx][sdo_list[col_idx]])
- self.SetReadOnly(row_idx, col_idx, True)
- if col_idx < 5 :
- self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
-
- def CheckSDODataAccess(self, row):
- """
- CheckSDODataAccess method is checking that access data has "w"
- Access field consist 6 char, if mean
- rw rw rw
- (preop) (safeop) (op)
- Example Access field : rwrwrw, rwrw--
- @param row : Selected cell by user
- @return Write_flag : If data has "w", flag is true
- """
- write_flag = False
- check = self.SDOs[row]['access']
- if check[1:2] == 'w' :
- self.Controler.CommonMethod.Check_PREOP = True
- write_flag = True
- if check[3:4] == 'w' :
- self.Controler.CommonMethod.Check_SAFEOP = True
- write_flag = True
- if check[5:] =='w' :
- self.Controler.CommonMethod.Check_OP = True
- write_flag = True
-
- return write_flag
-
- def DecideSDODownload(self, state):
- """
- compare current state and "access" field,
- result notify SDOModifyDialog method
- @param state : current slave state
- @return True or False
- """
- # Example of 'state' parameter : "0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)"
- state = state[self.Controler.GetSlavePos()].split(" ")[2]
- if state == "PREOP" and self.Controler.CommonMethod.Check_PREOP :
- return True
- elif state == "SAFEOP" and self.Controler.CommonMethod.Check_SAFEOP :
- return True
- elif state == "OP" and self.Controler.CommonMethod.Check_OP :
- return True
-
- return False
-
- def ClearStateFlag(self):
- """
- Initialize StateFlag
- StateFlag is notice SDOData access each slave state
- """
- self.Controler.CommonMethod.Check_PREOP = False
- self.Controler.CommonMethod.Check_SAFEOP = False
- self.Controler.CommonMethod.Check_OP = False
-
- def SDOModifyDialog (self, event):
- """
- Create dialog for SDO value modify
- if user enter data, perform command "ethercat download"
- @param event : gridlib.EVT_GRID_CELL_LEFT_DCLICK object
- """
- self.ClearStateFlag()
-
- # CheckSDODataAccess is checking that OD(Object Dictionary) has "w"
- if event.GetCol() == 7 and self.CheckSDODataAccess(event.GetRow()) :
- dlg = wx.TextEntryDialog (self, "Enter hex or dec value (if enter dec value, it automatically conversed hex value)",
- "SDOModifyDialog", style = wx.OK | wx.CANCEL)
-
- start_value = self.GetCellValue(event.GetRow(), event.GetCol())
- dlg.SetValue(start_value)
-
- if dlg.ShowModal() == wx.ID_OK:
- try :
- int(dlg.GetValue(), 0)
- # check "Access" field
- if self.DecideSDODownload(self.Controler.CommonMethod.SlaveState[self.Controler.GetSlavePos()]) :
- # Request "SDODownload"
- self.Controler.CommonMethod.SDODownload(self.SDOs[event.GetRow()]['type'], self.SDOs[event.GetRow()]['idx'],
- self.SDOs[event.GetRow()]['subIdx'], dlg.GetValue())
- self.SetCellValue(event.GetRow(), event.GetCol(), hex(int(dlg.GetValue(), 0)))
- else :
- self.Controler.CommonMethod.CreateErrorDialog('You cannot SDO download this state')
- # Error occured process of "int(variable)"
- # User input is not hex, dec value
- except ValueError:
- self.Controler.CommonMethod.CreateErrorDialog('You can input only hex, dec value')
-
-
-#-------------------------------------------------------------------------------
-# For PDO Monitoring Panel
-# PDO Class UI : Panel -> Choicebook (RxPDO, TxPDO) ->
-# Notebook (PDO Index) -> Grid (PDO entry)
-#-------------------------------------------------------------------------------
-class PDOPanelClass(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent EtherCATManagementTreebook class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Panel.__init__(self, parent, -1)
- self.Controler = controler
-
- self.PDOMonitoringEditorMainSizer = wx.BoxSizer(wx.VERTICAL)
- self.PDOMonitoringEditorInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10)
-
- self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler)
- self.PDOMonitoringEditorInnerMainSizer.Add(self.CallPDOChoicebook, wx.ALL)
-
- self.PDOMonitoringEditorMainSizer.Add(self.PDOMonitoringEditorInnerMainSizer)
-
- self.SetSizer(self.PDOMonitoringEditorMainSizer)
-
- def PDOInfoUpdate(self):
- """
- Call RequestPDOInfo method and create Choicebook
- """
- self.Controler.CommonMethod.RequestPDOInfo()
- self.CallPDOChoicebook.Destroy()
- self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler)
- self.Refresh()
-
-
-#-------------------------------------------------------------------------------
-# For PDO Choicebook (divide Tx, Rx PDO)
-#-------------------------------------------------------------------------------
-class PDOChoicebook(wx.Choicebook):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent PDOPanelClass class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Choicebook.__init__(self, parent, id=-1, size=(500, 500), style=wx.CHB_DEFAULT)
- self.Controler = controler
-
- RxWin = PDONoteBook(self, controler=self.Controler, name="Rx")
- TxWin = PDONoteBook(self, controler=self.Controler, name="Tx")
- self.AddPage(RxWin, "RxPDO")
- self.AddPage(TxWin, "TxPDO")
-
- self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGED, self.OnPageChanged)
- self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGING, self.OnPageChanging)
-
- def OnPageChanged(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
- def OnPageChanging(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
-
-#-------------------------------------------------------------------------------
-# For PDO Notebook (divide PDO index)
-#-------------------------------------------------------------------------------
-class PDONoteBook(wx.Notebook):
- def __init__(self, parent, name, controler):
- """
- Constructor
- @param parent: Reference to the parent PDOChoicebook class
- @param name: identifier whether RxPDO or TxPDO
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Notebook.__init__(self, parent, id=-1, size=(640, 400))
- self.Controler = controler
-
- count = 0
- page_texts = []
-
- self.Controler.CommonMethod.RequestPDOInfo()
-
- if name == "Tx" :
- # obtain pdo_info and pdo_entry
- # pdo_info include (PDO index, name, number of entry)
- pdo_info = self.Controler.CommonMethod.GetTxPDOCategory()
- pdo_entry = self.Controler.CommonMethod.GetTxPDOInfo()
- for tmp in pdo_info :
- title = str(hex(tmp['pdo_index']))
- page_texts.append(title)
- # RX PDO case
- else :
- pdo_info = self.Controler.CommonMethod.GetRxPDOCategory()
- pdo_entry = self.Controler.CommonMethod.GetRxPDOInfo()
- for tmp in pdo_info :
- title = str(hex(tmp['pdo_index']))
- page_texts.append(title)
-
- # Add page depending on the number of pdo_info
- for txt in page_texts:
- win = PDOEntryTable(self, pdo_info, pdo_entry, count)
- self.AddPage(win, txt)
- count += 1
-
- self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGED, self.OnPageChanged)
- self.Bind(wx.EVT_CHOICEBOOK_PAGE_CHANGING, self.OnPageChanging)
-
- def OnPageChanged(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
- def OnPageChanging(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
-
-#-------------------------------------------------------------------------------
-# For PDO Grid (fill entry index, subindex etc...)
-#-------------------------------------------------------------------------------
-class PDOEntryTable(wx.grid.Grid):
- def __init__(self, parent, info, entry, count):
- """
- Constructor
- @param parent: Reference to the parent PDONoteBook class
- @param info : data structure including entry index, sub index, name, length, type
- @param entry : data structure including index, name, entry number
- @param count : page number
- """
- wx.grid.Grid.__init__(self, parent, -1, size=(500, 400), pos=wx.Point(0,0),
- style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL)
-
- self.Controler = parent.Controler
-
- self.PDOInfo = info
- self.PDOEntry = entry
- self.Count = count
-
- self.CreateGrid(self.PDOInfo[self.Count]['number_of_entry'], 5)
- self.SetColLabelSize(25)
- self.SetRowLabelSize(0)
-
- PDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Length"),
- (3, "Type"), (4, "Name")]
-
- for (index, label) in PDOTableLabel:
- self.SetColLabelValue(index, label)
-
- PDOCellSize = [(0, 45), (1, 65), (2, 55), (3, 40), (4, 300)]
-
- for (index, size) in PDOCellSize:
- self.SetColSize(index, size)
- self.SetColLabelAlignment(index, wx.ALIGN_LEFT)
-
- attr = wx.grid.GridCellAttr()
-
- for i in range(5):
- self.SetColAttr(i, attr)
-
- self.SetTableValue()
-
- def SetTableValue(self):
- """
- Cell is filled by new parsing data in XML
- """
- list_index = 0
- # number of entry
- for i in range(self.Count + 1) :
- list_index += self.PDOInfo[i]['number_of_entry']
-
- start_value = list_index - self.PDOInfo[self.Count]['number_of_entry']
-
- pdo_list = ['entry_index', 'subindex', 'bitlen', 'type', 'name']
- for row_idx in range(self.PDOInfo[self.Count]['number_of_entry']):
- for col_idx in range(len(self.PDOEntry[row_idx])):
- # entry index is converted hex value.
- if col_idx == 0 :
- self.SetCellValue(row_idx, col_idx, hex(self.PDOEntry[start_value][pdo_list[col_idx]]))
- else :
- self.SetCellValue(row_idx, col_idx, str(self.PDOEntry[start_value][pdo_list[col_idx]]))
- if col_idx != 4 :
- self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
- else :
- self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_LEFT, wx.ALIGN_CENTRE)
- self.SetReadOnly(row_idx, col_idx, True)
- self.SetRowSize(row_idx, 25)
- start_value += 1
-
-
-#-------------------------------------------------------------------------------
-# For EEPROM Access Main Panel
-# (This class explain EEPROM Access)
-#-------------------------------------------------------------------------------
-class EEPROMAccessPanel(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent EtherCATManagementTreebook class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Panel.__init__(self, parent, -1)
- sizer = wx.FlexGridSizer(cols=1, hgap=20,rows=3, vgap=20)
-
- line = wx.StaticText(self, -1, "\n EEPROM Access is composed to SmartView and HexView. \
- \n\n - SmartView shows Config Data, Device Identity, Mailbox settings, etc. \
- \n\n - HexView shows EEPROM's contents.")
-
- sizer.Add(line)
-
- self.SetSizer(sizer)
-
-
-#-------------------------------------------------------------------------------
-# For Smart View Panel
-#-------------------------------------------------------------------------------
-class SlaveSiiSmartView(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent EtherCATManagementTreebook class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Panel.__init__(self, parent, -1)
- self.parent = parent
- self.Controler = controler
-
- self.PDIType = {0 :['none', '00000000'],
- 4 :['Digital I/O', '00000100'],
- 5 :['SPI Slave', '00000101'],
- 7 :['EtherCAT Bridge (port3)', '00000111'],
- 8 :['uC async. 16bit', '00001000'],
- 9 :['uC async. 8bit', '00001001'],
- 10 :['uC sync. 16bit', '00001010'],
- 11 :['uC sync. 8bit', '00001011'],
- 16 :['32 Digtal Input and 0 Digital Output', '00010000'],
- 17 :['24 Digtal Input and 8 Digital Output', '00010001'],
- 18 :['16 Digtal Input and 16 Digital Output','00010010'],
- 19 :['8 Digtal Input and 24 Digital Output', '00010011'],
- 20 :['0 Digtal Input and 32 Digital Output', '00010100'],
- 128:['On-chip bus', '11111111']
- }
-
- sizer = wx.FlexGridSizer(cols=1, hgap=5, rows=2, vgap=5)
- button_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=5)
-
- for button, mapping_method in [("Write EEPROM", self.WriteToEEPROM),
- ("Read EEPROM", self.ReadFromEEPROM)]:
- btn = wx.Button(self, -1, button, size=(150, 40))
- button_sizer.Add(btn, border=10, flag=wx.ALL)
- btn.Bind(wx.EVT_BUTTON, mapping_method)
-
- self.TreeListCtrl = SmartViewTreeListCtrl(self, self.Controler)
-
- sizer.Add(button_sizer, border=10, flag=wx.ALL)
- sizer.Add(self.TreeListCtrl, border=10, flag=wx.ALL)
- self.SetSizer(sizer)
-
- self.Create_SmartView()
-
- def Create_SmartView(self):
- """
- SmartView shows information based on XML as initial value.
- """
- self.Controler.CommonMethod.SmartViewInfosFromXML = self.Controler.CommonMethod.GetSmartViewInfos()
- self.SetXMLData()
-
- def WriteToEEPROM(self, event):
- """
- Open binary file (user select) and write the selected binary data to EEPROM
- @param event : wx.EVT_BUTTON object
- """
- # Check whether beremiz connected or not, and whether status is "Started" or not.
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
- if check_connect_flag:
- status, count = self.Controler.GetCTRoot()._connector.GetPLCstatus()
- if status is not "Started":
- dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "", _("bin files (*.bin)|*.bin"), wx.OPEN)
-
- if dialog.ShowModal() == wx.ID_OK:
- filepath = dialog.GetPath()
- try:
- binfile = open(filepath,"rb")
- self.SiiBinary = binfile.read()
- dialog.Destroy()
-
- self.Controler.CommonMethod.SiiWrite(self.SiiBinary)
- # refresh data structure kept by master
- self.Controler.CommonMethod.Rescan()
- # save binary data as inner global data of beremiz
- # for fast loading when slave plugin node is reopened.
- self.Controler.CommonMethod.SiiData = self.SiiBinary
- self.SetEEPROMData()
- except:
- self.Controler.CommonMethod.CreateErrorDialog('The file does not exist!')
- dialog.Destroy()
-
- def ReadFromEEPROM(self, event):
- """
- Refresh displayed data based on slave EEPROM and save binary file through dialog
- @param event : wx.EVT_BUTTON object
- """
- # Check whether beremiz connected or not.
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
- if check_connect_flag:
- self.SiiBinary = self.Controler.CommonMethod.LoadData()
- self.SetEEPROMData()
- dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(),
- "slave0.bin", _("bin files (*.bin)|*.bin|All files|*.*"),
- wx.SAVE|wx.OVERWRITE_PROMPT)
-
- if dialog.ShowModal() == wx.ID_OK:
- filepath = dialog.GetPath()
- binfile = open(filepath,"wb")
- binfile.write(self.SiiBinary)
- binfile.close()
-
- dialog.Destroy()
-
- def SetXMLData(self):
- """
- Set data based on XML initially
- """
- # Config Data: EEPROM Size, PDI Type, Device Emulation
- # Find PDI Type in pdiType dictionary
- cnt_pdi_type = self.Controler.CommonMethod.SmartViewInfosFromXML["pdi_type"]
- for i in self.PDIType.keys():
- if cnt_pdi_type == i:
- cnt_pdi_type = self.PDIType[i][0]
- break
- # Set Config Data
- for treelist, data in [("EEPROM Size (Bytes)",
- str(self.Controler.CommonMethod.SmartViewInfosFromXML["eeprom_size"])),
- ("PDI Type",
- cnt_pdi_type),
- ("Device Emulation",
- self.Controler.CommonMethod.SmartViewInfosFromXML["device_emulation"])]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1)
-
- # Device Identity: Vendor ID, Product Code, Revision No., Serial No.
- # Set Device Identity
- for treelist, data in [("Vendor ID", self.Controler.CommonMethod.SmartViewInfosFromXML["vendor_id"]),
- ("Product Code", self.Controler.CommonMethod.SmartViewInfosFromXML["product_code"]),
- ("Revision No.", self.Controler.CommonMethod.SmartViewInfosFromXML["revision_no"]),
- ("Serial No.", self.Controler.CommonMethod.SmartViewInfosFromXML["serial_no"])]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1)
-
- # Mailbox: Supported Mailbox, Bootstrap Configuration, Standard Configuration
- # Set Mailbox
- for treelist, data in [("Supported Mailbox", self.Controler.CommonMethod.SmartViewInfosFromXML["supported_mailbox"]),
- ("Bootstrap Configuration", ""),
- ("Standard Configuration", "")]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1)
- # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size
- for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outstart"]),
- ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outlength"]),
- ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_instart"]),
- ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_inlength"])]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1)
- # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size
- for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outstart"]),
- ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outlength"]),
- ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_instart"]),
- ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_inlength"])]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1)
-
- def SetEEPROMData(self):
- """
- Set data based on slave EEPROM.
- """
- # sii_dict = { Parameter : (WordAddress, WordSize) }
- sii_dict= { 'PDIControl' : ( '0', 1),
- 'PDIConfiguration' : ( '1', 1),
- 'PulseLengthOfSYNCSignals' : ( '2', 1),
- 'ExtendedPDIConfiguration' : ( '3', 1),
- 'ConfiguredStationAlias' : ( '4', 1),
- 'Checksum' : ( '7', 1),
- 'VendorID' : ( '8', 2),
- 'ProductCode' : ( 'a', 2),
- 'RevisionNumber' : ( 'c', 2),
- 'SerialNumber' : ( 'e', 2),
- 'Execution Delay' : ('10', 1),
- 'Port0Delay' : ('11', 1),
- 'Port1Delay' : ('12', 1),
- 'BootstrapReceiveMailboxOffset' : ('14', 1),
- 'BootstrapReceiveMailboxSize' : ('15', 1),
- 'BootstrapSendMailboxOffset' : ('16', 1),
- 'BootstrapSendMailboxSize' : ('17', 1),
- 'StandardReceiveMailboxOffset' : ('18', 1),
- 'StandardReceiveMailboxSize' : ('19', 1),
- 'StandardSendMailboxOffset' : ('1a', 1),
- 'StandardSendMailboxSize' : ('1b', 1),
- 'MailboxProtocol' : ('1c', 1),
- 'Size' : ('3e', 1),
- 'Version' : ('3f', 1),
- 'First Category Type/Vendor Specific' : ('40', 1),
- 'Following Category Word Size' : ('41', 1),
- 'Category Data' : ('42', 1),
- }
-
- # Config Data: EEPROM Size, PDI Type, Device Emulation
- # EEPROM's data in address '0x003f' is Size of EEPROM in KBit-1
- eeprom_size = str((int(self.GetWordAddressData( sii_dict.get('Size'),10 ))+1)/8*1024)
- # Find PDI Type in pdiType dictionary
- cnt_pdi_type = int(self.GetWordAddressData( sii_dict.get('PDIControl'),16 ).split('x')[1][2:4], 16)
- for i in self.PDIType.keys():
- if cnt_pdi_type == i:
- cnt_pdi_type = self.PDIType[i][0]
- break
- # Get Device Emulation
- device_emulation = str(bool(int("{:0>16b}".format(int(self.GetWordAddressData( sii_dict.get('PDIControl'),16 ), 16))[7])))
- # Set Config Data
- for treelist, data in [("EEPROM Size (Bytes)", eeprom_size),
- ("PDI Type", cnt_pdi_type),
- ("Device Emulation", device_emulation)]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1)
-
- # Device Identity: Vendor ID, Product Code, Revision No., Serial No.
- # Set Device Identity
- for treelist, data in [("Vendor ID", self.GetWordAddressData( sii_dict.get('VendorID'),16 )),
- ("Product Code", self.GetWordAddressData( sii_dict.get('ProductCode'),16 )),
- ("Revision No.", self.GetWordAddressData( sii_dict.get('RevisionNumber'),16 )),
- ("Serial No.", self.GetWordAddressData( sii_dict.get('SerialNumber'),16 ))]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1)
-
- # Mailbox
- # EEORPOM's word address '1c' indicates supported mailbox protocol.
- # each value of mailbox protocol :
- # VoE(0x0020), SoE(0x0010), FoE(0x0008), CoE(0x0004), EoE(0x0002), AoE(0x0001)
- supported_mailbox = ""
- mailbox_protocol=["VoE, ", "SoE, ", "FoE, ", "CoE, ", "EoE, ", "AoE, "]
- mailbox_data = "{:0>8b}".format(int(self.GetWordAddressData( sii_dict.get('MailboxProtocol'),16 ), 16))
- for protocol in range(6):
- if mailbox_data[protocol+2] == '1':
- supported_mailbox += mailbox_protocol[protocol]
- supported_mailbox = supported_mailbox.strip(", ")
- # Set Mailbox
- for treelist, data in [("Supported Mailbox", supported_mailbox),
- ("Bootstrap Configuration", ""),
- ("Standard Configuration", "")]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1)
- # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size
- for treelist, data in [("Receive Offset", self.GetWordAddressData( sii_dict.get('BootstrapReceiveMailboxOffset'),10 )),
- ("Receive Size", self.GetWordAddressData( sii_dict.get('BootstrapReceiveMailboxSize'),10 )),
- ("Send Offset", self.GetWordAddressData( sii_dict.get('BootstrapSendMailboxOffset'),10 )),
- ("Send Size", self.GetWordAddressData( sii_dict.get('BootstrapSendMailboxSize'),10 ))]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1)
- # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size
- for treelist, data in [("Receive Offset", self.GetWordAddressData( sii_dict.get('StandardReceiveMailboxOffset'),10 )),
- ("Receive Size", self.GetWordAddressData( sii_dict.get('StandardReceiveMailboxSize'),10 )),
- ("Send Offset", self.GetWordAddressData( sii_dict.get('StandardSendMailboxOffset'),10 )),
- ("Send Size", self.GetWordAddressData( sii_dict.get('StandardSendMailboxSize'),10 ))]:
- self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1)
-
- def MakeStaticBoxSizer(self, boxlabel):
- """
- Make StaticBoxSizer
- @param boxlabel : label of box sizer
- @return sizer : the StaticBoxSizer labeled 'boxlabel'
- """
- box = wx.StaticBox(self, -1, boxlabel)
- sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-
- return sizer
-
- def GetWordAddressData(self, dict_tuple, format):
- """
- This method converts word address data from EEPROM binary.
- @param dict_tuple : element of 'sii_dict' dictionary in SetEEPROMData()
- @param format : format of data. It can be 16(hex), 10(decimal) and 2(binary).
- @return formatted value
- """
- offset = int(str(dict_tuple[0]), 16) * 2
- length = int(str(dict_tuple[1]), 16) * 2
- list = []
- data = ''
- for index in range(length):
- hexdata = hex(ord(self.SiiBinary[offset + index]))[2:]
- list.append(hexdata.zfill(2))
-
- list.reverse()
- data = list[0:length]
-
- if format == 16:
- return '0x' + ''.join(data)
- elif format == 10:
- return str(int(str(''.join(data)), 16))
- elif format == 2:
- ''.join(data)
-
-
-#-------------------------------------------------------------------------------
-# For Smart View TreeListCtrl
-#-------------------------------------------------------------------------------
-class SmartViewTreeListCtrl(wx.Panel):
- def __init__(self, parent, Controler):
- """
- Constructor
- @param parent: Reference to the parent SlaveSiiSmartView class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
-
- wx.Panel.__init__(self, parent, -1, size=(350, 500))
-
- self.Tree = wx.gizmos.TreeListCtrl(self, -1, size=(350, 500),
- style=wx.TR_DEFAULT_STYLE
- |wx.TR_FULL_ROW_HIGHLIGHT
- |wx.TR_HIDE_ROOT
- |wx.TR_COLUMN_LINES
- |wx.TR_ROW_LINES)
-
- self.Tree.AddColumn("Description", width=200)
- self.Tree.AddColumn("Value", width=140)
- self.Tree.SetMainColumn(0)
-
- self.Root = self.Tree.AddRoot("")
-
- # Add item
- # Level 1 nodes
- self.Level1Nodes = {}
- for lv1 in ["Config Data", "Device Identity", "Mailbox"]:
- self.Level1Nodes[lv1] = self.Tree.AppendItem(self.Root, lv1)
-
- # Level 2 nodes
- # Config Data
- self.ConfigData = {}
- for lv2 in ["EEPROM Size (Bytes)", "PDI Type", "Device Emulation"]:
- self.ConfigData[lv2] = self.Tree.AppendItem(self.Level1Nodes["Config Data"], lv2)
- # Device Identity
- self.DeviceIdentity = {}
- for lv2 in ["Vendor ID", "Product Code", "Revision No.", "Serial No."]:
- self.DeviceIdentity[lv2] = self.Tree.AppendItem(self.Level1Nodes["Device Identity"], lv2)
- # Mailbox
- self.Mailbox = {}
- for lv2 in ["Supported Mailbox", "Bootstrap Configuration", "Standard Configuration"]:
- self.Mailbox[lv2] = self.Tree.AppendItem(self.Level1Nodes["Mailbox"], lv2)
-
- # Level 3 nodes
- # Children of Bootstrap Configuration
- self.BootstrapConfig = {}
- for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]:
- self.BootstrapConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Bootstrap Configuration"], lv3)
- # Children of Standard Configuration
- self.StandardConfig = {}
- for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]:
- self.StandardConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Standard Configuration"], lv3)
-
- # Expand Tree
- for tree in [self.Root,
- self.Level1Nodes["Config Data"],
- self.Level1Nodes["Device Identity"],
- self.Level1Nodes["Mailbox"],
- self.Mailbox["Bootstrap Configuration"],
- self.Mailbox["Standard Configuration"]]:
- self.Tree.Expand(tree)
-
-
-#-------------------------------------------------------------------------------
-# For Hex View Panel
-# shows EEPROM binary as hex data and characters.
-#-------------------------------------------------------------------------------
-class HexView(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: Reference to the parent EtherCATManagementTreebook class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Panel.__init__(self, parent, -1)
- self.parent = parent
- self.Controler = controler
-
- self.HexRow = 8
- self.HexCol = 17
-
- self.HexViewSizer = {"view" : wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10),
- "siiButton" : wx.BoxSizer()}
- self.HexViewButton = {}
-
- for key, evt_handler in [("Sii Upload", self.OnButtonSiiUpload),
- ("Sii Download", self.OnButtonSiiDownload),
- ("Write to File", self.OnButtonWriteToBinFile),
- ("Read from File", self.OnButtonReadFromBinFile),
- ("XML to EEPROM Image", self.OnButtonXmlToEEPROMImg)]:
- self.HexViewButton[key] = wx.Button(self, -1, key)
- self.HexViewButton[key].Bind(wx.EVT_BUTTON, evt_handler)
- self.HexViewSizer["siiButton"].Add(self.HexViewButton[key])
-
- self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom()
- self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
- self.SiiGrid = SiiGridTable(self, self.Controler, self.HexRow, self.HexCol)
- self.HexViewSizer["view"].AddMany([self.HexViewSizer["siiButton"], self.SiiGrid])
- self.SiiGrid.CreateGrid(self.HexRow, self.HexCol)
- self.SetSizer(self.HexViewSizer["view"])
- self.HexViewSizer["view"].FitInside(self.parent.parent)
- self.parent.parent.FitInside()
- self.SiiGrid.SetValue(self.HexCode)
- self.SiiGrid.Update()
-
- def UpdateSiiGridTable(self, row, col):
- """
- Destroy existing grid and recreate
- @param row, col : Hex View grid size
- """
- self.HexViewSizer["view"].Detach(self.SiiGrid)
- self.SiiGrid.Destroy()
- self.SiiGrid = SiiGridTable(self, self.Controler, row, col)
- self.HexViewSizer["view"].Add(self.SiiGrid)
- self.SiiGrid.CreateGrid(row, col)
- self.SetSizer(self.HexViewSizer["view"])
- self.HexViewSizer["view"].FitInside(self.parent.parent)
- self.parent.parent.FitInside()
-
- def OnButtonSiiUpload(self, event):
- """
- Load EEPROM data from slave and refresh Hex View grid
- Binded to 'Sii Upload' button.
- @param event : wx.EVT_BUTTON object
- """
- # Check whether beremiz connected or not.
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
- if check_connect_flag:
- # load from EEPROM data and parsing
- self.SiiBinary = self.Controler.CommonMethod.LoadData()
- self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
- self.UpdateSiiGridTable(self.HexRow, self.HexCol)
- self.SiiGrid.SetValue(self.HexCode)
- self.SiiGrid.Update()
-
- def OnButtonSiiDownload(self, event):
- """
- Write current EEPROM data to slave and refresh data structure kept by master
- Binded to 'Sii Download' button.
- @param event : wx.EVT_BUTTON object
- """
- # Check whether beremiz connected or not,
- # and whether status is "Started" or not.
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
- if check_connect_flag:
- status, count = self.Controler.GetCTRoot()._connector.GetPLCstatus()
- if status is not "Started":
- self.Controler.CommonMethod.SiiWrite(self.SiiBinary)
- self.Controler.CommonMethod.Rescan()
-
- def OnButtonWriteToBinFile(self, event):
- """
- Save current EEPROM data to binary file through FileDialog
- Binded to 'Write to File' button.
- @param event : wx.EVT_BUTTON object
- """
- dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(), "slave0.bin",
- _("bin files (*.bin)|*.bin|All files|*.*"), wx.SAVE|wx.OVERWRITE_PROMPT)
-
- if dialog.ShowModal() == wx.ID_OK:
- filepath = dialog.GetPath()
- binfile = open(filepath,"wb")
- binfile.write(self.SiiBinary)
- binfile.close()
-
- dialog.Destroy()
-
- def OnButtonReadFromBinFile(self, event):
- """
- Load binary file through FileDialog
- Binded to 'Read from File' button.
- @param event : wx.EVT_BUTTON object
- """
- dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "",
- _("bin files (*.bin)|*.bin"), wx.OPEN)
-
- if dialog.ShowModal() == wx.ID_OK:
- filepath = dialog.GetPath()
-
- try:
- binfile = open(filepath, "rb")
- self.SiiBinary = binfile.read()
- self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
- self.UpdateSiiGridTable(self.HexRow, self.HexCol)
- self.SiiGrid.SetValue(self.HexCode)
- self.SiiGrid.Update()
- except:
- self.Controler.CommonMethod.CreateErrorDialog('The file does not exist!')
-
- dialog.Destroy()
-
- def OnButtonXmlToEEPROMImg(self, event):
- """
- Create EEPROM data based XML data that current imported
- Binded to 'XML to EEPROM' button.
- @param event : wx.EVT_BUTTON object
- """
- self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom()
- self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
- self.UpdateSiiGridTable(self.HexRow, self.HexCol)
- self.SiiGrid.SetValue(self.HexCode)
- self.SiiGrid.Update()
-
-
-#-------------------------------------------------------------------------------
-# For Hex View grid (fill hex data)
-#-------------------------------------------------------------------------------
-class SiiGridTable(wx.grid.Grid):
- def __init__(self, parent, controler, row, col):
- """
- Constructor
- @param parent: Reference to the parent HexView class
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- @param row, col: Hex View grid size
- """
- self.parent = parent
- self.Controler = controler
- self.Row = row
- self.Col = col
-
- wx.grid.Grid.__init__(self, parent, -1, size=(830,450),
- style=wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL)
-
- def SetValue(self, value):
- """
- Set data in the table
- @param value: EEPROM data list of which element is 1 Byte hex data
- """
- # set label name and size
- self.SetRowLabelSize(100)
- for col in range(self.Col):
- if col == 16:
- self.SetColLabelValue(16, "Text View")
- self.SetColSize(16, (self.GetSize().x-120)*4/20)
- else:
- self.SetColLabelValue(col, '%s'%col)
- self.SetColSize(col, (self.GetSize().x-120)/20)
-
- # set data into table
- row = col = 0
- for row_idx in value:
- col = 0
- self.SetRowLabelValue(row, "0x"+"{:0>4x}".format(row*(self.Col-1)))
- for hex in row_idx:
- self.SetCellValue(row, col, hex)
-
- if col == 16:
- self.SetCellAlignment(row, col, wx.ALIGN_LEFT, wx.ALIGN_CENTER)
- else:
- self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER)
-
- self.SetReadOnly(row, col, True)
- col = col + 1
- row = row + 1
-
-
-#-------------------------------------------------------------------------------
-# For Register Access Panel
-#-------------------------------------------------------------------------------
-class RegisterAccessPanel(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: EEPROMAccessPanel object
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- self.parent = parent
- self.Controler = controler
- self.__init_data()
-
- wx.Panel.__init__(self, parent, -1)
-
- sizer = wx.FlexGridSizer(cols=1, hgap=20, rows=2, vgap=5)
- button_sizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10)
-
- self.ReloadButton = wx.Button(self, -1, "Reload")
- self.CompactViewCheckbox = wx.CheckBox(self, -1, "Compact View")
- self.RegisterNotebook = RegisterNotebook(self, self.Controler)
-
- button_sizer.AddMany([self.ReloadButton, self.CompactViewCheckbox])
- sizer.AddMany([button_sizer, self.RegisterNotebook])
- self.SetSizer(sizer)
-
- self.ReloadButton.Bind(wx.EVT_BUTTON, self.OnReloadButton)
- self.CompactViewCheckbox.Bind(wx.EVT_CHECKBOX, self.ToggleCompactViewCheckbox)
-
- for index in range(4):
- self.RegisterNotebook.RegPage[index].MainTable.CreateGrid(self.MainRow[index], self.MainCol)
- self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512)
-
- # data default setting
- if self.Controler.CommonMethod.RegData == "":
- self.CompactViewCheckbox.Disable()
- for index in range(4):
- self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512)
- else: # If data was saved,
- self.BasicSetData()
- self.ParseData()
- for index in range(4):
- self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, self.RegMonitorData, index*512, (index+1)*512)
-
- def __init_data(self):
- """
- Declare initial data.
- """
- # flag for compact view
- self.CompactFlag = False
-
- # main grid의 rows and cols
- self.MainRow = [512, 512, 512, 512]
- self.MainCol = 4
-
- # main grids' data range
- self.PageRange = []
- for index in range(4):
- self.PageRange.append([512*index, 512*(index+1)])
-
- # Previous value of register data for register description configuration
- self.PreRegSpec = {"ESCType": "",
- "FMMUNumber": "",
- "SMNumber": "",
- "PDIType": ""}
-
- def LoadData(self):
- """
- Get data from the register.
- """
- self.Controler.CommonMethod.RegData = ""
- #ethercat reg_read
- #ex : ethercat reg_read -p 0 0x0000 0x0001
- #return value : 0x11
- for index in range(4):
- self.Controler.CommonMethod.RegData = self.Controler.CommonMethod.RegData + " " + self.Controler.CommonMethod.RegRead("0x"+"{:0>4x}".format(index*1024), "0x0400")
-
- # store previous value
- # (ESC type, port number of FMMU, port number of SM, and PDI type))
- for reg_spec in ["ESCType","FMMUNumber","SMNumber", "PDIType"]:
- self.PreRegSpec[reg_spec] = self.Controler.CommonMethod.CrtRegSpec[reg_spec]
-
- # update registers' description
- # (ESC type, port number of FMMU, port number of SM, and PDI type)
- for reg_spec, address in [("ESCType", "0x0000"),
- ("FMMUNumber", "0x0004"),
- ("SMNumber", "0x0005"),
- ("PDIType", "0x0140")]:
- self.Controler.CommonMethod.CrtRegSpec[reg_spec] = self.Controler.CommonMethod.RegRead(address, "0x0001")
-
- # Enable compactView checkbox
- self.CompactViewCheckbox.Enable()
-
- def BasicSetData(self):
- """
- Get and save the description of registers.
- It's done by parsing register_information.xml.
- """
- # parse the above register's value
- # If the value is 0x12, the result is 12
- self.ESCType = self.Controler.CommonMethod.CrtRegSpec["ESCType"].split('x')[1]
- self.PDIType = self.Controler.CommonMethod.CrtRegSpec["PDIType"].split('x')[1]
- # If the value is 0x12, the result is 18 (It's converted to decimal value)
- self.FMMUNumber = int(self.Controler.CommonMethod.CrtRegSpec["FMMUNumber"], 16)
- self.SMNumber = int(self.Controler.CommonMethod.CrtRegSpec["SMNumber"], 16)
-
- # initialize description dictionary of register main table and register sub table.
- self.RegisterDescriptionDict = {}
- self.RegisterSubGridDict = {}
-
- # ./EthercatMaster/register_information.xml contains register description.
- if wx.Platform == '__WXMSW__':
- reg_info_file = open("../../EthercatMaster/register_information.xml", 'r')
- else:
- reg_info_file = open("./EthercatMaster/register_information.xml", 'r')
- reg_info_tree = minidom.parse(reg_info_file)
- reg_info_file.close()
-
- # parse register description
- for register_info in reg_info_tree.childNodes:
- for register in register_info.childNodes:
- if register.nodeType == reg_info_tree.ELEMENT_NODE and register.nodeName == "Register":
- # If it depends on the property(ESC type, PDI type, FMMU number, SM number)
- for property, type, value in [("esc", "type", self.ESCType),
- ("pdi", "type", self.PDIType),
- ("fmmu", "number", self.FMMUNumber),
- ("sm", "number", self.SMNumber)]:
- if property in register.attributes.keys():
- if type == "type":
- if register.attributes[property].value == value:
- self.GetRegisterInfo(reg_info_tree, register)
- break
- else: # type == "number"
- if register.attributes[property].value < value:
- self.GetRegisterInfo(reg_info_tree, register)
- break
- else:
- self.GetRegisterInfo(reg_info_tree, register)
- break
-
- def GetRegisterInfo(self, reg_info_tree, register):
- """
- Save the register's description into the dictionary.
- reg_info_tree is based on the register_information.xml.
- @param reg_info_tree: XML tree
- @param register: register which you want to get the description
- """
- # temporary variables for register main table idescription dictionary
- reg_index = ""
- reg_main_description = ""
-
- for data in register.childNodes:
- if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Index":
- for index in data.childNodes:
- reg_index = index.nodeValue
- if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Description":
- for description in data.childNodes:
- reg_main_description = description.nodeValue
-
- # Add description for register main table
- if reg_index is not "" and reg_main_description is not "":
- self.RegisterDescriptionDict[reg_index] = reg_main_description
-
- if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Details":
- # declare register sub table description dictionary about this index
- self.RegisterSubGridDict[reg_index] = []
-
- for detail in data.childNodes:
- if detail.nodeType == reg_info_tree.ELEMENT_NODE and detail.nodeName == "Detail":
- # If it depends on the property(ESC type, PDI type, FMMU number, SM number)
- for property, type, value in [("esc", "type", self.ESCType),
- ("pdi", "type", self.PDIType),
- ("fmmu", "number", self.FMMUNumber),
- ("sm", "number", self.SMNumber)]:
- if property in detail.attributes.keys():
- if type == "type":
- if detail.attributes[property].value == value:
- self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail)
- break
- else: # type == "number"
- if detail.attributes[property].value < value:
- self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail)
- break
- else:
- self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail)
- break
-
- def GetRegisterDetailInfo(self, reg_info_tree, reg_index, detail):
- """
- Get the resgister's detailed description(for sub table) from the reg_info_tree.
- @param reg_info_tree: XML tree (register_information.xml)
- @param reg_index: index of the register
- @param detail: description of the register
- """
- # temporary variables for register sub table description dictionary
- # - It is initialized in every sub description
- reg_bit_range = ""
- reg_sub_description = ""
- reg_enum_dictionary = {}
-
- for detail_data in detail.childNodes:
- if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Range":
- for range in detail_data.childNodes:
- reg_bit_range = range.nodeValue
- if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Description":
- for description in detail_data.childNodes:
- reg_sub_description = description.nodeValue
-
- if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Enum":
- for enum in detail_data.childNodes:
- if enum.nodeType == reg_info_tree.ELEMENT_NODE and enum.nodeName == "item":
-
- # temporary variables for a description of each value
- # For example, if the bit is 1, it is 'enabled'('On', 'True', etc.),
- # otherwise 'disabled'('Off', 'False', etc.).
- reg_sub_value = ""
- reg_sub_value_description = ""
-
- for item in enum.childNodes:
- if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "value":
- for value in item.childNodes:
- reg_sub_value = value.nodeValue
- if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "Description":
- for description in item.childNodes:
- reg_sub_value_description = description.nodeValue
-
- # Add a description of each value to register enum dictionary
- if reg_sub_value is not "" and reg_sub_value_description is not "":
- reg_enum_dictionary[reg_sub_value] = reg_sub_value_description
-
- # add a description to register sub table description dictionary
- if reg_bit_range is not "" and reg_sub_description is not "":
- self.RegisterSubGridDict[reg_index].append([reg_bit_range,
- reg_sub_description, reg_enum_dictionary])
-
- def ParseData(self):
- """
- Transform the data into dec, hex, string, and description
- """
- row_data = []
- self.RegMonitorData = []
- reg_word = ""
-
- reg_data = self.Controler.CommonMethod.RegData.split()
-
- # loop for register(0x0000:0x0fff)
- for address in range(0x1000):
- # arrange 2 Bytes of register data
- reg_word = reg_data[address].split('x')[1] + reg_word
- if (address%2) == 1:
- # append address
- hex_address = "{:0>4x}".format(address-1)
- row_data.append(hex_address)
-
- # append description
- if self.RegisterDescriptionDict.has_key(hex_address):
- row_data.append(self.RegisterDescriptionDict[hex_address])
- else:
- row_data.append("")
-
- # append Decimal value
- row_data.append(str(int(reg_word, 16)))
-
- # append Hex value
- row_data.append('0x'+reg_word)
-
- # append ASCII value
- char_data = ""
- for iter in range(2):
- if int(reg_word[iter*2:iter*2+2], 16)>=32 and int(reg_word[iter*2:iter*2+2], 16)<=126:
- char_data = char_data + chr(int(reg_word[iter*2:iter*2+2], 16))
- else:
- char_data = char_data + "."
- row_data.append(char_data)
-
- self.RegMonitorData.append(row_data)
- reg_word = "" # initialize regWord
- row_data = []
-
- def OnReloadButton(self, event):
- """
- Handle the click event of the 'Reload' button.
- Get the data from registers again, and update the table.
- @param event: wx.EVT_BUTTON object
- """
- # Check whether beremiz connected or not.
- check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
- if check_connect_flag:
- self.LoadData()
- self.BasicSetData()
- self.ParseData()
- # set data into UI
- if self.CompactFlag:
- self.ToggleCompactViewCheckbox(True)
- else :
- for index in range(4):
- self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol,
- self.PageRange[index][0], self.PageRange[index][1],
- self.RegMonitorData)
-
- def ToggleCompactViewCheckbox(self, event):
- """
- Handles the event of the 'Compact view' check box.
- If it's checked, show only the registers that have a description.
- If not, show all the registers.
- @param event: wx.EVT_CHECKBOX object
- """
-
- # If "Compact View" Checkbox is True
- ## 'event' is argument of this method or event of checkbox.
- if event==True or event.GetEventObject().GetValue():
- self.CompactFlag = True
-
- reg_compact_data = []
- page_row = [0, 0, 0, 0]
- for index in range(4):
- self.PageRange[index] = [0, 0]
-
- for reg_row_data in self.RegMonitorData:
- if reg_row_data[1] is not "":
- # data structure for "compact view"
- reg_compact_data.append(reg_row_data)
- # count for each register notebooks' row
- # It compare with register's address.
- for index in range(4):
- if int('0x'+reg_row_data[0], 16) < (index+1)*1024:
- page_row[index] += 1
- break
-
- # Setting tables' rows and cols, range for compact view
- for index in range(4):
- self.MainRow[index] = page_row[index]
- self.PageRange[index][1] = page_row[index]
- for iter in range(index):
- self.PageRange[index][0] += page_row[iter]
- self.PageRange[index][1] += page_row[iter]
-
- # Update table
- for index in range(4):
- self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol,
- self.PageRange[index][0], self.PageRange[index][1],
- reg_compact_data)
-
- # Compact View Checkbox is False
- else:
- self.CompactFlag = False
- # Setting original rows, cols and range
- self.MainRow = [512, 512, 512, 512]
- self.PageRange = []
-
- for index in range(4):
- self.PageRange.append([512*index, 512*(index+1)])
-
- # Update table
- for index in range(4):
- self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol,
- self.PageRange[index][0], self.PageRange[index][1],
- self.RegMonitorData)
-
-
-#-------------------------------------------------------------------------------
-# For Register Access Notebook (divide index range)
-#-------------------------------------------------------------------------------
-class RegisterNotebook(wx.Notebook):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: RegisterAccessPanel object
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Notebook.__init__(self, parent, id = -1)
-
- self.parent = parent
- self.Controler = controler
-
- # Initialize pages
- self.RegPage = []
- for iter in range(4):
- self.RegPage.append(None)
-
- for index in range(4):
- self.RegPage[index] = RegisterNotebookPanel(self, self.Controler,
- parent.MainRow[index], parent.MainCol)
- self.AddPage(self.RegPage[index],
- "0x"+"{:0>4x}".format(index*1024)+" - 0x"+"{:0>4x}".format((index+1)*1024-1))
-
- self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
- self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging)
-
- def OnPageChanged(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
- def OnPageChanging(self, event):
- old = event.GetOldSelection()
- new = event.GetSelection()
- sel = self.GetSelection()
- event.Skip()
-
-
-#-------------------------------------------------------------------------------
-# For Register Access Notebook Panel
-# (Main UI : including main, sub table)
-#-------------------------------------------------------------------------------
-class RegisterNotebookPanel(wx.Panel):
- def __init__(self, parent, controler, row, col):
- """
- Constructor
- @param parent: RegisterAccessPanel object
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- @param row, col: size of the table
- """
- wx.Panel.__init__(self, parent, -1)
-
- self.parent = parent
- self.Controler = controler
- self.Row = row
- self.Col = col
- sub_row = 0
- sub_col = 4
-
- self.Sizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=30)
-
- self.MainTable = RegisterMainTable(self, self.Row, self.Col, self.Controler)
- self.SubTable = RegisterSubTable(self, sub_row, sub_col)
-
- self.SubTable.CreateGrid(sub_row, sub_col)
- self.SubTable.SetValue(self, [])
-
- self.Sizer.AddMany([self.MainTable, self.SubTable])
-
- self.SetSizer(self.Sizer)
-
- def UpdateMainTable(self, row, col, low_index, high_index, data):
- """
- Updates main table.
- It's done by deleting the main table and creating it again.
- @param row, col: size of the table
- @param low_index: the lowest index of the page
- @param high_index: the highest index of the page
- @param data: data
- """
- self.MainTable.Destroy()
- self.MainTable = RegisterMainTable(self, row, col, self.Controler)
- self.Sizer.Detach(self.SubTable)
- self.Sizer.AddMany([self.MainTable, self.SubTable])
- self.SetSizer(self.Sizer)
- self.MainTable.CreateGrid(row, col)
- self.MainTable.SetValue(self, data, low_index, high_index)
- self.MainTable.Update()
-
- def UpdateSubTable(self, row, col, data):
- """
- Updates sub table.
- It's done by deleting the sub table and creating it again.
- @param row, col: size of the table
- @param data: data
- """
- self.SubTable.Destroy()
- self.SubTable = RegisterSubTable(self, row, col)
- self.Sizer.Detach(self.MainTable)
- self.Sizer.AddMany([self.MainTable, self.SubTable])
- self.Sizer.Layout()
- self.SetSizer(self.Sizer)
- self.SubTable.CreateGrid(row, col)
- self.SubTable.SetValue(self, data)
- self.SubTable.Update()
-
-
-#-------------------------------------------------------------------------------
-# For Register Access Notebook Panel (Main Table)
-#-------------------------------------------------------------------------------
-class RegisterMainTable(wx.grid.Grid):
- def __init__(self, parent, row, col, controler):
- """
- Constructor
- @param parent: RegisterNotebook object
- @param row, col: size of the table
- @param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- self.parent = parent
- self.Data = {}
- self.Row = row
- self.Col = col
- self.Controler = controler
- self.RegisterAccessPanel = self.parent.parent.parent
-
- wx.grid.Grid.__init__(self, parent, -1, size=(820,300),
- style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL)
-
- for evt, mapping_method in [(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell),
- (gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell),
- (gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.OnRegModifyDialog)]:
- self.Bind(evt, mapping_method)
-
- def SetValue(self, parent, reg_monitor_data, low_index, high_index):
- """
- Set the RegMonitorData into the main table.
- @param parent: RegisterNotebook object
- @param reg_monitor_data: data
- @param low_index: the lowest index of the page
- @param high_index: the highest index of the page
- """
- self.RegMonitorData = reg_monitor_data
-
- # set label name and size
- register_maintable_label = [(0, "Description"), (1, "Dec"),
- (2, "Hex"), (3, "Char")]
-
- for (index, label) in register_maintable_label:
- self.SetColLabelValue(index, label)
-
- self.SetColSize(0, 200)
-
- # if reg_monitor_data is 0, it is initialization of register access.
- if reg_monitor_data == 0:
- return 0
-
- # set data into UI
- row = col = 0
- for row_index in reg_monitor_data[low_index:high_index]:
- col = 0
- self.SetRowLabelValue(row, row_index[0])
- for data_index in range(4):
- self.SetCellValue(row, col, row_index[data_index+1])
- self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER)
- self.SetReadOnly(row, col, True)
- col = col + 1
- row = row + 1
-
- def OnSelectCell(self, event):
- """
- Handles the event of the cell of the main table.
- @param event: gridlib object (left click)
- """
- # if reg_monitor_data is 0, it is initialization of register access.
- if self.RegMonitorData == 0:
- event.Skip()
- return 0
-
- sub_row = 0
- sub_col = 4
-
- address = self.GetRowLabelValue(event.GetRow())
-
- reg_sub_grid_data = []
-
- BIT_RANGE, NAME, DESCRIPTIONS = range(3)
-
- # Check if this register's detail description is exist or not,
- # and create data structure for the detail description table ; sub grid
- if address in self.RegisterAccessPanel.RegisterSubGridDict:
- for element in self.RegisterAccessPanel.RegisterSubGridDict[address]:
- row_data =[]
- row_data.append(element[BIT_RANGE])
- row_data.append(element[NAME])
- bin_data = "{:0>16b}".format(int(self.GetCellValue(event.GetRow(), 1)))
- value_range = element[BIT_RANGE].split('-')
- value = (bin_data[8:16][::-1]+bin_data[0:8][::-1])[int(value_range[0]):(int(value_range[-1])+1)][::-1]
- row_data.append(str(int(('0b'+str(value)), 2)))
- if value in element[DESCRIPTIONS]:
- row_data.append(element[DESCRIPTIONS][value])
- else:
- row_data.append('')
- reg_sub_grid_data.append(row_data)
- sub_row = sub_row + 1
-
- self.parent.UpdateSubTable(sub_row, sub_col, reg_sub_grid_data)
- # event.Skip() updates UI of selecting cell
- event.Skip()
-
- def OnRegModifyDialog(self, event):
- """
- Handle the event of the cell of the main table.
- Display the window where the user modifies the value of the cell.
- @param event: gridlib object (double click)
- """
- # user can enter a value in case that user double-clicked 'Dec' or 'Hex' value.
- if event.GetCol() == 1 or event.GetCol() == 2:
- dlg = wx.TextEntryDialog(self, "Enter hex(0xnnnn) or dec(n) value",
- "Register Modify Dialog", style = wx.OK|wx.CANCEL)
-
- # Setting value in initial dialog value
- start_value = self.GetCellValue(event.GetRow(), event.GetCol())
- dlg.SetValue(start_value)
-
- if dlg.ShowModal() == wx.ID_OK:
- try:
- # It int(input) success, this input is dev or hex value.
- # Otherwise, it's error, so it goes except.
- int(dlg.GetValue(), 0)
-
- # reg_write
- # ex) ethercat reg_write -p 0 -t uint16 0x0000 0x0000
- return_val = self.Controler.CommonMethod.RegWrite('0x'+self.GetRowLabelValue(event.GetRow()), dlg.GetValue())
-
- if len(return_val)==0:
- # set dec
- self.SetCellValue(event.GetRow(), 1, str(int(dlg.GetValue(), 0)))
- # set hex
- hex_data = '0x'+"{:0>4x}".format(int(dlg.GetValue(), 0))
- self.SetCellValue(event.GetRow(), 2, hex_data)
- # set char
- char_data = ""
- # If hex_data is been able to convert to ascii code, append ascii code.
- for iter in range(2):
- if int(hex_data[(iter+1)*2:(iter+2)*2], 16)>=32 and int(hex_data[(iter+1)*2:(iter+2)*2], 16)<=126:
- char_data = char_data + chr(int(hex_data[(iter+1)*2:(iter+2)*2], 16))
- else:
- char_data = char_data + "."
-
- self.SetCellValue(event.GetRow(), 3, char_data)
-
- else:
- self.Controler.CommonMethod.CreateErrorDialog('You can\'t modify it. This register is read-only or it\'s not connected.')
-
- except ValueError:
- self.Controler.CommonMethod.CreateErrorDialog('You entered wrong value. You can enter dec or hex value only.')
-
-
-#-------------------------------------------------------------------------------
-# For Register Access Notebook Panel (Sub Table)
-#-------------------------------------------------------------------------------
-class RegisterSubTable(wx.grid.Grid):
- def __init__(self, parent, row, col):
- """
- Constructor
- @param parent: RegisterNotebook object
- @param row, col: size of the table
- """
- self.parent = parent
- self.Data = {}
- self.Row = row
- self.Col = col
-
- wx.grid.Grid.__init__(self, parent, -1, size=(820,150),
- style=wx.EXPAND|wx.ALIGN_CENTRE_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL)
-
- def SetValue(self, parent, data):
- """
- Set the data into the subtable.
- @param parent: RegisterNotebook object
- @param data: data
- """
- # lset label name and size
- Register_SubTable_Label = [(0, "Bits"), (1, "Name"),
- (2, "Value"), (3, "Enum")]
-
- for (index, label) in Register_SubTable_Label:
- self.SetColLabelValue(index, label)
-
- self.SetColSize(1, 200)
- self.SetColSize(3, 200)
-
- # set data into table
- row = col = 0
- for rowData in data:
- col = 0
- for element in rowData:
- self.SetCellValue(row, col, element)
- self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER)
- self.SetReadOnly(row, col, True)
- col = col + 1
- row = row + 1
-
-
-#-------------------------------------------------------------------------------
-# For Master State Panel
-#-------------------------------------------------------------------------------
-class MasterStatePanelClass(wx.Panel):
- def __init__(self, parent, controler):
- """
- Constructor
- @param parent: wx.ScrollWindow object
- @Param controler: _EthercatSlaveCTN class in EthercatSlave.py
- """
- wx.Panel.__init__(self, parent, -1, (0, 0),
- size=wx.DefaultSize, style = wx.SUNKEN_BORDER)
- self.Controler = controler
- self.parent = parent
- self.StaticBox = {}
- self.StaticText = {}
- self.TextCtrl = {}
-
- # ----------------------- Main Sizer and Update Button --------------------------------------------
- self.MasterStateSizer = {"main" : wx.BoxSizer(wx.VERTICAL)}
- for key, attr in [
- ("innerMain", [1, 10, 2, 10]),
- ("innerTopHalf", [2, 10, 1, 10]),
- ("innerBottomHalf", [2, 10, 1, 10]),
- ("innerMasterState", [2, 10, 3, 10]),
- ("innerDeviceInfo", [4, 10, 3, 10]),
- ("innerFrameInfo", [4, 10, 5, 10])]:
- self.MasterStateSizer[key] = wx.FlexGridSizer(cols=attr[0], hgap=attr[1], rows=attr[2], vgap=attr[3])
-
-
- self.UpdateButton = wx.Button(self, label=_('Update'))
- self.UpdateButton.Bind(wx.EVT_BUTTON, self.OnButtonClick)
-
- for key, label in [
- ('masterState', 'EtherCAT Master State'),
- ('deviceInfo', 'Ethernet Network Card Information'),
- ('frameInfo', 'Network Frame Information')]:
- self.StaticBox[key] = wx.StaticBox(self, label=_(label))
- self.MasterStateSizer[key] = wx.StaticBoxSizer(self.StaticBox[key])
-
-
- # ----------------------- Master State -----------------------------------------------------------
- for key, label in [
- ('Phase', 'Phase:'),
- ('Active', 'Active:'),
- ('Slaves', 'Slave Count:')]:
- self.StaticText[key] = wx.StaticText(self, label=_(label))
- self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
- self.MasterStateSizer['innerMasterState'].AddMany([self.StaticText[key], self.TextCtrl[key]])
-
- self.MasterStateSizer['masterState'].AddSizer(self.MasterStateSizer['innerMasterState'])
-
- # ----------------------- Ethernet Network Card Information ---------------------------------------
- for key, label in [
- ('Main', 'MAC Address:'),
- ('Link', 'Link State:'),
- ('Tx frames', 'Tx Frames:'),
- ('Rx frames', 'Rx Frames:'),
- ('Lost frames', 'Lost Frames:')]:
- self.StaticText[key] = wx.StaticText(self, label=_(label))
- self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
- self.MasterStateSizer['innerDeviceInfo'].AddMany([self.StaticText[key], self.TextCtrl[key]])
-
- self.MasterStateSizer['deviceInfo'].AddSizer(self.MasterStateSizer['innerDeviceInfo'])
-
- # ----------------------- Network Frame Information -----------------------------------------------
- for key, label in [
- ('Tx frame rate [1/s]', 'Tx Frame Rate [1/s]:'),
- ('Rx frame rate [1/s]', 'Tx Rate [kByte/s]:'),
- ('Loss rate [1/s]', 'Loss Rate [1/s]:'),
- ('Frame loss [%]', 'Frame Loss [%]:')]:
- self.StaticText[key] = wx.StaticText(self, label=_(label))
- self.MasterStateSizer['innerFrameInfo'].Add(self.StaticText[key])
- self.TextCtrl[key] = {}
- for index in ['0', '1', '2']:
- self.TextCtrl[key][index] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
- self.MasterStateSizer['innerFrameInfo'].Add(self.TextCtrl[key][index])
-
- self.MasterStateSizer['frameInfo'].AddSizer(self.MasterStateSizer['innerFrameInfo'])
-
- # --------------------------------- Main Sizer ----------------------------------------------------
- for key, sub, in [
- ('innerTopHalf', [
- 'masterState', 'deviceInfo']),
- ('innerBottomHalf', [
- 'frameInfo']),
- ('innerMain', [
- 'innerTopHalf', 'innerBottomHalf'])]:
- for key2 in sub:
- self.MasterStateSizer[key].AddSizer(self.MasterStateSizer[key2])
-
- self.MasterStateSizer['main'].AddSizer(self.UpdateButton)
- self.MasterStateSizer['main'].AddSizer(self.MasterStateSizer['innerMain'])
-
- self.SetSizer(self.MasterStateSizer['main'])
-
- def OnButtonClick(self, event):
- """
- Handle the event of the 'Update' button.
- Update the data of the master state.
- @param event: wx.EVT_BUTTON object
- """
- if self.Controler.GetCTRoot()._connector is not None:
- self.MasterState = self.Controler.CommonMethod.GetMasterState()
- # Update each TextCtrl
- if self.MasterState:
- for key in self.TextCtrl:
- if isinstance(self.TextCtrl[key], dict):
- for index in self.TextCtrl[key]:
- self.TextCtrl[key][index].SetValue(self.MasterState[key][int(index)])
- else:
- self.TextCtrl[key].SetValue(self.MasterState[key][0])
- else :
- self.Controler.CommonMethod.CreateErrorDialog('PLC not connected!')
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# This file is part of Beremiz
+#
+# Copyright (C) 2013: Real-Time & Embedded Systems (RTES) Lab., University of Seoul
+#
+# See COPYING file for copyrights details.
+
+from __future__ import absolute_import
+import os
+import string
+from xml.dom import minidom
+
+import wx
+import wx.grid
+import wx.gizmos
+import wx.lib.buttons
+
+# --------------------------------------------------------------------
+from controls import CustomGrid, CustomTable
+from runtime import PlcStatus
+# --------------------------------------------------------------------
+
+# ------------ for register management ---------------
+
+from util.TranslationCatalogs import NoTranslate
+# -------------------------------------------------------------
+
+
+# ----------------------------- For Sync Manager Table -----------------------------------
+def GetSyncManagersTableColnames():
+ """
+ Returns column names of SyncManager Table in Slave state panel.
+ """
+ _ = NoTranslate
+ return ["#", _("Name"), _("Start Address"), _("Default Size"), _("Control Byte"), _("Enable")]
+
+
+# -------------------------------------------------------------------------------
+# Sync Managers Table
+# -------------------------------------------------------------------------------
+class SyncManagersTable(CustomTable):
+ def GetValue(self, row, col):
+ if row < self.GetNumberRows():
+ if col == 0:
+ return row
+ return self.data[row].get(self.GetColLabelValue(col, False), "")
+
+
+# -------------------------------------------------------------------------------
+# EtherCAT Management Treebook
+# -------------------------------------------------------------------------------
+class EtherCATManagementTreebook(wx.Treebook):
+ def __init__(self, parent, controler, node_editor):
+ """
+ Constructor
+ @param parent: Reference to the parent wx.ScrolledWindow object
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ @param node_editor: Reference to Beremiz frame
+ """
+ wx.Treebook.__init__(self, parent, -1, size=wx.DefaultSize, style=wx.BK_DEFAULT)
+ self.parent = parent
+ self.Controler = controler
+ self.NodeEditor = node_editor
+
+ self.EtherCATManagementClassObject = {}
+
+ # fill EtherCAT Management Treebook
+ panels = [
+ ("Slave State", SlaveStatePanelClass, []),
+ ("SDO Management", SDOPanelClass, []),
+ ("PDO Monitoring", PDOPanelClass, []),
+ ("ESC Management", EEPROMAccessPanel, [
+ ("Smart View", SlaveSiiSmartView),
+ ("Hex View", HexView)]),
+ ("Register Access", RegisterAccessPanel, [])
+ ]
+ for pname, pclass, subs in panels:
+ self.AddPage(pclass(self, self.Controler), pname)
+ for spname, spclass in subs:
+ self.AddSubPage(spclass(self, self.Controler), spname)
+
+
+# -------------------------------------------------------------------------------
+# For SlaveState Panel
+# -------------------------------------------------------------------------------
+class SlaveStatePanelClass(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent EtherCATManagementTreebook class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Panel.__init__(self, parent, -1, (0, 0), size=wx.DefaultSize, style=wx.SUNKEN_BORDER)
+ self.Controler = controler
+ self.parent = parent
+
+ # initialize SlaveStatePanel UI dictionaries
+ self.StaticBoxDic = {}
+ self.StaticTextDic = {}
+ self.TextCtrlDic = {}
+ self.ButtonDic = {}
+
+ # iniitalize BoxSizer and FlexGridSizer
+ self.SizerDic = {
+ "SlaveState_main_sizer": wx.BoxSizer(wx.VERTICAL),
+ "SlaveState_inner_main_sizer": wx.FlexGridSizer(cols=1, hgap=50, rows=3, vgap=10),
+ "SlaveInfosDetailsInnerSizer": wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10),
+ "SyncManagerInnerSizer": wx.FlexGridSizer(cols=1, hgap=5, rows=1, vgap=5),
+ "SlaveState_sizer": wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10),
+ "SlaveState_up_sizer": wx.FlexGridSizer(cols=4, hgap=10, rows=2, vgap=10),
+ "SlaveState_down_sizer": wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10)}
+
+ # initialize StaticBox and StaticBoxSizer
+ for box_name, box_label in [
+ ("SlaveInfosDetailsBox", "Slave Informations"),
+ ("SyncManagerBox", "Sync Manager"),
+ ("SlaveStateBox", "Slave State Transition && Monitoring")]:
+ self.StaticBoxDic[box_name] = wx.StaticBox(self, label=_(box_label))
+ self.SizerDic[box_name] = wx.StaticBoxSizer(self.StaticBoxDic[box_name])
+
+ for statictext_name, statictext_label, textctrl_name in [
+ ("VendorLabel", "Vendor:", "vendor"),
+ ("ProductcodeLabel", "Product code:", "product_code"),
+ ("RevisionnumberLabel", "Slave Count:", "revision_number"),
+ ("PhysicsLabel", "Physics:", "physics")]:
+ self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label))
+ self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
+ self.SizerDic["SlaveInfosDetailsInnerSizer"].AddMany([self.StaticTextDic[statictext_name],
+ self.TextCtrlDic[textctrl_name]])
+
+ self.SizerDic["SlaveInfosDetailsBox"].AddSizer(self.SizerDic["SlaveInfosDetailsInnerSizer"])
+
+ self.SyncManagersGrid = CustomGrid(self, size=wx.Size(605, 155), style=wx.VSCROLL)
+
+ self.SizerDic["SyncManagerInnerSizer"].Add(self.SyncManagersGrid)
+ self.SizerDic["SyncManagerBox"].Add(self.SizerDic["SyncManagerInnerSizer"])
+
+ buttons = [
+ ("InitButton", 0, "INIT", "State Transition to \"Init\" State", self.OnButtonClick, []),
+ ("PreOPButton", 1, "PREOP", "State Transition to \"PreOP\" State", self.OnButtonClick, [
+ ("TargetStateLabel", "Target State:", "TargetState")]),
+ ("SafeOPButton", 2, "SAFEOP", "State Transition to \"SafeOP\" State", self.OnButtonClick, []),
+ ("OPButton", 3, "OP", "State Transition to \"OP\" State", self.OnButtonClick, [
+ ("CurrentStateLabel", "Current State:", "CurrentState")])
+ ]
+ for button_name, button_id, button_label, button_tooltipstring, event_method, sub_item in buttons:
+ self.ButtonDic[button_name] = wx.Button(self, id=button_id, label=_(button_label))
+ self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method)
+ self.ButtonDic[button_name].SetToolTipString(button_tooltipstring)
+ self.SizerDic["SlaveState_up_sizer"].Add(self.ButtonDic[button_name])
+ for statictext_name, statictext_label, textctrl_name in sub_item:
+ self.StaticTextDic[statictext_name] = wx.StaticText(self, label=_(statictext_label))
+ self.TextCtrlDic[textctrl_name] = wx.TextCtrl(self, size=wx.DefaultSize, style=wx.TE_READONLY)
+ self.SizerDic["SlaveState_up_sizer"].AddMany([self.StaticTextDic[statictext_name],
+ self.TextCtrlDic[textctrl_name]])
+
+ for button_name, button_label, button_tooltipstring, event_method in [
+ ("StartTimerButton", "Start State Monitoring", "Slave State Update Restart", self.StartTimer),
+ ("StopTimerButton", "Stop State Monitoring", "Slave State Update Stop", self.CurrentStateThreadStop)]:
+ self.ButtonDic[button_name] = wx.Button(self, label=_(button_label))
+ self.ButtonDic[button_name].Bind(wx.EVT_BUTTON, event_method)
+ self.ButtonDic[button_name].SetToolTipString(button_tooltipstring)
+ self.SizerDic["SlaveState_down_sizer"].Add(self.ButtonDic[button_name])
+
+ self.SizerDic["SlaveState_sizer"].AddMany([self.SizerDic["SlaveState_up_sizer"],
+ self.SizerDic["SlaveState_down_sizer"]])
+
+ self.SizerDic["SlaveStateBox"].Add(self.SizerDic["SlaveState_sizer"])
+
+ self.SizerDic["SlaveState_inner_main_sizer"].AddMany([
+ self.SizerDic["SlaveInfosDetailsBox"], self.SizerDic["SyncManagerBox"],
+ self.SizerDic["SlaveStateBox"]])
+
+ self.SizerDic["SlaveState_main_sizer"].Add(self.SizerDic["SlaveState_inner_main_sizer"])
+
+ self.SetSizer(self.SizerDic["SlaveState_main_sizer"])
+
+ # register a timer for periodic exectuion of slave state update (period: 1000 ms)
+ self.Bind(wx.EVT_TIMER, self.GetCurrentState)
+
+ self.CreateSyncManagerTable()
+
+ self.Centre()
+
+ def CreateSyncManagerTable(self):
+ """
+ Create grid for "SyncManager"
+ """
+ # declare Table object
+ self.SyncManagersTable = SyncManagersTable(self, [], GetSyncManagersTableColnames())
+ self.SyncManagersGrid.SetTable(self.SyncManagersTable)
+ # set grid alignment attr. (CENTER)
+ self.SyncManagersGridColAlignements = [wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE,
+ wx.ALIGN_CENTRE, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE]
+ # set grid size
+ self.SyncManagersGridColSizes = [40, 150, 100, 100, 100, 100]
+ self.SyncManagersGrid.SetRowLabelSize(0)
+ for col in range(self.SyncManagersTable.GetNumberCols()):
+ attr = wx.grid.GridCellAttr()
+ attr.SetAlignment(self.SyncManagersGridColAlignements[col], wx.ALIGN_CENTRE)
+ self.SyncManagersGrid.SetColAttr(col, attr)
+ self.SyncManagersGrid.SetColMinimalWidth(col, self.SyncManagersGridColSizes[col])
+ self.SyncManagersGrid.AutoSizeColumn(col, False)
+
+ self.RefreshSlaveInfos()
+
+ def RefreshSlaveInfos(self):
+ """
+ Fill data in "Slave Information" and "SyncManager"
+ """
+ slave_infos = self.Controler.GetSlaveInfos()
+ sync_manager_section = ["vendor", "product_code", "revision_number", "physics"]
+ if slave_infos is not None:
+ # this method is same as "TextCtrl.SetValue"
+ for textctrl_name in sync_manager_section:
+ self.TextCtrlDic[textctrl_name].SetValue(slave_infos[textctrl_name])
+ self.SyncManagersTable.SetData(slave_infos["sync_managers"])
+ self.SyncManagersTable.ResetView(self.SyncManagersGrid)
+ else:
+ for textctrl_name in sync_manager_section:
+ self.TextCtrlDic[textctrl_name].SetValue("")
+ self.SyncManagersTable.SetData([])
+ self.SyncManagersTable.ResetView(self.SyncManagersGrid)
+
+ def OnButtonClick(self, event):
+ """
+ Event handler for slave state transition button click (Init, PreOP, SafeOP, OP button)
+ @param event : wx.EVT_BUTTON object
+ """
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
+ if check_connect_flag:
+ state_dic = ["INIT", "PREOP", "SAFEOP", "OP"]
+
+ # If target state is one of {INIT, PREOP, SAFEOP}, request slave state transition immediately.
+ if event.GetId() < 3:
+ self.Controler.CommonMethod.RequestSlaveState(state_dic[event.GetId()])
+ self.TextCtrlDic["TargetState"].SetValue(state_dic[event.GetId()])
+
+ # If target state is OP, first check "PLC status".
+ # (1) If current PLC status is "Started", then request slave state transition
+ # (2) Otherwise, show error message and return
+ else:
+ status, _log_count = self.Controler.GetCTRoot()._connector.GetPLCstatus()
+ if status == PlcStatus.Started:
+ self.Controler.CommonMethod.RequestSlaveState("OP")
+ self.TextCtrlDic["TargetState"].SetValue("OP")
+ else:
+ self.Controler.CommonMethod.CreateErrorDialog(_("PLC is Not Started"))
+
+ def GetCurrentState(self, event):
+ """
+ Timer event handler for periodic slave state monitoring (Default period: 1 sec = 1000 msec).
+ @param event : wx.TIMER object
+ """
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(True)
+ if check_connect_flag:
+ returnVal = self.Controler.CommonMethod.GetSlaveStateFromSlave()
+ line = returnVal.split("\n")
+ try:
+ self.SetCurrentState(line[self.Controler.GetSlavePos()])
+ except Exception:
+ pass
+
+ def SetCurrentState(self, line):
+ """
+ Show current slave state using the executiob result of "ethercat slaves" command.
+ @param line : result of "ethercat slaves" command
+ """
+ state_array = ["INIT", "PREOP", "SAFEOP", "OP"]
+ try:
+ # parse the execution result of "ethercat slaves" command
+ # Result example : 0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)
+ token = line.split(" ")
+ if token[2] in state_array:
+ self.TextCtrlDic["CurrentState"].SetValue(token[2])
+ except Exception:
+ pass
+
+ def StartTimer(self, event):
+ """
+ Event handler for "Start State Monitoring" button.
+ - start slave state monitoring thread
+ @param event : wx.EVT_BUTTON object
+ """
+ self.SlaveStateThread = wx.Timer(self)
+ # set timer period (1000 ms)
+ self.SlaveStateThread.Start(1000)
+
+ def CurrentStateThreadStop(self, event):
+ """
+ Event handler for "Stop State Monitoring" button.
+ - stop slave state monitoring thread
+ @param event : wx.EVT_BUTTON object
+ """
+ try:
+ self.SlaveStateThread.Stop()
+ except Exception:
+ pass
+
+
+# -------------------------------------------------------------------------------
+# For SDO Management Panel
+# -------------------------------------------------------------------------------
+class SDOPanelClass(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent EtherCATManagementTreebook class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Panel.__init__(self, parent, -1)
+
+ self.DatatypeDescription, self.CommunicationObject, self.ManufacturerSpecific, \
+ self.ProfileSpecific, self.Reserved, self.AllSDOData = range(6)
+
+ self.Controler = controler
+
+ self.SDOManagementMainSizer = wx.BoxSizer(wx.VERTICAL)
+ self.SDOManagementInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10)
+
+ self.SDOUpdate = wx.Button(self, label=_('update'))
+ self.SDOUpdate.Bind(wx.EVT_BUTTON, self.SDOInfoUpdate)
+
+ self.CallSDONoteBook = SDONoteBook(self, controler=self.Controler)
+ self.SDOManagementInnerMainSizer.Add(self.SDOUpdate)
+ self.SDOManagementInnerMainSizer.Add(self.CallSDONoteBook, wx.ALL | wx.EXPAND)
+
+ self.SDOManagementMainSizer.Add(self.SDOManagementInnerMainSizer)
+
+ self.SetSizer(self.SDOManagementMainSizer)
+
+ def SDOInfoUpdate(self, event):
+ """
+ Evenet handler for SDO "update" button.
+ - Load SDO data from current slave
+ @param event : wx.EVT_BUTTON object
+ """
+ self.Controler.CommonMethod.SaveSDOData = []
+ self.Controler.CommonMethod.ClearSDODataSet()
+ self.SDOFlag = False
+
+ # Check whether beremiz connected or not.
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
+ if check_connect_flag:
+ self.SDOs = self.Controler.CommonMethod.GetSlaveSDOFromSlave()
+ # SDOFlag is "False", user click "Cancel" button
+ self.SDOFlag = self.SDOParser()
+
+ if self.SDOFlag:
+ self.CallSDONoteBook.CreateNoteBook()
+ self.Refresh()
+
+ def SDOParser(self):
+ """
+ Parse SDO data set that obtain "SDOInfoUpdate" Method
+ @return True or False
+ """
+
+ slaveSDO_progress = wx.ProgressDialog(_("Slave SDO Monitoring"), _("Now Uploading..."),
+ maximum=len(self.SDOs.splitlines()),
+ parent=self,
+ style=wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME |
+ wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME |
+ wx.PD_AUTO_HIDE | wx.PD_SMOOTH)
+
+ # If keep_going flag is False, SDOParser method is stop and return "False".
+ keep_going = True
+ count = 0
+
+ # SDO data example
+ # SDO 0x1000, "Device type"
+ # 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474
+ for details_line in self.SDOs.splitlines():
+ count += 1
+ line_token = details_line.split("\"")
+ # len(line_token[2]) case : SDO 0x1000, "Device type"
+ if len(line_token[2]) == 0:
+ title_name = line_token[1]
+ # else case : 0x1000:00,r-r-r-,uint32,32 bit,"Device type",0x00020192, 131474
+ else:
+ # line_token = ['0x1000:00,r-r-r-,uint32,32 bit,', 'Device type', ',0x00020192, 131474']
+ token_head, name, token_tail = line_token
+
+ # token_head = ['0x1000:00', 'r-r-r-', 'uint32', '32 bit', '']
+ token_head = token_head.split(",")
+ ful_idx, access, type, size, _empty = token_head
+ # ful_idx.split(":") = ['0x1000', '00']
+ idx, sub_idx = ful_idx.split(":")
+
+ # token_tail = ['', '0x00020192', '131474']
+ token_tail = token_tail.split(",")
+ try:
+ _empty, hex_val, _dec_val = token_tail
+
+ # SDO data is not return "dec value"
+ # line example :
+ # 0x1702:01,rwr-r-,uint32,32 bit," 1st mapping", ----
+ except Exception:
+ _empty, hex_val = token_tail
+
+ name_after_check = self.StringTest(name)
+
+ # convert hex type
+ sub_idx = "0x" + sub_idx
+
+ if type == "octet_string":
+ hex_val = ' ---- '
+
+ # SResult of SlaveSDO data parsing. (data type : dictionary)
+ self.Data = {'idx': idx.strip(), 'subIdx': sub_idx.strip(), 'access': access.strip(),
+ 'type': type.strip(), 'size': size.strip(), 'name': name_after_check.strip("\""),
+ 'value': hex_val.strip(), "category": title_name.strip("\"")}
+
+ category_divide_value = [0x1000, 0x2000, 0x6000, 0xa000, 0xffff]
+
+ for count in range(len(category_divide_value)):
+ if int(idx, 0) < category_divide_value[count]:
+ self.Controler.CommonMethod.SaveSDOData[count].append(self.Data)
+ break
+
+ self.Controler.CommonMethod.SaveSDOData[self.AllSDOData].append(self.Data)
+
+ if count >= len(self.SDOs.splitlines()) / 2:
+ (keep_going, _skip) = slaveSDO_progress.Update(count, "Please waiting a moment!!")
+ else:
+ (keep_going, _skip) = slaveSDO_progress.Update(count)
+
+ # If user click "Cancel" loop suspend immediately
+ if not keep_going:
+ break
+
+ slaveSDO_progress.Destroy()
+ return keep_going
+
+ def StringTest(self, check_string):
+ """
+ Test value 'name' is alphanumeric
+ @param check_string : input data for check
+ @return result : output data after check
+ """
+ # string.printable is print this result
+ # '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
+ # !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c
+ allow_range = string.printable
+ result = check_string
+ for i in range(0, len(check_string)):
+ # string.isalnum() is check whether string is alphanumeric or not
+ if check_string[len(check_string)-1-i:len(check_string)-i] in allow_range:
+ result = check_string[:len(check_string) - i]
+ break
+ return result
+
+
+# -------------------------------------------------------------------------------
+# For SDO Notebook (divide category)
+# -------------------------------------------------------------------------------
+class SDONoteBook(wx.Notebook):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent SDOPanelClass class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Notebook.__init__(self, parent, id=-1, size=(850, 500))
+ self.Controler = controler
+ self.parent = parent
+
+ self.CreateNoteBook()
+
+ def CreateNoteBook(self):
+ """
+ Create each NoteBook page, divided SDO index
+ According to EtherCAT Communication(03/2011), 158p
+ """
+ self.Data = []
+ count = 1
+
+ page_texts = [("all", self.parent.AllSDOData),
+ ("0x0000 - 0x0ff", self.parent.DatatypeDescription),
+ ("0x1000 - 0x1fff", self.parent.CommunicationObject),
+ ("0x2000 - 0x5fff", self.parent.ManufacturerSpecific),
+ ("0x6000 - 0x9fff", self.parent.ProfileSpecific),
+ ("0xa000 - 0xffff", self.parent.Reserved)]
+
+ # page_tooltip_string = ["SDO Index 0x0000 - 0x0fff : Data Type Description",
+ # "SDO Index 0x1000 - 0x1fff : Communication object",
+ # "SDO Index 0x2000 - 0x5fff : Manufacturer specific",
+ # "SDO Index 0x6000 - 0x9fff : Profile specific",
+ # "SDO Index 0xa000 - 0xffff : Reserved",
+ # "All SDO Object"]
+
+ self.DeleteAllPages()
+
+ for txt, count in page_texts:
+ self.Data = self.Controler.CommonMethod.SaveSDOData[count]
+ self.Win = SlaveSDOTable(self, self.Data)
+ self.AddPage(self.Win, txt)
+
+
+# -------------------------------------------------------------------------------
+# For SDO Grid (fill index, subindex, etc...)
+# -------------------------------------------------------------------------------
+class SlaveSDOTable(wx.grid.Grid):
+ def __init__(self, parent, data):
+ """
+ Constructor
+ @param parent: Reference to the parent SDOPanelClass class
+ @param data: SDO data after parsing "SDOParser" method
+ """
+ wx.grid.Grid.__init__(self, parent, -1, size=(830, 490),
+ style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
+
+ self.Controler = parent.Controler
+ self.parent = parent
+ self.SDOFlag = True
+ if data is None:
+ self.SDOs = []
+ else:
+ self.SDOs = data
+
+ self.CreateGrid(len(self.SDOs), 8)
+ SDOCellSize = [(0, 65), (1, 65), (2, 50), (3, 55),
+ (4, 40), (5, 200), (6, 250), (7, 85)]
+
+ for (index, size) in SDOCellSize:
+ self.SetColSize(index, size)
+
+ self.SetRowLabelSize(0)
+
+ SDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Access"),
+ (3, "Type"), (4, "Size"), (5, "Category"),
+ (6, "Name"), (7, "Value")]
+
+ for (index, label) in SDOTableLabel:
+ self.SetColLabelValue(index, label)
+ self.SetColLabelAlignment(index, wx.ALIGN_CENTRE)
+
+ attr = wx.grid.GridCellAttr()
+
+ # for SDO download
+ self.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.SDOModifyDialog)
+
+ for i in range(7):
+ self.SetColAttr(i, attr)
+
+ self.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)
+
+ self.SetTableValue()
+
+ def SetTableValue(self):
+ """
+ Cell is filled by new parsing data
+ """
+ sdo_list = ['idx', 'subIdx', 'access', 'type', 'size', 'category', 'name', 'value']
+ for row_idx in range(len(self.SDOs)):
+ for col_idx in range(len(self.SDOs[row_idx])):
+ self.SetCellValue(row_idx, col_idx, self.SDOs[row_idx][sdo_list[col_idx]])
+ self.SetReadOnly(row_idx, col_idx, True)
+ if col_idx < 5:
+ self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
+
+ def CheckSDODataAccess(self, row):
+ """
+ CheckSDODataAccess method is checking that access data has "w"
+ Access field consist 6 char, if mean
+ rw rw rw
+ (preop) (safeop) (op)
+ Example Access field : rwrwrw, rwrw--
+ @param row : Selected cell by user
+ @return Write_flag : If data has "w", flag is true
+ """
+ write_flag = False
+ check = self.SDOs[row]['access']
+ if check[1:2] == 'w':
+ self.Controler.CommonMethod.Check_PREOP = True
+ write_flag = True
+ if check[3:4] == 'w':
+ self.Controler.CommonMethod.Check_SAFEOP = True
+ write_flag = True
+ if check[5:] == 'w':
+ self.Controler.CommonMethod.Check_OP = True
+ write_flag = True
+
+ return write_flag
+
+ def DecideSDODownload(self, state):
+ """
+ compare current state and "access" field,
+ result notify SDOModifyDialog method
+ @param state : current slave state
+ @return True or False
+ """
+ # Example of 'state' parameter : "0 0:0 PREOP + EL9800 (V4.30) (PIC24, SPI, ET1100)"
+ state = state[self.Controler.GetSlavePos()].split(" ")[2]
+ if state == "PREOP" and self.Controler.CommonMethod.Check_PREOP:
+ return True
+ elif state == "SAFEOP" and self.Controler.CommonMethod.Check_SAFEOP:
+ return True
+ elif state == "OP" and self.Controler.CommonMethod.Check_OP:
+ return True
+
+ return False
+
+ def ClearStateFlag(self):
+ """
+ Initialize StateFlag
+ StateFlag is notice SDOData access each slave state
+ """
+ self.Controler.CommonMethod.Check_PREOP = False
+ self.Controler.CommonMethod.Check_SAFEOP = False
+ self.Controler.CommonMethod.Check_OP = False
+
+ def SDOModifyDialog(self, event):
+ """
+ Create dialog for SDO value modify
+ if user enter data, perform command "ethercat download"
+ @param event : wx.grid.EVT_GRID_CELL_LEFT_DCLICK object
+ """
+ self.ClearStateFlag()
+
+ # CheckSDODataAccess is checking that OD(Object Dictionary) has "w"
+ if event.GetCol() == 7 and self.CheckSDODataAccess(event.GetRow()):
+ dlg = wx.TextEntryDialog(
+ self,
+ _("Enter hex or dec value (if enter dec value, it automatically conversed hex value)"),
+ "SDOModifyDialog",
+ style=wx.OK | wx.CANCEL)
+
+ start_value = self.GetCellValue(event.GetRow(), event.GetCol())
+ dlg.SetValue(start_value)
+
+ if dlg.ShowModal() == wx.ID_OK:
+ try:
+ int(dlg.GetValue(), 0)
+ # check "Access" field
+ if self.DecideSDODownload(self.Controler.CommonMethod.SlaveState[self.Controler.GetSlavePos()]):
+ # Request "SDODownload"
+ self.Controler.CommonMethod.SDODownload(
+ self.SDOs[event.GetRow()]['type'],
+ self.SDOs[event.GetRow()]['idx'],
+ self.SDOs[event.GetRow()]['subIdx'],
+ dlg.GetValue())
+
+ self.SetCellValue(event.GetRow(), event.GetCol(), hex(int(dlg.GetValue(), 0)))
+ else:
+ self.Controler.CommonMethod.CreateErrorDialog(_('You cannot SDO download this state'))
+ # Error occured process of "int(variable)"
+ # User input is not hex, dec value
+ except ValueError:
+ self.Controler.CommonMethod.CreateErrorDialog(_('You can input only hex, dec value'))
+
+
+# -------------------------------------------------------------------------------
+# For PDO Monitoring Panel
+# PDO Class UI : Panel -> Choicebook (RxPDO, TxPDO) ->
+# Notebook (PDO Index) -> Grid (PDO entry)
+# -------------------------------------------------------------------------------
+class PDOPanelClass(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent EtherCATManagementTreebook class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Panel.__init__(self, parent, -1)
+ self.Controler = controler
+
+ self.PDOMonitoringEditorMainSizer = wx.BoxSizer(wx.VERTICAL)
+ self.PDOMonitoringEditorInnerMainSizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10)
+
+ self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler)
+ self.PDOMonitoringEditorInnerMainSizer.Add(self.CallPDOChoicebook, wx.ALL)
+
+ self.PDOMonitoringEditorMainSizer.Add(self.PDOMonitoringEditorInnerMainSizer)
+
+ self.SetSizer(self.PDOMonitoringEditorMainSizer)
+
+ def PDOInfoUpdate(self):
+ """
+ Call RequestPDOInfo method and create Choicebook
+ """
+ self.Controler.CommonMethod.RequestPDOInfo()
+ self.CallPDOChoicebook.Destroy()
+ self.CallPDOChoicebook = PDOChoicebook(self, controler=self.Controler)
+ self.Refresh()
+
+
+# -------------------------------------------------------------------------------
+# For PDO Choicebook (divide Tx, Rx PDO)
+# -------------------------------------------------------------------------------
+class PDOChoicebook(wx.Choicebook):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent PDOPanelClass class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Choicebook.__init__(self, parent, id=-1, size=(500, 500), style=wx.CHB_DEFAULT)
+ self.Controler = controler
+
+ RxWin = PDONoteBook(self, controler=self.Controler, name="Rx")
+ TxWin = PDONoteBook(self, controler=self.Controler, name="Tx")
+ self.AddPage(RxWin, "RxPDO")
+ self.AddPage(TxWin, "TxPDO")
+
+
+# -------------------------------------------------------------------------------
+# For PDO Notebook (divide PDO index)
+# -------------------------------------------------------------------------------
+class PDONoteBook(wx.Notebook):
+ def __init__(self, parent, name, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent PDOChoicebook class
+ @param name: identifier whether RxPDO or TxPDO
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Notebook.__init__(self, parent, id=-1, size=(640, 400))
+ self.Controler = controler
+
+ count = 0
+ page_texts = []
+
+ self.Controler.CommonMethod.RequestPDOInfo()
+
+ if name == "Tx":
+ # obtain pdo_info and pdo_entry
+ # pdo_info include (PDO index, name, number of entry)
+ pdo_info = self.Controler.CommonMethod.GetTxPDOCategory()
+ pdo_entry = self.Controler.CommonMethod.GetTxPDOInfo()
+ for tmp in pdo_info:
+ title = str(hex(tmp['pdo_index']))
+ page_texts.append(title)
+ # RX PDO case
+ else:
+ pdo_info = self.Controler.CommonMethod.GetRxPDOCategory()
+ pdo_entry = self.Controler.CommonMethod.GetRxPDOInfo()
+ for tmp in pdo_info:
+ title = str(hex(tmp['pdo_index']))
+ page_texts.append(title)
+
+ # Add page depending on the number of pdo_info
+ for txt in page_texts:
+ win = PDOEntryTable(self, pdo_info, pdo_entry, count)
+ self.AddPage(win, txt)
+ count += 1
+
+
+# -------------------------------------------------------------------------------
+# For PDO Grid (fill entry index, subindex etc...)
+# -------------------------------------------------------------------------------
+class PDOEntryTable(wx.grid.Grid):
+ def __init__(self, parent, info, entry, count):
+ """
+ Constructor
+ @param parent: Reference to the parent PDONoteBook class
+ @param info : data structure including entry index, sub index, name, length, type
+ @param entry : data structure including index, name, entry number
+ @param count : page number
+ """
+ wx.grid.Grid.__init__(self, parent, -1, size=(500, 400), pos=wx.Point(0, 0),
+ style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
+
+ self.Controler = parent.Controler
+
+ self.PDOInfo = info
+ self.PDOEntry = entry
+ self.Count = count
+
+ self.CreateGrid(self.PDOInfo[self.Count]['number_of_entry'], 5)
+ self.SetColLabelSize(25)
+ self.SetRowLabelSize(0)
+
+ PDOTableLabel = [(0, "Index"), (1, "Subindex"), (2, "Length"),
+ (3, "Type"), (4, "Name")]
+
+ for (index, label) in PDOTableLabel:
+ self.SetColLabelValue(index, label)
+
+ PDOCellSize = [(0, 45), (1, 65), (2, 55), (3, 40), (4, 300)]
+
+ for (index, size) in PDOCellSize:
+ self.SetColSize(index, size)
+ self.SetColLabelAlignment(index, wx.ALIGN_LEFT)
+
+ attr = wx.grid.GridCellAttr()
+
+ for i in range(5):
+ self.SetColAttr(i, attr)
+
+ self.SetTableValue()
+
+ def SetTableValue(self):
+ """
+ Cell is filled by new parsing data in XML
+ """
+ list_index = 0
+ # number of entry
+ for i in range(self.Count + 1):
+ list_index += self.PDOInfo[i]['number_of_entry']
+
+ start_value = list_index - self.PDOInfo[self.Count]['number_of_entry']
+
+ pdo_list = ['entry_index', 'subindex', 'bitlen', 'type', 'name']
+ for row_idx in range(self.PDOInfo[self.Count]['number_of_entry']):
+ for col_idx in range(len(self.PDOEntry[row_idx])):
+ # entry index is converted hex value.
+ if col_idx == 0:
+ self.SetCellValue(row_idx, col_idx, hex(self.PDOEntry[start_value][pdo_list[col_idx]]))
+ else:
+ self.SetCellValue(row_idx, col_idx, str(self.PDOEntry[start_value][pdo_list[col_idx]]))
+ if col_idx != 4:
+ self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
+ else:
+ self.SetCellAlignment(row_idx, col_idx, wx.ALIGN_LEFT, wx.ALIGN_CENTRE)
+ self.SetReadOnly(row_idx, col_idx, True)
+ self.SetRowSize(row_idx, 25)
+ start_value += 1
+
+
+# -------------------------------------------------------------------------------
+# For EEPROM Access Main Panel
+# (This class explain EEPROM Access)
+# -------------------------------------------------------------------------------
+class EEPROMAccessPanel(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent EtherCATManagementTreebook class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Panel.__init__(self, parent, -1)
+ sizer = wx.FlexGridSizer(cols=1, hgap=20, rows=3, vgap=20)
+
+ line = wx.StaticText(self, -1, "\n EEPROM Access is composed to SmartView and HexView. \
+ \n\n - SmartView shows Config Data, Device Identity, Mailbox settings, etc. \
+ \n\n - HexView shows EEPROM's contents.")
+
+ sizer.Add(line)
+
+ self.SetSizer(sizer)
+
+
+# -------------------------------------------------------------------------------
+# For Smart View Panel
+# -------------------------------------------------------------------------------
+class SlaveSiiSmartView(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent EtherCATManagementTreebook class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Panel.__init__(self, parent, -1)
+ self.parent = parent
+ self.Controler = controler
+
+ self.PDIType = {
+ 0: ['none', '00000000'],
+ 4: ['Digital I/O', '00000100'],
+ 5: ['SPI Slave', '00000101'],
+ 7: ['EtherCAT Bridge (port3)', '00000111'],
+ 8: ['uC async. 16bit', '00001000'],
+ 9: ['uC async. 8bit', '00001001'],
+ 10: ['uC sync. 16bit', '00001010'],
+ 11: ['uC sync. 8bit', '00001011'],
+ 16: ['32 Digtal Input and 0 Digital Output', '00010000'],
+ 17: ['24 Digtal Input and 8 Digital Output', '00010001'],
+ 18: ['16 Digtal Input and 16 Digital Output', '00010010'],
+ 19: ['8 Digtal Input and 24 Digital Output', '00010011'],
+ 20: ['0 Digtal Input and 32 Digital Output', '00010100'],
+ 128: ['On-chip bus', '11111111']
+ }
+
+ sizer = wx.FlexGridSizer(cols=1, hgap=5, rows=2, vgap=5)
+ button_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=5)
+
+ for button, mapping_method in [("Write EEPROM", self.WriteToEEPROM),
+ ("Read EEPROM", self.ReadFromEEPROM)]:
+ btn = wx.Button(self, -1, button, size=(150, 40))
+ button_sizer.Add(btn, border=10, flag=wx.ALL)
+ btn.Bind(wx.EVT_BUTTON, mapping_method)
+
+ self.TreeListCtrl = SmartViewTreeListCtrl(self, self.Controler)
+
+ sizer.Add(button_sizer, border=10, flag=wx.ALL)
+ sizer.Add(self.TreeListCtrl, border=10, flag=wx.ALL)
+ self.SetSizer(sizer)
+
+ self.Create_SmartView()
+
+ def Create_SmartView(self):
+ """
+ SmartView shows information based on XML as initial value.
+ """
+ self.Controler.CommonMethod.SmartViewInfosFromXML = self.Controler.CommonMethod.GetSmartViewInfos()
+ self.SetXMLData()
+
+ def WriteToEEPROM(self, event):
+ """
+ Open binary file (user select) and write the selected binary data to EEPROM
+ @param event : wx.EVT_BUTTON object
+ """
+ # Check whether beremiz connected or not, and whether status is "Started" or not.
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
+ if check_connect_flag:
+ status, _log_count = self.Controler.GetCTRoot()._connector.GetPLCstatus()
+ if status is not PlcStatus.Started:
+ dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "", _("bin files (*.bin)|*.bin"), wx.OPEN)
+
+ if dialog.ShowModal() == wx.ID_OK:
+ filepath = dialog.GetPath()
+ try:
+ binfile = open(filepath, "rb")
+ self.SiiBinary = binfile.read()
+ dialog.Destroy()
+
+ self.Controler.CommonMethod.SiiWrite(self.SiiBinary)
+ # refresh data structure kept by master
+ self.Controler.CommonMethod.Rescan()
+ # save binary data as inner global data of beremiz
+ # for fast loading when slave plugin node is reopened.
+ self.Controler.CommonMethod.SiiData = self.SiiBinary
+ self.SetEEPROMData()
+ except Exception:
+ self.Controler.CommonMethod.CreateErrorDialog(_('The file does not exist!'))
+ dialog.Destroy()
+
+ def ReadFromEEPROM(self, event):
+ """
+ Refresh displayed data based on slave EEPROM and save binary file through dialog
+ @param event : wx.EVT_BUTTON object
+ """
+ # Check whether beremiz connected or not.
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
+ if check_connect_flag:
+ self.SiiBinary = self.Controler.CommonMethod.LoadData()
+ self.SetEEPROMData()
+ dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(),
+ "slave0.bin", _("bin files (*.bin)|*.bin|All files|*.*"),
+ wx.SAVE | wx.OVERWRITE_PROMPT)
+
+ if dialog.ShowModal() == wx.ID_OK:
+ filepath = dialog.GetPath()
+ binfile = open(filepath, "wb")
+ binfile.write(self.SiiBinary)
+ binfile.close()
+
+ dialog.Destroy()
+
+ def SetXMLData(self):
+ """
+ Set data based on XML initially
+ """
+ # Config Data: EEPROM Size, PDI Type, Device Emulation
+ # Find PDI Type in pdiType dictionary
+ cnt_pdi_type = self.Controler.CommonMethod.SmartViewInfosFromXML["pdi_type"]
+ for i in self.PDIType.keys():
+ if cnt_pdi_type == i:
+ cnt_pdi_type = self.PDIType[i][0]
+ break
+ # Set Config Data
+ for treelist, data in [("EEPROM Size (Bytes)",
+ str(self.Controler.CommonMethod.SmartViewInfosFromXML["eeprom_size"])),
+ ("PDI Type",
+ cnt_pdi_type),
+ ("Device Emulation",
+ self.Controler.CommonMethod.SmartViewInfosFromXML["device_emulation"])]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1)
+
+ # Device Identity: Vendor ID, Product Code, Revision No., Serial No.
+ # Set Device Identity
+ for treelist, data in [("Vendor ID", self.Controler.CommonMethod.SmartViewInfosFromXML["vendor_id"]),
+ ("Product Code", self.Controler.CommonMethod.SmartViewInfosFromXML["product_code"]),
+ ("Revision No.", self.Controler.CommonMethod.SmartViewInfosFromXML["revision_no"]),
+ ("Serial No.", self.Controler.CommonMethod.SmartViewInfosFromXML["serial_no"])]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1)
+
+ # Mailbox: Supported Mailbox, Bootstrap Configuration, Standard Configuration
+ # Set Mailbox
+ for treelist, data in [("Supported Mailbox", self.Controler.CommonMethod.SmartViewInfosFromXML["supported_mailbox"]),
+ ("Bootstrap Configuration", ""),
+ ("Standard Configuration", "")]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1)
+ # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size
+ for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outstart"]),
+ ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_outlength"]),
+ ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_instart"]),
+ ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_bootstrapconf_inlength"])]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1)
+ # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size
+ for treelist, data in [("Receive Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outstart"]),
+ ("Receive Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_outlength"]),
+ ("Send Offset", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_instart"]),
+ ("Send Size", self.Controler.CommonMethod.SmartViewInfosFromXML["mailbox_standardconf_inlength"])]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1)
+
+ def SetEEPROMData(self):
+ """
+ Set data based on slave EEPROM.
+ """
+ # sii_dict = { Parameter : (WordAddress, WordSize) }
+ sii_dict = {
+ 'PDIControl': ('0', 1),
+ 'PDIConfiguration': ('1', 1),
+ 'PulseLengthOfSYNCSignals': ('2', 1),
+ 'ExtendedPDIConfiguration': ('3', 1),
+ 'ConfiguredStationAlias': ('4', 1),
+ 'Checksum': ('7', 1),
+ 'VendorID': ('8', 2),
+ 'ProductCode': ('a', 2),
+ 'RevisionNumber': ('c', 2),
+ 'SerialNumber': ('e', 2),
+ 'Execution Delay': ('10', 1),
+ 'Port0Delay': ('11', 1),
+ 'Port1Delay': ('12', 1),
+ 'BootstrapReceiveMailboxOffset': ('14', 1),
+ 'BootstrapReceiveMailboxSize': ('15', 1),
+ 'BootstrapSendMailboxOffset': ('16', 1),
+ 'BootstrapSendMailboxSize': ('17', 1),
+ 'StandardReceiveMailboxOffset': ('18', 1),
+ 'StandardReceiveMailboxSize': ('19', 1),
+ 'StandardSendMailboxOffset': ('1a', 1),
+ 'StandardSendMailboxSize': ('1b', 1),
+ 'MailboxProtocol': ('1c', 1),
+ 'Size': ('3e', 1),
+ 'Version': ('3f', 1),
+ 'First Category Type/Vendor Specific': ('40', 1),
+ 'Following Category Word Size': ('41', 1),
+ 'Category Data': ('42', 1),
+ }
+
+ # Config Data: EEPROM Size, PDI Type, Device Emulation
+ # EEPROM's data in address '0x003f' is Size of EEPROM in KBit-1
+ eeprom_size = str((int(self.GetWordAddressData(sii_dict.get('Size'), 10))+1)/8*1024)
+ # Find PDI Type in pdiType dictionary
+ cnt_pdi_type = int(self.GetWordAddressData(sii_dict.get('PDIControl'), 16).split('x')[1][2:4], 16)
+ for i in self.PDIType.keys():
+ if cnt_pdi_type == i:
+ cnt_pdi_type = self.PDIType[i][0]
+ break
+ # Get Device Emulation
+ device_emulation = str(bool(int("{:0>16b}".format(int(self.GetWordAddressData(sii_dict.get('PDIControl'), 16), 16))[7])))
+ # Set Config Data
+ for treelist, data in [("EEPROM Size (Bytes)", eeprom_size),
+ ("PDI Type", cnt_pdi_type),
+ ("Device Emulation", device_emulation)]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.ConfigData[treelist], data, 1)
+
+ # Device Identity: Vendor ID, Product Code, Revision No., Serial No.
+ # Set Device Identity
+ for treelist, data in [
+ ("Vendor ID", self.GetWordAddressData(sii_dict.get('VendorID'), 16)),
+ ("Product Code", self.GetWordAddressData(sii_dict.get('ProductCode'), 16)),
+ ("Revision No.", self.GetWordAddressData(sii_dict.get('RevisionNumber'), 16)),
+ ("Serial No.", self.GetWordAddressData(sii_dict.get('SerialNumber'), 16))]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.DeviceIdentity[treelist], data, 1)
+
+ # Mailbox
+ # EEORPOM's word address '1c' indicates supported mailbox protocol.
+ # each value of mailbox protocol :
+ # VoE(0x0020), SoE(0x0010), FoE(0x0008), CoE(0x0004), EoE(0x0002), AoE(0x0001)
+ supported_mailbox = ""
+ mailbox_protocol = ["VoE, ", "SoE, ", "FoE, ", "CoE, ", "EoE, ", "AoE, "]
+ mailbox_data = "{:0>8b}".format(int(self.GetWordAddressData(sii_dict.get('MailboxProtocol'), 16), 16))
+ for protocol in range(6):
+ if mailbox_data[protocol+2] == '1':
+ supported_mailbox += mailbox_protocol[protocol]
+ supported_mailbox = supported_mailbox.strip(", ")
+ # Set Mailbox
+ for treelist, data in [("Supported Mailbox", supported_mailbox),
+ ("Bootstrap Configuration", ""),
+ ("Standard Configuration", "")]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.Mailbox[treelist], data, 1)
+ # Set Bootstrap Configuration: Receive Offset, Receive Size, Send Offset, Send Size
+ for treelist, data in [
+ ("Receive Offset", self.GetWordAddressData(sii_dict.get('BootstrapReceiveMailboxOffset'), 10)),
+ ("Receive Size", self.GetWordAddressData(sii_dict.get('BootstrapReceiveMailboxSize'), 10)),
+ ("Send Offset", self.GetWordAddressData(sii_dict.get('BootstrapSendMailboxOffset'), 10)),
+ ("Send Size", self.GetWordAddressData(sii_dict.get('BootstrapSendMailboxSize'), 10))]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.BootstrapConfig[treelist], data, 1)
+ # Set Standard Configuration: Receive Offset, Receive Size, Send Offset, Send Size
+ for treelist, data in [
+ ("Receive Offset", self.GetWordAddressData(sii_dict.get('StandardReceiveMailboxOffset'), 10)),
+ ("Receive Size", self.GetWordAddressData(sii_dict.get('StandardReceiveMailboxSize'), 10)),
+ ("Send Offset", self.GetWordAddressData(sii_dict.get('StandardSendMailboxOffset'), 10)),
+ ("Send Size", self.GetWordAddressData(sii_dict.get('StandardSendMailboxSize'), 10))]:
+ self.TreeListCtrl.Tree.SetItemText(self.TreeListCtrl.StandardConfig[treelist], data, 1)
+
+ def MakeStaticBoxSizer(self, boxlabel):
+ """
+ Make StaticBoxSizer
+ @param boxlabel : label of box sizer
+ @return sizer : the StaticBoxSizer labeled 'boxlabel'
+ """
+ box = wx.StaticBox(self, -1, boxlabel)
+ sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
+
+ return sizer
+
+ def GetWordAddressData(self, dict_tuple, format):
+ """
+ This method converts word address data from EEPROM binary.
+ @param dict_tuple : element of 'sii_dict' dictionary in SetEEPROMData()
+ @param format : format of data. It can be 16(hex), 10(decimal) and 2(binary).
+ @return formatted value
+ """
+ offset = int(str(dict_tuple[0]), 16) * 2
+ length = int(str(dict_tuple[1]), 16) * 2
+ list = []
+ data = ''
+ for index in range(length):
+ hexdata = hex(ord(self.SiiBinary[offset + index]))[2:]
+ list.append(hexdata.zfill(2))
+
+ list.reverse()
+ data = list[0:length]
+
+ if format == 16:
+ return '0x' + ''.join(data)
+ elif format == 10:
+ return str(int(str(''.join(data)), 16))
+ elif format == 2:
+ ''.join(data)
+
+
+# -------------------------------------------------------------------------------
+# For Smart View TreeListCtrl
+# -------------------------------------------------------------------------------
+class SmartViewTreeListCtrl(wx.Panel):
+ def __init__(self, parent, Controler):
+ """
+ Constructor
+ @param parent: Reference to the parent SlaveSiiSmartView class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+
+ wx.Panel.__init__(self, parent, -1, size=(350, 500))
+
+ self.Tree = wx.gizmos.TreeListCtrl(self, -1, size=(350, 500),
+ style=(wx.TR_DEFAULT_STYLE |
+ wx.TR_FULL_ROW_HIGHLIGHT |
+ wx.TR_HIDE_ROOT |
+ wx.TR_COLUMN_LINES |
+ wx.TR_ROW_LINES))
+
+ self.Tree.AddColumn("Description", width=200)
+ self.Tree.AddColumn("Value", width=140)
+ self.Tree.SetMainColumn(0)
+
+ self.Root = self.Tree.AddRoot("")
+
+ # Add item
+ # Level 1 nodes
+ self.Level1Nodes = {}
+ for lv1 in ["Config Data", "Device Identity", "Mailbox"]:
+ self.Level1Nodes[lv1] = self.Tree.AppendItem(self.Root, lv1)
+
+ # Level 2 nodes
+ # Config Data
+ self.ConfigData = {}
+ for lv2 in ["EEPROM Size (Bytes)", "PDI Type", "Device Emulation"]:
+ self.ConfigData[lv2] = self.Tree.AppendItem(self.Level1Nodes["Config Data"], lv2)
+ # Device Identity
+ self.DeviceIdentity = {}
+ for lv2 in ["Vendor ID", "Product Code", "Revision No.", "Serial No."]:
+ self.DeviceIdentity[lv2] = self.Tree.AppendItem(self.Level1Nodes["Device Identity"], lv2)
+ # Mailbox
+ self.Mailbox = {}
+ for lv2 in ["Supported Mailbox", "Bootstrap Configuration", "Standard Configuration"]:
+ self.Mailbox[lv2] = self.Tree.AppendItem(self.Level1Nodes["Mailbox"], lv2)
+
+ # Level 3 nodes
+ # Children of Bootstrap Configuration
+ self.BootstrapConfig = {}
+ for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]:
+ self.BootstrapConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Bootstrap Configuration"], lv3)
+ # Children of Standard Configuration
+ self.StandardConfig = {}
+ for lv3 in ["Receive Offset", "Receive Size", "Send Offset", "Send Size"]:
+ self.StandardConfig[lv3] = self.Tree.AppendItem(self.Mailbox["Standard Configuration"], lv3)
+
+ # Expand Tree
+ for tree in [self.Root,
+ self.Level1Nodes["Config Data"],
+ self.Level1Nodes["Device Identity"],
+ self.Level1Nodes["Mailbox"],
+ self.Mailbox["Bootstrap Configuration"],
+ self.Mailbox["Standard Configuration"]]:
+ self.Tree.Expand(tree)
+
+
+# -------------------------------------------------------------------------------
+# For Hex View Panel
+# shows EEPROM binary as hex data and characters.
+# -------------------------------------------------------------------------------
+class HexView(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: Reference to the parent EtherCATManagementTreebook class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Panel.__init__(self, parent, -1)
+ self.parent = parent
+ self.Controler = controler
+
+ self.HexRow = 8
+ self.HexCol = 17
+
+ self.HexViewSizer = {"view": wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=10),
+ "siiButton": wx.BoxSizer()}
+ self.HexViewButton = {}
+
+ for key, evt_handler in [
+ ("Sii Upload", self.OnButtonSiiUpload),
+ ("Sii Download", self.OnButtonSiiDownload),
+ ("Write to File", self.OnButtonWriteToBinFile),
+ ("Read from File", self.OnButtonReadFromBinFile),
+ ("XML to EEPROM Image", self.OnButtonXmlToEEPROMImg)]:
+ self.HexViewButton[key] = wx.Button(self, -1, key)
+ self.HexViewButton[key].Bind(wx.EVT_BUTTON, evt_handler)
+ self.HexViewSizer["siiButton"].Add(self.HexViewButton[key])
+
+ self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom()
+ self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
+ self.SiiGrid = SiiGridTable(self, self.Controler, self.HexRow, self.HexCol)
+ self.HexViewSizer["view"].AddMany([self.HexViewSizer["siiButton"], self.SiiGrid])
+ self.SiiGrid.CreateGrid(self.HexRow, self.HexCol)
+ self.SetSizer(self.HexViewSizer["view"])
+ self.HexViewSizer["view"].FitInside(self.parent.parent)
+ self.parent.parent.FitInside()
+ self.SiiGrid.SetValue(self.HexCode)
+ self.SiiGrid.Update()
+
+ def UpdateSiiGridTable(self, row, col):
+ """
+ Destroy existing grid and recreate
+ @param row, col : Hex View grid size
+ """
+ self.HexViewSizer["view"].Detach(self.SiiGrid)
+ self.SiiGrid.Destroy()
+ self.SiiGrid = SiiGridTable(self, self.Controler, row, col)
+ self.HexViewSizer["view"].Add(self.SiiGrid)
+ self.SiiGrid.CreateGrid(row, col)
+ self.SetSizer(self.HexViewSizer["view"])
+ self.HexViewSizer["view"].FitInside(self.parent.parent)
+ self.parent.parent.FitInside()
+
+ def OnButtonSiiUpload(self, event):
+ """
+ Load EEPROM data from slave and refresh Hex View grid
+ Binded to 'Sii Upload' button.
+ @param event : wx.EVT_BUTTON object
+ """
+ # Check whether beremiz connected or not.
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
+ if check_connect_flag:
+ # load from EEPROM data and parsing
+ self.SiiBinary = self.Controler.CommonMethod.LoadData()
+ self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
+ self.UpdateSiiGridTable(self.HexRow, self.HexCol)
+ self.SiiGrid.SetValue(self.HexCode)
+ self.SiiGrid.Update()
+
+ def OnButtonSiiDownload(self, event):
+ """
+ Write current EEPROM data to slave and refresh data structure kept by master
+ Binded to 'Sii Download' button.
+ @param event : wx.EVT_BUTTON object
+ """
+ # Check whether beremiz connected or not,
+ # and whether status is "Started" or not.
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
+ if check_connect_flag:
+ status, _log_count = self.Controler.GetCTRoot()._connector.GetPLCstatus()
+ if status is not PlcStatus.Started:
+ self.Controler.CommonMethod.SiiWrite(self.SiiBinary)
+ self.Controler.CommonMethod.Rescan()
+
+ def OnButtonWriteToBinFile(self, event):
+ """
+ Save current EEPROM data to binary file through FileDialog
+ Binded to 'Write to File' button.
+ @param event : wx.EVT_BUTTON object
+ """
+ dialog = wx.FileDialog(self, _("Save as..."), os.getcwd(), "slave0.bin",
+ _("bin files (*.bin)|*.bin|All files|*.*"), wx.SAVE | wx.OVERWRITE_PROMPT)
+
+ if dialog.ShowModal() == wx.ID_OK:
+ filepath = dialog.GetPath()
+ binfile = open(filepath, "wb")
+ binfile.write(self.SiiBinary)
+ binfile.close()
+
+ dialog.Destroy()
+
+ def OnButtonReadFromBinFile(self, event):
+ """
+ Load binary file through FileDialog
+ Binded to 'Read from File' button.
+ @param event : wx.EVT_BUTTON object
+ """
+ dialog = wx.FileDialog(self, _("Choose a binary file"), os.getcwd(), "",
+ _("bin files (*.bin)|*.bin"), wx.OPEN)
+
+ if dialog.ShowModal() == wx.ID_OK:
+ filepath = dialog.GetPath()
+
+ try:
+ binfile = open(filepath, "rb")
+ self.SiiBinary = binfile.read()
+ self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
+ self.UpdateSiiGridTable(self.HexRow, self.HexCol)
+ self.SiiGrid.SetValue(self.HexCode)
+ self.SiiGrid.Update()
+ except Exception:
+ self.Controler.CommonMethod.CreateErrorDialog(_('The file does not exist!'))
+
+ dialog.Destroy()
+
+ def OnButtonXmlToEEPROMImg(self, event):
+ """
+ Create EEPROM data based XML data that current imported
+ Binded to 'XML to EEPROM' button.
+ @param event : wx.EVT_BUTTON object
+ """
+ self.SiiBinary = self.Controler.CommonMethod.XmlToEeprom()
+ self.HexCode, self.HexRow, self.HexCol = self.Controler.CommonMethod.HexRead(self.SiiBinary)
+ self.UpdateSiiGridTable(self.HexRow, self.HexCol)
+ self.SiiGrid.SetValue(self.HexCode)
+ self.SiiGrid.Update()
+
+
+# -------------------------------------------------------------------------------
+# For Hex View grid (fill hex data)
+# -------------------------------------------------------------------------------
+class SiiGridTable(wx.grid.Grid):
+ def __init__(self, parent, controler, row, col):
+ """
+ Constructor
+ @param parent: Reference to the parent HexView class
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ @param row, col: Hex View grid size
+ """
+ self.parent = parent
+ self.Controler = controler
+ self.Row = row
+ self.Col = col
+
+ wx.grid.Grid.__init__(self, parent, -1, size=(830, 450),
+ style=wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
+
+ def SetValue(self, value):
+ """
+ Set data in the table
+ @param value: EEPROM data list of which element is 1 Byte hex data
+ """
+ # set label name and size
+ self.SetRowLabelSize(100)
+ for col in range(self.Col):
+ if col == 16:
+ self.SetColLabelValue(16, "Text View")
+ self.SetColSize(16, (self.GetSize().x-120)*4/20)
+ else:
+ self.SetColLabelValue(col, '%s' % col)
+ self.SetColSize(col, (self.GetSize().x-120)/20)
+
+ # set data into table
+ row = col = 0
+ for row_idx in value:
+ col = 0
+ self.SetRowLabelValue(row, "0x"+"{:0>4x}".format(row*(self.Col-1)))
+ for hex in row_idx:
+ self.SetCellValue(row, col, hex)
+
+ if col == 16:
+ self.SetCellAlignment(row, col, wx.ALIGN_LEFT, wx.ALIGN_CENTER)
+ else:
+ self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER)
+
+ self.SetReadOnly(row, col, True)
+ col = col + 1
+ row = row + 1
+
+
+# -------------------------------------------------------------------------------
+# For Register Access Panel
+# -------------------------------------------------------------------------------
+class RegisterAccessPanel(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: EEPROMAccessPanel object
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ self.parent = parent
+ self.Controler = controler
+ self.__init_data()
+
+ wx.Panel.__init__(self, parent, -1)
+
+ sizer = wx.FlexGridSizer(cols=1, hgap=20, rows=2, vgap=5)
+ button_sizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=10)
+
+ self.ReloadButton = wx.Button(self, -1, "Reload")
+ self.CompactViewCheckbox = wx.CheckBox(self, -1, "Compact View")
+ self.RegisterNotebook = RegisterNotebook(self, self.Controler)
+
+ button_sizer.AddMany([self.ReloadButton, self.CompactViewCheckbox])
+ sizer.AddMany([button_sizer, self.RegisterNotebook])
+ self.SetSizer(sizer)
+
+ self.ReloadButton.Bind(wx.EVT_BUTTON, self.OnReloadButton)
+ self.CompactViewCheckbox.Bind(wx.EVT_CHECKBOX, self.ToggleCompactViewCheckbox)
+
+ for index in range(4):
+ self.RegisterNotebook.RegPage[index].MainTable.CreateGrid(self.MainRow[index], self.MainCol)
+ self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512)
+
+ # data default setting
+ if self.Controler.CommonMethod.RegData == "":
+ self.CompactViewCheckbox.Disable()
+ for index in range(4):
+ self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, 0, index*512, (index+1)*512)
+ else: # If data was saved,
+ self.BasicSetData()
+ self.ParseData()
+ for index in range(4):
+ self.RegisterNotebook.RegPage[index].MainTable.SetValue(self, self.RegMonitorData, index*512, (index+1)*512)
+
+ def __init_data(self):
+ """
+ Declare initial data.
+ """
+ # flag for compact view
+ self.CompactFlag = False
+
+ # main grid의 rows and cols
+ self.MainRow = [512, 512, 512, 512]
+ self.MainCol = 4
+
+ # main grids' data range
+ self.PageRange = []
+ for index in range(4):
+ self.PageRange.append([512*index, 512*(index+1)])
+
+ # Previous value of register data for register description configuration
+ self.PreRegSpec = {"ESCType": "",
+ "FMMUNumber": "",
+ "SMNumber": "",
+ "PDIType": ""}
+
+ def LoadData(self):
+ """
+ Get data from the register.
+ """
+ self.Controler.CommonMethod.RegData = ""
+ # ethercat reg_read
+ # ex : ethercat reg_read -p 0 0x0000 0x0001
+ # return value : 0x11
+ for index in range(4):
+ self.Controler.CommonMethod.RegData = self.Controler.CommonMethod.RegData + " " + self.Controler.CommonMethod.RegRead("0x"+"{:0>4x}".format(index*1024), "0x0400")
+
+ # store previous value
+ # (ESC type, port number of FMMU, port number of SM, and PDI type))
+ for reg_spec in ["ESCType", "FMMUNumber", "SMNumber", "PDIType"]:
+ self.PreRegSpec[reg_spec] = self.Controler.CommonMethod.CrtRegSpec[reg_spec]
+
+ # update registers' description
+ # (ESC type, port number of FMMU, port number of SM, and PDI type)
+ for reg_spec, address in [("ESCType", "0x0000"),
+ ("FMMUNumber", "0x0004"),
+ ("SMNumber", "0x0005"),
+ ("PDIType", "0x0140")]:
+ self.Controler.CommonMethod.CrtRegSpec[reg_spec] = self.Controler.CommonMethod.RegRead(address, "0x0001")
+
+ # Enable compactView checkbox
+ self.CompactViewCheckbox.Enable()
+
+ def BasicSetData(self):
+ """
+ Get and save the description of registers.
+ It's done by parsing register_information.xml.
+ """
+ # parse the above register's value
+ # If the value is 0x12, the result is 12
+ self.ESCType = self.Controler.CommonMethod.CrtRegSpec["ESCType"].split('x')[1]
+ self.PDIType = self.Controler.CommonMethod.CrtRegSpec["PDIType"].split('x')[1]
+ # If the value is 0x12, the result is 18 (It's converted to decimal value)
+ self.FMMUNumber = int(self.Controler.CommonMethod.CrtRegSpec["FMMUNumber"], 16)
+ self.SMNumber = int(self.Controler.CommonMethod.CrtRegSpec["SMNumber"], 16)
+
+ # initialize description dictionary of register main table and register sub table.
+ self.RegisterDescriptionDict = {}
+ self.RegisterSubGridDict = {}
+
+ # ./EthercatMaster/register_information.xml contains register description.
+ if wx.Platform == '__WXMSW__':
+ reg_info_file = open("../../EthercatMaster/register_information.xml", 'r')
+ else:
+ reg_info_file = open("./EthercatMaster/register_information.xml", 'r')
+ reg_info_tree = minidom.parse(reg_info_file)
+ reg_info_file.close()
+
+ # parse register description
+ for register_info in reg_info_tree.childNodes:
+ for register in register_info.childNodes:
+ if register.nodeType == reg_info_tree.ELEMENT_NODE and register.nodeName == "Register":
+ # If it depends on the property(ESC type, PDI type, FMMU number, SM number)
+ for property, type, value in [("esc", "type", self.ESCType),
+ ("pdi", "type", self.PDIType),
+ ("fmmu", "number", self.FMMUNumber),
+ ("sm", "number", self.SMNumber)]:
+ if property in register.attributes.keys():
+ if type == "type":
+ if register.attributes[property].value == value:
+ self.GetRegisterInfo(reg_info_tree, register)
+ break
+ else: # type == "number"
+ if register.attributes[property].value < value:
+ self.GetRegisterInfo(reg_info_tree, register)
+ break
+ else:
+ self.GetRegisterInfo(reg_info_tree, register)
+ break
+
+ def GetRegisterInfo(self, reg_info_tree, register):
+ """
+ Save the register's description into the dictionary.
+ reg_info_tree is based on the register_information.xml.
+ @param reg_info_tree: XML tree
+ @param register: register which you want to get the description
+ """
+ # temporary variables for register main table idescription dictionary
+ reg_index = ""
+ reg_main_description = ""
+
+ for data in register.childNodes:
+ if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Index":
+ for index in data.childNodes:
+ reg_index = index.nodeValue
+ if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Description":
+ for description in data.childNodes:
+ reg_main_description = description.nodeValue
+
+ # Add description for register main table
+ if reg_index != "" and reg_main_description != "":
+ self.RegisterDescriptionDict[reg_index] = reg_main_description
+
+ if data.nodeType == reg_info_tree.ELEMENT_NODE and data.nodeName == "Details":
+ # declare register sub table description dictionary about this index
+ self.RegisterSubGridDict[reg_index] = []
+
+ for detail in data.childNodes:
+ if detail.nodeType == reg_info_tree.ELEMENT_NODE and detail.nodeName == "Detail":
+ # If it depends on the property(ESC type, PDI type, FMMU number, SM number)
+ for property, type, value in [("esc", "type", self.ESCType),
+ ("pdi", "type", self.PDIType),
+ ("fmmu", "number", self.FMMUNumber),
+ ("sm", "number", self.SMNumber)]:
+ if property in detail.attributes.keys():
+ if type == "type":
+ if detail.attributes[property].value == value:
+ self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail)
+ break
+ else: # type == "number"
+ if detail.attributes[property].value < value:
+ self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail)
+ break
+ else:
+ self.GetRegisterDetailInfo(reg_info_tree, reg_index, detail)
+ break
+
+ def GetRegisterDetailInfo(self, reg_info_tree, reg_index, detail):
+ """
+ Get the resgister's detailed description(for sub table) from the reg_info_tree.
+ @param reg_info_tree: XML tree (register_information.xml)
+ @param reg_index: index of the register
+ @param detail: description of the register
+ """
+ # temporary variables for register sub table description dictionary
+ # - It is initialized in every sub description
+ reg_bit_range = ""
+ reg_sub_description = ""
+ reg_enum_dictionary = {}
+
+ for detail_data in detail.childNodes:
+ if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Range":
+ for range in detail_data.childNodes:
+ reg_bit_range = range.nodeValue
+ if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Description":
+ for description in detail_data.childNodes:
+ reg_sub_description = description.nodeValue
+
+ if detail_data.nodeType == reg_info_tree.ELEMENT_NODE and detail_data.nodeName == "Enum":
+ for enum in detail_data.childNodes:
+ if enum.nodeType == reg_info_tree.ELEMENT_NODE and enum.nodeName == "item":
+
+ # temporary variables for a description of each value
+ # For example, if the bit is 1, it is 'enabled'('On', 'True', etc.),
+ # otherwise 'disabled'('Off', 'False', etc.).
+ reg_sub_value = ""
+ reg_sub_value_description = ""
+
+ for item in enum.childNodes:
+ if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "value":
+ for value in item.childNodes:
+ reg_sub_value = value.nodeValue
+ if item.nodeType == reg_info_tree.ELEMENT_NODE and item.nodeName == "Description":
+ for description in item.childNodes:
+ reg_sub_value_description = description.nodeValue
+
+ # Add a description of each value to register enum dictionary
+ if reg_sub_value != "" and reg_sub_value_description != "":
+ reg_enum_dictionary[reg_sub_value] = reg_sub_value_description
+
+ # add a description to register sub table description dictionary
+ if reg_bit_range != "" and reg_sub_description != "":
+ self.RegisterSubGridDict[reg_index].append([reg_bit_range,
+ reg_sub_description,
+ reg_enum_dictionary])
+
+ def ParseData(self):
+ """
+ Transform the data into dec, hex, string, and description
+ """
+ row_data = []
+ self.RegMonitorData = []
+ reg_word = ""
+
+ reg_data = self.Controler.CommonMethod.RegData.split()
+
+ # loop for register(0x0000:0x0fff)
+ for address in range(0x1000):
+ # arrange 2 Bytes of register data
+ reg_word = reg_data[address].split('x')[1] + reg_word
+ if (address % 2) == 1:
+ # append address
+ hex_address = "{:0>4x}".format(address-1)
+ row_data.append(hex_address)
+
+ # append description
+ if hex_address in self.RegisterDescriptionDict:
+ row_data.append(self.RegisterDescriptionDict[hex_address])
+ else:
+ row_data.append("")
+
+ # append Decimal value
+ row_data.append(str(int(reg_word, 16)))
+
+ # append Hex value
+ row_data.append('0x'+reg_word)
+
+ # append ASCII value
+ char_data = ""
+ for iter in range(2):
+ if int(reg_word[iter*2:iter*2+2], 16) >= 32 and int(reg_word[iter*2:iter*2+2], 16) <= 126:
+ char_data = char_data + chr(int(reg_word[iter*2:iter*2+2], 16))
+ else:
+ char_data = char_data + "."
+ row_data.append(char_data)
+
+ self.RegMonitorData.append(row_data)
+ reg_word = "" # initialize regWord
+ row_data = []
+
+ def OnReloadButton(self, event):
+ """
+ Handle the click event of the 'Reload' button.
+ Get the data from registers again, and update the table.
+ @param event: wx.EVT_BUTTON object
+ """
+ # Check whether beremiz connected or not.
+ check_connect_flag = self.Controler.CommonMethod.CheckConnect(False)
+ if check_connect_flag:
+ self.LoadData()
+ self.BasicSetData()
+ self.ParseData()
+ # set data into UI
+ if self.CompactFlag:
+ self.ToggleCompactViewCheckbox(True)
+ else:
+ for index in range(4):
+ self.RegisterNotebook.RegPage[index].UpdateMainTable(self.MainRow[index], self.MainCol,
+ self.PageRange[index][0], self.PageRange[index][1],
+ self.RegMonitorData)
+
+ def ToggleCompactViewCheckbox(self, event):
+ """
+ Handles the event of the 'Compact view' check box.
+ If it's checked, show only the registers that have a description.
+ If not, show all the registers.
+ @param event: wx.EVT_CHECKBOX object
+ """
+
+ # If "Compact View" Checkbox is True
+ # 'event' is argument of this method or event of checkbox.
+ if event is True or event.GetEventObject().GetValue():
+ self.CompactFlag = True
+
+ reg_compact_data = []
+ page_row = [0, 0, 0, 0]
+ for index in range(4):
+ self.PageRange[index] = [0, 0]
+
+ for reg_row_data in self.RegMonitorData:
+ if reg_row_data[1] != "":
+ # data structure for "compact view"
+ reg_compact_data.append(reg_row_data)
+ # count for each register notebooks' row
+ # It compare with register's address.
+ for index in range(4):
+ if int('0x'+reg_row_data[0], 16) < (index+1)*1024:
+ page_row[index] += 1
+ break
+
+ # Setting tables' rows and cols, range for compact view
+ for index in range(4):
+ self.MainRow[index] = page_row[index]
+ self.PageRange[index][1] = page_row[index]
+ for iter in range(index):
+ self.PageRange[index][0] += page_row[iter]
+ self.PageRange[index][1] += page_row[iter]
+
+ # Update table
+ for index in range(4):
+ self.RegisterNotebook.RegPage[index].UpdateMainTable(
+ self.MainRow[index],
+ self.MainCol,
+ self.PageRange[index][0],
+ self.PageRange[index][1],
+ reg_compact_data)
+
+ # Compact View Checkbox is False
+ else:
+ self.CompactFlag = False
+ # Setting original rows, cols and range
+ self.MainRow = [512, 512, 512, 512]
+ self.PageRange = []
+
+ for index in range(4):
+ self.PageRange.append([512*index, 512*(index+1)])
+
+ # Update table
+ for index in range(4):
+ self.RegisterNotebook.RegPage[index].UpdateMainTable(
+ self.MainRow[index],
+ self.MainCol,
+ self.PageRange[index][0],
+ self.PageRange[index][1],
+ self.RegMonitorData)
+
+
+# -------------------------------------------------------------------------------
+# For Register Access Notebook (divide index range)
+# -------------------------------------------------------------------------------
+class RegisterNotebook(wx.Notebook):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: RegisterAccessPanel object
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Notebook.__init__(self, parent, id=-1)
+
+ self.parent = parent
+ self.Controler = controler
+
+ # Initialize pages
+ self.RegPage = []
+ pages = 4
+ for dummy in range(pages):
+ self.RegPage.append(None)
+
+ for index in range(pages):
+ self.RegPage[index] = RegisterNotebookPanel(self, self.Controler,
+ parent.MainRow[index], parent.MainCol)
+ self.AddPage(self.RegPage[index],
+ "0x"+"{:0>4x}".format(index*1024)+" - 0x"+"{:0>4x}".format((index+1)*1024-1))
+
+
+# -------------------------------------------------------------------------------
+# For Register Access Notebook Panel
+# (Main UI : including main, sub table)
+# -------------------------------------------------------------------------------
+class RegisterNotebookPanel(wx.Panel):
+ def __init__(self, parent, controler, row, col):
+ """
+ Constructor
+ @param parent: RegisterAccessPanel object
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ @param row, col: size of the table
+ """
+ wx.Panel.__init__(self, parent, -1)
+
+ self.parent = parent
+ self.Controler = controler
+ self.Row = row
+ self.Col = col
+ sub_row = 0
+ sub_col = 4
+
+ self.Sizer = wx.FlexGridSizer(cols=1, hgap=10, rows=2, vgap=30)
+
+ self.MainTable = RegisterMainTable(self, self.Row, self.Col, self.Controler)
+ self.SubTable = RegisterSubTable(self, sub_row, sub_col)
+
+ self.SubTable.CreateGrid(sub_row, sub_col)
+ self.SubTable.SetValue(self, [])
+
+ self.Sizer.AddMany([self.MainTable, self.SubTable])
+
+ self.SetSizer(self.Sizer)
+
+ def UpdateMainTable(self, row, col, low_index, high_index, data):
+ """
+ Updates main table.
+ It's done by deleting the main table and creating it again.
+ @param row, col: size of the table
+ @param low_index: the lowest index of the page
+ @param high_index: the highest index of the page
+ @param data: data
+ """
+ self.MainTable.Destroy()
+ self.MainTable = RegisterMainTable(self, row, col, self.Controler)
+ self.Sizer.Detach(self.SubTable)
+ self.Sizer.AddMany([self.MainTable, self.SubTable])
+ self.SetSizer(self.Sizer)
+ self.MainTable.CreateGrid(row, col)
+ self.MainTable.SetValue(self, data, low_index, high_index)
+ self.MainTable.Update()
+
+ def UpdateSubTable(self, row, col, data):
+ """
+ Updates sub table.
+ It's done by deleting the sub table and creating it again.
+ @param row, col: size of the table
+ @param data: data
+ """
+ self.SubTable.Destroy()
+ self.SubTable = RegisterSubTable(self, row, col)
+ self.Sizer.Detach(self.MainTable)
+ self.Sizer.AddMany([self.MainTable, self.SubTable])
+ self.Sizer.Layout()
+ self.SetSizer(self.Sizer)
+ self.SubTable.CreateGrid(row, col)
+ self.SubTable.SetValue(self, data)
+ self.SubTable.Update()
+
+
+# -------------------------------------------------------------------------------
+# For Register Access Notebook Panel (Main Table)
+# -------------------------------------------------------------------------------
+class RegisterMainTable(wx.grid.Grid):
+ def __init__(self, parent, row, col, controler):
+ """
+ Constructor
+ @param parent: RegisterNotebook object
+ @param row, col: size of the table
+ @param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ self.parent = parent
+ self.Data = {}
+ self.Row = row
+ self.Col = col
+ self.Controler = controler
+ self.RegisterAccessPanel = self.parent.parent.parent
+
+ wx.grid.Grid.__init__(self, parent, -1, size=(820, 300),
+ style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
+
+ for evt, mapping_method in [(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell),
+ (wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnSelectCell),
+ (wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnRegModifyDialog)]:
+ self.Bind(evt, mapping_method)
+
+ def SetValue(self, parent, reg_monitor_data, low_index, high_index):
+ """
+ Set the RegMonitorData into the main table.
+ @param parent: RegisterNotebook object
+ @param reg_monitor_data: data
+ @param low_index: the lowest index of the page
+ @param high_index: the highest index of the page
+ """
+ self.RegMonitorData = reg_monitor_data
+
+ # set label name and size
+ register_maintable_label = [(0, "Description"), (1, "Dec"),
+ (2, "Hex"), (3, "Char")]
+
+ for (index, label) in register_maintable_label:
+ self.SetColLabelValue(index, label)
+
+ self.SetColSize(0, 200)
+
+ # if reg_monitor_data is 0, it is initialization of register access.
+ if reg_monitor_data == 0:
+ return 0
+
+ # set data into UI
+ row = col = 0
+ for row_index in reg_monitor_data[low_index:high_index]:
+ col = 0
+ self.SetRowLabelValue(row, row_index[0])
+ for data_index in range(4):
+ self.SetCellValue(row, col, row_index[data_index+1])
+ self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER)
+ self.SetReadOnly(row, col, True)
+ col = col + 1
+ row = row + 1
+
+ def OnSelectCell(self, event):
+ """
+ Handles the event of the cell of the main table.
+ @param event: wx.grid object (left click)
+ """
+ # if reg_monitor_data is 0, it is initialization of register access.
+ if self.RegMonitorData == 0:
+ event.Skip()
+ return 0
+
+ sub_row = 0
+ sub_col = 4
+
+ address = self.GetRowLabelValue(event.GetRow())
+
+ reg_sub_grid_data = []
+
+ BIT_RANGE, NAME, DESCRIPTIONS = range(3)
+
+ # Check if this register's detail description is exist or not,
+ # and create data structure for the detail description table ; sub grid
+ if address in self.RegisterAccessPanel.RegisterSubGridDict:
+ for element in self.RegisterAccessPanel.RegisterSubGridDict[address]:
+ row_data = []
+ row_data.append(element[BIT_RANGE])
+ row_data.append(element[NAME])
+ bin_data = "{:0>16b}".format(int(self.GetCellValue(event.GetRow(), 1)))
+ value_range = element[BIT_RANGE].split('-')
+ value = (bin_data[8:16][::-1]+bin_data[0:8][::-1])[int(value_range[0]):(int(value_range[-1])+1)][::-1]
+ row_data.append(str(int(('0b'+str(value)), 2)))
+ if value in element[DESCRIPTIONS]:
+ row_data.append(element[DESCRIPTIONS][value])
+ else:
+ row_data.append('')
+ reg_sub_grid_data.append(row_data)
+ sub_row = sub_row + 1
+
+ self.parent.UpdateSubTable(sub_row, sub_col, reg_sub_grid_data)
+ # event.Skip() updates UI of selecting cell
+ event.Skip()
+
+ def OnRegModifyDialog(self, event):
+ """
+ Handle the event of the cell of the main table.
+ Display the window where the user modifies the value of the cell.
+ @param event: wx.grid object (double click)
+ """
+ # user can enter a value in case that user double-clicked 'Dec' or 'Hex' value.
+ if event.GetCol() == 1 or event.GetCol() == 2:
+ dlg = wx.TextEntryDialog(self, _("Enter hex(0xnnnn) or dec(n) value"),
+ _("Register Modify Dialog"), style=wx.OK | wx.CANCEL)
+
+ # Setting value in initial dialog value
+ start_value = self.GetCellValue(event.GetRow(), event.GetCol())
+ dlg.SetValue(start_value)
+
+ if dlg.ShowModal() == wx.ID_OK:
+ try:
+ # It int(input) success, this input is dev or hex value.
+ # Otherwise, it's error, so it goes except.
+ int(dlg.GetValue(), 0)
+
+ # reg_write
+ # ex) ethercat reg_write -p 0 -t uint16 0x0000 0x0000
+ return_val = self.Controler.CommonMethod.RegWrite('0x'+self.GetRowLabelValue(event.GetRow()), dlg.GetValue())
+
+ if len(return_val) == 0:
+ # set dec
+ self.SetCellValue(event.GetRow(), 1, str(int(dlg.GetValue(), 0)))
+ # set hex
+ hex_data = '0x'+"{:0>4x}".format(int(dlg.GetValue(), 0))
+ self.SetCellValue(event.GetRow(), 2, hex_data)
+ # set char
+ char_data = ""
+ # If hex_data is been able to convert to ascii code, append ascii code.
+ for iter in range(2):
+ if int(hex_data[(iter+1)*2:(iter+2)*2], 16) >= 32 and int(hex_data[(iter+1)*2:(iter+2)*2], 16) <= 126:
+ char_data = char_data + chr(int(hex_data[(iter+1)*2:(iter+2)*2], 16))
+ else:
+ char_data = char_data + "."
+
+ self.SetCellValue(event.GetRow(), 3, char_data)
+
+ else:
+ self.Controler.CommonMethod.CreateErrorDialog(_('You can\'t modify it. This register is read-only or it\'s not connected.'))
+
+ except ValueError:
+ self.Controler.CommonMethod.CreateErrorDialog(_('You entered wrong value. You can enter dec or hex value only.'))
+
+
+# -------------------------------------------------------------------------------
+# For Register Access Notebook Panel (Sub Table)
+# -------------------------------------------------------------------------------
+class RegisterSubTable(wx.grid.Grid):
+ def __init__(self, parent, row, col):
+ """
+ Constructor
+ @param parent: RegisterNotebook object
+ @param row, col: size of the table
+ """
+ self.parent = parent
+ self.Data = {}
+ self.Row = row
+ self.Col = col
+
+ wx.grid.Grid.__init__(self, parent, -1, size=(820, 150),
+ style=wx.EXPAND | wx.ALIGN_CENTRE_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL)
+
+ def SetValue(self, parent, data):
+ """
+ Set the data into the subtable.
+ @param parent: RegisterNotebook object
+ @param data: data
+ """
+ # lset label name and size
+ Register_SubTable_Label = [(0, "Bits"), (1, "Name"),
+ (2, "Value"), (3, "Enum")]
+
+ for (index, label) in Register_SubTable_Label:
+ self.SetColLabelValue(index, label)
+
+ self.SetColSize(1, 200)
+ self.SetColSize(3, 200)
+
+ # set data into table
+ row = col = 0
+ for rowData in data:
+ col = 0
+ for element in rowData:
+ self.SetCellValue(row, col, element)
+ self.SetCellAlignment(row, col, wx.ALIGN_CENTRE, wx.ALIGN_CENTER)
+ self.SetReadOnly(row, col, True)
+ col = col + 1
+ row = row + 1
+
+
+# -------------------------------------------------------------------------------
+# For Master State Panel
+# -------------------------------------------------------------------------------
+class MasterStatePanelClass(wx.Panel):
+ def __init__(self, parent, controler):
+ """
+ Constructor
+ @param parent: wx.ScrollWindow object
+ @Param controler: _EthercatSlaveCTN class in EthercatSlave.py
+ """
+ wx.Panel.__init__(self, parent, -1, (0, 0),
+ size=wx.DefaultSize, style=wx.SUNKEN_BORDER)
+ self.Controler = controler
+ self.parent = parent
+ self.StaticBox = {}
+ self.StaticText = {}
+ self.TextCtrl = {}
+
+ # ----------------------- Main Sizer and Update Button --------------------------------------------
+ self.MasterStateSizer = {"main": wx.BoxSizer(wx.VERTICAL)}
+ for key, attr in [
+ ("innerMain", [1, 10, 2, 10]),
+ ("innerTopHalf", [2, 10, 1, 10]),
+ ("innerBottomHalf", [2, 10, 1, 10]),
+ ("innerMasterState", [2, 10, 3, 10]),
+ ("innerDeviceInfo", [4, 10, 3, 10]),
+ ("innerFrameInfo", [4, 10, 5, 10])]:
+ self.MasterStateSizer[key] = wx.FlexGridSizer(cols=attr[0], hgap=attr[1], rows=attr[2], vgap=attr[3])
+
+ self.UpdateButton = wx.Button(self, label=_('Update'))
+ self.UpdateButton.Bind(wx.EVT_BUTTON, self.OnButtonClick)
+
+ for key, label in [
+ ('masterState', 'EtherCAT Master State'),
+ ('deviceInfo', 'Ethernet Network Card Information'),
+ ('frameInfo', 'Network Frame Information')]:
+ self.StaticBox[key] = wx.StaticBox(self, label=_(label))
+ self.MasterStateSizer[key] = wx.StaticBoxSizer(self.StaticBox[key])
+
+ # ----------------------- Master State -----------------------------------------------------------
+ for key, label in [
+ ('Phase', 'Phase:'),
+ ('Active', 'Active:'),
+ ('Slaves', 'Slave Count:')]:
+ self.StaticText[key] = wx.StaticText(self, label=_(label))
+ self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
+ self.MasterStateSizer['innerMasterState'].AddMany([self.StaticText[key], self.TextCtrl[key]])
+
+ self.MasterStateSizer['masterState'].AddSizer(self.MasterStateSizer['innerMasterState'])
+
+ # ----------------------- Ethernet Network Card Information ---------------------------------------
+ for key, label in [
+ ('Main', 'MAC Address:'),
+ ('Link', 'Link State:'),
+ ('Tx frames', 'Tx Frames:'),
+ ('Rx frames', 'Rx Frames:'),
+ ('Lost frames', 'Lost Frames:')]:
+ self.StaticText[key] = wx.StaticText(self, label=_(label))
+ self.TextCtrl[key] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
+ self.MasterStateSizer['innerDeviceInfo'].AddMany([self.StaticText[key], self.TextCtrl[key]])
+
+ self.MasterStateSizer['deviceInfo'].AddSizer(self.MasterStateSizer['innerDeviceInfo'])
+
+ # ----------------------- Network Frame Information -----------------------------------------------
+ for key, label in [
+ ('Tx frame rate [1/s]', 'Tx Frame Rate [1/s]:'),
+ ('Rx frame rate [1/s]', 'Tx Rate [kByte/s]:'),
+ ('Loss rate [1/s]', 'Loss Rate [1/s]:'),
+ ('Frame loss [%]', 'Frame Loss [%]:')]:
+ self.StaticText[key] = wx.StaticText(self, label=_(label))
+ self.MasterStateSizer['innerFrameInfo'].Add(self.StaticText[key])
+ self.TextCtrl[key] = {}
+ for index in ['0', '1', '2']:
+ self.TextCtrl[key][index] = wx.TextCtrl(self, size=wx.Size(130, 24), style=wx.TE_READONLY)
+ self.MasterStateSizer['innerFrameInfo'].Add(self.TextCtrl[key][index])
+
+ self.MasterStateSizer['frameInfo'].AddSizer(self.MasterStateSizer['innerFrameInfo'])
+
+ # --------------------------------- Main Sizer ----------------------------------------------------
+ for key, sub, in [
+ ('innerTopHalf', ['masterState', 'deviceInfo']),
+ ('innerBottomHalf', ['frameInfo']),
+ ('innerMain', ['innerTopHalf', 'innerBottomHalf'])
+ ]:
+ for key2 in sub:
+ self.MasterStateSizer[key].AddSizer(self.MasterStateSizer[key2])
+
+ self.MasterStateSizer['main'].AddSizer(self.UpdateButton)
+ self.MasterStateSizer['main'].AddSizer(self.MasterStateSizer['innerMain'])
+
+ self.SetSizer(self.MasterStateSizer['main'])
+
+ def OnButtonClick(self, event):
+ """
+ Handle the event of the 'Update' button.
+ Update the data of the master state.
+ @param event: wx.EVT_BUTTON object
+ """
+ if self.Controler.GetCTRoot()._connector is not None:
+ self.MasterState = self.Controler.CommonMethod.GetMasterState()
+ # Update each TextCtrl
+ if self.MasterState:
+ for key in self.TextCtrl:
+ if isinstance(self.TextCtrl[key], dict):
+ for index in self.TextCtrl[key]:
+ self.TextCtrl[key][index].SetValue(self.MasterState[key][int(index)])
+ else:
+ self.TextCtrl[key].SetValue(self.MasterState[key][0])
+ else:
+ self.Controler.CommonMethod.CreateErrorDialog(_('PLC not connected!'))
--- a/etherlab/EthercatCFileGenerator.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/EthercatCFileGenerator.py Fri Nov 23 00:33:04 2018 +0100
@@ -9,9 +9,10 @@
#
# See COPYING file for copyrights details.
+from __future__ import absolute_import
import os
-from EthercatSlave import ExtractHexDecValue, DATATYPECONVERSION, ExtractName
+from etherlab.EthercatSlave import ExtractHexDecValue, DATATYPECONVERSION, ExtractName
SLAVE_PDOS_CONFIGURATION_DECLARATION = """
/* Slave %(slave)d, "%(device_type)s"
@@ -68,13 +69,15 @@
}
"""
+
def ConfigureVariable(entry_infos, str_completion):
entry_infos["data_type"] = DATATYPECONVERSION.get(entry_infos["var_type"], None)
if entry_infos["data_type"] is None:
- raise ValueError, _("Type of location \"%s\" not yet supported!") % entry_infos["var_name"]
-
+ msg = _("Type of location \"%s\" not yet supported!") % entry_infos["var_name"]
+ raise ValueError(msg)
+
if not entry_infos.get("no_decl", False):
- if entry_infos.has_key("real_var"):
+ if "real_var" in entry_infos:
str_completion["located_variables_declaration"].append(
"IEC_%(var_type)s %(real_var)s;" % entry_infos)
else:
@@ -85,45 +88,46 @@
for declaration in entry_infos.get("extra_declarations", []):
entry_infos["extra_decl"] = declaration
str_completion["located_variables_declaration"].append(
- "IEC_%(var_type)s *%(extra_decl)s = &%(real_var)s;" % entry_infos)
- elif not entry_infos.has_key("real_var"):
+ "IEC_%(var_type)s *%(extra_decl)s = &%(real_var)s;" % entry_infos)
+ elif "real_var" not in entry_infos:
entry_infos["real_var"] = "beremiz" + entry_infos["var_name"]
-
+
str_completion["used_pdo_entry_offset_variables_declaration"].append(
"unsigned int slave%(slave)d_%(index).4x_%(subindex).2x;" % entry_infos)
-
+
if entry_infos["data_type"] == "BIT":
str_completion["used_pdo_entry_offset_variables_declaration"].append(
"unsigned int slave%(slave)d_%(index).4x_%(subindex).2x_bit;" % entry_infos)
-
+
str_completion["used_pdo_entry_configuration"].append(
- (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, " +
- "0x%(index).4x, %(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x, " +
- "&slave%(slave)d_%(index).4x_%(subindex).2x_bit},") % entry_infos)
-
+ (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, " +
+ "0x%(index).4x, %(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x, " +
+ "&slave%(slave)d_%(index).4x_%(subindex).2x_bit},") % entry_infos)
+
if entry_infos["dir"] == "I":
str_completion["retrieve_variables"].append(
- (" %(real_var)s = EC_READ_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
- "slave%(slave)d_%(index).4x_%(subindex).2x_bit);") % entry_infos)
+ (" %(real_var)s = EC_READ_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
+ "slave%(slave)d_%(index).4x_%(subindex).2x_bit);") % entry_infos)
elif entry_infos["dir"] == "Q":
str_completion["publish_variables"].append(
- (" EC_WRITE_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
- "slave%(slave)d_%(index).4x_%(subindex).2x_bit, %(real_var)s);") % entry_infos)
-
+ (" EC_WRITE_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
+ "slave%(slave)d_%(index).4x_%(subindex).2x_bit, %(real_var)s);") % entry_infos)
+
else:
str_completion["used_pdo_entry_configuration"].append(
- (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, 0x%(index).4x, " +
+ (" {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, 0x%(index).4x, " +
"%(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x},") % entry_infos)
-
+
if entry_infos["dir"] == "I":
str_completion["retrieve_variables"].append(
- (" %(real_var)s = EC_READ_%(data_type)s(domain1_pd + " +
+ (" %(real_var)s = EC_READ_%(data_type)s(domain1_pd + " +
"slave%(slave)d_%(index).4x_%(subindex).2x);") % entry_infos)
elif entry_infos["dir"] == "Q":
str_completion["publish_variables"].append(
- (" EC_WRITE_%(data_type)s(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
+ (" EC_WRITE_%(data_type)s(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
"%(real_var)s);") % entry_infos)
+
def ExclusionSortFunction(x, y):
if x["matching"] == y["matching"]:
if x["assigned"] and not y["assigned"]:
@@ -133,23 +137,24 @@
return cmp(x["count"], y["count"])
return -cmp(x["matching"], y["matching"])
-class _EthercatCFileGenerator:
-
+
+class _EthercatCFileGenerator(object):
+
def __init__(self, controler):
self.Controler = controler
-
+
self.Slaves = []
self.UsedVariables = {}
def __del__(self):
- self.Controler = None
-
+ self.Controler = None
+
def DeclareSlave(self, slave_index, slave):
self.Slaves.append((slave_index, slave.getInfo().getAutoIncAddr(), slave))
def DeclareVariable(self, slave_index, index, subindex, iec_type, dir, name, no_decl=False):
slave_variables = self.UsedVariables.setdefault(slave_index, {})
-
+
entry_infos = slave_variables.get((index, subindex), None)
if entry_infos is None:
slave_variables[(index, subindex)] = {
@@ -162,18 +167,20 @@
entry_infos["infos"][4].append(name)
return entry_infos["infos"][2]
else:
- raise ValueError, _("Output variables can't be defined with different locations (%s and %s)") % (entry_infos["infos"][2], name)
+ msg = _("Output variables can't be defined with different locations ({a1} and {a2})").\
+ format(a1=entry_infos["infos"][2], a2=name)
+ raise ValueError(msg)
else:
- raise ValueError, _("Definition conflict for location \"%s\"") % name
-
+ raise ValueError(_("Definition conflict for location \"%s\"") % name)
+
def GenerateCFile(self, filepath, location_str, master_number):
-
+
# Extract etherlab master code template
plc_etherlab_filepath = os.path.join(os.path.split(__file__)[0], "plc_etherlab.c")
plc_etherlab_file = open(plc_etherlab_filepath, 'r')
plc_etherlab_code = plc_etherlab_file.read()
plc_etherlab_file.close()
-
+
# Initialize strings for formatting master code template
str_completion = {
"location": location_str,
@@ -189,49 +196,51 @@
"retrieve_variables": [],
"publish_variables": [],
}
-
+
# Initialize variable storing variable mapping state
for slave_entries in self.UsedVariables.itervalues():
for entry_infos in slave_entries.itervalues():
entry_infos["mapped"] = False
-
+
# Sort slaves by position (IEC_Channel)
self.Slaves.sort()
# Initialize dictionary storing alias auto-increment position values
alias = {}
-
+
# Generating code for each slave
for (slave_idx, slave_alias, slave) in self.Slaves:
type_infos = slave.getType()
-
+
# Defining slave alias and auto-increment position
if alias.get(slave_alias) is not None:
alias[slave_alias] += 1
else:
alias[slave_alias] = 0
slave_pos = (slave_alias, alias[slave_alias])
-
+
# Extract slave device informations
device, module_extra_params = self.Controler.GetModuleInfos(type_infos)
if device is None:
- raise ValueError, _("No informations found for device %s!") % (type_infos["device_type"])
-
+ msg = _("No informations found for device %s!") \
+ % (type_infos["device_type"])
+ raise ValueError(msg)
+
# Extract slaves variables to be mapped
slave_variables = self.UsedVariables.get(slave_idx, {})
-
+
# Extract slave device object dictionary entries
device_entries = device.GetEntriesList()
-
+
# Adding code for declaring slave in master code template strings
for element in ["vendor", "product_code", "revision_number"]:
type_infos[element] = ExtractHexDecValue(type_infos[element])
type_infos.update(dict(zip(["slave", "alias", "position"], (slave_idx,) + slave_pos)))
-
+
# Extract slave device CoE informations
device_coe = device.getCoE()
if device_coe is not None:
-
- # If device support CanOpen over Ethernet, adding code for calling
+
+ # If device support CanOpen over Ethernet, adding code for calling
# init commands when initializing slave in master code template strings
initCmds = []
for initCmd in device_coe.getInitCmd():
@@ -256,37 +265,37 @@
}
init_cmd_infos.update(type_infos)
str_completion["slaves_initialization"] += SLAVE_INITIALIZATION_TEMPLATE % init_cmd_infos
-
+
# Extract slave device PDO configuration capabilities
PdoAssign = device_coe.getPdoAssign()
PdoConfig = device_coe.getPdoConfig()
else:
PdoAssign = PdoConfig = False
-
+
# Test if slave has a configuration or need one
if len(device.getTxPdo() + device.getRxPdo()) > 0 or len(slave_variables) > 0 and PdoConfig and PdoAssign:
-
+
str_completion["slaves_declaration"] += "static ec_slave_config_t *slave%(slave)d = NULL;\n" % type_infos
str_completion["slaves_configuration"] += SLAVE_CONFIGURATION_TEMPLATE % type_infos
-
- # Initializing
+
+ # Initializing
pdos_infos = {
"pdos_entries_infos": [],
"pdos_infos": [],
- "pdos_sync_infos": [],
+ "pdos_sync_infos": [],
}
pdos_infos.update(type_infos)
-
+
sync_managers = []
for sync_manager_idx, sync_manager in enumerate(device.getSm()):
sync_manager_infos = {
- "index": sync_manager_idx,
+ "index": sync_manager_idx,
"name": sync_manager.getcontent(),
"slave": slave_idx,
- "pdos": [],
+ "pdos": [],
"pdos_number": 0,
}
-
+
sync_manager_control_byte = ExtractHexDecValue(sync_manager.getControlByte())
sync_manager_direction = sync_manager_control_byte & 0x0c
sync_manager_watchdog = sync_manager_control_byte & 0x40
@@ -298,50 +307,50 @@
sync_manager_infos["watchdog"] = "EC_WD_ENABLE"
else:
sync_manager_infos["watchdog"] = "EC_WD_DISABLE"
-
+
sync_managers.append(sync_manager_infos)
-
+
pdos_index = []
exclusive_pdos = {}
selected_pdos = []
for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] +
[(pdo, "Outputs") for pdo in device.getRxPdo()]):
-
+
pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
pdos_index.append(pdo_index)
-
+
excluded_list = pdo.getExclude()
if len(excluded_list) > 0:
exclusion_list = [pdo_index]
for excluded in excluded_list:
exclusion_list.append(ExtractHexDecValue(excluded.getcontent()))
exclusion_list.sort()
-
+
exclusion_scope = exclusive_pdos.setdefault(tuple(exclusion_list), [])
-
+
entries = pdo.getEntry()
pdo_mapping_match = {
- "index": pdo_index,
- "matching": 0,
- "count": len(entries),
+ "index": pdo_index,
+ "matching": 0,
+ "count": len(entries),
"assigned": pdo.getSm() is not None
}
exclusion_scope.append(pdo_mapping_match)
-
+
for entry in entries:
index = ExtractHexDecValue(entry.getIndex().getcontent())
subindex = ExtractHexDecValue(entry.getSubIndex())
if slave_variables.get((index, subindex), None) is not None:
pdo_mapping_match["matching"] += 1
-
- if pdo.getFixed() != True:
+
+ if pdo.getFixed() is not True:
pdo_mapping_match["matching"] += \
module_extra_params["max_pdo_size"] - \
pdo_mapping_match["count"]
-
+
elif pdo.getMandatory():
selected_pdos.append(pdo_index)
-
+
excluded_pdos = []
for exclusion_scope in exclusive_pdos.itervalues():
exclusion_scope.sort(ExclusionSortFunction)
@@ -349,22 +358,23 @@
if exclusion_scope[0]["matching"] > 0:
selected_pdos.append(exclusion_scope[0]["index"])
start_excluding_index = 1
- excluded_pdos.extend([pdo["index"]
- for pdo in exclusion_scope[start_excluding_index:]
+ excluded_pdos.extend([
+ pdo["index"]
+ for pdo in exclusion_scope[start_excluding_index:]
if PdoAssign or not pdo["assigned"]])
-
+
for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] +
[(pdo, "Outputs") for pdo in device.getRxPdo()]):
entries = pdo.getEntry()
-
+
pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
if pdo_index in excluded_pdos:
continue
-
+
pdo_needed = pdo_index in selected_pdos
-
+
entries_infos = []
-
+
for entry in entries:
index = ExtractHexDecValue(entry.getIndex().getcontent())
subindex = ExtractHexDecValue(entry.getSubIndex())
@@ -376,30 +386,30 @@
}
entry_infos.update(type_infos)
entries_infos.append(" {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos)
-
+
entry_declaration = slave_variables.get((index, subindex), None)
if entry_declaration is not None and not entry_declaration["mapped"]:
pdo_needed = True
-
- entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
+
+ entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
entry_declaration["infos"])))
entry_declaration["mapped"] = True
-
+
entry_type = entry.getDataType().getcontent()
if entry_infos["var_type"] != entry_type:
message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"]
- if (self.Controler.GetSizeOfType(entry_infos["var_type"]) !=
- self.Controler.GetSizeOfType(entry_type)):
- raise ValueError, message
+ if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \
+ self.Controler.GetSizeOfType(entry_type):
+ raise ValueError(message)
else:
self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n")
-
- if (entry_infos["dir"] == "I" and pdo_type != "Inputs" or
- entry_infos["dir"] == "Q" and pdo_type != "Outputs"):
- raise ValueError, _("Wrong direction for location \"%s\"!") % entry_infos["var_name"]
-
+
+ if (entry_infos["dir"] == "I" and pdo_type != "Inputs") or \
+ (entry_infos["dir"] == "Q" and pdo_type != "Outputs"):
+ raise ValueError(_("Wrong direction for location \"%s\"!") % entry_infos["var_name"])
+
ConfigureVariable(entry_infos, str_completion)
-
+
elif pdo_type == "Outputs" and entry.getDataType() is not None and device_coe is not None:
data_type = entry.getDataType().getcontent()
entry_infos["dir"] = "Q"
@@ -407,59 +417,60 @@
entry_infos["data_type"] = DATATYPECONVERSION.get(data_type)
entry_infos["var_type"] = data_type
entry_infos["real_var"] = "slave%(slave)d_%(index).4x_%(subindex).2x_default" % entry_infos
-
+
ConfigureVariable(entry_infos, str_completion)
-
+
str_completion["slaves_output_pdos_default_values_extraction"] += \
SLAVE_OUTPUT_PDO_DEFAULT_VALUE % entry_infos
-
+
if pdo_needed:
for excluded in pdo.getExclude():
excluded_index = ExtractHexDecValue(excluded.getcontent())
if excluded_index not in excluded_pdos:
excluded_pdos.append(excluded_index)
-
+
sm = pdo.getSm()
if sm is None:
for sm_idx, sync_manager in enumerate(sync_managers):
if sync_manager["name"] == pdo_type:
sm = sm_idx
if sm is None:
- raise ValueError, _("No sync manager available for %s pdo!") % pdo_type
-
+ raise ValueError(_("No sync manager available for %s pdo!") % pdo_type)
+
sync_managers[sm]["pdos_number"] += 1
sync_managers[sm]["pdos"].append(
{"slave": slave_idx,
"index": pdo_index,
"name": ExtractName(pdo.getName()),
- "type": pdo_type,
+ "type": pdo_type,
"entries": entries_infos,
"entries_number": len(entries_infos),
- "fixed": pdo.getFixed() == True})
-
+ "fixed": pdo.getFixed() is True})
+
if PdoConfig and PdoAssign:
dynamic_pdos = {}
dynamic_pdos_number = 0
- for category, min_index, max_index in [("Inputs", 0x1600, 0x1800),
+ for category, min_index, max_index in [("Inputs", 0x1600, 0x1800),
("Outputs", 0x1a00, 0x1C00)]:
for sync_manager in sync_managers:
if sync_manager["name"] == category:
category_infos = dynamic_pdos.setdefault(category, {})
category_infos["sync_manager"] = sync_manager
- category_infos["pdos"] = [pdo for pdo in category_infos["sync_manager"]["pdos"]
+ category_infos["pdos"] = [pdo for pdo in category_infos["sync_manager"]["pdos"]
if not pdo["fixed"] and pdo["type"] == category]
category_infos["current_index"] = min_index
category_infos["max_index"] = max_index
break
-
+
for (index, subindex), entry_declaration in slave_variables.iteritems():
-
+
if not entry_declaration["mapped"]:
entry = device_entries.get((index, subindex), None)
if entry is None:
- raise ValueError, _("Unknown entry index 0x%4.4x, subindex 0x%2.2x for device %s") % \
- (index, subindex, type_infos["device_type"])
-
+ msg = _("Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}").\
+ format(a1=index, a2=subindex, a3=type_infos["device_type"])
+ raise ValueError(msg)
+
entry_infos = {
"index": index,
"subindex": subindex,
@@ -467,45 +478,48 @@
"bitlen": entry["BitSize"],
}
entry_infos.update(type_infos)
-
- entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
+
+ entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
entry_declaration["infos"])))
entry_declaration["mapped"] = True
-
+
if entry_infos["var_type"] != entry["Type"]:
message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"]
- if (self.Controler.GetSizeOfType(entry_infos["var_type"]) !=
- self.Controler.GetSizeOfType(entry["Type"])):
- raise ValueError, message
+ if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \
+ self.Controler.GetSizeOfType(entry["Type"]):
+ raise ValueError(message)
else:
self.Controler.GetCTRoot().logger.write_warning(message + "\n")
-
+
if entry_infos["dir"] == "I" and entry["PDOMapping"] in ["T", "RT"]:
pdo_type = "Inputs"
elif entry_infos["dir"] == "Q" and entry["PDOMapping"] in ["R", "RT"]:
pdo_type = "Outputs"
else:
- raise ValueError, _("Wrong direction for location \"%s\"!") % entry_infos["var_name"]
-
- if not dynamic_pdos.has_key(pdo_type):
- raise ValueError, _("No Sync manager defined for %s!") % pdo_type
-
+ msg = _("Wrong direction for location \"%s\"!") \
+ % entry_infos["var_name"]
+ raise ValueError(msg)
+
+ if pdo_type not in dynamic_pdos:
+ msg = _("No Sync manager defined for %s!") % pdo_type
+ raise ValueError(msg)
+
ConfigureVariable(entry_infos, str_completion)
-
+
if len(dynamic_pdos[pdo_type]["pdos"]) > 0:
pdo = dynamic_pdos[pdo_type]["pdos"][0]
elif module_extra_params["add_pdo"]:
while dynamic_pdos[pdo_type]["current_index"] in pdos_index:
dynamic_pdos[pdo_type]["current_index"] += 1
if dynamic_pdos[pdo_type]["current_index"] >= dynamic_pdos[pdo_type]["max_index"]:
- raise ValueError, _("No more free PDO index available for %s!") % pdo_type
+ raise ValueError(_("No more free PDO index available for %s!") % pdo_type)
pdos_index.append(dynamic_pdos[pdo_type]["current_index"])
-
+
dynamic_pdos_number += 1
pdo = {"slave": slave_idx,
"index": dynamic_pdos[pdo_type]["current_index"],
"name": "Dynamic PDO %d" % dynamic_pdos_number,
- "type": pdo_type,
+ "type": pdo_type,
"entries": [],
"entries_number": 0,
"fixed": False}
@@ -514,55 +528,55 @@
dynamic_pdos[pdo_type]["pdos"].append(pdo)
else:
break
-
+
pdo["entries"].append(" {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos)
if entry_infos["bitlen"] < module_extra_params["pdo_alignment"]:
pdo["entries"].append(" {0x0000, 0x00, %d}, /* None */" % (
- module_extra_params["pdo_alignment"] - entry_infos["bitlen"]))
+ module_extra_params["pdo_alignment"] - entry_infos["bitlen"]))
pdo["entries_number"] += 1
-
+
if pdo["entries_number"] == module_extra_params["max_pdo_size"]:
dynamic_pdos[pdo_type]["pdos"].pop(0)
-
+
pdo_offset = 0
entry_offset = 0
for sync_manager_infos in sync_managers:
-
+
for pdo_infos in sync_manager_infos["pdos"]:
pdo_infos["offset"] = entry_offset
pdo_entries = pdo_infos["entries"]
pdos_infos["pdos_infos"].append(
- (" {0x%(index).4x, %(entries_number)d, " +
+ (" {0x%(index).4x, %(entries_number)d, " +
"slave_%(slave)d_pdo_entries + %(offset)d}, /* %(name)s */") % pdo_infos)
entry_offset += len(pdo_entries)
pdos_infos["pdos_entries_infos"].extend(pdo_entries)
-
+
sync_manager_infos["offset"] = pdo_offset
pdo_offset_shift = sync_manager_infos["pdos_number"]
pdos_infos["pdos_sync_infos"].append(
- (" {%(index)d, %(sync_manager_type)s, %(pdos_number)d, " +
+ (" {%(index)d, %(sync_manager_type)s, %(pdos_number)d, " +
("slave_%(slave)d_pdos + %(offset)d" if pdo_offset_shift else "NULL") +
", %(watchdog)s},") % sync_manager_infos)
- pdo_offset += pdo_offset_shift
-
+ pdo_offset += pdo_offset_shift
+
for element in ["pdos_entries_infos", "pdos_infos", "pdos_sync_infos"]:
pdos_infos[element] = "\n".join(pdos_infos[element])
-
+
str_completion["pdos_configuration_declaration"] += SLAVE_PDOS_CONFIGURATION_DECLARATION % pdos_infos
-
+
for (index, subindex), entry_declaration in slave_variables.iteritems():
if not entry_declaration["mapped"]:
- message = _("Entry index 0x%4.4x, subindex 0x%2.2x not mapped for device %s") % \
- (index, subindex, type_infos["device_type"])
+ message = _("Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}").\
+ format(a1=index, a2=subindex, a3=type_infos["device_type"])
self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n")
-
- for element in ["used_pdo_entry_offset_variables_declaration",
- "used_pdo_entry_configuration",
- "located_variables_declaration",
- "retrieve_variables",
+
+ for element in ["used_pdo_entry_offset_variables_declaration",
+ "used_pdo_entry_configuration",
+ "located_variables_declaration",
+ "retrieve_variables",
"publish_variables"]:
str_completion[element] = "\n".join(str_completion[element])
-
+
etherlabfile = open(filepath, 'w')
etherlabfile.write(plc_etherlab_code % str_completion)
etherlabfile.close()
--- a/etherlab/EthercatCIA402Slave.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/EthercatCIA402Slave.py Fri Nov 23 00:33:04 2018 +0100
@@ -9,18 +9,19 @@
#
# See COPYING file for copyrights details.
+from __future__ import absolute_import
import os
import wx
-from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
-
-from MotionLibrary import Headers, AxisXSD
-from EthercatSlave import _EthercatSlaveCTN, _CommonSlave
-from ConfigEditor import CIA402NodeEditor
+from PLCControler import LOCATION_CONFNODE, LOCATION_VAR_INPUT
+
+from MotionLibrary import AxisXSD
+from etherlab.EthercatSlave import _EthercatSlaveCTN, _CommonSlave
+from etherlab.ConfigEditor import CIA402NodeEditor
# Definition of node variables that have to be mapped in PDO
-# [(name, index, subindex, type,
+# [(name, index, subindex, type,
# direction for master ('I': input, 'Q': output)),...]
NODE_VARIABLES = [
("ControlWord", 0x6040, 0x00, "UINT", "Q"),
@@ -38,12 +39,12 @@
# Definition of optional node variables that can be added to PDO mapping.
# A checkbox will be displayed for each section in node configuration panel to
# enable them
-# [(section_name,
-# [{'description', (name, index, subindex, type,
+# [(section_name,
+# [{'description', (name, index, subindex, type,
# direction for master ('I': input, 'Q': output)),
-# 'retrieve', string_template_for_retrieve_variable (None: not retrieved,
+# 'retrieve', string_template_for_retrieve_variable (None: not retrieved,
# default string template if not defined),
-# 'publish', string_template_for_publish_variable (None: not published,
+# 'publish', string_template_for_publish_variable (None: not published,
# default string template if not defined),
# },...]
EXTRA_NODE_VARIABLES = [
@@ -74,24 +75,25 @@
# List of parameters name in no configuration panel for optional variable
# sections
EXTRA_NODE_VARIABLES_DICT = {
- "Enable" + name: params
+ "Enable" + name: params
for name, params in EXTRA_NODE_VARIABLES}
# List of block to define to interface MCL to fieldbus for specific functions
FIELDBUS_INTERFACE_GLOBAL_INSTANCES = [
- {"blocktype": "GetTorqueLimit",
+ {"blocktype": "GetTorqueLimit",
"inputs": [],
"outputs": [{"name": "TorqueLimitPos", "type": "UINT"},
{"name": "TorqueLimitNeg", "type": "UINT"}]},
- {"blocktype": "SetTorqueLimit",
+ {"blocktype": "SetTorqueLimit",
"inputs": [{"name": "TorqueLimitPos", "type": "UINT"},
{"name": "TorqueLimitNeg", "type": "UINT"}],
"outputs": []},
]
-#--------------------------------------------------
+# --------------------------------------------------
# Ethercat CIA402 Node
-#--------------------------------------------------
+# --------------------------------------------------
+
class _EthercatCIA402SlaveCTN(_EthercatSlaveCTN):
XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
@@ -104,103 +106,114 @@
</xsd:schema>
""" % ("\n".join(["""\
<xsd:attribute name="Enable%s" type="xsd:boolean"
- use="optional" default="false"/>""" % category
- for category, variables in EXTRA_NODE_VARIABLES]) + AxisXSD)
-
+ use="optional" default="false"/>""" % category
+ for category, variables in EXTRA_NODE_VARIABLES]) + AxisXSD)
+
NODE_PROFILE = 402
EditorType = CIA402NodeEditor
-
+
ConfNodeMethods = [
- {"bitmap" : "CIA402AxisRef",
- "name" : _("Axis Ref"),
- "tooltip" : _("Initiate Drag'n drop of Axis ref located variable"),
- "method" : "_getCIA402AxisRef",
- "push": True},
- {"bitmap" : "CIA402NetPos",
- "name" : _("Axis Pos"),
- "tooltip" : _("Initiate Drag'n drop of Network position located variable"),
- "method" : "_getCIA402NetworkPosition",
- "push": True},
+ {
+ "bitmap": "CIA402AxisRef",
+ "name": _("Axis Ref"),
+ "tooltip": _("Initiate Drag'n drop of Axis ref located variable"),
+ "method": "_getCIA402AxisRef",
+ "push": True,
+ },
+ {
+ "bitmap": "CIA402NetPos",
+ "name": _("Axis Pos"),
+ "tooltip": _("Initiate Drag'n drop of Network position located variable"),
+ "method": "_getCIA402NetworkPosition",
+ "push": True,
+ },
]
-
-#--------------------------------------------------
+
+# --------------------------------------------------
# class code
-#--------------------------------------------------
-
+# --------------------------------------------------
+
def __init__(self):
+ _EthercatSlaveCTN.__init__(self)
+
# ----------- call ethercat mng. function --------------
self.CommonMethod = _CommonSlave(self)
-
+
def GetIconName(self):
return "CIA402Slave"
-
+
def SetParamsAttribute(self, path, value):
if path == "CIA402SlaveParams.Type":
path = "SlaveParams.Type"
elif path == "CIA402SlaveParams.Alias":
path = "SlaveParams.Alias"
return _EthercatSlaveCTN.SetParamsAttribute(self, path, value)
-
+
def GetVariableLocationTree(self):
axis_name = self.CTNName()
current_location = self.GetCurrentLocation()
- children = [{"name": name_frmt % (axis_name),
- "type": LOCATION_VAR_INPUT,
- "size": "W",
- "IEC_type": iec_type,
- "var_name": var_name_frmt % axis_name,
- "location": location_frmt % (
- ".".join(map(str, current_location))),
- "description": "",
- "children": []}
- for name_frmt, iec_type, var_name_frmt, location_frmt in
- [("%s Network Position", "UINT", "%s_pos", "%%IW%s"),
- ("%s Axis Ref", "AXIS_REF", "%s", "%%IW%s.402")]]
- children.extend(self.CTNParent.GetDeviceLocationTree(
- self.GetSlavePos(), current_location, axis_name))
- return {"name": axis_name,
- "type": LOCATION_CONFNODE,
- "location": self.GetFullIEC_Channel(),
- "children": children,
+ children = [
+ {
+ "name": name_frmt % (axis_name),
+ "type": LOCATION_VAR_INPUT,
+ "size": "W",
+ "IEC_type": iec_type,
+ "var_name": var_name_frmt % axis_name,
+ "location": location_frmt % (".".join(map(str, current_location))),
+ "description": "",
+ "children": []
+ }
+ for name_frmt, iec_type, var_name_frmt, location_frmt in [
+ ("%s Network Position", "UINT", "%s_pos", "%%IW%s"),
+ ("%s Axis Ref", "AXIS_REF", "%s", "%%IW%s.402")
+ ]
+ ]
+ children.extend(self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(),
+ current_location,
+ axis_name))
+ return {
+ "name": axis_name,
+ "type": LOCATION_CONFNODE,
+ "location": self.GetFullIEC_Channel(),
+ "children": children,
}
-
+
def CTNGlobalInstances(self):
current_location = self.GetCurrentLocation()
- return [("%s_%s" % (block_infos["blocktype"],
+ return [("%s_%s" % (block_infos["blocktype"],
"_".join(map(str, current_location))),
- "EtherLab%s" % block_infos["blocktype"], "")
+ "EtherLab%s" % block_infos["blocktype"], "")
for block_infos in FIELDBUS_INTERFACE_GLOBAL_INSTANCES]
-
+
def StartDragNDrop(self, data):
data_obj = wx.TextDataObject(str(data))
dragSource = wx.DropSource(self.GetCTRoot().AppFrame)
dragSource.SetData(data_obj)
dragSource.DoDragDrop()
-
+
def _getCIA402NetworkPosition(self):
self.StartDragNDrop(
- ("%%IW%s" % ".".join(map(str, self.GetCurrentLocation())),
+ ("%%IW%s" % ".".join(map(str, self.GetCurrentLocation())),
"location", "UINT", self.CTNName() + "_Pos", ""))
-
+
def _getCIA402AxisRef(self):
self.StartDragNDrop(
- ("%%IW%s.402" % ".".join(map(str, self.GetCurrentLocation())),
+ ("%%IW%s.402" % ".".join(map(str, self.GetCurrentLocation())),
"location", "AXIS_REF", self.CTNName(), ""))
-
+
def CTNGenerate_C(self, buildpath, locations):
current_location = self.GetCurrentLocation()
-
- location_str = "_".join(map(lambda x:str(x), current_location))
+
+ location_str = "_".join(map(str, current_location))
slave_pos = self.GetSlavePos()
- MCL_headers = Headers
-
- # Open CIA402 node code template file
- plc_cia402node_filepath = os.path.join(os.path.split(__file__)[0],
+
+ # Open CIA402 node code template file
+ plc_cia402node_filepath = os.path.join(os.path.split(__file__)[0],
"plc_cia402node.c")
plc_cia402node_file = open(plc_cia402node_filepath, 'r')
plc_cia402node_code = plc_cia402node_file.read()
plc_cia402node_file.close()
-
+
# Init list of generated strings for each code template file section
fieldbus_interface_declaration = []
fieldbus_interface_definition = []
@@ -210,31 +223,44 @@
extern_located_variables_declaration = []
entry_variables = []
init_entry_variables = []
-
+
# Fieldbus interface code sections
for blocktype_infos in FIELDBUS_INTERFACE_GLOBAL_INSTANCES:
blocktype = blocktype_infos["blocktype"]
ucase_blocktype = blocktype.upper()
blockname = "_".join([ucase_blocktype, location_str])
-
- extract_inputs = "\n".join(["""\
- __SET_VAR(%s->, %s,, %s);""" % (blockname, input_name, input_value)
- for (input_name, input_value) in [
- ("EXECUTE", "__GET_VAR(data__->EXECUTE)")] + [
- (input["name"].upper(),
+
+ extract_inputs = "\n".join([
+ """\
+ __SET_VAR(%s->, %s,, %s);""" % (blockname, input_name, input_value)
+ for (input_name, input_value) in
+ [("EXECUTE", "__GET_VAR(data__->EXECUTE)")] + [
+ (input["name"].upper(),
"__GET_VAR(data__->%s)" % input["name"].upper())
- for input in blocktype_infos["inputs"]]
- ])
-
-
- return_outputs = "\n".join(["""\
- __SET_VAR(data__->,%(output_name)s,,
- __GET_VAR(%(blockname)s->%(output_name)s));""" % locals()
- for output_name in ["DONE", "BUSY", "ERROR"] + [
- output["name"].upper()
- for output in blocktype_infos["outputs"]]
- ])
-
+ for input in blocktype_infos["inputs"]
+ ]])
+
+ return_outputs = "\n".join([
+ """\
+ __SET_VAR(data__->,%(output_name)s,,
+ __GET_VAR(%(blockname)s->%(output_name)s));""" % {
+ "output_name": output_name,
+ "blockname": blockname
+ }
+ for output_name in ["DONE", "BUSY", "ERROR"] + [
+ output["name"].upper()
+ for output in blocktype_infos["outputs"]]
+ ])
+
+ loc_dict = {
+ "ucase_blocktype": ucase_blocktype,
+ "blocktype": blocktype,
+ "blockname": blockname,
+ "location_str": location_str,
+ "extract_inputs": extract_inputs,
+ "return_outputs": return_outputs,
+ }
+
fieldbus_interface_declaration.append("""
extern void ETHERLAB%(ucase_blocktype)s_body__(ETHERLAB%(ucase_blocktype)s* data__);
void __%(blocktype)s_%(location_str)s(MC_%(ucase_blocktype)s *data__) {
@@ -244,89 +270,103 @@
%(extract_inputs)s
ETHERLAB%(ucase_blocktype)s_body__(%(blockname)s);
%(return_outputs)s
-}""" % locals())
-
+}""" % loc_dict)
+
fieldbus_interface_definition.append("""\
AxsPub.axis->__mcl_func_MC_%(blocktype)s = __%(blocktype)s_%(location_str)s;\
-""" % locals())
-
+""" % loc_dict)
+
# Get a copy list of default variables to map
variables = NODE_VARIABLES[:]
-
+
# Set AxisRef public struct members value
node_params = self.CTNParams[1].getElementInfos(self.CTNParams[0])
for param in node_params["children"]:
param_name = param["name"]
-
+
# Param is optional variables section enable flag
extra_node_variable_infos = EXTRA_NODE_VARIABLES_DICT.get(param_name)
if extra_node_variable_infos is not None:
param_name = param_name.replace("Enable", "") + "Enabled"
-
+
if not param["value"]:
continue
-
+
# Optional variables section is enabled
for variable_infos in extra_node_variable_infos:
var_name = variable_infos["description"][0]
-
+
# Add each variables defined in section description to the
# list of variables to map
variables.append(variable_infos["description"])
-
+
# Add code to publish or retrive variable
- for var_exchange_dir, str_list, default_template in [
- ("retrieve", extra_variables_retrieve,
- " AxsPub.axis->%(var_name)s = *(AxsPub.%(var_name)s);"),
- ("publish", extra_variables_publish,
- " *(AxsPub.%(var_name)s) = AxsPub.axis->%(var_name)s;")]:
-
- template = variable_infos.get(var_exchange_dir,
- default_template)
+ coded = [
+ ("retrieve",
+ extra_variables_retrieve,
+ " AxsPub.axis->%(var_name)s = *(AxsPub.%(var_name)s);"),
+ ("publish",
+ extra_variables_publish,
+ " *(AxsPub.%(var_name)s) = AxsPub.axis->%(var_name)s;")
+ ]
+ for var_exchange_dir, _str_list, default_template in coded:
+ template = variable_infos.get(var_exchange_dir, default_template)
if template is not None:
extra_variables_publish.append(template % locals())
-
+
# Set AxisRef public struct member value if defined
if param["value"] is not None:
param_value = ({True: "1", False: "0"}[param["value"]]
if param["type"] == "boolean"
else str(param["value"]))
-
+
init_axis_params.append("""\
- AxsPub.axis->%(param_name)s = %(param_value)s;""" % locals())
-
+ AxsPub.axis->%(param_name)s = %(param_value)s;""" % {
+ "param_value": param_value,
+ "param_name": param_name,
+ })
+
# Add each variable in list of variables to map to master list of
# variables to add to network configuration
for name, index, subindex, var_type, dir in variables:
var_size = self.GetSizeOfType(var_type)
+ loc_dict = {
+ "var_size": var_size,
+ "var_type": var_type,
+ "name:": name,
+ "location_str": location_str,
+ "index": index,
+ "subindex": subindex,
+ }
var_name = """\
-__%(dir)s%(var_size)s%(location_str)s_%(index)d_%(subindex)d""" % locals()
-
+__%(dir)s%(var_size)s%(location_str)s_%(index)d_%(subindex)d""" % loc_dict
+ loc_dict["var_name"] = var_name
+
extern_located_variables_declaration.append(
- "IEC_%(var_type)s *%(var_name)s;" % locals())
+ "IEC_%(var_type)s *%(var_name)s;" % loc_dict)
entry_variables.append(
- " IEC_%(var_type)s *%(name)s;" % locals())
+ " IEC_%(var_type)s *%(name)s;" % loc_dict)
init_entry_variables.append(
- " AxsPub.%(name)s = %(var_name)s;" % locals())
-
+ " AxsPub.%(name)s = %(var_name)s;" % loc_dict)
+
self.CTNParent.FileGenerator.DeclareVariable(
- slave_pos, index, subindex, var_type, dir, var_name)
-
+ slave_pos, index, subindex, var_type, dir, var_name)
+
# Add newline between string in list of generated strings for sections
[fieldbus_interface_declaration, fieldbus_interface_definition,
init_axis_params, extra_variables_retrieve, extra_variables_publish,
- extern_located_variables_declaration, entry_variables,
- init_entry_variables] = map(lambda l: "\n".join(l), [
- fieldbus_interface_declaration, fieldbus_interface_definition,
- init_axis_params, extra_variables_retrieve, extra_variables_publish,
- extern_located_variables_declaration, entry_variables,
- init_entry_variables])
-
+ extern_located_variables_declaration, entry_variables,
+ init_entry_variables] = map("\n".join, [
+ fieldbus_interface_declaration, fieldbus_interface_definition,
+ init_axis_params, extra_variables_retrieve, extra_variables_publish,
+ extern_located_variables_declaration, entry_variables,
+ init_entry_variables])
+
# Write generated content to CIA402 node file
- Gen_CIA402Nodefile_path = os.path.join(buildpath,
- "cia402node_%s.c"%location_str)
+ Gen_CIA402Nodefile_path = os.path.join(buildpath,
+ "cia402node_%s.c" % location_str)
cia402nodefile = open(Gen_CIA402Nodefile_path, 'w')
cia402nodefile.write(plc_cia402node_code % locals())
cia402nodefile.close()
-
- return [(Gen_CIA402Nodefile_path, '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()))],"",True
+
+ return [(Gen_CIA402Nodefile_path, '"-I%s"' % os.path.abspath(self.GetCTRoot().GetIECLibPath()))], "", True
--- a/etherlab/EthercatMaster.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/EthercatMaster.py Fri Nov 23 00:33:04 2018 +0100
@@ -9,34 +9,40 @@
#
# See COPYING file for copyrights details.
+from __future__ import absolute_import
import os
-import cPickle
+from copy import deepcopy
from lxml import etree
-from copy import deepcopy
import wx
from xmlclass import *
-from PLCControler import UndoBuffer, LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
+from PLCControler import UndoBuffer, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT
from ConfigTreeNode import ConfigTreeNode
from dialogs import BrowseValuesLibraryDialog
from IDEFrame import TITLE, FILEMENU, PROJECTTREE
-
-from EthercatSlave import _EthercatSlaveCTN, ExtractHexDecValue, GenerateHexDecValue, TYPECONVERSION, VARCLASSCONVERSION, _CommonSlave
-from EthercatCFileGenerator import _EthercatCFileGenerator
-from ConfigEditor import MasterEditor
from POULibrary import POULibrary
+from etherlab.ConfigEditor import MasterEditor
+from etherlab.EthercatCFileGenerator import _EthercatCFileGenerator
+from etherlab.EthercatSlave import \
+ _EthercatSlaveCTN, \
+ ExtractHexDecValue, \
+ GenerateHexDecValue, \
+ TYPECONVERSION, \
+ VARCLASSCONVERSION, \
+ _CommonSlave
+
try:
- from EthercatCIA402Slave import _EthercatCIA402SlaveCTN
+ from etherlab.EthercatCIA402Slave import _EthercatCIA402SlaveCTN
HAS_MCL = True
-except:
+except Exception:
HAS_MCL = False
-#--------------------------------------------------
+# --------------------------------------------------
# Remote Exec Etherlab Commands
-#--------------------------------------------------
+# --------------------------------------------------
SCAN_COMMAND = """
import commands
@@ -64,13 +70,15 @@
returnVal = slaves
"""
-#--------------------------------------------------
+# --------------------------------------------------
# Etherlab Specific Blocks Library
-#--------------------------------------------------
+# --------------------------------------------------
+
def GetLocalPath(filename):
return os.path.join(os.path.split(__file__)[0], filename)
+
class EtherlabLibrary(POULibrary):
def GetLibraryPath(self):
return GetLocalPath("pous.xml")
@@ -79,30 +87,32 @@
etherlab_ext_file = open(GetLocalPath("etherlab_ext.c"), 'r')
etherlab_ext_code = etherlab_ext_file.read()
etherlab_ext_file.close()
-
+
Gen_etherlabfile_path = os.path.join(buildpath, "etherlab_ext.c")
- ethelabfile = open(Gen_etherlabfile_path,'w')
+ ethelabfile = open(Gen_etherlabfile_path, 'w')
ethelabfile.write(etherlab_ext_code)
ethelabfile.close()
-
- runtimefile_path = os.path.join(os.path.split(__file__)[0], "runtime_etherlab.py")
- return ((["etherlab_ext"], [(Gen_etherlabfile_path, IECCFLAGS)], True), "",
+
+ return ((["etherlab_ext"], [(Gen_etherlabfile_path, IECCFLAGS)], True), "",
("runtime_etherlab.py", file(GetLocalPath("runtime_etherlab.py"))))
-
-#--------------------------------------------------
+
+# --------------------------------------------------
# Ethercat MASTER
-#--------------------------------------------------
-
-EtherCATConfigParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATConfig.xsd"))
+# --------------------------------------------------
+
+
+EtherCATConfigParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATConfig.xsd"))
+
def sort_commands(x, y):
if x["Index"] == y["Index"]:
return cmp(x["Subindex"], y["Subindex"])
return cmp(x["Index"], y["Index"])
+
cls = EtherCATConfigParser.GetElementClass("Slave", "Config")
if cls:
-
+
def getType(self):
slave_info = self.getInfo()
return {"device_type": slave_info.getName(),
@@ -118,7 +128,7 @@
slave_info.setProductCode(ExtractHexDecValue(type_infos["product_code"]))
slave_info.setRevisionNo(ExtractHexDecValue(type_infos["revision_number"]))
setattr(cls, "setType", setType)
-
+
def getInitCmds(self, create_default=False):
Mailbox = self.getMailbox()
if Mailbox is None:
@@ -140,7 +150,7 @@
InitCmds = CoE.getInitCmds()
return InitCmds
setattr(cls, "getInitCmds", getInitCmds)
-
+
def getStartupCommands(self):
pos = self.getInfo().getPhysAddr()
InitCmds = self.getInitCmds()
@@ -161,7 +171,7 @@
commands.sort(sort_commands)
return commands
setattr(cls, "getStartupCommands", getStartupCommands)
-
+
def appendStartupCommand(self, command_infos):
InitCmds = self.getInitCmds(True)
command = EtherCATConfigParser.CreateElement("InitCmd", "InitCmds", 1)
@@ -172,7 +182,7 @@
command.setComment(command_infos["Description"])
return len(InitCmds.getInitCmd()) - 1
setattr(cls, "appendStartupCommand", appendStartupCommand)
-
+
def setStartupCommand(self, command_infos):
InitCmds = self.getInitCmds()
if InitCmds is not None:
@@ -184,7 +194,7 @@
command.setData(command_infos["Value"])
command.setComment(command_infos["Description"])
setattr(cls, "setStartupCommand", setStartupCommand)
-
+
def removeStartupCommand(self, command_idx):
InitCmds = self.getInitCmds()
if InitCmds is not None:
@@ -218,15 +228,16 @@
</xsd:schema>
"""
-ProcessVariablesParser = GenerateParserFromXSDstring(ProcessVariablesXSD)
-
-class _EthercatCTN:
+ProcessVariablesParser = GenerateParserFromXSDstring(ProcessVariablesXSD)
+
+
+class _EthercatCTN(object):
CTNChildrenTypes = [("EthercatSlave", _EthercatSlaveCTN, "Ethercat Slave")]
if HAS_MCL:
CTNChildrenTypes.append(("EthercatCIA402Slave", _EthercatCIA402SlaveCTN, "Ethercat CIA402 Slave"))
EditorType = MasterEditor
-
+
def __init__(self):
config_filepath = self.ConfigFileName()
config_is_saved = False
@@ -238,17 +249,17 @@
EtherCATConfigParser.LoadXMLString(config_xmlfile.read())
if error is None:
config_is_saved = True
- except Exception, e:
+ except Exception as e:
error = e.message
config_xmlfile.close()
-
+
if error is not None:
self.GetCTRoot().logger.write_error(
- _("Couldn't load %s network configuration file.") % CTNName)
-
+ _("Couldn't load %s network configuration file.") % self.CTNName())
+
if self.Config is None:
self.Config = EtherCATConfigParser.CreateElement("EtherCATConfig")
-
+
process_filepath = self.ProcessVariablesFileName()
process_is_saved = False
self.ProcessVariables = None
@@ -259,39 +270,40 @@
ProcessVariablesParser.LoadXMLString(process_xmlfile.read())
if error is None:
process_is_saved = True
- except Exception, e:
+ except Exception as e:
error = e.message
process_xmlfile.close()
-
+
if error is not None:
self.GetCTRoot().logger.write_error(
- _("Couldn't load %s network process variables file.") % CTNName)
-
+ _("Couldn't load %s network process variables file.") % self.CTNName())
+
if self.ProcessVariables is None:
self.ProcessVariables = ProcessVariablesParser.CreateElement("ProcessVariables")
-
+
if config_is_saved and process_is_saved:
self.CreateBuffer(True)
else:
self.CreateBuffer(False)
self.OnCTNSave()
-
+
# ----------- call ethercat mng. function --------------
self.CommonMethod = _CommonSlave(self)
-
+
def GetIconName(self):
return "Ethercat"
-
+
def GetContextualMenuItems(self):
- return [("Add Ethercat Slave", "Add Ethercat Slave to Master", self.OnAddEthercatSlave)]
-
+ return [(_("Add Ethercat Slave"), _("Add Ethercat Slave to Master"), self.OnAddEthercatSlave)]
+
def OnAddEthercatSlave(self, event):
app_frame = self.GetCTRoot().AppFrame
- dialog = BrowseValuesLibraryDialog(app_frame,
- "Ethercat Slave Type", self.GetSlaveTypesLibrary())
+ dialog = BrowseValuesLibraryDialog(app_frame,
+ _("Ethercat Slave Type"),
+ self.GetSlaveTypesLibrary())
if dialog.ShowModal() == wx.ID_OK:
type_infos = dialog.GetValueInfos()
- device, module_extra_params = self.GetModuleInfos(type_infos)
+ device, _module_extra_params = self.GetModuleInfos(type_infos)
if device is not None:
if HAS_MCL and _EthercatCIA402SlaveCTN.NODE_PROFILE in device.GetProfileNumbers():
ConfNodeType = "EthercatCIA402Slave"
@@ -303,7 +315,7 @@
new_child._OpenView()
app_frame._Refresh(TITLE, FILEMENU, PROJECTTREE)
dialog.Destroy()
-
+
def ExtractHexDecValue(self, value):
return ExtractHexDecValue(value)
@@ -312,17 +324,17 @@
def ConfigFileName(self):
return os.path.join(self.CTNPath(), "config.xml")
-
+
def ProcessVariablesFileName(self):
return os.path.join(self.CTNPath(), "process_variables.xml")
-
+
def FilterSlave(self, slave, vendor=None, slave_pos=None, slave_profile=None):
if slave_pos is not None and slave.getInfo().getPhysAddr() != slave_pos:
return False
type_infos = slave.getType()
if vendor is not None and ExtractHexDecValue(type_infos["vendor"]) != vendor:
return False
- device, module_extra_params = self.GetModuleInfos(type_infos)
+ device, _module_extra_params = self.GetModuleInfos(type_infos)
if slave_profile is not None and slave_profile not in device.GetProfileNumbers():
return False
return True
@@ -355,7 +367,7 @@
commands.append((slave.getInfo().getPhysAddr(), slave.getStartupCommands()))
commands.sort()
return reduce(lambda x, y: x + y[1], commands, [])
-
+
def AppendStartupCommand(self, command_infos):
slave = self.GetSlave(command_infos["Position"])
if slave is not None:
@@ -363,20 +375,20 @@
self.BufferModel()
return command_idx
return None
-
+
def SetStartupCommandInfos(self, command_infos):
slave = self.GetSlave(command_infos["Position"])
if slave is not None:
slave.setStartupCommand(command_infos)
self.BufferModel()
-
+
def RemoveStartupCommand(self, slave_pos, command_idx, buffer=True):
slave = self.GetSlave(slave_pos)
if slave is not None:
slave.removeStartupCommand(command_idx)
if buffer:
self.BufferModel()
-
+
def SetProcessVariables(self, variables):
vars = []
for var in variables:
@@ -406,7 +418,7 @@
vars.append(variable)
self.ProcessVariables.setvariable(vars)
self.BufferModel()
-
+
def GetProcessVariables(self):
variables = []
idx = 0
@@ -424,43 +436,44 @@
write_to = variable.getWriteTo()
if write_to is not None:
var["WriteTo"] = (write_to.getPosition(),
- write_to.getIndex(),
- write_to.getSubIndex())
+ write_to.getIndex(),
+ write_to.getSubIndex())
else:
var["WriteTo"] = ""
variables.append(var)
idx += 1
return variables
-
+
def _ScanNetwork(self):
app_frame = self.GetCTRoot().AppFrame
-
+
execute = True
if len(self.Children) > 0:
- dialog = wx.MessageDialog(app_frame,
- _("The current network configuration will be deleted.\nDo you want to continue?"),
- _("Scan Network"),
- wx.YES_NO|wx.ICON_QUESTION)
+ dialog = wx.MessageDialog(
+ app_frame,
+ _("The current network configuration will be deleted.\nDo you want to continue?"),
+ _("Scan Network"),
+ wx.YES_NO | wx.ICON_QUESTION)
execute = dialog.ShowModal() == wx.ID_YES
dialog.Destroy()
-
+
if execute:
- error, returnVal = self.RemoteExec(SCAN_COMMAND, returnVal = None)
+ error, returnVal = self.RemoteExec(SCAN_COMMAND, returnVal=None)
if error != 0:
- dialog = wx.MessageDialog(app_frame, returnVal, "Error", wx.OK|wx.ICON_ERROR)
+ dialog = wx.MessageDialog(app_frame, returnVal, _("Error"), wx.OK | wx.ICON_ERROR)
dialog.ShowModal()
dialog.Destroy()
elif returnVal is not None:
for child in self.IECSortedChildren():
self._doRemoveChild(child)
-
+
for slave in returnVal:
type_infos = {
"vendor": slave["vendor_id"],
"product_code": slave["product_code"],
- "revision_number":slave["revision_number"],
+ "revision_number": slave["revision_number"],
}
- device, module_extra_params = self.GetModuleInfos(type_infos)
+ device, _module_extra_params = self.GetModuleInfos(type_infos)
if device is not None:
if HAS_MCL and _EthercatCIA402SlaveCTN.NODE_PROFILE in device.GetProfileNumbers():
CTNType = "EthercatCIA402Slave"
@@ -470,10 +483,10 @@
self.SetSlaveAlias(slave["idx"], slave["alias"])
type_infos["device_type"] = device.getType().getcontent()
self.SetSlaveType(slave["idx"], type_infos)
-
+
if app_frame:
app_frame.RefreshProjectTree()
-
+
def CTNAddChild(self, CTNName, CTNType, IEC_Channel=0):
"""
Create the confnodes that may be added as child to this node self
@@ -481,7 +494,7 @@
@param CTNName: string for the name of the confnode instance
"""
newConfNodeOpj = ConfigTreeNode.CTNAddChild(self, CTNName, CTNType, IEC_Channel)
-
+
slave = self.GetSlave(newConfNodeOpj.BaseParams.getIEC_Channel())
if slave is None:
slave = EtherCATConfigParser.CreateElement("Slave", "Config")
@@ -492,7 +505,7 @@
slave_infos.setAutoIncAddr(0)
self.BufferModel()
self.OnCTNSave()
-
+
return newConfNodeOpj
def _doRemoveChild(self, CTNInstance):
@@ -523,38 +536,38 @@
if self._View is not None:
self._View.RefreshView()
self._View.RefreshBuffer()
-
+
def GetSlaveAlias(self, slave_pos):
slave = self.GetSlave(slave_pos)
if slave is not None:
slave_info = slave.getInfo()
return slave_info.getAutoIncAddr()
return None
-
+
def SetSlaveAlias(self, slave_pos, alias):
slave = self.GetSlave(slave_pos)
if slave is not None:
slave_info = slave.getInfo()
slave_info.setAutoIncAddr(alias)
self.BufferModel()
-
+
def GetSlaveType(self, slave_pos):
slave = self.GetSlave(slave_pos)
if slave is not None:
return slave.getType()
return None
-
+
def SetSlaveType(self, slave_pos, type_infos):
slave = self.GetSlave(slave_pos)
if slave is not None:
slave.setType(type_infos)
self.BufferModel()
-
+
def GetSlaveInfos(self, slave_pos):
slave = self.GetSlave(slave_pos)
if slave is not None:
type_infos = slave.getType()
- device, module_extra_params = self.GetModuleInfos(type_infos)
+ device, _module_extra_params = self.GetModuleInfos(type_infos)
if device is not None:
infos = type_infos.copy()
infos.update({"physics": device.getPhysics(),
@@ -562,48 +575,46 @@
"entries": self.GetSlaveVariables(device)})
return infos
return None
-
+
def GetSlaveVariables(self, slave_pos=None, limits=None, device=None):
if device is None and slave_pos is not None:
slave = self.GetSlave(slave_pos)
if slave is not None:
type_infos = slave.getType()
- device, module_extra_params = self.GetModuleInfos(type_infos)
+ device, _module_extra_params = self.GetModuleInfos(type_infos)
if device is not None:
entries = device.GetEntriesList(limits)
- #print entries
entries_list = entries.items()
entries_list.sort()
entries = []
current_index = None
- current_entry = None
- for (index, subindex), entry in entries_list:
+ current_entry = {}
+ for (index, _subindex), entry in entries_list:
entry["children"] = []
if slave_pos is not None:
entry["Position"] = str(slave_pos)
- entry
if index != current_index:
current_index = index
current_entry = entry
entries.append(entry)
- elif current_entry is not None:
+ elif current_entry:
current_entry["children"].append(entry)
else:
entries.append(entry)
return entries
return []
-
+
def GetSlaveVariableDataType(self, slave_pos, index, subindex):
slave = self.GetSlave(slave_pos)
if slave is not None:
- device, module_extra_params = self.GetModuleInfos(slave.getType())
+ device, _module_extra_params = self.GetModuleInfos(slave.getType())
if device is not None:
entries = device.GetEntriesList()
entry_infos = entries.get((index, subindex))
if entry_infos is not None:
return entry_infos["Type"]
return None
-
+
def GetNodesVariables(self, vendor=None, slave_pos=None, slave_profile=None, limits=None):
entries = []
for slave_position in self.GetSlaves():
@@ -613,28 +624,28 @@
type_infos = slave.getType()
if vendor is not None and ExtractHexDecValue(type_infos["vendor"]) != vendor:
continue
- device, module_extra_params = self.GetModuleInfos(type_infos)
+ device, _module_extra_params = self.GetModuleInfos(type_infos)
if slave_profile is not None and slave_profile not in device.GetProfileNumbers():
continue
entries.extend(self.GetSlaveVariables(slave_position, limits, device))
return entries
-
+
def GetModuleInfos(self, type_infos):
return self.CTNParent.GetModuleInfos(type_infos)
-
+
def GetSlaveTypesLibrary(self, profile_filter=None):
return self.CTNParent.GetModulesLibrary(profile_filter)
-
+
def GetLibraryVendors(self):
return self.CTNParent.GetVendors()
-
+
def GetDeviceLocationTree(self, slave_pos, current_location, device_name):
slave = self.GetSlave(slave_pos)
- vars = []
+ vars = []
if slave is not None:
type_infos = slave.getType()
-
- device, module_extra_params = self.GetModuleInfos(type_infos)
+
+ device, _module_extra_params = self.GetModuleInfos(type_infos)
if device is not None:
sync_managers = []
for sync_manager in device.getSm():
@@ -644,7 +655,7 @@
sync_managers.append(LOCATION_VAR_OUTPUT)
else:
sync_managers.append(LOCATION_VAR_INPUT)
-
+
entries = device.GetEntriesList().items()
entries.sort()
for (index, subindex), entry in entries:
@@ -655,44 +666,46 @@
if var_class == LOCATION_VAR_INPUT:
var_dir = "%I"
else:
- var_dir = "%Q"
-
- vars.append({"name": "0x%4.4x-0x%2.2x: %s" % (index, subindex, entry["Name"]),
- "type": var_class,
- "size": var_size,
- "IEC_type": entry["Type"],
- "var_name": "%s_%4.4x_%2.2x" % ("_".join(device_name.split()), index, subindex),
- "location": "%s%s%s"%(var_dir, var_size, ".".join(map(str, current_location +
- (index, subindex)))),
- "description": "",
- "children": []})
-
+ var_dir = "%Q"
+
+ vars.append({
+ "name": "0x%4.4x-0x%2.2x: %s" % (index, subindex, entry["Name"]),
+ "type": var_class,
+ "size": var_size,
+ "IEC_type": entry["Type"],
+ "var_name": "%s_%4.4x_%2.2x" % ("_".join(device_name.split()), index, subindex),
+ "location": "%s%s%s" % (var_dir, var_size, ".".join(map(str, current_location +
+ (index, subindex)))),
+ "description": "",
+ "children": [],
+ })
+
return vars
-
+
def CTNTestModified(self):
- return self.ChangesToSave or not self.ModelIsSaved()
+ return self.ChangesToSave or not self.ModelIsSaved()
def OnCTNSave(self, from_project_path=None):
config_filepath = self.ConfigFileName()
-
- config_xmlfile = open(config_filepath,"w")
+
+ config_xmlfile = open(config_filepath, "w")
config_xmlfile.write(etree.tostring(
- self.Config,
- pretty_print=True,
- xml_declaration=True,
+ self.Config,
+ pretty_print=True,
+ xml_declaration=True,
encoding='utf-8'))
config_xmlfile.close()
-
+
process_filepath = self.ProcessVariablesFileName()
-
- process_xmlfile = open(process_filepath,"w")
+
+ process_xmlfile = open(process_filepath, "w")
process_xmlfile.write(etree.tostring(
- self.ProcessVariables,
- pretty_print=True,
- xml_declaration=True,
+ self.ProcessVariables,
+ pretty_print=True,
+ xml_declaration=True,
encoding='utf-8'))
process_xmlfile.close()
-
+
self.Buffer.CurrentSaved()
return True
@@ -702,14 +715,14 @@
def _Generate_C(self, buildpath, locations):
current_location = self.GetCurrentLocation()
# define a unique name for the generated C file
- location_str = "_".join(map(lambda x:str(x), current_location))
-
- Gen_Ethercatfile_path = os.path.join(buildpath, "ethercat_%s.c"%location_str)
-
+ location_str = "_".join(map(str, current_location))
+
+ Gen_Ethercatfile_path = os.path.join(buildpath, "ethercat_%s.c" % location_str)
+
self.FileGenerator = _EthercatCFileGenerator(self)
-
+
LocationCFilesAndCFLAGS, LDFLAGS, extra_files = ConfigTreeNode._Generate_C(self, buildpath, locations)
-
+
for idx, variable in enumerate(self.ProcessVariables.getvariable()):
name = None
var_type = None
@@ -721,9 +734,9 @@
subindex = read_from.getSubIndex()
location = current_location + (idx, )
var_type = self.GetSlaveVariableDataType(pos, index, subindex)
- name = self.FileGenerator.DeclareVariable(
- pos, index, subindex, var_type, "I",
- self.GetProcessVariableName(location, var_type))
+ name = self.FileGenerator.DeclareVariable(pos, index, subindex,
+ var_type, "I",
+ self.GetProcessVariableName(location, var_type))
if write_to is not None:
pos = write_to.getPosition()
index = write_to.getIndex()
@@ -732,65 +745,65 @@
location = current_location + (idx, )
var_type = self.GetSlaveVariableDataType(pos, index, subindex)
name = self.GetProcessVariableName(location, var_type)
- self.FileGenerator.DeclareVariable(
- pos, index, subindex, var_type, "Q", name, True)
-
+ self.FileGenerator.DeclareVariable(pos, index, subindex, var_type, "Q", name, True)
+
self.FileGenerator.GenerateCFile(Gen_Ethercatfile_path, location_str, self.BaseParams.getIEC_Channel())
-
- LocationCFilesAndCFLAGS.insert(0,
- (current_location,
- [(Gen_Ethercatfile_path, '"-I%s"'%os.path.abspath(self.GetCTRoot().GetIECLibPath()))],
+
+ LocationCFilesAndCFLAGS.insert(
+ 0,
+ (current_location,
+ [(Gen_Ethercatfile_path, '"-I%s"' % os.path.abspath(self.GetCTRoot().GetIECLibPath()))],
True))
LDFLAGS.append("-lethercat_rtdm -lrtdm")
-
+
return LocationCFilesAndCFLAGS, LDFLAGS, extra_files
ConfNodeMethods = [
- {"bitmap" : "ScanNetwork",
- "name" : _("Scan Network"),
- "tooltip" : _("Scan Network"),
- "method" : "_ScanNetwork"},
+ {
+ "bitmap": "ScanNetwork",
+ "name": _("Scan Network"),
+ "tooltip": _("Scan Network"),
+ "method": "_ScanNetwork",
+ },
]
def CTNGenerate_C(self, buildpath, locations):
current_location = self.GetCurrentLocation()
-
+
slaves = self.GetSlaves()
for slave_pos in slaves:
slave = self.GetSlave(slave_pos)
if slave is not None:
self.FileGenerator.DeclareSlave(slave_pos, slave)
-
+
for location in locations:
loc = location["LOC"][len(current_location):]
slave_pos = loc[0]
if slave_pos in slaves and len(loc) == 3 and location["DIR"] != "M":
self.FileGenerator.DeclareVariable(
slave_pos, loc[1], loc[2], location["IEC_TYPE"], location["DIR"], location["NAME"])
-
- return [],"",False
-
-#-------------------------------------------------------------------------------
+
+ return [], "", False
+
+# -------------------------------------------------------------------------------
# Current Buffering Management Functions
-#-------------------------------------------------------------------------------
-
- """
- Return a copy of the config
- """
+# -------------------------------------------------------------------------------
+
def Copy(self, model):
+ """Return a copy of the config"""
return deepcopy(model)
-
+
def CreateBuffer(self, saved):
self.Buffer = UndoBuffer(
- (EtherCATConfigParser.Dumps(self.Config),
- ProcessVariablesParser.Dumps(self.ProcessVariables)),
+ (EtherCATConfigParser.Dumps(self.Config),
+ ProcessVariablesParser.Dumps(self.ProcessVariables)),
saved)
-
+
def BufferModel(self):
self.Buffer.Buffering(
- (EtherCATConfigParser.Dumps(self.Config),
+ (EtherCATConfigParser.Dumps(self.Config),
ProcessVariablesParser.Dumps(self.ProcessVariables)))
-
+
def ModelIsSaved(self):
if self.Buffer is not None:
return self.Buffer.IsCurrentSaved()
@@ -801,14 +814,13 @@
config, process_variables = self.Buffer.Previous()
self.Config = EtherCATConfigParser.Loads(config)
self.ProcessVariables = ProcessVariablesParser.Loads(process_variables)
-
+
def LoadNext(self):
config, process_variables = self.Buffer.Next()
self.Config = EtherCATConfigParser.Loads(config)
self.ProcessVariables = ProcessVariablesParser.Loads(process_variables)
-
+
def GetBufferState(self):
first = self.Buffer.IsFirst()
last = self.Buffer.IsLast()
return not first, not last
-
--- a/etherlab/EthercatSlave.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/EthercatSlave.py Fri Nov 23 00:33:04 2018 +0100
@@ -9,37 +9,39 @@
#
# See COPYING file for copyrights details.
-import wx
+from __future__ import absolute_import
-from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
+from PLCControler import LOCATION_CONFNODE, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
from ConfigTreeNode import ConfigTreeNode
-from ConfigEditor import NodeEditor
+from etherlab.ConfigEditor import NodeEditor
-#------------------------------------------
-from CommonEtherCATFunction import _CommonSlave
-#------------------------------------------
+# ------------------------------------------
+from etherlab.CommonEtherCATFunction import _CommonSlave
+# ------------------------------------------
-TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L",
- "USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L",
- "BYTE" : "B", "WORD" : "W", "DWORD" : "D", "LWORD" : "L"}
+TYPECONVERSION = {"BOOL": "X", "SINT": "B", "INT": "W", "DINT": "D", "LINT": "L",
+ "USINT": "B", "UINT": "W", "UDINT": "D", "ULINT": "L",
+ "BYTE": "B", "WORD": "W", "DWORD": "D", "LWORD": "L"}
-DATATYPECONVERSION = {"BOOL" : "BIT", "SINT" : "S8", "INT" : "S16", "DINT" : "S32", "LINT" : "S64",
- "USINT" : "U8", "UINT" : "U16", "UDINT" : "U32", "ULINT" : "U64",
- "BYTE" : "U8", "WORD" : "U16", "DWORD" : "U32", "LWORD" : "U64"}
+DATATYPECONVERSION = {"BOOL": "BIT", "SINT": "S8", "INT": "S16", "DINT": "S32", "LINT": "S64",
+ "USINT": "U8", "UINT": "U16", "UDINT": "U32", "ULINT": "U64",
+ "BYTE": "U8", "WORD": "U16", "DWORD": "U32", "LWORD": "U64"}
VARCLASSCONVERSION = {"T": LOCATION_VAR_INPUT, "R": LOCATION_VAR_OUTPUT, "RT": LOCATION_VAR_MEMORY}
+
def ExtractHexDecValue(value):
try:
return int(value)
- except:
+ except Exception:
pass
try:
return int(value.replace("#", "0"), 16)
- except:
- raise ValueError, "Invalid value for HexDecValue \"%s\"" % value
+ except Exception:
+ raise ValueError("Invalid value for HexDecValue \"%s\"" % value)
+
def GenerateHexDecValue(value, base=10):
if base == 10:
@@ -47,7 +49,8 @@
elif base == 16:
return "#x%.8x" % value
else:
- raise ValueError, "Not supported base"
+ raise ValueError("Not supported base")
+
def ExtractName(names, default=None):
if len(names) == 1:
@@ -59,31 +62,31 @@
return default
-#--------------------------------------------------
+# --------------------------------------------------
# Ethercat Node
-#--------------------------------------------------
+# --------------------------------------------------
-class _EthercatSlaveCTN:
+class _EthercatSlaveCTN(object):
NODE_PROFILE = None
EditorType = NodeEditor
-
+
def __init__(self):
# ----------- call ethercat mng. function --------------
self.CommonMethod = _CommonSlave(self)
-
+
def GetIconName(self):
return "Slave"
-
+
def ExtractHexDecValue(self, value):
return ExtractHexDecValue(value)
-
+
def GetSizeOfType(self, type):
return TYPECONVERSION.get(self.GetCTRoot().GetBaseType(type), None)
-
+
def GetSlavePos(self):
return self.BaseParams.getIEC_Channel()
-
- def GetParamsAttributes(self, path = None):
+
+ def GetParamsAttributes(self, path=None):
if path:
parts = path.split(".", 1)
if self.MandatoryParams and parts[0] == self.MandatoryParams[0]:
@@ -96,64 +99,71 @@
params.append(self.CTNParams[1].getElementInfos(self.CTNParams[0]))
else:
params.append({
- 'use': 'required',
- 'type': 'element',
- 'name': 'SlaveParams',
- 'value': None,
+ 'use': 'required',
+ 'type': 'element',
+ 'name': 'SlaveParams',
+ 'value': None,
'children': []
})
-
+
slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos())
- params[0]['children'].insert(0,
- {'use': 'optional',
- 'type': self.CTNParent.GetSlaveTypesLibrary(self.NODE_PROFILE),
- 'name': 'Type',
- 'value': (slave_type["device_type"], slave_type)})
- params[0]['children'].insert(1,
- {'use': 'optional',
- 'type': 'unsignedLong',
- 'name': 'Alias',
- 'value': self.CTNParent.GetSlaveAlias(self.GetSlavePos())})
+ params[0]['children'].insert(
+ 0,
+ {
+ 'use': 'optional',
+ 'type': self.CTNParent.GetSlaveTypesLibrary(self.NODE_PROFILE),
+ 'name': 'Type',
+ 'value': (slave_type["device_type"], slave_type)
+ })
+ params[0]['children'].insert(
+ 1,
+ {
+ 'use': 'optional',
+ 'type': 'unsignedLong',
+ 'name': 'Alias',
+ 'value': self.CTNParent.GetSlaveAlias(self.GetSlavePos())
+ })
return params
-
+
def SetParamsAttribute(self, path, value):
self.GetSlaveInfos()
position = self.BaseParams.getIEC_Channel()
-
+
if path == "SlaveParams.Type":
self.CTNParent.SetSlaveType(position, value)
slave_type = self.CTNParent.GetSlaveType(self.GetSlavePos())
value = (slave_type["device_type"], slave_type)
- #if self._View is not None:
- #wx.CallAfter(self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos())
- #self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos()
- #self._View.EtherCATManagementTreebook.PDOMonitoringPanel.PDOInfoUpdate()
- #self._View.EtherCATManagementTreebook.SmartView.Create_SmartView()
+ # if self._View is not None:
+ # wx.CallAfter(self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos())
+ # self._View.EtherCATManagementTreebook.SlaveStatePanel.RefreshSlaveInfos()
+ # self._View.EtherCATManagementTreebook.PDOMonitoringPanel.PDOInfoUpdate()
+ # self._View.EtherCATManagementTreebook.SmartView.Create_SmartView()
return value, True
elif path == "SlaveParams.Alias":
self.CTNParent.SetSlaveAlias(position, value)
return value, True
-
+
value, refresh = ConfigTreeNode.SetParamsAttribute(self, path, value)
-
+
# Filter IEC_Channel, Slave_Type and Alias that have specific behavior
if path == "BaseParams.IEC_Channel" and value != position:
self.CTNParent.SetSlavePosition(position, value)
-
+
return value, refresh
-
+
def GetSlaveInfos(self):
return self.CTNParent.GetSlaveInfos(self.GetSlavePos())
-
+
def GetSlaveVariables(self, limits):
return self.CTNParent.GetSlaveVariables(self.GetSlavePos(), limits)
-
+
def GetVariableLocationTree(self):
- return {"name": self.BaseParams.getName(),
- "type": LOCATION_CONFNODE,
- "location": self.GetFullIEC_Channel(),
- "children": self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName())
+ return {
+ "name": self.BaseParams.getName(),
+ "type": LOCATION_CONFNODE,
+ "location": self.GetFullIEC_Channel(),
+ "children": self.CTNParent.GetDeviceLocationTree(self.GetSlavePos(), self.GetCurrentLocation(), self.BaseParams.getName())
}
def CTNGenerate_C(self, buildpath, locations):
- return [],"",False
+ return [], "", False
--- a/etherlab/etherlab.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/etherlab.py Fri Nov 23 00:33:04 2018 +0100
@@ -9,36 +9,42 @@
#
# See COPYING file for copyrights details.
-import os, shutil
+from __future__ import absolute_import
+import os
+import shutil
+import csv
from lxml import etree
import wx
-import csv
from xmlclass import *
-from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage
-from PLCControler import UndoBuffer, LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
-
-from EthercatSlave import ExtractHexDecValue, ExtractName
-from EthercatMaster import _EthercatCTN
-from ConfigEditor import LibraryEditor, ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE
+from ConfigTreeNode import XSDSchemaErrorMessage
+
+from etherlab.EthercatSlave import ExtractHexDecValue, ExtractName
+from etherlab.EthercatMaster import _EthercatCTN
+from etherlab.ConfigEditor import LibraryEditor, ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE
ScriptDirectory = os.path.split(os.path.realpath(__file__))[0]
-#--------------------------------------------------
+# --------------------------------------------------
# Ethercat ConfNode
-#--------------------------------------------------
-
-EtherCATInfoParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATInfo.xsd"))
-EtherCATInfo_XPath = lambda xpath: etree.XPath(xpath)
+# --------------------------------------------------
+
+EtherCATInfoParser = GenerateParserFromXSD(os.path.join(os.path.dirname(__file__), "EtherCATInfo.xsd"))
+
+
+def EtherCATInfo_XPath(xpath):
+ return etree.XPath(xpath)
+
def HexDecValue(context, *args):
return str(ExtractHexDecValue(args[0][0]))
+
def EntryName(context, *args):
- return ExtractName(args[0],
- args[1][0] if len(args) > 1 else None)
+ return ExtractName(args[0], args[1][0] if len(args) > 1 else None)
+
ENTRY_INFOS_KEYS = [
("Index", lambda x: "#x%4.4X" % int(x), "#x0000"),
@@ -52,18 +58,19 @@
("PDO name", str, ""),
("PDO type", str, "")]
-class EntryListFactory:
+
+class EntryListFactory(object):
def __init__(self, entries):
self.Entries = entries
-
+
def AddEntry(self, context, *args):
index, subindex = map(lambda x: int(x[0]), args[:2])
new_entry_infos = {
key: translate(arg[0]) if len(arg) > 0 else default
for (key, translate, default), arg
in zip(ENTRY_INFOS_KEYS, args)}
-
+
if (index, subindex) != (0, 0):
entry_infos = self.Entries.get((index, subindex))
if entry_infos is not None:
@@ -74,17 +81,19 @@
else:
self.Entries[(index, subindex)] = new_entry_infos
+
entries_list_xslt = etree.parse(
os.path.join(ScriptDirectory, "entries_list.xslt"))
cls = EtherCATInfoParser.GetElementClass("DeviceType")
if cls:
-
+
profile_numbers_xpath = EtherCATInfo_XPath("Profile/ProfileNo")
+
def GetProfileNumbers(self):
return [number.text for number in profile_numbers_xpath(self)]
setattr(cls, "GetProfileNumbers", GetProfileNumbers)
-
+
def getCoE(self):
mailbox = self.getMailbox()
if mailbox is not None:
@@ -94,20 +103,20 @@
def GetEntriesList(self, limits=None):
entries = {}
-
+
factory = EntryListFactory(entries)
-
+
entries_list_xslt_tree = etree.XSLT(
- entries_list_xslt, extensions = {
+ entries_list_xslt, extensions={
("entries_list_ns", "AddEntry"): factory.AddEntry,
("entries_list_ns", "HexDecValue"): HexDecValue,
("entries_list_ns", "EntryName"): EntryName})
entries_list_xslt_tree(self, **dict(zip(
- ["min_index", "max_index"],
+ ["min_index", "max_index"],
map(lambda x: etree.XSLT.strparam(str(x)),
limits if limits is not None else [0x0000, 0xFFFF])
)))
-
+
return entries
setattr(cls, "GetEntriesList", GetEntriesList)
@@ -121,12 +130,13 @@
("Control Byte", sync_manager.getControlByte()),
("Enable", sync_manager.getEnable())]:
if value is None:
- value =""
+ value = ""
sync_manager_infos[name] = value
sync_managers.append(sync_manager_infos)
return sync_managers
setattr(cls, "GetSyncManagers", GetSyncManagers)
+
def GroupItemCompare(x, y):
if x["type"] == y["type"]:
if x["type"] == ETHERCAT_GROUP:
@@ -137,107 +147,122 @@
return -1
return 1
+
def SortGroupItems(group):
for item in group["children"]:
if item["type"] == ETHERCAT_GROUP:
SortGroupItems(item)
group["children"].sort(GroupItemCompare)
-class ModulesLibrary:
+
+class ModulesLibrary(object):
MODULES_EXTRA_PARAMS = [
- ("pdo_alignment", {
- "column_label": _("PDO alignment"),
- "column_size": 150,
- "default": 8,
- "description": _(
-"Minimal size in bits between 2 pdo entries")}),
- ("max_pdo_size", {
- "column_label": _("Max entries by PDO"),
- "column_size": 150,
- "default": 255,
- "description": _(
-"""Maximal number of entries mapped in a PDO
-including empty entries used for PDO alignment""")}),
- ("add_pdo", {
- "column_label": _("Creating new PDO"),
- "column_size": 150,
- "default": 0,
- "description": _(
-"""Adding a PDO not defined in default configuration
+ (
+ "pdo_alignment",
+ {
+ "column_label": _("PDO alignment"),
+ "column_size": 150,
+ "default": 8,
+ "description": _("Minimal size in bits between 2 pdo entries")
+ }
+ ),
+ (
+ "max_pdo_size",
+ {
+ "column_label": _("Max entries by PDO"),
+ "column_size": 150,
+ "default": 255,
+ "description": _("""Maximal number of entries mapped in a PDO
+including empty entries used for PDO alignment""")
+ }
+ ),
+ (
+ "add_pdo",
+ {
+ "column_label": _("Creating new PDO"),
+ "column_size": 150,
+ "default": 0,
+ "description": _("""Adding a PDO not defined in default configuration
for mapping needed location variables
-(1 if possible)""")})
+(1 if possible)""")
+ }
+ )
]
-
+
def __init__(self, path, parent_library=None):
self.Path = path
if not os.path.exists(self.Path):
os.makedirs(self.Path)
self.ParentLibrary = parent_library
-
+
if parent_library is not None:
self.LoadModules()
else:
self.Library = None
self.LoadModulesExtraParams()
-
+
def GetPath(self):
return self.Path
-
+
def GetModulesExtraParamsFilePath(self):
return os.path.join(self.Path, "modules_extra_params.cfg")
-
+
groups_xpath = EtherCATInfo_XPath("Descriptions/Groups/Group")
devices_xpath = EtherCATInfo_XPath("Descriptions/Devices/Device")
+
def LoadModules(self):
self.Library = {}
-
+
files = os.listdir(self.Path)
for file in files:
filepath = os.path.join(self.Path, file)
if os.path.isfile(filepath) and os.path.splitext(filepath)[-1] == ".xml":
self.modules_infos = None
-
+
xmlfile = open(filepath, 'r')
try:
self.modules_infos, error = EtherCATInfoParser.LoadXMLString(xmlfile.read())
if error is not None:
self.GetCTRoot().logger.write_warning(
XSDSchemaErrorMessage % (filepath + error))
- except Exception, exc:
+ except Exception as exc:
self.modules_infos, error = None, unicode(exc)
xmlfile.close()
-
+
if self.modules_infos is not None:
vendor = self.modules_infos.getVendor()
-
+
vendor_category = self.Library.setdefault(
- ExtractHexDecValue(vendor.getId()),
- {"name": ExtractName(vendor.getName(), _("Miscellaneous")),
+ ExtractHexDecValue(vendor.getId()),
+ {"name": ExtractName(vendor.getName(), _("Miscellaneous")),
"groups": {}})
-
+
for group in self.groups_xpath(self.modules_infos):
group_type = group.getType()
-
- vendor_category["groups"].setdefault(group_type,
- {"name": ExtractName(group.getName(), group_type),
- "parent": group.getParentGroup(),
- "order": group.getSortOrder(),
- #"value": group.getcontent()["value"],
- "devices": []})
-
+
+ vendor_category["groups"].setdefault(
+ group_type,
+ {
+ "name": ExtractName(group.getName(), group_type),
+ "parent": group.getParentGroup(),
+ "order": group.getSortOrder(),
+ # "value": group.getcontent()["value"],
+ "devices": [],
+ })
+
for device in self.devices_xpath(self.modules_infos):
device_group = device.getGroupType()
- if not vendor_category["groups"].has_key(device_group):
- raise ValueError, "Not such group \"%\"" % device_group
+ if device_group not in vendor_category["groups"]:
+ raise ValueError("Not such group \"%s\"" % device_group)
vendor_category["groups"][device_group]["devices"].append(
(device.getType().getcontent(), device))
-
+
else:
-
+
self.GetCTRoot().logger.write_error(
- _("Couldn't load %s XML file:\n%s") % (filepath, error))
-
+ _("Couldn't load {a1} XML file:\n{a2}").format(a1=filepath, a2=error))
+
return self.Library
def GetModulesLibrary(self, profile_filter=None):
@@ -290,32 +315,32 @@
def GetVendors(self):
return [(vendor_id, vendor["name"]) for vendor_id, vendor in self.Library.items()]
-
+
def GetModuleInfos(self, module_infos):
vendor = ExtractHexDecValue(module_infos["vendor"])
vendor_infos = self.Library.get(vendor)
if vendor_infos is not None:
- for group_name, group_infos in vendor_infos["groups"].iteritems():
+ for _group_name, group_infos in vendor_infos["groups"].iteritems():
for device_type, device_infos in group_infos["devices"]:
product_code = ExtractHexDecValue(device_infos.getType().getProductCode())
revision_number = ExtractHexDecValue(device_infos.getType().getRevisionNo())
- if (product_code == ExtractHexDecValue(module_infos["product_code"]) and
- revision_number == ExtractHexDecValue(module_infos["revision_number"])):
- self.cntdevice = device_infos
- self.cntdeviceType = device_type
+ if product_code == ExtractHexDecValue(module_infos["product_code"]) and \
+ revision_number == ExtractHexDecValue(module_infos["revision_number"]):
+ self.cntdevice = device_infos
+ self.cntdeviceType = device_type
return device_infos, self.GetModuleExtraParams(vendor, product_code, revision_number)
return None, None
-
+
def ImportModuleLibrary(self, filepath):
if os.path.isfile(filepath):
shutil.copy(filepath, self.Path)
self.LoadModules()
return True
return False
-
+
def LoadModulesExtraParams(self):
self.ModulesExtraParams = {}
-
+
csvfile_path = self.GetModulesExtraParamsFilePath()
if os.path.exists(csvfile_path):
csvfile = open(csvfile_path, "rb")
@@ -329,53 +354,54 @@
has_header = False
else:
params_values = {}
- for (param, param_infos), value in zip(
- self.MODULES_EXTRA_PARAMS, row[3:]):
+ for (param, _param_infos), value in zip(
+ self.MODULES_EXTRA_PARAMS, row[3:]):
if value != "":
params_values[param] = int(value)
self.ModulesExtraParams[
tuple(map(int, row[:3]))] = params_values
csvfile.close()
-
+
def SaveModulesExtraParams(self):
csvfile = open(self.GetModulesExtraParamsFilePath(), "wb")
- extra_params = [param for param, params_infos in self.MODULES_EXTRA_PARAMS]
+ extra_params = [param for param, _params_infos in self.MODULES_EXTRA_PARAMS]
writer = csv.writer(csvfile, delimiter=';')
writer.writerow(['Vendor', 'product_code', 'revision_number'] + extra_params)
for (vendor, product_code, revision_number), module_extra_params in self.ModulesExtraParams.iteritems():
- writer.writerow([vendor, product_code, revision_number] +
- [module_extra_params.get(param, '')
+ writer.writerow([vendor, product_code, revision_number] +
+ [module_extra_params.get(param, '')
for param in extra_params])
csvfile.close()
-
+
def SetModuleExtraParam(self, vendor, product_code, revision_number, param, value):
vendor = ExtractHexDecValue(vendor)
product_code = ExtractHexDecValue(product_code)
revision_number = ExtractHexDecValue(revision_number)
-
+
module_infos = (vendor, product_code, revision_number)
self.ModulesExtraParams.setdefault(module_infos, {})
self.ModulesExtraParams[module_infos][param] = value
-
+
self.SaveModulesExtraParams()
-
+
def GetModuleExtraParams(self, vendor, product_code, revision_number):
vendor = ExtractHexDecValue(vendor)
product_code = ExtractHexDecValue(product_code)
revision_number = ExtractHexDecValue(revision_number)
-
+
if self.ParentLibrary is not None:
extra_params = self.ParentLibrary.GetModuleExtraParams(vendor, product_code, revision_number)
else:
extra_params = {}
-
+
extra_params.update(self.ModulesExtraParams.get((vendor, product_code, revision_number), {}))
-
+
for param, param_infos in self.MODULES_EXTRA_PARAMS:
extra_params.setdefault(param, param_infos["default"])
-
+
return extra_params
+
USERDATA_DIR = wx.StandardPaths.Get().GetUserDataDir()
if wx.Platform != '__WXMSW__':
USERDATA_DIR += '_files'
@@ -383,51 +409,50 @@
ModulesDatabase = ModulesLibrary(
os.path.join(USERDATA_DIR, "ethercat_modules"))
-class RootClass:
-
- CTNChildrenTypes = [("EthercatNode",_EthercatCTN,"Ethercat Master")]
+
+class RootClass(object):
+
+ CTNChildrenTypes = [("EthercatNode", _EthercatCTN, "Ethercat Master")]
EditorType = LibraryEditor
-
-
+
def __init__(self):
self.ModulesLibrary = None
self.LoadModulesLibrary()
-
+
def GetIconName(self):
return "Ethercat"
-
+
def GetModulesLibraryPath(self, project_path=None):
if project_path is None:
project_path = self.CTNPath()
- return os.path.join(project_path, "modules")
-
+ return os.path.join(project_path, "modules")
+
def OnCTNSave(self, from_project_path=None):
if from_project_path is not None:
shutil.copytree(self.GetModulesLibraryPath(from_project_path),
self.GetModulesLibraryPath())
return True
-
+
def CTNGenerate_C(self, buildpath, locations):
- return [],"",False
-
+ return [], "", False
+
def LoadModulesLibrary(self):
if self.ModulesLibrary is None:
self.ModulesLibrary = ModulesLibrary(self.GetModulesLibraryPath(), ModulesDatabase)
else:
self.ModulesLibrary.LoadModulesLibrary()
-
+
def GetModulesDatabaseInstance(self):
return ModulesDatabase
-
+
def GetModulesLibraryInstance(self):
return self.ModulesLibrary
-
+
def GetModulesLibrary(self, profile_filter=None):
return self.ModulesLibrary.GetModulesLibrary(profile_filter)
-
+
def GetVendors(self):
return self.ModulesLibrary.GetVendors()
-
+
def GetModuleInfos(self, module_infos):
return self.ModulesLibrary.GetModuleInfos(module_infos)
-
--- a/etherlab/runtime_etherlab.py Thu Nov 22 23:39:54 2018 +0100
+++ b/etherlab/runtime_etherlab.py Fri Nov 23 00:33:04 2018 +0100
@@ -1,7 +1,14 @@
-import os,subprocess,sys,ctypes
+from __future__ import absolute_import
+import os
+import signal
+import subprocess
+import ctypes
from threading import Thread
-import ctypes,time,re
-from targets.typemapping import LogLevelsDict
+import time
+import re
+
+import runtime.PLCObject as PLCObject
+from runtime.loglevels import LogLevelsDict
SDOAnswered = PLCBinary.SDOAnswered
SDOAnswered.restype = None
@@ -11,18 +18,19 @@
SDOProc = None
Result = None
+
def SDOThreadProc(*params):
global Result, SDOProc
if params[0] == "upload":
cmdfmt = "ethercat upload -p %d -t %s 0x%.4x 0x%.2x"
else:
cmdfmt = "ethercat download -p %d -t %s 0x%.4x 0x%.2x %s"
-
+
command = cmdfmt % params[1:]
SDOProc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
res = SDOProc.wait()
output = SDOProc.communicate()[0]
-
+
if params[0] == "upload":
Result = None
if res == 0:
@@ -36,73 +44,78 @@
Result = int(dec_value)
else:
Result = res == 0
-
+
SDOAnswered()
- if res != 0 :
+ if res != 0:
PLCObject.LogMessage(
- LogLevelsDict["WARNING"],
- "%s : %s"%(command,output))
-
+ LogLevelsDict["WARNING"],
+ "%s : %s" % (command, output))
+
+
def EthercatSDOUpload(pos, index, subindex, var_type):
global SDOThread
SDOThread = Thread(target=SDOThreadProc, args=["upload", pos, var_type, index, subindex])
SDOThread.start()
-
+
+
def EthercatSDODownload(pos, index, subindex, var_type, value):
global SDOThread
SDOThread = Thread(target=SDOThreadProc, args=["download", pos, var_type, index, subindex, value])
SDOThread.start()
+
def GetResult():
- global Result
return Result
-KMSGPollThread=None
-StopKMSGThread=False
+
+KMSGPollThread = None
+StopKMSGThread = False
+
+
def KMSGPollThreadProc():
"""
Logs Kernel messages starting with EtherCAT
Uses GLibc wrapper to Linux syscall "klogctl"
- Last 4 KB are polled, and lines compared to last
+ Last 4 KB are polled, and lines compared to last
captured line to detect new lines
"""
- global StopKMSGThread
- libc=ctypes.CDLL("libc.so.6")
+ libc = ctypes.CDLL("libc.so.6")
klog = libc.klogctl
klog.argtypes = [ctypes.c_int, ctypes.c_char_p, ctypes.c_int]
klog.restype = ctypes.c_int
- s=ctypes.create_string_buffer(4*1024)
+ s = ctypes.create_string_buffer(4*1024)
last = None
while not StopKMSGThread:
- l = klog(3,s,len(s)-1)
- log = s.value[:l-1]
- if last :
+ bytes_to_read = klog(3, s, len(s)-1)
+ log = s.value[:bytes_to_read-1]
+ if last:
log = log.rpartition(last)[2]
- if log :
+ if log:
last = log.rpartition('\n')[2]
- for lvl,msg in re.findall(
- r'<(\d)>\[\s*\d*\.\d*\]\s*(EtherCAT\s*.*)$',
- log, re.MULTILINE):
+ for lvl, msg in re.findall(
+ r'<(\d)>\[\s*\d*\.\d*\]\s*(EtherCAT\s*.*)$',
+ log, re.MULTILINE):
PLCObject.LogMessage(
LogLevelsDict[{
- "4":"WARNING",
- "3":"CRITICAL"}.get(lvl,"DEBUG")],
+ "4": "WARNING",
+ "3": "CRITICAL"}.get(lvl, "DEBUG")],
msg)
- time.sleep(0.5)
+ time.sleep(0.5)
+
def _runtime_etherlab_init():
global KMSGPollThread, StopKMSGThread
StopKMSGThread = False
- KMSGPollThread = Thread(target = KMSGPollThreadProc)
+ KMSGPollThread = Thread(target=KMSGPollThreadProc)
KMSGPollThread.start()
+
def _runtime_etherlab_cleanup():
- global KMSGPollThread, StopKMSGThread, SDOProc, SDOThread
+ global KMSGPollThread, StopKMSGThread, SDOThread
try:
- os.kill(SDOProc.pid, SIGTERM)
- except:
+ os.kill(SDOProc.pid, signal.SIGTERM)
+ except Exception:
pass
SDOThread = None
StopKMSGThread = True
KMSGPollThread = None
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/.tx/config Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,10 @@
+[main]
+host = https://www.transifex.com
+
+[beremiz-ide.beremiz]
+file_filter = Beremiz_<lang>.po
+minimum_perc = 0
+source_file = messages.pot
+source_lang = en
+type = PO
+
--- a/i18n/Beremiz_bn_BD.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_bn_BD.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,16 +1,15 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Adhir Dutta <likhon52@gmail.com>, 2017
+#, fuzzy
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: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Adhir Dutta <likhon52@gmail.com>, 2017\n"
"Language-Team: Bengali (Bangladesh) (https://www.transifex.com/beremiz/teams/75746/bn_BD/)\n"
"MIME-Version: 1.0\n"
@@ -19,7 +18,7 @@
"Language: bn_BD\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -44,151 +43,156 @@
"\n"
"উপাত্তসমূহ:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr "বাহ্যিক"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr "ইনআউট"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr "ইনপুট"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr "স্থানীয়"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr "আউটপুট"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr "সাময়িক"
-#: ../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 "এবং %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr "উত্পাদন ব্যর্থ !\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "\"%s\" Data Type অস্তিত্বহীন !!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "\"%s\" POU ইতিমধ্যেই বিদ্যমান !!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "\"%s\" POU এর অস্তিত্ব নেই !!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" স্বীয়কার্যে ব্যবহার অযোগ্য! "
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "\"%s\" config ইতিমধ্যেই বিদ্যমান!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "\"%s\" configuration ইতিমধ্যেই বিদ্যমান !!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr ""
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "\"%s\" data type ইতিমধ্যেই বিদ্যমান! "
-#: ../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\" এই pou এর উপাদান ইতিমধ্যেই বিদ্যমান!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "\"%s\" ফোল্ডারটিতে বেরিমিজ প্রকল্প নেই\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\" একটি কি-ওয়ার্ড। তাই ব্যবহার অযোগ্য!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" একটি অযৌক্তিক সংখ্যা!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" যৌক্তিক ফ্লোল্ডার নয়!"
-#: ../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\" একটি অযৌক্তিক শনাক্তকারী!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr "\"%s\" এক বা একাধিক POU তে ব্যবহৃত। আপনি কি কাজ করবেন?"
-#: ../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 ইতিমধ্যেই বিদ্যমান!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "\"%s\" step ইতিমধ্যেই বিদ্যমান!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "\"%s\" মান ইতিমধ্যেই সংজ্ঞায়িত!"
-#: ../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\" সাংখ্যমানটি অ্যারের জন্য অযৌক্তিক মাত্রা!"
-#: ../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"
@@ -197,209 +201,205 @@
"\"%s\" সাংখ্যমানটি অ্যারের জন্য অযৌক্তিক মাত্রা!\n"
"ডানের সাংখ্যমান অবশ্যই বামের চেয়ে বড় হতে হবে."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "\"{a1}\" ফাংশন বাতিল \"{a2}\" তে POU: কোনও ইনপুট প্রযুক্ত হয়নি"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" ইতিমধ্যেই \"{a2}\" দ্বারা ব্যবহৃত!"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" এর সম্পদ ইতিমধ্যেই \"{a2}\" এর configuration এ বিদ্যমান !!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" এর সম্পদ \"{a2}\" এর configuration এ ব্যবহৃত হয়নি !!!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
msgstr "%03gমিসে"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
msgstr "%dদি"
-#: ../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 "%dঘ"
-#: ../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 "%dমি"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
#, python-format
msgid "%dms"
msgstr "%dমিসে"
-#: ../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 "%dসে"
-#: ../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 "%sPOUs"
-#: ../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প্রধান অংশে প্রতিলিপি নেই!"
-#: ../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প্রধান অংশে text নেই!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr ""
-#: ../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 ""
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr ""
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr ""
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr ""
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr ""
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr ""
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr ""
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr ""
+
#: ../IDEFrame.py:356
-msgid "&Configuration"
-msgstr ""
-
-#: ../IDEFrame.py:345
-msgid "&Data Type"
-msgstr ""
-
-#: ../IDEFrame.py:390
-msgid "&Delete"
-msgstr ""
-
-#: ../IDEFrame.py:337
-msgid "&Display"
-msgstr ""
-
-#: ../IDEFrame.py:336
-msgid "&Edit"
-msgstr ""
-
-#: ../IDEFrame.py:335
-msgid "&File"
-msgstr ""
-
-#: ../IDEFrame.py:347
-msgid "&Function"
-msgstr ""
-
-#: ../IDEFrame.py:338
-msgid "&Help"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:72
-msgid "&License"
-msgstr ""
-
-#: ../IDEFrame.py:351
msgid "&Program"
msgstr ""
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr ""
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr ""
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr ""
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr ""
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr ""
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr ""
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr ""
-#: ../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 ""
-#: ../PLCOpenEditor.py:404
-msgid ". "
-msgstr ""
-
-#: ../controls/LogViewer.py:279
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
msgid "1d"
msgstr ""
-#: ../controls/LogViewer.py:280
+#: ../controls/LogViewer.py:288
msgid "1h"
msgstr ""
-#: ../controls/LogViewer.py:281
+#: ../controls/LogViewer.py:289
msgid "1m"
msgstr ""
-#: ../controls/LogViewer.py:282
+#: ../controls/LogViewer.py:290
msgid "1s"
msgstr ""
-#: ../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 ""
-#: ../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 ""
@@ -409,26 +409,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr ""
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr ""
-#: ../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 ""
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr ""
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr ""
@@ -436,125 +436,125 @@
msgid "Absolute number"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr ""
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr ""
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr ""
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr ""
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr ""
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr ""
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr ""
-#: ../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 ""
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../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:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr ""
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr ""
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr ""
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr ""
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr ""
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr ""
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr ""
-#: ../editors/Viewer.py:559
+#: ../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:2757 ../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:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr ""
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr ""
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr ""
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr ""
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr ""
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr ""
@@ -562,44 +562,44 @@
msgid "Addition"
msgstr ""
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr ""
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr ""
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr ""
-#: ../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 ""
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr ""
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr ""
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr ""
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr ""
@@ -619,8 +619,8 @@
msgid "Arithmetic"
msgstr ""
-#: ../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 ""
@@ -628,45 +628,37 @@
msgid "Assignment"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr ""
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr ""
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr ""
-
-#: ../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 ""
-#: ../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 ""
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr ""
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr ""
@@ -698,85 +690,85 @@
msgid "Bitwise inverting"
msgstr ""
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr ""
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr ""
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr ""
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr ""
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr ""
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr ""
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr ""
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr ""
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr ""
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr ""
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr ""
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr ""
-#: ../targets/toolchain_gcc.py:192
+#: ../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 ""
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
msgstr ""
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
msgstr ""
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr ""
@@ -784,34 +776,34 @@
msgid "CANopen support"
msgstr ""
-#: ../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 ""
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr ""
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr ""
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr ""
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr ""
@@ -821,46 +813,50 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr ""
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr ""
-#: ../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 ""
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
+#: ../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:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr ""
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr ""
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr ""
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr ""
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr ""
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr ""
@@ -868,115 +864,119 @@
msgid "Character string"
msgstr ""
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr ""
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr ""
-#: ../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 ""
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../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 ""
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr ""
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr ""
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr ""
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr ""
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr ""
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr ""
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr ""
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr ""
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr ""
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr ""
-#: ../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 ""
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr ""
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr ""
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr ""
-#: ../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 ""
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr ""
@@ -984,7 +984,7 @@
msgid "Comparison"
msgstr ""
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr ""
@@ -992,93 +992,93 @@
msgid "Concatenation"
msgstr ""
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr ""
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr ""
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr ""
-#: ../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 ""
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr ""
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr ""
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr ""
-#: ../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 ""
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr ""
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr ""
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr ""
-#: ../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 ""
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr ""
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr ""
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr ""
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr ""
@@ -1098,20 +1098,20 @@
msgid "Conversion to time-of-day"
msgstr ""
-#: ../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 ""
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr ""
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr ""
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr ""
@@ -1119,137 +1119,133 @@
msgid "Cosine"
msgstr ""
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
"{a3}\n"
msgstr ""
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr ""
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
#, python-brace-format
msgid ""
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr ""
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr ""
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr ""
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr ""
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr ""
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr ""
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr ""
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr ""
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr ""
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr ""
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr ""
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr ""
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr ""
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr ""
-#: ../IDEFrame.py:162
+#: ../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:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr ""
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr ""
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr ""
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr ""
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr ""
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr ""
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr ""
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr ""
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr ""
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr ""
@@ -1261,19 +1257,19 @@
msgid "DEPRECATED"
msgstr ""
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr ""
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr ""
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr ""
@@ -1294,66 +1290,58 @@
msgid "Date subtraction"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr ""
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr ""
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr ""
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr ""
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr ""
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr ""
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr ""
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr ""
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr ""
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr ""
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr ""
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr ""
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr ""
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr ""
@@ -1361,47 +1349,47 @@
msgid "Deletion (within)"
msgstr ""
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr ""
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr ""
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr ""
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr ""
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr ""
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr ""
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr ""
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr ""
@@ -1409,120 +1397,120 @@
msgid "Division"
msgstr ""
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr ""
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr ""
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr ""
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr ""
-#: ../editors/Viewer.py:629
+#: ../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:59
+#: ../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:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr ""
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr ""
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr ""
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr ""
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr ""
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr ""
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr ""
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr ""
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr ""
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr ""
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr ""
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr ""
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr ""
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr ""
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr ""
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr ""
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr ""
@@ -1530,85 +1518,91 @@
msgid "Equal to"
msgstr ""
-#: ../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 ""
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
msgstr ""
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr ""
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
"%s\n"
msgstr ""
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr ""
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr ""
-#: ../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 ""
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr ""
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr ""
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr ""
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr ""
@@ -1620,77 +1614,77 @@
msgid "Exponentiation"
msgstr ""
-#: ../canfestival/canfestival.py:176
+#: ../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:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr ""
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr ""
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr ""
-#: ../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 ""
-#: ../ProjectController.py:1791
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr ""
-#: ../ProjectController.py:1070
+#: ../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:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr ""
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr ""
-#: ../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 ""
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr ""
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr ""
@@ -1698,93 +1692,89 @@
msgid "Find position"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr ""
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr ""
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr ""
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr ""
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr ""
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr ""
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr ""
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr ""
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr ""
-#: ../controls/VariablePanel.py:73
+#: ../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:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr ""
@@ -1796,110 +1786,114 @@
msgid "Greater than or equal to"
msgstr ""
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
#: ../controls/ProjectPropertiesPanel.py:135
-msgid "Grid Resolution:"
-msgstr ""
-
-#: ../runtime/NevowServer.py:182
-msgid "HTTP interface port :"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:121
msgid "Height:"
msgstr ""
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr ""
-#: ../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 ""
-#: ../dialogs/DiscoveryDialog.py:94
+#: ../dialogs/DiscoveryDialog.py:91
msgid "IP"
msgstr ""
-#: ../Beremiz_service.py:310 ../Beremiz_service.py:311
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
msgid "IP is not valid!"
msgstr ""
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr ""
-#: ../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 ""
-#: ../editors/Viewer.py:431
+#: ../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 ""
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr ""
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr ""
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr ""
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr ""
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr ""
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr ""
-#: ../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 ""
-#: ../svgui/svgui.py:48
+#: ../svgui/svgui.py:56
msgid "Inkscape"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
msgid "Inline"
msgstr ""
-#: ../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 ""
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr ""
@@ -1907,114 +1901,124 @@
msgid "Insertion (into)"
msgstr ""
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr ""
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr ""
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr ""
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr ""
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr ""
-#: ../PLCControler.py:2331
+#: ../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:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr ""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
msgstr ""
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../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 ""
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr ""
-#: ../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 ""
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr ""
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr ""
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr ""
@@ -2030,11 +2034,11 @@
msgid "Less than or equal to"
msgstr ""
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr ""
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr ""
@@ -2042,27 +2046,27 @@
msgid "Limitation"
msgstr ""
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr ""
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr ""
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr ""
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr ""
@@ -2070,12 +2074,12 @@
msgid "Logarithm to base 10"
msgstr ""
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr ""
@@ -2083,11 +2087,15 @@
msgid "Map located variables over CANopen"
msgstr ""
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr ""
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr ""
@@ -2096,29 +2104,29 @@
msgid "Maximum"
msgstr ""
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr ""
-#: ../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 ""
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr ""
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr ""
@@ -2126,78 +2134,82 @@
msgid "Minimum"
msgstr ""
-#: ../editors/DataTypeEditor.py:226
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../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: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 ""
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr ""
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr ""
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr ""
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr ""
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr ""
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr ""
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr ""
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr ""
-#: ../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 ""
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr ""
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr ""
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr ""
@@ -2209,26 +2221,26 @@
msgid "Multiplication"
msgstr ""
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:92
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
msgstr ""
-#: ../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 ""
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr ""
-#: ../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 ""
@@ -2236,105 +2248,105 @@
msgid "Natural logarithm"
msgstr ""
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr ""
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
#: ../Beremiz_service.py:580
-msgid "Nevow Web service failed. "
-msgstr ""
-
-#: ../Beremiz_service.py:556
msgid "Nevow/Athena import failed :"
msgstr ""
-#: ../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 ""
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr ""
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr ""
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr ""
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr ""
-#: ../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 ""
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
msgstr ""
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr ""
-#: ../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 ""
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr ""
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr ""
-#: ../canfestival/config_utils.py:639
+#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
msgstr ""
-#: ../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 ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr ""
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr ""
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr ""
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr ""
-#: ../dialogs/LDElementDialog.py:75
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
msgstr ""
-#: ../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 ""
@@ -2343,7 +2355,7 @@
msgid "Not equal to"
msgstr ""
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr ""
@@ -2351,399 +2363,399 @@
msgid "Numerical"
msgstr ""
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr ""
-#: ../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 ""
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr ""
-#: ../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 ""
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr ""
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr ""
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr ""
-#: ../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 ""
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr ""
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr ""
-#: ../targets/toolchain_gcc.py:167
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr ""
-#: ../BeremizIDE.py:355
+#: ../BeremizIDE.py:383
msgid "PLC Log"
msgstr ""
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr ""
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr ""
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr ""
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
"{a2}"
msgstr ""
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr ""
-#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
msgid "PLCOpenEditor"
msgstr ""
-#: ../PLCOpenEditor.py:365
+#: ../PLCOpenEditor.py:339
msgid ""
"PLCOpenEditor is part of Beremiz project.\n"
"\n"
"Beremiz is an "
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr ""
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr ""
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr ""
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr ""
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr ""
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr ""
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr ""
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr ""
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr ""
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr ""
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr ""
-#: ../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 ""
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr ""
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../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:799
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr ""
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr ""
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr ""
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr ""
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr ""
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr ""
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr ""
-#: ../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 ""
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr ""
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr ""
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr ""
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr ""
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr ""
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr ""
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr ""
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr ""
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr ""
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr ""
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr ""
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
msgstr ""
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr ""
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr ""
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr ""
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr ""
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr ""
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr ""
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr ""
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr ""
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr ""
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr ""
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr ""
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr ""
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../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:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr ""
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr ""
@@ -2751,56 +2763,56 @@
msgid "Remainder (modulo)"
msgstr ""
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr ""
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr ""
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr ""
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr ""
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr ""
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr ""
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr ""
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr ""
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr ""
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr ""
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr ""
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr ""
@@ -2808,43 +2820,43 @@
msgid "Replacement (within)"
msgstr ""
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr ""
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr ""
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr ""
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr ""
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr ""
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr ""
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr ""
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr ""
@@ -2860,114 +2872,114 @@
msgid "Rounding up/down"
msgstr ""
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr ""
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr ""
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr ""
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr ""
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "SFC"
msgstr ""
-#: ../PLCGenerator.py:1392
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr ""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr ""
-#: ../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 ""
-#: ../PLCOpenEditor.py:334
+#: ../PLCOpenEditor.py:308
msgid "ST files (*.st)|*.st|All files|*.*"
msgstr ""
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr ""
-#: ../features.py:35
+#: ../features.py:36
msgid "SVGUI"
msgstr ""
-#: ../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 ""
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr ""
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr ""
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr ""
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr ""
-#: ../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 ""
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr ""
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr ""
-#: ../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 ""
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr ""
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr ""
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr ""
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr ""
@@ -2975,23 +2987,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:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr ""
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr ""
@@ -3003,27 +3015,27 @@
msgid "Shift right"
msgstr ""
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr ""
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr ""
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr ""
-#: ../ProjectController.py:1865
+#: ../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 ""
@@ -3031,15 +3043,15 @@
msgid "Sine"
msgstr ""
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr ""
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr ""
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3050,60 +3062,56 @@
msgid "Square root (base 2)"
msgstr ""
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr ""
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr ""
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr ""
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr ""
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr ""
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr ""
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr ""
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr ""
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr ""
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr ""
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr ""
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr ""
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr ""
@@ -3111,19 +3119,19 @@
msgid "Subtraction"
msgstr ""
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr ""
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr ""
-#: ../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 ""
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr ""
@@ -3131,19 +3139,19 @@
msgid "Tangent"
msgstr ""
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr ""
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr ""
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr ""
-#: ../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"
@@ -3155,39 +3163,39 @@
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
msgstr ""
-#: ../editors/FileManagementPanel.py:180
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
"Do you want to replace it?"
msgstr ""
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr ""
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr ""
-#: ../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 ""
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
msgstr ""
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr ""
@@ -3225,94 +3233,94 @@
msgid "Time-of-day subtraction"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr ""
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr ""
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr ""
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr ""
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr ""
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr ""
-#: ../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 ""
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
"its name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr ""
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr ""
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr ""
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr ""
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr ""
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr ""
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr ""
-#: ../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 ""
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr ""
-#: ../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 ""
@@ -3321,269 +3329,315 @@
msgid "Type conversion"
msgstr ""
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr ""
-#: ../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 ""
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../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:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr ""
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr ""
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr ""
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr ""
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr ""
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr ""
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr ""
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr ""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr ""
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr ""
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr ""
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr ""
-#: ../Beremiz_service.py:588
+#: ../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:91
+#: ../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:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr ""
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr ""
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../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:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr ""
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr ""
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr ""
-#: ../features.py:34
+#: ../features.py:35
msgid "WxGlade GUI"
msgstr ""
-#: ../svgui/svgui.py:142
+#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
msgstr ""
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
msgstr ""
-#: ../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 ""
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr ""
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr ""
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr ""
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr ""
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr ""
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr ""
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr ""
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr ""
@@ -3599,24 +3653,24 @@
msgid "string right of"
msgstr ""
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr ""
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr ""
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr ""
-#: ../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 ""
@@ -3681,6 +3735,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 ""
@@ -3855,7 +3975,7 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
+"exclusive access to certain resources."
msgstr ""
msgid "The output produces a single pulse when a rising edge is detected."
--- a/i18n/Beremiz_de_DE.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_de_DE.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,17 +1,15 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017
-# Hendrik Knackstedt <h.knackstedt@stud.uni-hannover.de>, 2017
+#, fuzzy
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: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Hendrik Knackstedt <h.knackstedt@stud.uni-hannover.de>, 2017\n"
"Language-Team: German (Germany) (https://www.transifex.com/beremiz/teams/75746/de_DE/)\n"
"MIME-Version: 1.0\n"
@@ -20,7 +18,7 @@
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -45,153 +43,158 @@
"\n"
"Traceback:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr " Extern"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr "EinAusgang"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr "Eingang"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr " Lokal"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr "Ausgang"
-#: ../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 "und %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr " Erstellung fehlgeschlagen !\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
-msgstr "Datentyp \"%s\" existiert bereits !!!"
-
-#: ../plcopen/plcopen.py:904
+msgstr "Datentyp \"%s\" existiert nicht !!!"
+
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "Baustein \"%s\" existiert bereits !!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "Baustein \"%s\" existiert nicht !!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" kann sich nicht selbst aufrufen!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "Konfiguration \"%s\" existiert bereits!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "Konfiguration \"%s\" existiert bereits !!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "Konfiguration \"%s\" existiert nicht !!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "Datentyp \"%s\" existiert bereits!"
-#: ../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 ist für diesen Baustein bereits vorhanden!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "Verzeichnis \"%s\" ist kein korrektes Beremiz-Projekt\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\" ist ein Schlüsselwort. Es kann nicht verwendet werden!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" ist ein ungültiger Wert!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" ist kein Ordner!"
-#: ../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\" ist kein gültiger Bezeichner!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr ""
"\"%s\" wird von einer oder mehreren Bausteinen benutzt. Wollen Sie "
"fortfahren?"
-#: ../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 "Baustein \"%s\" existiert bereits!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "Schritt \"%s\" existiert bereits!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "Wert \"%s\" bereits definiert!"
-#: ../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 "Wert \"%s\" ist keine gültige Array-Größe!"
-#: ../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"
@@ -200,200 +203,196 @@
"Wert \"%s\" ist keine gültige Array-Größe!\n"
"Der rechte Wert muss größer sein als der linke."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "Funktion \"{a1}\" in \"{a2}\" abgebrochen POU: Nicht mit Eingang verbunden"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" wird von \"{a2}\" bereits benutzt?"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "Ressource \"{a1}\" existiert in Konfiguration \"{a2}\" bereits !!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "Ressource \"{a1}\" existiert in Konfiguration \"{a2}\" nicht !!!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
msgstr "%03g ms"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
msgstr "%d T"
-#: ../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 "%d S"
-#: ../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 "%d M"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
#, python-format
msgid "%dms"
msgstr "%d ms"
-#: ../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 "%d s"
-#: ../PLCControler.py:1533
+#: ../PLCControler.py:1114
#, python-format
msgid "%s Data Types"
msgstr "%s Datentypen"
-#: ../PLCControler.py:1516
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
msgstr "%s Bausteine"
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr "%s Profil"
-#: ../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 "Baustein \"%s\" besitzt keine Instanzen!"
-#: ../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 "Baustein \"%s\" ist leer!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Element hinzufügen"
-#: ../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 "&Schließen"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&Konfiguration"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&Datentyp"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Löschen"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Ansicht"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Bearbeiten"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&Datei"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Funktion"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Hilfe"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&Lizenz"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Programm"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Einstellungen"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&Zuletzt verwendete Projekte"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Ressource"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}' - {a2} Übereinstimmung im Projekt"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} Übereinstimmungen im Projekt"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' befindet sich unter {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d Ergebnisse)"
-#: ../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 ""
+
+#: ../controls/LogViewer.py:287
msgid "1d"
msgstr "1T"
-#: ../controls/LogViewer.py:280
+#: ../controls/LogViewer.py:288
msgid "1h"
msgstr "1S"
-#: ../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 "
@@ -402,9 +401,9 @@
"Ein POU enthält ein Element mit dem Namen \"%s\". Das könnte eine Kollision "
"sein. Möchten Sie fortfahren?"
-#: ../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 "Baustein mit dem Namen \"%s\" existiert bereits!"
@@ -414,26 +413,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "Ein Kind mit dem Namen \"{a1}\" existiert bereits -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "Bitte wählen Sie einen Ort aus!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "Task mit dem gleichen Namen existiert bereits!"
-#: ../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 "Variable mit den Namen \"%s\" existiert bereits im Baustein!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "Variable mit dem Namen \"%s\" existiert bereits!"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "Über"
@@ -441,125 +440,125 @@
msgid "Absolute number"
msgstr "Absolute Zahl"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Aktion"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "Aktionsblock"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Aktionname"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Aktionname:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "Aktion mit dem Namen %s existiert nicht!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "Aktionen"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "Aktionen:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "Aktiv"
-#: ../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 "Hinzufügen"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
msgstr "Aktion hinzufügen"
-#: ../features.py:32
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr "Synchron ausführenden C-Code hinzufügen"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "Konfiguration hinzufügen"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "Datentyp hinzufügen"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Zweig hinzufügen"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "IP hinzufügen"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "Baustein hinzufügen"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "Asynchron auszuführenden Python-Code hinzufügen"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "Ressource hinzufügen"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "Transitionsbedingung hinzufügen"
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr "Drahtsegment hinzufügen "
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr "Den ersten Schritt hinzufügen"
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr "Neuen Sprung hinzufügen"
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
msgstr "Neuen Schritt hinzufügen"
-#: ../features.py:34
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
msgstr "Einfache WxGlade basierte GUI hinzufügen."
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "Aktion hinzufügen"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "Komponent hinzufügen"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "Instanz hinzufügen"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Slave hinzufügen"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "Task hinzufügen"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "Variable hinzufügen"
@@ -567,44 +566,44 @@
msgid "Addition"
msgstr "Addition"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "Zusätzliche Bausteine"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "Bausteingröße anpassen"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "Ausrichtung"
-#: ../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 "Alle"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "Alle Dateien (*.*)|*.*|CSV Dateien (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "Bereits verbunden. Bitte Verbindung trennen\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "Komponent mit den Namen \"%s\" existiert bereits in der Struktur!"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "Instanz mit dem gleichen Namen existiert bereits!"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr "Umbenennen alle Fortsetzungen mit dem gleichen Namen"
@@ -624,8 +623,8 @@
msgid "Arithmetic"
msgstr "Arithmetik"
-#: ../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"
@@ -633,45 +632,37 @@
msgid "Assignment"
msgstr "Zuordnung"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "Mindestens eine Variable oder ein Ausdruck muss ausgewählt werden!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Autor"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Autor (optional):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Zurück"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Schlechter Domainname (Endlosschleife) für"
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Schlechter Domainname für"
-
-#: ../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 "Fehlerhafte 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 "Basistyp:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "Basistypen"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -703,85 +694,85 @@
msgid "Bitwise inverting"
msgstr "bitweises NICHT"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "Funktionsblock"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "Funktionsblockeigenschaften"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "Blockname"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "Unten"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr "Gebrochen"
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr "Wert für %s wählen"
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr "Verfügbare IEC-Adressen:"
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "Build"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "Build-Verzeichnis bereits sauber\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr "Build-Projekt nach Build-Verzeichnis"
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "C Build abgestürzt !\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "C Build fehlgeschlagen.\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 erfolgreich generiert.\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr "C Kompilierung fehlgeschlagen.\n"
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr "C Kompilierung von %s fehlgeschlagen.\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "C-Erweiterung"
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
msgstr "&Beiträge"
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
msgstr "CANOpen Netzwerk"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "CANOpen slave"
@@ -789,34 +780,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 "Abarbeitungsreihenfolge kann nur für FUP Bausteine bestimmt werden!"
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr "EIC-Nur lokale oder globale Variable können eine zugeordnet sein."
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr "Code-Erzeugung zur Datei \"%s\" ist fehlgeschlagen!"
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr "IEC-Adresse für eine Funktionsbausteininstanz ist nicht erlaubt "
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr "Projekt kann nicht in die Datei %s gespeichert werden!"
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr "Anfangswert für eine Funktionsbausteininstanz ist nicht erlaubt"
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr "Kann nicht Kind {a1} vom Typ {a2} erstellen"
@@ -826,15 +817,15 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "Kann keinen niedrigeren IEC-Kanal als %d finden\n"
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "Kann den SPS-Status nicht einlesen - Verbindung gescheitert.\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "Kann die Datei VARIABLES.csv nicht öffnen/lesen!\n"
-#: ../canfestival/config_utils.py:374
+#: ../canfestival/config_utils.py:400
#, python-brace-format
msgid ""
"Cannot set bit offset for non bool '{a1}' variable "
@@ -843,31 +834,35 @@
"Kann Bit-Offset für nicht-bool '{a1}' Variable (ID: {a2}, Idx: {a3}, sIdx: "
"{a4})) nicht setzen"
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
+#: ../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 "Case-sensitive"
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "Zentriert"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "Ändere IP-Adresse des zu verbindenden Interfaces."
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "Ändere Name"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "Bausteintyp konvertieren nach"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "Ändere Port-Nummer"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "Ändere Arbeitsverzeichnis"
@@ -875,119 +870,123 @@
msgid "Character string"
msgstr "Zeichenkette"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "Wählen Sie eine SVG-Datei"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "Wählen Sie ein Verzeichnis um das Projekt zu speichern"
-#: ../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 "Datei auswählen"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../BeremizIDE.py:900
msgid "Choose a project"
msgstr "Wähle Projekt"
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
msgstr "Wählen Sie den Wert für %s:"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "Wähle Arbeitsverzeichnis"
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Wählen Sie leeres Verzeichnis für neues Projekt"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
"Ausgewählter Ordner beinhaltet kein Programm. Es handelt sich dabei nicht um"
" ein gültiges Projekt!"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
"Gewählter Ordner ist nicht leer. Sie können diesen nicht für ein neues "
"Projekt verwenden!"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "Klasse"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "Klassenfilter:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "Klasse:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "Aufräumen"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "Protokoll zurücksetzen"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "Projekt-Build-Verzeichnis leeren"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "Build-Verzeichnis leeren\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "Fehlermeldungen zurücksetzen"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "Ausführungsreihenfolge zurücksetzen"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "Schließen"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Anwendung beenden"
-#: ../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 "Projekt schließen"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "Reiter schließen"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "Spule"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Kommentar"
-#: ../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 Unterstützung"
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "Firmenname"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "Firmenname (erforderlich):"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "Firmenwebseite (optional):"
@@ -995,7 +994,7 @@
msgid "Comparison"
msgstr "Vergleich"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "Kompilliere IEC Programm zu c-Code...\n"
@@ -1003,93 +1002,93 @@
msgid "Concatenation"
msgstr "Konkatenation"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "Konfiguration"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "Konfigurationsvariablen"
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr "Konfiguration"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr "Konfigurationen"
-#: ../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 "Variablennamen bestätigen oder anpassen"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "Verbinden"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "Mit Ziel-SPS verbinden"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "Verbunden mit 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 "Verbindung"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "Verbindungseigenschaften"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "Verbindung abgebrochen!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "Verbindung zu %s gescheitert!\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 "Verbindung verloren!\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "Verbindung zu '%s' gescheitert.\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "Anschluss"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "Anschlüsse:"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "Konsole"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "Konstante"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr "Kontakt"
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "Beschreibung (optional):"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "Fortsetzung"
@@ -1109,20 +1108,20 @@
msgid "Conversion to time-of-day"
msgstr "Umwandlung in Tageszeit"
-#: ../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 "Kopieren"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "Baustein kopieren"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "Datei vom linken Ordner nach den rechten kopieren"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "Datei vom rechten Ordner nach den linken kopieren"
@@ -1130,7 +1129,7 @@
msgid "Cosine"
msgstr "Kosinus"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
@@ -1139,12 +1138,12 @@
"Kind \"{a1}\", Typ {a2} konnte nicht hinzugefügt werden:\n"
"{a3}\n"
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr "Die alte Datei %s konnte nicht importiert weden."
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
@@ -1153,7 +1152,7 @@
"Confnode Basis-Parameter {a1} konnten nicht geladen werden :\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"
@@ -1162,111 +1161,107 @@
"Confnode Parameter {a1} konnten nicht geladen werden :\n"
"{a2}"
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Nur Bausteine können eingefügt werden."
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "Konnte SPS nicht starten !\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "Konnte SPS nicht anhalten !\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Debugger kann nicht gestoppt werden.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "HMI erstellen"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "Neuer Baustein"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "Neue Aktion"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "Neuer Aktionsblock"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "Neuer Funktionsblock"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "Neuer Zweig"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "Neue Spule"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "Neuer Kommentar"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "Neue Verbindung"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "Neuer Kontakt"
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr "Neue Verzweigung"
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr "Neue Verzweigung"
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "Erster Schritt"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "Neuer Sprung"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "Neue Stomleitung"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "Neues KOP-Netzwerk"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "Neuer Schritt"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "Neue Transitionsbedingung"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "Erstellen eine neue Variable"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "Mitwirkende"
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr "Arbeitsverzeichnis :"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "Ausschneiden"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "Zyklisch"
@@ -1278,19 +1273,19 @@
msgid "DEPRECATED"
msgstr "VERALTET"
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr "DS-301 Profil"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "DS-302 Profil"
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr "Datentyp"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "Datentypen"
@@ -1311,68 +1306,60 @@
msgid "Date subtraction"
msgstr "Datumssubstraktion"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "Tage:"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
"Debug entspricht der SPS nicht - stoppen/übertragen/starten um Debug wieder "
"zu aktivieren\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "Debuginstanz"
-#: ../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: Unbekannte Variable '%s'\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Debug: Datentyp '%s' ist nicht unterstützt\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "Debugger"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Debugger deaktiviert\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "Debugger ist bereit\n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Debugger ist gestoppt.\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "Löschen"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "Zweig löschen"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "Datei löschen"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "Kabelabschnitt löschen"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "Object löschen"
@@ -1380,47 +1367,47 @@
msgid "Deletion (within)"
msgstr "Löschen (innerhalb)"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "Referenz:"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr "Beschreibung"
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr "Beschreibung:"
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "Dimensionen:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr "Richtung"
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "Richtung:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "Direkt"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "Verbindung trennen"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "Verbindung zu SPS trennen"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "Getrennt"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "Verzweigung"
@@ -1428,121 +1415,121 @@
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 "Möchten Sie die Datei '%s' wirklich löschen?"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "Dokumentation"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "Fertig"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Zeitangabe"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "EDS Dateien (*.eds)|*.eds|Alle Dateien|*.*"
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "Funktionsblock bearbeiten"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "Spule bearbeiten"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "Kontaktwerte bearbeiten"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr "Zeitangabe ändern"
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr "Schritt bearbeiten"
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "Eine wxWidgets GUI mit wxGlade bearbeiten"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "Aktionsblockeigenschaften bearbeiten"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "Array-Typeigenschaften bearbeiten"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "Kommentar bearbeiten"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "Datei bearbeiten"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "Objekt bearbeiten"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "Sprungziel bearbeiten"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr ""
"Bearbeite hinzugefügten Roh-IEC Code, der vom PLCGenerator generiert wurde"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "Schrittname bearbeiten"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "Transitionsbedingung bearbeiten"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "Werkzeugleiste bearbeiten"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "Editor-Auswahl"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "Komponente:"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "Leer"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Wiederherstellen/Rückgängig aktivieren"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Leere Dimension ist nicht erlaubt."
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "Geben Sie einen Namen ein"
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "Geben Sie eine Port-Nummer ein"
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "Geben Sie die IP-Adresse des anzubindenden Interfaces ein"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Aufzählung"
@@ -1550,37 +1537,36 @@
msgid "Equal to"
msgstr "Gleich"
-#: ../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 "Fehler"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
@@ -1588,12 +1574,12 @@
"Fehler : Mindestens eine Konfiguration und eine Ressource müssen in der SPS "
"deklariert sein!\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Fehler : IEC nach C Compiler gab folgendes zurück: %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1602,37 +1588,44 @@
"Fehler in ST/AWL/AS Code-Generator :\n"
"%s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "Fehler während der Speicherung von \"%s\"\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr "Fehler: Slave Export fehlgeschlagen\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 ""
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "Fehler: Kein Master angelegt\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "Fehler: Kein SPS built\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "Fehler beim verbinden von %s!\n"
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "Ausführungssteuerung:"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "Ausführungsreihenfolge:"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "Experimentelle web-basierte HMI"
@@ -1644,77 +1637,77 @@
msgid "Exponentiation"
msgstr "Exponentialfunktion des Operanden"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "CanOpen-Slave in EDS-Datei exportieren"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr "Graphenwerte in Zwischenablage exportieren"
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr "Slave exportieren"
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "Ausdruck:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "External"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "Extrahiere gefundene Variablen...\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 "FUP"
-#: ../ProjectController.py:1791
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
msgstr "Fehler : Sie müssen kompillieren vor dem Transfer.\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "Fallende Flanke"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "schwerer Fehler : Kann den Builder nicht finden.\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr "Lade %s"
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr "Das Feld %s enthält keinen gültigen Wert!"
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr "Die Felder %s enthalten keine gültigen Werte!"
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr "Datei '%s' existiert bereits!"
-#: ../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 "Suchen"
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr "Weiter suchen"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr "Rückwärts suchen"
@@ -1722,93 +1715,89 @@
msgid "Find position"
msgstr "Position suchen"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr "Suchen:"
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "Erzwinge neues laden der Runtime\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "Wert forcen"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "Variable forcen"
-#: ../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 "Formular unvollständig. %s muss ausgefüllt werden!"
-#: ../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 "Formular unvollständig. Der Name muss ausgefüllt werden!"
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr "Formular unvollständig. Bausteintyp muss ausgewählt werden!"
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr "Vorwärts"
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "Funktion"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "Funktions&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 "Funktionsblock"
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr "Funktionsblocktypen"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr "Funktionsblöcke"
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr "Funktionsblock kann nicht in Funktion verwendet werden!"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "Funktionsblock \"%s\" kann nicht in eine Funktion eingefügt werden!!!"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "Funktionen"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr "Programm generieren"
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "Generiere SoftPLC IEC-61131 ST/AWL/AS 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 "Zum aktuellen Wert wechseln"
-#: ../controls/ProjectPropertiesPanel.py:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "Grafiken"
@@ -1820,110 +1809,114 @@
msgid "Greater than or equal to"
msgstr "Größer oder gleich"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "Gitterauflösung:"
-#: ../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 "Höhe:"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr "Homeverzeichnis:"
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "Horizontal:"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr "Stunden:"
-#: ../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 "AWL"
-#: ../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 ist nicht gültig!"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "Importiere 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 "Ein- und Ausgang"
-#: ../editors/Viewer.py:431
+#: ../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 "Inaktiv"
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr "Inkompatible Datentypen zwischen \"{a1}\" und \"{a2}\""
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "Inkompatible Datengröße zwischen \"%s\" und \"BOOL\""
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr "Inkompatible Datengröße zwischen \"{a1}\" und \"{a2}\""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "Indikator"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr "Anfangswert"
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr "Anfangsschritt"
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "Anfangswert"
-#: ../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 "Anfangswert:"
-#: ../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 "Eingang"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "Eingänge:"
@@ -1931,64 +1924,70 @@
msgid "Insertion (into)"
msgstr "Einfügen String in ein anderes String an die entsprechende Position"
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "Eine Instanz mit der ID%d existiert nicht!"
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr "Instanzen:"
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr "Schnittstelle"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr "Ereignisgesteuert"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr "Intervall"
-#: ../PLCControler.py:2331
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "Ungültige plcopen-Element(en)!!!"
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr "Ungültiger Datentyp \"{a1}\" -> {a2}! = {a3} für \"{a4}\""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "Ungültiger Datentyp \"{a1}\" -> {a2}! = {a3} für die Adresse \"{a4}\""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "Ungültiger Datentyp \"{a1}\" -> {a2}! = {a3} für die Adresse \"{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 "Ungültiger Wert \"%s\" für 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 "Ungültiger Wert \"%s\" "
-#: ../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 "Ungültiger Wert \"%s\""
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr "Ungültiger Wert \"{a1}\" für Variable \"{a2}\"!"
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1996,51 +1995,55 @@
"Ungültiger Wert!\n"
"Bitte geben eine Zahl ein."
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "Sprung"
-#: ../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 "KOP"
-#: ../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 "KOP-Element mit id %d ist auf mehr als einem Netzwerk."
-#: ../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 "Sprache"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "Sprache (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 "Sprache:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr "Letzter Build entspricht bereits dem Ziel. Übertrage trotzdem...\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "Starte WX GUI Inspector"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "Starte eine live-Python shell"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "Links"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "Linke Stromleitung"
@@ -2056,11 +2059,11 @@
msgid "Less than or equal to"
msgstr "Kleiner oder gleich"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "Bibliotheke"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "Lizenz"
@@ -2068,27 +2071,27 @@
msgid "Limitation"
msgstr "Limitierung"
-#: ../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 "Lokal"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "Lokale Einträge"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr "Lokale Service discovery fehlgeschlagen!\n"
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "IEC-Adresse"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr "Verfügbare IEC-Adressen:"
@@ -2096,12 +2099,12 @@
msgid "Logarithm to base 10"
msgstr "Logarithmus zur Basis 10"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "MDNS-Auflösungsfehler für '%s'\n"
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "Map Variable"
@@ -2109,11 +2112,15 @@
msgid "Map located variables over CANopen"
msgstr "Variablen über CANopen mappen"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../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 "Maximale Anzahl ({a1}) ist erreicht für diesen confnode des Typs {a2}"
@@ -2122,29 +2129,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 "Speicher"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr "Menüleiste"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "Mikrosekunden:"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "Mitte"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "Millisekunden:"
@@ -2152,78 +2159,82 @@
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 "Minuten:"
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "Sonstiges"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "Modifikator:"
-#: ../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 "Mehr als ein Anschluss gefunden zu Fortsetzung \"{a1}\" im Baustein \"{a2}\""
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "Aktion nach unten schieben"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "Aktion nach oben schieben"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "Verschieben nach unten"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "Komponent nach unten schieben"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "Komponent nach oben schieben"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "Insanz nach unten schieben"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "Instanz nach oben schieben"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "Verschieben Task nach unten"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "Verschieben Task nach oben"
-#: ../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 "Ansicht verschieben"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "Verschieben nach oben"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "Verschieben Variable nach unten"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "Verschieben Variable nach oben"
@@ -2235,26 +2246,26 @@
msgid "Multiplication"
msgstr "Multiplikation"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "Mein Rechner:"
-#: ../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 darf nicht NULL sein!"
-#: ../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:"
@@ -2262,46 +2273,46 @@
msgid "Natural logarithm"
msgstr "Natürlicher Logarithmus"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "Negiert"
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
msgstr "Nevow Web-Dienst fehlgeschlagen."
-#: ../Beremiz_service.py:556
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
msgstr "Nevow/Athena-Import gescheitert :"
-#: ../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 "Neu"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "Neuer Eintrag"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "Kein Modifikator"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "Keine SPS zu übertragen (war das Kompillieren erfolgreich ?)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "Baustein \"%s\" ist leer"
-#: ../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 "Kein Anschluss gefunden zu Fortsetzung \"{a1}\" im Baustein \"{a2}\""
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2309,12 +2320,12 @@
"Keine Dokumentation.\n"
"Coming soon."
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr "Keine Informationen für Block \"%s\" sind gefunden"
-#: ../PLCGenerator.py:1194
+#: ../PLCGenerator.py:1232
#, python-brace-format
msgid ""
"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
@@ -2323,48 +2334,48 @@
"Keine Ausgabe {a1} Variable gefunden im Block {a2} im Baustein {a3}. "
"Verbindung muss gebrochen werden"
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "Keine Suchergebnisse."
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "Kein SVG-File namens: %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 "Kein 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 "Kein Index/Subindex ({a1},{a2}) in ID : {a3} (Variable {a4})"
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "Kein gültiger Wert ausgewählt!"
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "Keine Variable ist im Baustein \"%s\" definiert."
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr "Nicht existierende 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 ""
@@ -2374,7 +2385,7 @@
msgid "Not equal to"
msgstr "Ungleich"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Anzahl der Verzweigungen:"
@@ -2382,24 +2393,24 @@
msgid "Numerical"
msgstr "Numerisch"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr "Bei Änderung"
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "Nur Elemente"
-#: ../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 "Öffnen"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "öffne 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."
@@ -2408,67 +2419,67 @@
"Entwicklungsumgebung mit ständig wachsender Reihe von Erweiterungen und "
"flexibler SPS-Runtime."
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr "Datei-Browser zum Verwalten der Projektdateien öffnen"
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "WxGlade öffnen"
-#: ../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 "Optionen"
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "Organisation (optional):"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "Anderes Profil"
-#: ../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 "Ausgang"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO Empfangen"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "PDO Senden"
-#: ../targets/toolchain_gcc.py:167
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr "SPS :\n"
-#: ../BeremizIDE.py:355
+#: ../BeremizIDE.py:383
msgid "PLC Log"
msgstr "SPS-Protokoll"
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr "SPS-Code-Erzeugung fehlgeschlagen !\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "SPS ist leer oder bereits gestartet."
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "SPS ist nicht gestartet."
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
@@ -2477,15 +2488,15 @@
"SPS-Syntaxfehler in Zeile {a1}:\n"
"{a2}"
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "PLCOpen Dateien (*.xml)|*.xml|Alle Dateien|*.*"
-#: ../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"
@@ -2495,205 +2506,205 @@
"\n"
"Beremiz ist "
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr "PORT"
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "Bausteinname"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "Bausteinname:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "Bausteintyp"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "Bausteintyp:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr "PYRO Verbindung zu URI : %s\n"
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr "PYRO mit Zertifikaten aus '%s'\n"
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "Seitenformat"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "Seitengröße (optional):"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "Seite: %d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr "Elterninstanz"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "Einfügen"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "Baustein einfügen"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "Zu suchendes Muster:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "Anschlussnummer:"
-#: ../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 "Bitte wählen Sie ein Ziel"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr "Bitte geben Sie einen Blocknamen ein"
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
msgid "Please enter comment text"
msgstr "Bitte geben Sie einen Kommentartext ein"
-#: ../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 "Bitte geben Sie einen Schrittnamen ein"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "Bitte geben Sie Text ein"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "Bitte geben Sie einen Wert für die Variable \"%s\" ein:"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "Port Nummer darf folgenden Wertbereich haben: 0 <= port <= 65535!"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "Port Nummer muß eine natürliche Zahl sein (Integer)!"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr "Stromleitung"
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "Stromleitungeigenschaften"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "Vorschau"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "Vorschau:"
-#: ../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 "Drucken"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "Druckvorschau"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "Priorität"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "Priorität:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "Problem mit SPS-Start : Fehler %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "Produktname"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "Produktname (erforderlich):"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "Produkt-Release (optional):"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr "Produktversion"
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "Produktversion (erforderlich):"
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr "Programm"
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr "Programm wurde erfolgreich generiert!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "Programme"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr "Programme können nicht von anderen Bausteinen verwendet werden!"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "Projekt"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr "Projekt '%s':"
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr "Projektdateien"
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr "Projektname"
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "Projektname (erforderlich):"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "Projektversion (optional):"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2701,90 +2712,90 @@
"Syntax-Fehler in Projektdatei:\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "Projekteigenschaften"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr "Projektbaum stimmt nicht mit confnode.xml {a1}! ={a2} überein"
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr "Andere Anschlüße umbenennen"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "Eigenschaften"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr "Service im lokalen Netzwerk veröffentlichen"
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr "Pyroausnahme: %s\n"
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr "Pyro 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 Datei"
-#: ../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 "Beenden"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "Bereich:"
-#: ../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 "Knoten '%s' wirklich löschen?"
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
msgstr "Wiederherstellen"
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
msgstr "Referenz"
-#: ../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 "Regulärer Ausdruck"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr "Reguläre Ausdrücke"
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr "Forcen aufheben"
@@ -2792,56 +2803,56 @@
msgid "Remainder (modulo)"
msgstr "Rest (modulo)"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr "Knoten %s löschen"
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr "Datentyp löschen"
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr "Baustein löschen"
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr "Aktion löschen"
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr "Komponent löschen"
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr "Entfernen Datei aus dem linken Ordner"
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr "Instanz löschen"
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "Slave löschen"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr "Task löschen"
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr "Variable löschen"
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "Umbenennen"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr "Datei ersetzen"
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr "Kabel durch Verbindungen ersetzen"
@@ -2849,43 +2860,43 @@
msgid "Replacement (within)"
msgstr "Ersetzung (innerhalb)"
-#: ../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 "Ausführungsreihenfolge zurücksetzen"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr "Perspektive zurücksetzen"
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr "Suchergebniss säubern"
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "Ressourcen"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "Retain"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "Rückgabetyp:"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "Rechts"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "Rechte Stromleitung"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "Steigende Flanke"
@@ -2901,116 +2912,116 @@
msgid "Rounding up/down"
msgstr "Auf-/Abrunden"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "Starte"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr "C-Code-Erzeugung für Runtime IO-Erweiterungen fehlgeschlagen !\n"
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr "C-Code-Erzeugung für Runtime Bibliothek fehlgeschlagen !\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 "AS"
-#: ../PLCGenerator.py:1392
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr ""
"AS-Sprung in der Baustein \"{a1}\" bezieht sich auf nicht vorhandene AS-"
"Schritt \"{a2}\""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr "AS Transition im Baustein \"%s\" muss angeschlossen sein."
-#: ../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 Dateien (*.st)|*.st|Alle Dateien|*.*"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "SVG Dateien (*.svg)|*.svg|Alle Dateien|*.*"
-#: ../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 "Speichern"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "Speichern unter..."
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "Speichern unter"
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr "Speicherpfad ist der gleiche, wie der Pfad von dem Projekt!\n"
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "Geltungsbereich"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "Suchen"
-#: ../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 "Im Projekt suchen "
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "Sekunden:"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "Alles auswählen"
-#: ../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 "Wählen Sie eine Variablenklasse:"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "Wählen Sie einen Editor:"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "Wählen Sie eine Instanz"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "Wählen Sie ein Objekt"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr ""
"Das ausgewählte Verzeichnis enthält bereits ein Projekt. Überschreiben?\n"
@@ -3019,23 +3030,23 @@
msgid "Selection"
msgstr "Auswahl"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "Alternativeende"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "Alternativanfang"
-#: ../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 "Service verfügbar:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "Menge"
@@ -3047,27 +3058,27 @@
msgid "Shift right"
msgstr "Bitweises Rechts-Shift eines Operanden"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "Zeige IEC Code, der vom PLCGenerator erzeugt wurde"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "Zeige Master"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "Zeige Master, der von den config_utils generiert wurde."
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "Zeige Code"
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
msgid "Simultaneous Convergence"
msgstr "Parallelende"
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
msgid "Simultaneous Divergence"
msgstr "Parallelanfang"
@@ -3075,15 +3086,15 @@
msgid "Sine"
msgstr "Sinus"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "Ereignis"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "Quellecode hat sich nicht verändert, Build ist nicht nötig.\n"
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3096,60 +3107,56 @@
msgid "Square root (base 2)"
msgstr "Quadratwurzel (Basis 2)"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "Standardfunktionsblock"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "Starte SPS"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "Zeige build in %s\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "Gestartet"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "starte SPS\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "Statusleiste"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "Schritt"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "Stop"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "Stop SPS"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "Halte laufende SPS an"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "Gestoppt"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Debugger wird gestoppt...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "Struktur"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "Unterbereichstyp"
@@ -3157,19 +3164,19 @@
msgid "Subtraction"
msgstr "Subtraktion"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "Erfolgreicher Build.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr "Perspektive wechseln"
-#: ../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 "Syntaxfehler im regulären Ausdruck des zu suchenden Musters!"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "TYPE"
@@ -3177,19 +3184,19 @@
msgid "Tangent"
msgstr "Tangente"
-#: ../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"
@@ -3211,7 +3218,7 @@
"Hier können Sie die Liste abonnieren:\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"
@@ -3220,15 +3227,15 @@
"Die Datei '%s' existiert bereits.\n"
"Möchten Sie es ersetzen?"
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "Die Gruppe von Blöcken muss konsistent sein!"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "Es wurden Änderungen gemacht, wollen Sie speichern?"
-#: ../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 "
@@ -3237,7 +3244,7 @@
"Baustein mit dem Namen \"%s\" existiert bereits. Das könnte eine Kollision "
"sein. Möchten Sie fortfahren?"
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3245,11 +3252,11 @@
"Es gab ein Problem beim Drucken.\n"
"Vielleicht ist der Drucker nicht richtig eingestellt."
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "Diese Option is noch nicht verfügbar!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr "Takt: %d"
@@ -3287,36 +3294,36 @@
msgid "Time-of-day subtraction"
msgstr "Tageszeitsubstraktion"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr "Wert umschalten"
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "Oben"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "Übertragen"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "SPS übertragen"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "Übertragung erfolgreich beendet.\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "Übertragung gescheitert\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 "
@@ -3325,22 +3332,22 @@
"Transition \"%s\" muss eine Ausgangsvariable oder Spule enthalten, die sich "
"auf seinen Namen bezieht"
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "Transitionsbedingungsname"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "Transitionsbedingungsname:"
-#: ../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 mit Inhalt \"{a1}\" im Baustein \"{a2}\" ist nicht mit dem "
"nächsten Schritt verbunden"
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
@@ -3349,38 +3356,38 @@
"Transition mit Inhalt \"{a1}\" im Baustein \"{a2}\" ist nicht mit dem "
"vorherigen Schritt verbunden"
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "Eine Transition mit dem Namen %s existiert nicht!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "Transitionen"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr "Übersetzt von"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "Taskttyp"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr "Twisted is nicht verfügbar."
-#: ../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 "Typ"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr "Datentyp und abgeleitete Datentypen"
-#: ../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 "Typenkonflikt für Ort \"%s\""
@@ -3389,179 +3396,233 @@
msgid "Type conversion"
msgstr "Typumwandlung"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr "Typinfo:"
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr "Nur Datentyp"
-#: ../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 "Typ:"
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../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 "Unmöglich, PDO-Mapping für %02x zu definieren"
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr " %s-Ermittlung für Xenomai fehlgeschlagen\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 "Undefinierter Bausteintyp \"{a1}\" im Baustein \"{a2}\""
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "Undefinierter Bausteintyp \"%s\""
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "Rückgängig"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "Unbekannt"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "Unbekannte Variable \"%s\" für diesen Baustein!"
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr "Unbenannt"
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "Unbenannt%d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "Nicht erkannte Datengröße \"%s\""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "Benutzerdefinierte Datentypen"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "Benutzertyp"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "Benutzerbausteine"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "Wert"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "Werte:"
-#: ../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 "Variableneigenschaften"
-#: ../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 "Variablenklasse"
-#: ../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 gehört nicht zu dieser POU!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "Variable:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "Variablen"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "Vertikal:"
-#: ../Beremiz_service.py:588
+#: ../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 "WAMP-Cliet-Start fehlgeschlagen."
-#: ../connectors/WAMP/__init__.py:91
+#: ../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 "WAMP Verbindung zu URL : %s\n"
-#: ../connectors/WAMP/__init__.py:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr "WAMP Verbindungs-timeout"
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr "WAMP Verbindung zu '%s' gescheitert.\n"
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr "WAMP-Import fehlgeschlagen :"
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../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 "WXGLADE GUI"
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "Warnung"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "Warnungen im ST/IL/SFC Code Generator :\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "Ganze Projekt"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "Breite:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr "Nach dem Ende zum Anfang"
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Geschrieben von"
-#: ../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 ?"
@@ -3569,7 +3630,7 @@
"Sie haben keine Schreibberechtigung.\n"
"soll Inkscape trotzdem geöffnet werden ?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3577,7 +3638,7 @@
"Sie haben keine Schreibberechtigung.\n"
"Soll wxGlade dennoch geöffnet werden ?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3585,7 +3646,7 @@
"Sie müssen Berechtigungen besitzen um mit diesem Projekt arbeiten zu können\n"
"Wollen Sie dieses Projekt stattdessen kopieren ?"
-#: ../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!"
@@ -3593,74 +3654,66 @@
"Sie müssen den Block oder die Gruppe von Blöcken auswählen, um die ein Zweig"
" hinzugefügt werden soll!"
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr ""
"Bitte wählen Sie den Draht aus, wo ein Kontakt hinzugefügt werden soll!"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "Sie müssen einen Namen eingeben!"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "Sie müssen einen Wert eingeben!"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "Zoom"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr "Tage"
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "Fehler: %s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr "Beendet mit Status {a1} (pid {a2})\n"
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "Datei : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr "Funktion"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "Funktion : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "Funktionsblock"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr "Stunden"
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "Zeile :"
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "matiec ist nicht gefunden\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr "Millisekunden"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr "Minuten"
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "Programm"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr "Sekunden"
@@ -3676,24 +3729,24 @@
msgid "string right of"
msgstr "Zeichen rechts von"
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "Updateinformation ist nicht verfügbar."
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr "Warnung: %s\n"
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr "{a1} \"{a2}\" kann nicht eingefügt werden als {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 ""
"XML-Datei {a1} folgt nicht XSD-Schema an der Zeile {a2}:\n"
@@ -3760,6 +3813,72 @@
msgid "Win32"
msgstr "Win32"
+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 "BaseParams"
@@ -3943,7 +4062,7 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
+"exclusive access to certain resources."
msgstr ""
"Das Semaphor bietet einen Mechanismus, um Software-Elementen gegenseitig "
"ausschließlichen Zugriff auf bestimmte Ressourcen zu ermöglichen."
--- a/i18n/Beremiz_es_ES.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_es_ES.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,19 +1,16 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Marcial González de Armas <mgacod@gmail.com>, 2017
-# Carlos Guilarte <guilartec@gmail.com>, 2017
-# Nelson Mambre <nmambre@gmail.com>, 2017
+#, fuzzy
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"
-"Last-Translator: Nelson Mambre <nmambre@gmail.com>, 2017\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Yegor Yefremov <yegorslists@googlemail.com>, 2018\n"
"Language-Team: Spanish (Spain) (https://www.transifex.com/beremiz/teams/75746/es_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,7 +18,7 @@
"Language: es_ES\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -36,161 +33,166 @@
"Traceback:\n"
msgstr ""
"\n"
-"Ha ocurrido un error desconocido (bug). El informe de error fué guardado en:\n"
+"Ha ocurrido un error desconocido (bug). El informe de error fue guardado en:\n"
"(%s)\n"
"\n"
-"Por favor si es tan amable envié el archivo de error a:\n"
+"Por favor, si es tan amable, envíe el archivo de error a:\n"
"beremiz-devel@lists.sourceforge.net\n"
"\n"
"Debe reiniciar el programa.\n"
"\n"
"Rastreo:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr "Externa"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr "EntradaSalida"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr "Entrada"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr " Local"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr "Salida"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr "Temporal"
-#: ../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 ""
-
-#: ../ProjectController.py:1151
+msgstr "y %s"
+
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
-msgstr "Generación fallida!\n"
-
-#: ../plcopen/plcopen.py:886
+msgstr "¡Generación fallida!\n"
+
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
-msgstr "\"%s\" Tipo de dato no existente !!!"
-
-#: ../plcopen/plcopen.py:904
+msgstr "¡El Tipo de dato \"%s\" no existe!"
+
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
-msgstr "\"%s\" POU ya existente !!!"
-
-#: ../plcopen/plcopen.py:925
+msgstr "¡El POU \"%s\" ya existe!"
+
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
-msgstr "\"%s\" POU no existente !!!"
-
-#: ../editors/Viewer.py:247
+msgstr "¡El POU \"%s\" no existe!"
+
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
-msgstr "\"%s\" no puede usarse a si mismo!"
-
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+msgstr "¡\"%s\" no puede usarse a sí mismo!"
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
-msgstr "\"%s\" config ya existente!"
-
-#: ../plcopen/plcopen.py:472
+msgstr "¡La configuración \"%s\" ya existe!"
+
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
-msgstr "\"%s\" configuración ya existente !!!"
-
-#: ../IDEFrame.py:1605
+msgstr "¡La configuración \"%s\" ya existe!"
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "¡La configuración %s no existe!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
-msgstr "\"%s\" tipo de dato ya existente!"
-
-#: ../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
+msgstr "¡El tipo de dato \"%s\" ya existe!"
+
+#: ../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\" elemento para esta POU ya existente!"
-
-#: ../BeremizIDE.py:897
+msgstr "¡Ya existe un elemento \"%s\" para este POU!"
+
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
-msgstr "\"%s\" carpeta no válida para el proyecto Beremiz\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
+msgstr "La carpeta \"%s\" no contiene un proyecto Beremiz válido\n"
+
+#: ../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\" es una palabra clave. No puede ser usada!"
-
-#: ../plcopen/plcopen.py:2417
+msgstr "\"%s\" es una palabra reservada. ¡No puede ser usada!"
+
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
-msgstr "\"%s\" es un valor inválido!"
-
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+msgstr "¡\"%s\" es un valor inválido!"
+
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
-msgstr "\"%s\" no es una carpeta válida"
-
-#: ../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
+msgstr "¡\"%s\" no es una carpeta válida!"
+
+#: ../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\" no es un identificador válido"
-
-#: ../IDEFrame.py:2410
+msgstr "¡\"%s\" no es un identificador válido!"
+
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
-msgstr "\"%s\" es usado por uno o más POUs. Deseas continuar?"
-
-#: ../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
+msgstr "\"%s\" es usado por uno o más POUs. ¿Deseas continuar?"
+
+#: ../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 ya existe!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:550
+msgstr "¡El paso \"%s\" ya existe!"
+
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "\"%s\" valor ya definido\""
-#: ../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\" no es una dimensión válida para el array!"
-
-#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750
+msgstr "¡\"%s\" no es una dimensión válida para el arreglo!"
+
+#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766
#, python-format
msgid ""
"\"%s\" value isn't a valid array dimension!\n"
@@ -199,200 +201,198 @@
"\"%s\" no es una dimensión válida para el array!\n"
"El valor de la derecha debe ser mayor que el de la izquierda."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
-msgstr "\"{a1}\" llamada a la función en \"{a2}\" POU: No hay entrada conectada"
-
-#: ../editors/Viewer.py:251
+msgstr ""
+"\"{a1}\" llamada a la función en \"{a2}\" POU: No hay ninguna entrada "
+"conectada"
+
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
-msgstr "\"{a1}\" ya está en uso por \"{a2}\"!"
-
-#: ../plcopen/plcopen.py:496
+msgstr "¡\"{a1}\" ya está siendo usada por \"{a2}\"!"
+
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" el recurso ya existe en la configuración \"{a2}\" !!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" el recurso no existe en la configuración \"{a2}\" !!!"
-#: ../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 Tipos de Datos"
-#: ../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 "Perfil %s"
-#: ../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 El cuerpo no tiene instancias!"
-#: ../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 El cuerpo no posee texto!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Añadir Elemento"
-#: ../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 "&Cerrar"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&Configuración"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
-msgstr "&TipodeDato"
-
-#: ../IDEFrame.py:390
+msgstr "&Tipo de Dato"
+
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Eliminar"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Mostrar"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Editar"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&Archivo"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Función"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Ayuda"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&Licencia"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Programa"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Propiedades"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&Proyectos Recientes"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Recursos"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}' - {a2} coincidencia en el proyecto"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} coincidencias en el proyecto"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' ubicado en {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d coincidencias)"
-#: ../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 "- Seleccione el tipo de URI -"
+
+#: ../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 "
@@ -401,38 +401,38 @@
"Un POU tiene un elemento llamado \"%s\". Esto puede causar conflicto. ¿Desea"
" Continuar?"
-#: ../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 "Un POU llamado \"%s\" ya existe!"
+msgstr "¡Ya existe un POU llamado \"%s\"!"
#: ../ConfigTreeNode.py:424
#, python-brace-format
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "Hijo llamado \"{a1}\" ya existe -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
-msgstr "¡Debe seleccionar una localización!"
-
-#: ../editors/ResourceEditor.py:451
+msgstr "¡Debe seleccionar una ubicación!"
+
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
-msgstr "¡Y existe una tarea con ese nombre!"
-
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777
-#: ../IDEFrame.py:1633 ../IDEFrame.py:1646
+msgstr "¡Ya existe una tarea con ese nombre!"
+
+#: ../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 "¡Variable llamada \"%s\" ya existente en este pou!"
-
-#: ../editors/CodeFileEditor.py:780
+msgstr "¡Ya existe una variable llamada \"%s\" en este POU!"
+
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
-msgstr "¡Variable llamada \"%s\" ya existente!"
-
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+msgstr "¡Ya existe una variable llamada \"%s\"!"
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "Acerca de"
@@ -440,822 +440,834 @@
msgid "Absolute number"
msgstr "Valor absoluto"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Acción"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "Bloque de acción"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Nombre de acción"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Nombre de acción:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
-msgstr "Acción llamada %s no existe!"
-
-#: ../PLCControler.py:98
+msgstr "¡No existe una Acción llamada %s!"
+
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "Acciones"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "Acciones:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "Activo"
-#: ../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 "Añadir"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
-msgstr "Añadir acción"
-
-#: ../features.py:32
+msgstr "Añadir Acción"
+
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
-msgstr ""
-
-#: ../IDEFrame.py:1876
+msgstr "Agregue código C accediendo a las variables ubicadas sincrónicamente"
+
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
-msgstr ""
-
-#: ../IDEFrame.py:1856
+msgstr "Añadir Configuración"
+
+#: ../IDEFrame.py:1887
msgid "Add DataType"
-msgstr ""
-
-#: ../editors/Viewer.py:572
+msgstr "Añadir Tipo de Dato"
+
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:117
+msgstr "Añadir Ramificación"
+
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
-msgstr ""
-
-#: ../IDEFrame.py:1864
+msgstr "Añadir IP"
+
+#: ../IDEFrame.py:1895
msgid "Add POU"
-msgstr ""
-
-#: ../features.py:33
+msgstr "Añadir POU"
+
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
-msgstr ""
-
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+msgstr "Añadir Código Python ejecutado de forma asíncrona"
+
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
-msgstr ""
-
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+msgstr "Añadir un Recurso"
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
-msgstr ""
-
-#: ../editors/Viewer.py:559
+msgstr "Añadir Transición"
+
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
-msgstr ""
-
-#: ../editors/SFCViewer.py:433
+msgstr "Añadir Segmento de Cable"
+
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
-msgstr ""
-
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+msgstr "Añadir un nuevo Paso Inicial"
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
-msgstr ""
-
-#: ../editors/SFCViewer.py:455
+msgstr "Añadir un nuevo Salto"
+
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
-msgstr ""
-
-#: ../features.py:34
+msgstr "Añadir un nuevo Paso"
+
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:137
+msgstr "Añadir una Interfaz de usuario simple basada en WxGlade"
+
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:352
+msgstr "Añadir Acción"
+
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:268
+msgstr "Añadir Elemento"
+
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:103
+msgstr "Añadir Instancia"
+
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:239
+msgstr "Añadir Esclavo"
+
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+msgstr "Añadir Tarea"
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
-msgstr ""
+msgstr "Añadir una Variable"
#: ../plcopen/iec_std.csv:33
msgid "Addition"
-msgstr ""
-
-#: ../plcopen/definitions.py:49
+msgstr "Suma"
+
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
-msgstr ""
-
-#: ../editors/Viewer.py:630
+msgstr "Bloques adicionales"
+
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
-msgstr ""
-
-#: ../editors/Viewer.py:1686
+msgstr "Ajustar el tamaño del bloque"
+
+#: ../editors/Viewer.py:1720
msgid "Alignment"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:40
-#: ../dialogs/BrowseLocationsDialog.py:48
-#: ../dialogs/BrowseLocationsDialog.py:141
-#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298
-#: ../controls/VariablePanel.py:70
+msgstr "Alineación"
+
+#: ../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 ""
-
-#: ../editors/FileManagementPanel.py:35
+msgstr "Todo"
+
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
-msgstr ""
-
-#: ../ProjectController.py:1685
+msgstr "Todos los archivos (*.*)|*.*|Archivos CSV (*.csv)|*.csv"
+
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:591
+msgstr "Ya está conectado. Por favor desconecte\n"
+
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
-msgstr "Ya existe un elemento con el nombre \"%s\" en esta estructura! "
-
-#: ../editors/ResourceEditor.py:486
+msgstr "¡Ya existe un elemento con el nombre \"%s\" en esta estructura! "
+
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
-msgstr "Ya existe una instancia con este nombre!"
-
-#: ../dialogs/ConnectionDialog.py:100
+msgstr "¡Ya existe una instancia con este nombre!"
+
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr ""
+"Aplicar el cambio de nombre a todos los que siguen con el mismo nombre"
#: ../plcopen/iec_std.csv:31
msgid "Arc cosine"
-msgstr "Arco coseno"
+msgstr "Arcocoseno"
#: ../plcopen/iec_std.csv:30
msgid "Arc sine"
-msgstr "Arco seno"
+msgstr "Arcoseno"
#: ../plcopen/iec_std.csv:32
msgid "Arc tangent"
-msgstr "Arco tangente"
+msgstr "Arcotangente"
#: ../plcopen/iec_std.csv:33
msgid "Arithmetic"
-msgstr "Aritmética"
-
-#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633
-#: ../controls/VariablePanel.py:858
+msgstr "Aritméticos"
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
msgid "Array"
-msgstr ""
+msgstr "Arreglo"
#: ../plcopen/iec_std.csv:39
msgid "Assignment"
msgstr "Asignación"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
-msgstr "Debe seleccionar al menos una variable o expresión!"
-
-#: ../controls/ProjectPropertiesPanel.py:100
+msgstr "¡Debe seleccionar al menos una variable o expresión!"
+
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Autor"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Nombre del autor (opcional):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
-msgstr ""
-
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr ""
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr ""
-
-#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630
+msgstr "Hacia atrás"
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
#, python-format
msgid "Bad location size : %s"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175
-#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297
+msgstr "Tamaño de la ubicación incorrecto: %s"
+
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
msgid "Base Type:"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+msgstr "Tipo base:"
+
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
-msgstr ""
-
-#: ../BeremizIDE.py:455
+msgstr "Tipos base"
+
+#: ../BeremizIDE.py:483
msgid "Beremiz"
-msgstr ""
+msgstr "Beremiz"
#: ../plcopen/iec_std.csv:70
msgid "Binary selection (1 of 2)"
-msgstr ""
+msgstr "Selección binaria (1 de 2)"
#: ../plcopen/iec_std.csv:62
msgid "Bit-shift"
-msgstr ""
+msgstr "Intercambio de bits"
#: ../plcopen/iec_std.csv:66
msgid "Bitwise"
-msgstr ""
+msgstr "A nivel de bits"
#: ../plcopen/iec_std.csv:66
msgid "Bitwise AND"
-msgstr ""
+msgstr "Y a nivel de bits"
#: ../plcopen/iec_std.csv:67
msgid "Bitwise OR"
-msgstr ""
+msgstr "O a nivel de bits"
#: ../plcopen/iec_std.csv:68
msgid "Bitwise XOR"
-msgstr ""
+msgstr "O exclusivo a nivel de bits"
#: ../plcopen/iec_std.csv:69
msgid "Bitwise inverting"
-msgstr ""
-
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+msgstr "Inversión a nivel de bits"
+
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "Bloque"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
-msgstr ""
-
-#: ../editors/TextViewer.py:262
+msgstr "Propiedades del Bloque"
+
+#: ../editors/TextViewer.py:260
msgid "Block name"
-msgstr ""
-
-#: ../editors/Viewer.py:550
+msgstr "Nombre del bloque"
+
+#: ../editors/Viewer.py:586
msgid "Bottom"
-msgstr ""
-
-#: ../ProjectController.py:1363
+msgstr "Fondo"
+
+#: ../ProjectController.py:1400
msgid "Broken"
-msgstr ""
-
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+msgstr "Roto"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:65
+msgstr "Navegar en la biblioteca de valores %s"
+
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
-msgstr ""
-
-#: ../ProjectController.py:1832
+msgstr "Buscar ubicación"
+
+#: ../ProjectController.py:1815
msgid "Build"
-msgstr ""
-
-#: ../ProjectController.py:1297
+msgstr "Construir"
+
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
-msgstr ""
-
-#: ../ProjectController.py:1833
+msgstr "El directorio de contrucción ya esta vacío\n"
+
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
-msgstr ""
-
-#: ../ProjectController.py:1080
+msgstr "Construir el proyecto en el directorio de contrución"
+
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
-msgstr ""
-
-#: ../ProjectController.py:1077
+msgstr "¡La construccion en lenguaje C falló!\n"
+
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
-msgstr ""
-
-#: ../c_ext/CFileEditor.py:63
+msgstr "La construccion en lenguaje C falló.\n"
+
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
-msgstr ""
-
-#: ../ProjectController.py:1155
+msgstr "Código C"
+
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
-msgstr ""
-
-#: ../targets/toolchain_makefile.py:122
+msgstr "El código C fué generado con éxito.\n"
+
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:192
+msgstr "Falló la compilación C.\n"
+
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
-msgstr ""
-
-#: ../features.py:32
+msgstr "Falló la compilación C de %s.\n"
+
+#: ../features.py:33
msgid "C extension"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:71
+msgstr "Extensión lenguaje C"
+
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:52
+msgstr "C&reditos"
+
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:44
+msgstr "Red CANOpen"
+
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
-msgstr ""
+msgstr "Esclavo CANOpen"
#: ../features.py:31
msgid "CANopen support"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603
-#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643
+msgstr "Soporte CANOpen"
+
+#: ../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 ""
-
-#: ../controls/VariablePanel.py:267
+msgstr "¡Solo puede generar orden de ejecución en redes FBD!"
+
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
-msgstr ""
-
-#: ../PLCOpenEditor.py:344
+msgstr "Solo puede dar una ubicación a variables locales globales "
+
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
-msgstr ""
-
-#: ../controls/VariablePanel.py:265
+msgstr "¡No se puede generar el programa para el archivo %s! "
+
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
-msgstr ""
-
-#: ../PLCOpenEditor.py:389
+msgstr "¡No se puede dar una ubicación a una instacia de bloque de funciones!"
+
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
-msgstr ""
-
-#: ../controls/VariablePanel.py:313
+msgstr "¡No se puede salvar el proyecto en el archivo %s!"
+
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr ""
-
-#: ../ConfigTreeNode.py:529
+"No se puede asignar un valor inicial a una instancia de bloque de funcion"
+
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
-msgstr ""
+msgstr "No se puede crear el hijo {a1} de tipo {a2}"
#: ../ConfigTreeNode.py:454
#, python-format
msgid "Cannot find lower free IEC channel than %d\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:131
+msgstr "No se puede encontrar un canal IEC libre menor a %d\n"
+
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "Falla de conexión - No puedo obtener el estado del PLC\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
-msgstr ""
-
-#: ../canfestival/config_utils.py:374
+msgstr "¡No puedo abrir o analizar VARIABLES.csv!\n"
+
+#: ../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:59 ../dialogs/FindInPouDialog.py:86
+"No se puede asignar el offset de bits para la variable no booleana '{a1}' "
+"(ID:{a2},Idx:{a3},sIdx:{a4}))"
+
+#: ../ProjectController.py:1761
+msgid "Cannot transfer while PLC is running. Stop it now?"
+msgstr ""
+"¡No se puede transferir mientras el PLC se esta ejecutando! ¿Desea detenerlo"
+" ahora?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
-msgstr ""
-
-#: ../editors/Viewer.py:545
+msgstr "Distingue entre mayúsculas y minúsculas"
+
+#: ../editors/Viewer.py:581
msgid "Center"
-msgstr ""
-
-#: ../Beremiz_service.py:268
+msgstr "Centrar"
+
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
-msgstr ""
-
-#: ../Beremiz_service.py:267
+msgstr "Cambiar la IP de la interfaz para enlazar"
+
+#: ../Beremiz_service.py:275
msgid "Change Name"
-msgstr ""
-
-#: ../IDEFrame.py:1946
+msgstr "Cambiar Nombre"
+
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
-msgstr ""
-
-#: ../Beremiz_service.py:269
+msgstr "Cambiar el tipo de POU a"
+
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
-msgstr ""
-
-#: ../Beremiz_service.py:270
+msgstr "Cambiar el Número de Puerto"
+
+#: ../Beremiz_service.py:278
msgid "Change working directory"
-msgstr ""
+msgstr "Cambiar el directorio de trabajo"
#: ../plcopen/iec_std.csv:81
msgid "Character string"
-msgstr ""
-
-#: ../svgui/svgui.py:128
+msgstr "Cadena de caracteres"
+
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
-msgstr ""
-
-#: ../ProjectController.py:542
+msgstr "Elegir un archivo SVG"
+
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
-msgstr ""
-
-#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302
-#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383
+msgstr "Elija un directorio para salvar el projecto"
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
msgid "Choose a file"
-msgstr ""
-
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+msgstr "Elija un archivo"
+
+#: ../BeremizIDE.py:900
msgid "Choose a project"
-msgstr ""
-
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+msgstr "Elija un archivo"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
-msgstr ""
-
-#: ../Beremiz_service.py:325
+msgstr "Elija un valor para %s:"
+
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
-msgstr ""
-
-#: ../ProjectController.py:449
+msgstr "Elija un directorio de trabajo"
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Elija un directorio vacío para el nuevo proyecto"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
-
-#: ../ProjectController.py:416
+"El directorio seleccionado no contiene un programa. ¡No es un proyecto "
+"válido!"
+
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+"El directorio seleccionado no esta vacío. ¡No puede ser usado para un "
+"proyecto nuevo!"
+
+#: ../controls/VariablePanel.py:60
msgid "Class"
-msgstr ""
-
-#: ../controls/VariablePanel.py:441
+msgstr "Clase"
+
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:70
+msgstr "Filtro de clase:"
+
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
-msgstr ""
-
-#: ../ProjectController.py:1836
+msgstr "Clase:"
+
+#: ../ProjectController.py:1821
msgid "Clean"
-msgstr ""
-
-#: ../controls/LogViewer.py:318
+msgstr "Limpiar"
+
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
-msgstr ""
-
-#: ../ProjectController.py:1838
+msgstr "Limpiar el registro de mensajes"
+
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
-msgstr ""
-
-#: ../ProjectController.py:1294
+msgstr "Limpiar la carpeta de construcción del proyecto"
+
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
-msgstr ""
-
-#: ../IDEFrame.py:435
+msgstr "Limpiando el directorio de construcción\n"
+
+#: ../IDEFrame.py:437
msgid "Clear Errors"
-msgstr ""
-
-#: ../editors/Viewer.py:641
+msgstr "Borrar errores"
+
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+msgstr "Borrar el Orden de Ejecusión"
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
-msgstr ""
-
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+msgstr "Cerrar"
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
-msgstr ""
-
-#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110
-#: ../IDEFrame.py:1013
+msgstr "Cerrar Aplicación"
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
msgid "Close Project"
-msgstr ""
-
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+msgstr "Cerrar Proyecto"
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
-msgstr ""
-
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+msgstr "Cerrar Pestaña"
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
-msgstr ""
-
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+msgstr "Bobina"
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
-msgstr ""
-
-#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161
-#: ../PLCOpenEditor.py:164
+msgstr "Comentario"
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
msgid "Community support"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:60
+msgstr "Soporte de la comunidad"
+
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:95
+msgstr "Nombre de empresa"
+
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:96
+msgstr "Nombre de empresa (requerido):"
+
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
-msgstr ""
+msgstr "Página web (opcional):"
#: ../plcopen/iec_std.csv:75
msgid "Comparison"
-msgstr ""
-
-#: ../ProjectController.py:734
+msgstr "Comparación"
+
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
-msgstr ""
+msgstr "Compilando el programa IEC en código C...\n"
#: ../plcopen/iec_std.csv:85
msgid "Concatenation"
-msgstr ""
-
-#: ../editors/ConfTreeNodeEditor.py:230
+msgstr "Concatenación"
+
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
-msgstr ""
-
-#: ../editors/ProjectNodeEditor.py:36
+msgstr "Config"
+
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:40
+msgstr "Variables de Configuración"
+
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
-msgstr ""
-
-#: ../PLCControler.py:99
+msgstr "Configuración"
+
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
-msgstr ""
-
-#: ../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
+msgstr "Configuraciones"
+
+#: ../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:1851
+msgstr "Confirme en cambio de nombre de la variable"
+
+#: ../ProjectController.py:1842
msgid "Connect"
-msgstr ""
-
-#: ../ProjectController.py:1852
+msgstr "Conectar"
+
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
-msgstr ""
-
-#: ../ProjectController.py:1354
+msgstr "Conectar el PLC de destino"
+
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586
-#: ../editors/Viewer.py:2408
+msgstr "Conectado a la URI: %s"
+
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
msgid "Connection"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:53
+msgstr "Conexión"
+
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
-msgstr ""
-
-#: ../ProjectController.py:1709
+msgstr "Propiedades de la conexión"
+
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
-msgstr ""
-
-#: ../ProjectController.py:1734
+msgstr "¡Conexión cancelada!\n"
+
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111
+msgstr "¡La conexión con %s falló!\n"
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
msgid "Connection lost!\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:102
+msgstr "¡Conexión perdida!\n"
+
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+msgstr "¡La conexión con '%s' falló!\n"
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:66
+msgstr "Conector"
+
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
-msgstr ""
-
-#: ../BeremizIDE.py:350
+msgstr "Conectores:"
+
+#: ../BeremizIDE.py:378
msgid "Console"
-msgstr ""
-
-#: ../controls/VariablePanel.py:60
+msgstr "Consola"
+
+#: ../controls/VariablePanel.py:75
msgid "Constant"
-msgstr ""
-
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+msgstr "Constante"
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:198
+msgstr "Contacto"
+
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+msgstr "Descripción del contenido (opcional):"
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
-msgstr ""
+msgstr "Continuación"
#: ../plcopen/iec_std.csv:18
msgid "Conversion from BCD"
-msgstr ""
+msgstr "Conversión desde BCD"
#: ../plcopen/iec_std.csv:19
msgid "Conversion to BCD"
-msgstr ""
+msgstr "Conversión a BCD"
#: ../plcopen/iec_std.csv:21
msgid "Conversion to date"
-msgstr ""
+msgstr "Conversión a fecha"
#: ../plcopen/iec_std.csv:20
msgid "Conversion to time-of-day"
-msgstr ""
-
-#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370
-#: ../IDEFrame.py:425
+msgstr "Conversión a hora-del-día"
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
msgid "Copy"
-msgstr ""
-
-#: ../IDEFrame.py:1933
+msgstr "Copiar"
+
+#: ../IDEFrame.py:1964
msgid "Copy POU"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:65
+msgstr "Copiar POU"
+
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:64
+msgstr "Copiar el archivo de la carpeta de la izquierda a la derecha"
+
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
-msgstr ""
+msgstr "Copiar el archivo de la carpeta de la derecha a la izquierda "
#: ../plcopen/iec_std.csv:28
msgid "Cosine"
-msgstr ""
-
-#: ../ConfigTreeNode.py:656
+msgstr "Coseno"
+
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
"{a3}\n"
msgstr ""
-
-#: ../py_ext/PythonFileCTNMixin.py:78
+"No se pudo añadir el hijo \"{a1}\", tipo {a2}:\n"
+"{a3}\n"
+
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
-msgstr ""
-
-#: ../ConfigTreeNode.py:626
+msgstr "No se pudo importar el archivo viejo %s."
+
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
" {a2}"
msgstr ""
-
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
+"No se pudieron cargar los siguientes parámetros base del confnode {a1}:\n"
+"{a2}"
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
#, python-brace-format
msgid ""
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
msgstr ""
-
-#: ../PLCControler.py:948
+"No se pudieron cargar los siguientes parámetros del confnode {a1}:\n"
+"{a2}"
+
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
-msgstr ""
-
-#: ../ProjectController.py:1651
+msgstr "No puede pegar un objeto distinto a un POU "
+
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
-msgstr ""
-
-#: ../ProjectController.py:1659
+msgstr "¡No se pudo iniciar el PLC!\n"
+
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
-msgstr ""
-
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr ""
-
-#: ../svgui/svgui.py:49
+msgstr "¡No se pudo detener el PLC!\n"
+
+#: ../svgui/svgui.py:57
msgid "Create HMI"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:46
+msgstr "Crear un HMI"
+
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
-msgstr ""
-
-#: ../dialogs/PouActionDialog.py:38
+msgstr "Crear un nuevo POU"
+
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
-msgstr ""
-
-#: ../IDEFrame.py:159
+msgstr "Crear una nueva Acción"
+
+#: ../IDEFrame.py:166
msgid "Create a new action block"
-msgstr ""
-
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+msgstr "Crear un nuevo Bloque de Acción"
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
-msgstr ""
-
-#: ../IDEFrame.py:132
+msgstr "Crear un nuevo Bloque"
+
+#: ../IDEFrame.py:139
msgid "Create a new branch"
-msgstr ""
-
-#: ../IDEFrame.py:126
+msgstr "Crear una nueva rama"
+
+#: ../IDEFrame.py:133
msgid "Create a new coil"
-msgstr ""
-
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+msgstr "Crear una nueva bobina"
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
-msgstr ""
-
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+msgstr "Crear un nuevo comentario"
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
-msgstr ""
-
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+msgstr "Crear una nueva conexión"
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
-msgstr ""
-
-#: ../IDEFrame.py:162
+msgstr "Crear un nuevo contacto"
+
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:53
+msgstr "Crear una nueva divergencia"
+
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
-msgstr ""
-
-#: ../IDEFrame.py:150
+msgstr "Crear una nueva divergencia o convergencia"
+
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
-msgstr ""
-
-#: ../IDEFrame.py:165
+msgstr "Crear un nuevo Paso inicial"
+
+#: ../IDEFrame.py:172
msgid "Create a new jump"
-msgstr ""
-
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+msgstr "Crear un nuevo salto"
+
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
-msgstr ""
-
-#: ../IDEFrame.py:123
+msgstr "Crear un nuevo carril de potencia"
+
+#: ../IDEFrame.py:130
msgid "Create a new rung"
-msgstr ""
-
-#: ../IDEFrame.py:153
+msgstr "Crear un nuevo escalón"
+
+#: ../IDEFrame.py:160
msgid "Create a new step"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+msgstr "Crear un nuevo paso"
+
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
-msgstr ""
-
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+msgstr "Crear una nueva transición"
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:113
+msgstr "Crear una nueva variable"
+
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
-msgstr ""
-
-#: ../Beremiz_service.py:434
+msgstr "Créditos"
+
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
-msgstr ""
-
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+msgstr "Directorio de trabajo actual:"
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:72
+msgstr "Cortar"
+
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
-msgstr ""
+msgstr "Cíclico"
#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
@@ -1263,1891 +1275,1947 @@
#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
#: ../plcopen/iec_std.csv:60
msgid "DEPRECATED"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+msgstr "OBSOLETO"
+
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+msgstr "Perfil DS-301"
+
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:36
+msgstr "Perfil DS-302"
+
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
-msgstr ""
-
-#: ../PLCControler.py:98
+msgstr "Tipo de dato"
+
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
-msgstr ""
+msgstr "Tipos de datos"
#: ../plcopen/iec_std.csv:16
msgid "Data type conversion"
-msgstr ""
+msgstr "Cambio de tipo de datos"
#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
msgid "Date addition"
-msgstr ""
+msgstr "Suma de fechas"
#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
msgid "Date and time subtraction"
-msgstr ""
+msgstr "Resta de Fecha y Hora"
#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
msgid "Date subtraction"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:44
+msgstr "Resta de Fechas"
+
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
-msgstr ""
-
-#: ../ProjectController.py:1756
+msgstr "Días:"
+
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:134
+"La depuración no coincide con el PLC: Detenga / transfiera / inicie para "
+"volver a habilitar\n"
+
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
-msgstr ""
-
-#: ../editors/Viewer.py:448
+msgstr "Instancia de depuración"
+
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
-msgstr ""
-
-#: ../ProjectController.py:1412
+msgstr "Depuración: %s"
+
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
-msgstr ""
-
-#: ../ProjectController.py:1410
+msgstr "Depuración: La variable '%s' es desconocida\n"
+
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
-msgstr ""
-
-#: ../IDEFrame.py:639
+msgstr "Depuración: El tipo '%s' no es soportado por el depurador\n"
+
+#: ../IDEFrame.py:660
msgid "Debugger"
-msgstr ""
-
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr ""
-
-#: ../ProjectController.py:1753
+msgstr "Depurador"
+
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
-msgstr ""
-
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr ""
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+msgstr "Depurador listo\n"
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
-msgstr ""
-
-#: ../editors/Viewer.py:573
+msgstr "Borrar"
+
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:153
+msgstr "Borrar Rama de Divergencia"
+
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
-msgstr ""
-
-#: ../editors/Viewer.py:560
+msgstr "Borrar Archivo"
+
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:41
+msgstr "Borrar Segmento de Cableado"
+
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
-msgstr ""
+msgstr "Borrar Elemento"
#: ../plcopen/iec_std.csv:88
msgid "Deletion (within)"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:153
+msgstr "Borrar (interno)"
+
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:739
+msgstr "Tipo de Derivación:"
+
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
-msgstr ""
-
-#: ../controls/VariablePanel.py:432
+msgstr "Descripción"
+
+#: ../controls/VariablePanel.py:463
msgid "Description:"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+msgstr "Descripción:"
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:66
+msgstr "Dimensiones:"
+
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:91
+msgstr "Dirección"
+
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Dirección:"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
-msgstr ""
-
-#: ../ProjectController.py:1860
+msgstr "Directamente"
+
+#: ../ProjectController.py:1855
msgid "Disconnect"
-msgstr ""
-
-#: ../ProjectController.py:1862
+msgstr "Desconectar"
+
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
-msgstr ""
-
-#: ../ProjectController.py:1364
+msgstr "Desconectar del PLC"
+
+#: ../ProjectController.py:1401
msgid "Disconnected"
-msgstr ""
-
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+msgstr "Desconectado"
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
-msgstr ""
+msgstr "Divergencia"
#: ../plcopen/iec_std.csv:36
msgid "Division"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:152
+msgstr "División"
+
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "¿Realmente desea borrar el archivo '%s'?"
+
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
-msgstr ""
-
-#: ../PLCOpenEditor.py:338
+msgstr "Documentación"
+
+#: ../PLCOpenEditor.py:312
msgid "Done"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
+msgstr "Listo"
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
-msgstr ""
-
-#: ../canfestival/canfestival.py:165
+msgstr "Duración"
+
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
-msgstr ""
-
-#: ../editors/Viewer.py:629
+msgstr "Archivos EDS (*.eds)|*.eds|Todos los archivos|*.*"
+
+#: ../editors/Viewer.py:668
msgid "Edit Block"
-msgstr ""
+msgstr "Editar Bloque"
+
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr "Editar Bobina"
#: ../dialogs/LDElementDialog.py:56
-msgid "Edit Coil Values"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:54
msgid "Edit Contact Values"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:59
+msgstr "Editar Contacto"
+
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:51
+msgstr "Editar Duración"
+
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:38
+msgstr "Editar Paso"
+
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:121
+msgstr "Editar un WxWidgets GUI con WXGlade"
+
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:44
+msgstr "Editar Bloque de Acción"
+
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
-msgstr ""
-
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+msgstr "Editar Matriz"
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:66
+msgstr "Editar Comentario"
+
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:39
+msgstr "Editar archivo"
+
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
-msgstr ""
-
-#: ../editors/Viewer.py:3014
+msgstr "Editar item"
+
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
-msgstr ""
-
-#: ../ProjectController.py:1874
+msgstr "Editar Destino del Salto"
+
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
-msgstr ""
-
-#: ../editors/SFCViewer.py:799
+msgstr "Editar el código IEC añadido al codigo generado por PLCGenerator "
+
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:52
+msgstr "Editar el nombre del paso"
+
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
-msgstr ""
-
-#: ../IDEFrame.py:611
+msgstr "Editar transición"
+
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
-msgstr ""
-
-#: ../ProjectController.py:1257
+msgstr "Barra de Herramienta Editor"
+
+#: ../ProjectController.py:1294
msgid "Editor selection"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:348
+msgstr "Selección del Editor"
+
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
-msgstr ""
-
-#: ../ProjectController.py:1362
+msgstr "Elementos:"
+
+#: ../ProjectController.py:1399
msgid "Empty"
-msgstr ""
-
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr ""
-
-#: ../Beremiz_service.py:333
+msgstr "Vacío"
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Las dimensiones no pueden estar vacías."
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
-msgstr ""
-
-#: ../Beremiz_service.py:318
+msgstr "Ingrese un nombre"
+
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
-msgstr ""
-
-#: ../Beremiz_service.py:309
+msgstr "Ingrese un número de puerto"
+
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Escriba la dirección IP de la interfaz a enlazar"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
-msgstr ""
+msgstr "Enumerado"
#: ../plcopen/iec_std.csv:77
msgid "Equal to"
-msgstr ""
-
-#: ../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
+msgstr "Igual a"
+
+#: ../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 ""
-
-#: ../ProjectController.py:789
+msgstr "Error"
+
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
msgstr ""
-
-#: ../ProjectController.py:781
+"Error: ¡Debe declarar en el PLC, al menos una configuración y un recurso!\n"
+
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
-msgstr ""
-
-#: ../ProjectController.py:712
+msgstr "Error: El compilador de IEC a C retorno %d\n"
+
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
"%s\n"
msgstr ""
-
-#: ../ConfigTreeNode.py:216
+"Error en el generador de código ST/IL/SFC:\n"
+"%s\n"
+
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:170
+msgstr "Error al guardar \"%s\"\n"
+
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:371
+msgstr "Error: Error al exportar el esclavo\n"
+
+#: ../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: Error: Los servidores Modbus/IP %{a1}.x y %{a2}.x usan el mismo "
+"numero de puerto {a3}.\n"
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:366
+msgstr "Error: No se genera el Maestro\n"
+
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
-msgstr ""
-
-#: ../ProjectController.py:1728
+msgstr "Error: No se construyó el PLC\n"
+
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
-msgstr ""
-
-#: ../dialogs/FBDBlockDialog.py:120
+msgstr "¡Ocurrió una excepción conectando %s!\n"
+
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+msgstr "Control de ejecusión:"
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
-msgstr ""
-
-#: ../features.py:35
+msgstr "Orden de Ejecusión:"
+
+#: ../features.py:36
msgid "Experimental web based HMI"
-msgstr ""
+msgstr "HMI experimental basada en web"
#: ../plcopen/iec_std.csv:38
msgid "Exponent"
-msgstr ""
+msgstr "Exponente"
#: ../plcopen/iec_std.csv:26
msgid "Exponentiation"
-msgstr ""
-
-#: ../canfestival/canfestival.py:176
+msgstr "Exponenciación"
+
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+msgstr "Exportar el esclavo CanOpen a un archivo EDS"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
-msgstr ""
-
-#: ../canfestival/canfestival.py:175
+msgstr "Exportar los valores del gráfico al portapapeles"
+
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:90
+msgstr "Exportar esclavo"
+
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
+msgstr "Expresión:"
+
+#: ../controls/VariablePanel.py:90
msgid "External"
-msgstr ""
-
-#: ../ProjectController.py:802
+msgstr "Externa"
+
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+msgstr "Extrayendo variables locales...\n"
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "FBD"
-msgstr ""
-
-#: ../ProjectController.py:1791
+msgstr "FBD"
+
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+msgstr "Error: Debe construir el proyecto antes de la trasferencia.\n"
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
-msgstr ""
-
-#: ../ProjectController.py:1070
+msgstr "Flanco descendente"
+
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
-msgstr ""
-
-#: ../Beremiz.py:156
+msgstr "Error: No se puede obtener el constructor.\n"
+
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:164
+msgstr "Buscando %s"
+
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:166
+msgstr "¡El valor en el campo %s no es válido!"
+
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
-msgstr ""
-
-#: ../controls/FolderTree.py:216
+msgstr "¡Los valores en los campos %s no son válidos!"
+
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37
-#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375
+msgstr "¡El archivo '%s' ya existe!"
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
msgid "Find"
-msgstr ""
-
-#: ../IDEFrame.py:377
+msgstr "Buscar"
+
+#: ../IDEFrame.py:379
msgid "Find Next"
-msgstr ""
-
-#: ../IDEFrame.py:379
+msgstr "Buscar el siguiente"
+
+#: ../IDEFrame.py:381
msgid "Find Previous"
-msgstr ""
+msgstr "Buscar el anterior"
#: ../plcopen/iec_std.csv:90
msgid "Find position"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:55
+msgstr "Buscar una posición"
+
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr ""
-
-#: ../editors/Viewer.py:1600
+msgstr "Buscar:"
+
+#: ../editors/Viewer.py:1633
msgid "Force value"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:162
+msgstr "Forzar el valor"
+
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97
-#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95
-#: ../dialogs/PouDialog.py:117
+msgstr "Forzar el valor de la variable"
+
+#: ../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:147 ../dialogs/FBDBlockDialog.py:236
-#: ../dialogs/ConnectionDialog.py:163
+msgstr "El formulario no esta completo. ¡Debe llenar %s!"
+
+#: ../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:232
+msgstr "¡El formulario no esta completo. Debe especificar un nombre!"
+
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:72
+"¡El formulario no esta completo. Debe selecccionar un tipo de bloque válido!"
+
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+msgstr "Adelante"
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
-msgstr ""
-
-#: ../IDEFrame.py:349
+msgstr "Función"
+
+#: ../IDEFrame.py:354
msgid "Function &Block"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+msgstr "&Bloque de Función"
+
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
-msgstr ""
-
-#: ../controls/VariablePanel.py:854
+msgstr "Bloque de Función"
+
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
-msgstr ""
-
-#: ../PLCControler.py:97
+msgstr "Tipos de Bloque de Función"
+
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
-msgstr ""
-
-#: ../editors/Viewer.py:249
+msgstr "Bloques de Función"
+
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
-msgstr ""
-
-#: ../PLCControler.py:2343
+msgstr "¡Los Bloques de Función no se pueden usar en las Funciones!"
+
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
-msgstr ""
-
-#: ../PLCControler.py:97
+msgstr "¡El Bloque de Función \"%s\" no se pueden pegar en una Función!"
+
+#: ../plcopen/types_enums.py:75
msgid "Functions"
-msgstr ""
-
-#: ../PLCOpenEditor.py:117
+msgstr "Funciones"
+
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
-msgstr ""
-
-#: ../ProjectController.py:703
+msgstr "Generar Programa"
+
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:73
+msgstr "Generando el código ST/IL/SFC IEC-61131 para el SoftPLC...\n"
+
+#: ../controls/VariablePanel.py:91
msgid "Global"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+msgstr "Global"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
msgid "Go to current value"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:174
+msgstr "Ir al valor actual"
+
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
-msgstr ""
+msgstr "Gráficos"
#: ../plcopen/iec_std.csv:75
msgid "Greater than"
-msgstr ""
+msgstr "Mayor que"
#: ../plcopen/iec_std.csv:76
msgid "Greater than or equal to"
-msgstr ""
+msgstr "Mayor o igual a"
+
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr "Resolución de la maya:"
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr "Puerto de interfaz HTTP:"
#: ../controls/ProjectPropertiesPanel.py:135
-msgid "Grid Resolution:"
-msgstr ""
-
-#: ../runtime/NevowServer.py:182
-msgid "HTTP interface port :"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:121
msgid "Height:"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:85
+msgstr "Altura:"
+
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:151
+msgstr "DIrectorio de inicio:"
+
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:45
+msgstr "Horizontal:"
+
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+msgstr "Horas:"
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "IL"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:94
+msgstr "IL"
+
+#: ../dialogs/DiscoveryDialog.py:91
msgid "IP"
-msgstr ""
-
-#: ../Beremiz_service.py:310 ../Beremiz_service.py:311
+msgstr "IP"
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
msgid "IP is not valid!"
-msgstr ""
-
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+msgstr "¡La dirección IP no es válida!"
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629
-#: ../controls/VariablePanel.py:71
+msgstr "Importar SVG"
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
msgid "InOut"
-msgstr ""
-
-#: ../editors/Viewer.py:431
+msgstr "EntradaSalida"
+
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr ""
+"La variable de tipo InOut {a1} en el bloque {a2} del POU {a3} debe estar "
+"conectada."
+
+#: ../editors/Viewer.py:473
msgid "Inactive"
-msgstr ""
-
-#: ../controls/VariablePanel.py:276
+msgstr "inactivo"
+
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../controls/VariablePanel.py:282
+msgstr "Tipo de dato incompatible entre \"{a1}\" y \"{a2}\""
+
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
-msgstr ""
-
-#: ../controls/VariablePanel.py:286
+msgstr "Tamaño de dato incompatible entre \"%s\" y \"BOOL\""
+
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
+msgstr "Tamaño de dato incompatible entre \"{a1}\" y \"{a2}\""
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:739
+msgstr "Indicador"
+
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
-msgstr ""
-
-#: ../editors/Viewer.py:611
+msgstr "Inicial"
+
+#: ../editors/Viewer.py:650
msgid "Initial Step"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+msgstr "Paso Inicial"
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216
-#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310
+msgstr "Valor Inicial"
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
msgid "Initial Value:"
-msgstr ""
-
-#: ../svgui/svgui.py:48
+msgstr "Valor Inicial:"
+
+#: ../svgui/svgui.py:56
msgid "Inkscape"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43
+msgstr "InkScape"
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
msgid "Inline"
-msgstr ""
-
-#: ../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
+msgstr "En línea"
+
+#: ../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:96
+msgstr "Entrada"
+
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
-msgstr ""
+msgstr "Entradas"
#: ../plcopen/iec_std.csv:87
msgid "Insertion (into)"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1696
+msgstr "Insertar (cadena)"
+
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:264
+msgstr "¡No existe una instancia con ID %d!"
+
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:70
+msgstr "Instancias:"
+
+#: ../controls/VariablePanel.py:88
msgid "Interface"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:72
+msgstr "Interface"
+
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Interrumpir"
+
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
-msgstr ""
-
-#: ../PLCControler.py:2331
+msgstr "Intervalo"
+
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr "¡La URL no es correcta! Por favor, ingrese una dirección URL válida."
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
-msgstr ""
-
-#: ../canfestival/config_utils.py:381
+msgstr "Elemento(s) plcopen inválido(s)!"
+
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr ""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "El tipo \"{a1}\" es inválido para la ubicación \"{a4}\" -> {a2} != {a3} "
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166
+msgstr "El tipo \"{a1}\" es inválido para la ubicación \"{a4}\" -> {a2} != {a3} "
+
+#: ../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 ""
-
-#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258
+msgstr "El valor \"%s\" no es válido para la variable de depuración"
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
#, python-format
msgid "Invalid value \"%s\" for variable grid element"
-msgstr ""
-
-#: ../editors/Viewer.py:234 ../editors/Viewer.py:237
+msgstr "El tipo \"%s\" no es valido para el elemento variable"
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
#, python-format
msgid "Invalid value \"%s\" for viewer block"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:195
+msgstr "El tipo \"%s\" no es válido para el bloque de visualización"
+
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:121
+msgstr "¡El valor \"{a1}\" es inválido para la variable \"{a2}\"!"
+
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
msgstr ""
-
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+"¡Valor inválido!\n"
+"Debe ingresar un valor numérico."
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr "¿La conexión es segura?"
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+msgstr "Salto"
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "LD"
-msgstr ""
-
-#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231
+msgstr "LD"
+
+#: ../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:86 ../dialogs/PouActionDialog.py:84
-#: ../dialogs/PouDialog.py:105
+"El elemento de escalera con el identificador %d se encuentra en mas de un "
+"peldaño."
+
+#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
msgid "Language"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:187
+msgstr "Lenguaje"
+
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56
-#: ../dialogs/PouDialog.py:73
+msgstr "Lenguaje (opcional):"
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
msgid "Language:"
-msgstr ""
-
-#: ../ProjectController.py:1797
+msgstr "Lenguaje:"
+
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
-
-#: ../Beremiz_service.py:273
+"La última versión coincide con la versión descargada. Transfiriendo de todos"
+" modos...\n"
+
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
-msgstr ""
-
-#: ../Beremiz_service.py:272
+msgstr "Inicial el inspector WX GUI"
+
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
-msgstr ""
-
-#: ../editors/Viewer.py:544
+msgstr "Iniciar un shell Python en vivo"
+
+#: ../editors/Viewer.py:580
msgid "Left"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:63
+msgstr "Izquierda"
+
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
-msgstr ""
+msgstr "Línea de energía Izquierda"
#: ../plcopen/iec_std.csv:81
msgid "Length of string"
-msgstr ""
+msgstr "Largo de la cadena"
#: ../plcopen/iec_std.csv:78
msgid "Less than"
-msgstr ""
+msgstr "Menor que"
#: ../plcopen/iec_std.csv:79
msgid "Less than or equal to"
-msgstr ""
-
-#: ../IDEFrame.py:631
+msgstr "Menor o igual a"
+
+#: ../IDEFrame.py:652
msgid "Library"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:151
+msgstr "Librería"
+
+#: ../dialogs/AboutDialog.py:145
msgid "License"
-msgstr ""
+msgstr "Licencia"
#: ../plcopen/iec_std.csv:73
msgid "Limitation"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:202
+msgstr "Límite"
+
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+msgstr "Enlace:\n"
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
-msgstr ""
-
-#: ../canfestival/canfestival.py:348
+msgstr "Local"
+
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
-msgstr ""
-
-#: ../ProjectController.py:1703
+msgstr "Entradas locales"
+
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53
+msgstr "¡La busqueda de servicios locales falló!\n"
+
+#: ../controls/VariablePanel.py:62
msgid "Location"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:72
+msgstr "Ubicación"
+
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
-msgstr ""
+msgstr "Ubicaciones disponibles:"
#: ../plcopen/iec_std.csv:25
msgid "Logarithm to base 10"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:94
+msgstr "Logaritmo en base 10"
+
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+msgstr "Fallo de resolución MDNS para '%s\"\n"
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
-msgstr ""
+msgstr "Asignar Variable"
#: ../features.py:31
msgid "Map located variables over CANopen"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:106
+msgstr "Asignar la variable ubicada sobre CANOpen"
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr "Variable mapeadas sobre Modbus "
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
-msgstr ""
-
-#: ../ConfigTreeNode.py:539
+msgstr "Maestro"
+
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
-msgstr ""
+msgstr "Se alcanzó la cuenta máxima ({a1}) para el confnode de tipo {a2} "
#: ../plcopen/iec_std.csv:71
msgid "Maximum"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:239
+msgstr "Máximo"
+
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290
-#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+msgstr "Máximo:"
+
+#: ../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:599
+msgstr "Memoria"
+
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:49
+msgstr "Menú de la barra de herramientas"
+
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
-msgstr ""
-
-#: ../editors/Viewer.py:549
+msgstr "Microsegundos:"
+
+#: ../editors/Viewer.py:585
msgid "Middle"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:48
+msgstr "Medio"
+
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
-msgstr ""
+msgstr "Milisegundos:"
#: ../plcopen/iec_std.csv:72
msgid "Minimum"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:226
+msgstr "Mínimo"
+
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:46
+msgstr "Mínimo:"
+
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:211
+msgstr "Minutos:"
+
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:63
+msgstr " Misceláneo"
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr "Soporte Mdbus"
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
-msgstr ""
-
-#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230
+msgstr "Modificador:"
+
+#: ../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:140
+"Se encontró más de un conector correspondiente a la continuación \"{a1}\" en"
+" la POU \"{a2}\""
+
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:139
+msgstr "Mover la acción hacia abajo"
+
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:43
+msgstr "Mover la acción hacia arriba"
+
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:355
+msgstr "Mover hacia abajo"
+
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:354
+msgstr "Mover el elemento hacia abajo"
+
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:271
+msgstr "Mover el elemento hacia arriba"
+
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:270
+msgstr "Mover la instancia hacia abajo"
+
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:242
+msgstr "Mover la instacia hacia arriba"
+
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:241
+msgstr "Mover la tarea hacia abajo"
+
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
-msgstr ""
-
-#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185
+msgstr "Mover la tarea hacia arriba"
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
msgid "Move the view"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:42
+msgstr "Mover la vista"
+
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+msgstr "Mover hacia arriba"
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+msgstr "Mover la variable hacia abajo"
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
-msgstr ""
+msgstr "Mover la variable hacia arriba"
#: ../plcopen/iec_std.csv:74
msgid "Multiplexer (select 1 of N)"
-msgstr ""
+msgstr "Multiplexor (seleccionar 1 de N)"
#: ../plcopen/iec_std.csv:34
msgid "Multiplication"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:83
+msgstr "Multiplicación"
+
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:92
+msgstr "Mi computador:"
+
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "NOMBRE"
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
msgid "Name"
-msgstr ""
-
-#: ../Beremiz_service.py:334
+msgstr "Nombre"
+
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86
-#: ../dialogs/ConnectionDialog.py:76
+msgstr "¡El nombre no debe ser nulo!"
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
msgid "Name:"
-msgstr ""
+msgstr "Nombre:"
#: ../plcopen/iec_std.csv:24
msgid "Natural logarithm"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+msgstr "Logaritmo Natural"
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
-msgstr ""
+msgstr "Negado"
+
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr "El servicio Web Nevow falló."
#: ../Beremiz_service.py:580
-msgid "Nevow Web service failed. "
-msgstr ""
-
-#: ../Beremiz_service.py:556
msgid "Nevow/Athena import failed :"
-msgstr ""
-
-#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104
-#: ../PLCOpenEditor.py:146
+msgstr "La importación Nevow/Athena falló:"
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
msgid "New"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:40
+msgstr "Nuevo"
+
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
-msgstr ""
-
-#: ../editors/Viewer.py:518
+msgstr "Nuevo elemento"
+
+#: ../editors/Viewer.py:553
msgid "No Modifier"
-msgstr ""
-
-#: ../ProjectController.py:1826
+msgstr "Sin modificador"
+
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
-msgstr ""
-
-#: ../PLCGenerator.py:1631
+msgstr "No hay PLC para transferir (¿La construcción tuvo éxito?)\n"
+
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
-msgstr ""
-
-#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241
+msgstr "No hay ningún cuerpo definido en el POU \"%s\""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
#, python-brace-format
msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
msgstr ""
-
-#: ../PLCOpenEditor.py:357
+"No se encontró un conector correspondiente a la continuación \"{a1}\" en la "
+"POU \"{a2}\""
+
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
msgstr ""
-
-#: ../PLCGenerator.py:829
+"No hay documentación disponible.\n"
+"Próximamente."
+
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
-msgstr ""
-
-#: ../PLCGenerator.py:1194
+msgstr "No se encontró información para el bloque \"%s\""
+
+#: ../PLCGenerator.py:1232
#, python-brace-format
msgid ""
"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
"broken"
msgstr ""
-
-#: ../controls/SearchResultPanel.py:169
+"No se encontró una salida de salida {a1} en el bloque {a2} del POU {a3}. La "
+"conexión debe estar rota"
+
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
-msgstr ""
-
-#: ../svgui/svgui.py:134
+msgstr "No hay resultados de búsqueda disponibles."
+
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
-msgstr ""
-
-#: ../canfestival/config_utils.py:639
+msgstr "No existe el archivo SVG: %s\n"
+
+#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
-msgstr ""
-
-#: ../canfestival/config_utils.py:362
+msgstr "No existe el indice/subindice ({a1},{a2}) (variable {a3})"
+
+#: ../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
+"No existe el indice/subindice ({a1},{a2}) en elID: {a3} (variable {a4})"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
-msgstr ""
-
-#: ../PLCGenerator.py:1629
+msgstr "¡No se ha seleccionado un valor válido!"
+
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
-msgstr ""
-
-#: ../canfestival/config_utils.py:355
+msgstr "No se ha definido ninguna variable en el POU \"%s\""
+
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
-msgstr ""
-
-#: ../controls/VariablePanel.py:64
+msgstr "ID de nodo no existente: {a1} (variable {a2})"
+
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:75
+msgstr "No-Retener"
+
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
-msgstr ""
-
-#: ../canfestival/config_utils.py:389
+msgstr "Normal"
+
+#: ../canfestival/config_utils.py:426
#, python-brace-format
msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
msgstr ""
+"Variable no asignable de PDO: '{a1}' (ID: {a2}, Idx: {a3}, sIdx: {a4}))"
#: ../plcopen/iec_std.csv:80
msgid "Not equal to"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:89
+msgstr "Diferente de"
+
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
-msgstr ""
+msgstr "Número de secuencias:"
#: ../plcopen/iec_std.csv:22
msgid "Numerical"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:739
+msgstr "Numéricos"
+
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:84
+msgstr "OnChange"
+
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
-msgstr ""
-
-#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106
-#: ../PLCOpenEditor.py:147
+msgstr "Solo Elementos"
+
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
msgid "Open"
-msgstr ""
-
-#: ../svgui/svgui.py:143
+msgstr "Abrir"
+
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
-msgstr ""
-
-#: ../version.py:77
+msgstr "Abrir Inkscape"
+
+#: ../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:1878
+"Sistema para Automatización de código abierto que implementa un un PLC "
+"flexible y un entorno de desarrollo con todos los elementos de la IEC 61131 "
+"y un conjunto de extensiones en constante crecimiento."
+
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:155
+"Abra un explorador de archivos para administrar los archivos del proyecto"
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "Abrir wxGlade"
+
+#: ../controls/VariablePanel.py:64
msgid "Option"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+msgstr "Opción"
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:98
+msgstr "Opciones"
+
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+msgstr "Organización (opcional):"
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
-msgstr ""
-
-#: ../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
+msgstr "Otro pérfil"
+
+#: ../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:63 ../canfestival/NetworkEditor.py:84
+msgstr "Salida"
+
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+msgstr "Recepción PDO"
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:167
+msgstr "Transmisión PDO"
+
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
-msgstr ""
-
-#: ../BeremizIDE.py:355
+msgstr "PLC:\n"
+
+#: ../BeremizIDE.py:383
msgid "PLC Log"
-msgstr ""
-
-#: ../ProjectController.py:1054
+msgstr "Registro del PLC"
+
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
-msgstr ""
-
-#: ../Beremiz_service.py:297
+msgstr "¡Falló la generación del código del PLC!\n"
+
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
-msgstr ""
-
-#: ../Beremiz_service.py:304
+msgstr "El PLC está vacío o ya fue iniciado."
+
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
-msgstr ""
-
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+msgstr "El PLC no esta iniciado."
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
"{a2}"
msgstr ""
-
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+"Error de sintaxis del PLC en la línea {a1}:\n"
+"{a2}"
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
-msgstr ""
-
-#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219
+msgstr "Archivos PLCOpen (*.xml)|*.xml|Todos los archivos|*.*"
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
msgid "PLCOpenEditor"
-msgstr ""
-
-#: ../PLCOpenEditor.py:365
+msgstr "PLCOpenEditor"
+
+#: ../PLCOpenEditor.py:339
msgid ""
"PLCOpenEditor is part of Beremiz project.\n"
"\n"
"Beremiz is an "
msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:95
+"PLCOpenEditor es parte del Proyecto Beremiz.\n"
+"\n"
+"Beremiz es un"
+
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:101
+msgstr "PUERTO"
+
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:58
+msgstr "Nombre de POU"
+
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:103
+msgstr "Nombre de POU:"
+
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:65
+msgstr "Tipo de POU"
+
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:45
+msgstr "Tipo de POU:"
+
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:61
+msgstr "PYRO se conecta a la URI : %s\n"
+
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
-msgstr ""
-
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+msgstr "PYRO esta usando los certificados en '%s'\n"
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:111
+msgstr "Configuración de página"
+
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
-msgstr ""
-
-#: ../IDEFrame.py:2613
+msgstr "Tamaño de página (opcional):"
+
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:124
+msgstr "Página: %d"
+
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
-msgstr ""
-
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+msgstr "Instancia padre"
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
-msgstr ""
-
-#: ../IDEFrame.py:1868
+msgstr "Pegar"
+
+#: ../IDEFrame.py:1899
msgid "Paste POU"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:56
+msgstr "Pegar POU"
+
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:74
+msgstr "Patrón de búsqueda:"
+
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
-msgstr ""
-
-#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014
-#: ../editors/SFCViewer.py:770
+msgstr "Número de PIN:"
+
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
msgid "Please choose a target"
-msgstr ""
-
-#: ../editors/TextViewer.py:262
+msgstr "Por favor elija un destino"
+
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
-msgstr ""
-
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+msgstr "Por favor ingrese un nombre de bloque"
+
+#: ../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:799
+msgstr "Por favor ingrese un comentario"
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
-msgstr ""
-
-#: ../Beremiz_service.py:196
+msgstr "Por favor ingrese el nombre del paso"
+
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:163
+msgstr "Por favor ingrese el texto"
+
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
-msgstr ""
-
-#: ../Beremiz_service.py:319
+msgstr "Por favor ingrese un valor para una variable tipo \"%s\":"
+
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
-msgstr ""
-
-#: ../Beremiz_service.py:319
+msgstr "¡El número del puerto debe estar entre 0 y 65535!"
+
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
-msgstr ""
-
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+msgstr "¡El número del puerto debe ser un entero!"
+
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:51
+msgstr "Línea de energía"
+
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
-msgstr ""
-
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+msgstr "Propiedades de la Línea de energía"
+
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
-msgstr ""
-
-#: ../dialogs/BlockPreviewDialog.py:57
+msgstr "Vista previa"
+
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
-msgstr ""
-
-#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124
-#: ../PLCOpenEditor.py:150
+msgstr "Vista previa:"
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
msgid "Print"
-msgstr ""
-
-#: ../IDEFrame.py:1079
+msgstr "Imprimir"
+
+#: ../IDEFrame.py:1110
msgid "Print preview"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Vista previa de impresión"
+
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:90
+msgstr "Prioridad"
+
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
-msgstr ""
-
-#: ../runtime/PLCObject.py:369
+msgstr "Prioridad:"
+
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:58
+msgstr "Problema al iniciar el PLC: error %d"
+
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:81
+msgstr "Nombre del Producto"
+
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:83
+msgstr "Nombre del Producto (requerido):"
+
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:59
+msgstr "Lanzamiento del Producto (opcional):"
+
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:82
+msgstr "Versión del Producto"
+
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+msgstr "Versión del Producto (requerido):"
+
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
-msgstr ""
-
-#: ../PLCOpenEditor.py:347
+msgstr "Programa"
+
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
-msgstr ""
-
-#: ../PLCControler.py:98
+msgstr "¡El programa fue generado con éxito!"
+
+#: ../plcopen/types_enums.py:76
msgid "Programs"
-msgstr ""
-
-#: ../editors/Viewer.py:243
+msgstr "Programas"
+
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+msgstr "¡Los programas no pueden ser usados por otros POUs!"
+
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:173
+msgstr "Proyecto"
+
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
-msgstr ""
-
-#: ../ProjectController.py:1877
+msgstr "Proyecto '%s':"
+
+#: ../ProjectController.py:1878
msgid "Project Files"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:57
+msgstr "Archivos del Proyecto"
+
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:79
+msgstr "Nombre del Proyecto"
+
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:80
+msgstr "Nombre del Proyecto (requerido):"
+
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
-msgstr ""
-
-#: ../PLCControler.py:3164
+msgstr "Versión del Proyecto (opcional):"
+
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
msgstr ""
-
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+"Error de sintaxis en el archivo del proyecto:\n"
+"\n"
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
-msgstr ""
-
-#: ../ConfigTreeNode.py:566
+msgstr "Propiedades del Proyecto"
+
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:98
+msgstr "El arbol de proyecto no concuerda con confnode.xml {a1}!={a2}"
+
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
-msgstr ""
-
-#: ../PLCControler.py:99
+msgstr "Propagar Nombre"
+
+#: ../plcopen/types_enums.py:77
msgid "Properties"
-msgstr ""
-
-#: ../Beremiz_service.py:442
+msgstr "Propiedades"
+
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:118
+msgstr "Publicando el servicio en la red local"
+
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
-msgstr ""
-
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:428
+msgstr "Excepción de PYRO: %s\n"
+
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
-msgstr ""
-
-#: ../py_ext/PythonEditor.py:81
+msgstr "Puerto del objeto Pyro:"
+
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
-msgstr ""
-
-#: ../features.py:33
+msgstr "Código Python"
+
+#: ../features.py:34
msgid "Python file"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
+msgstr "Archivo Python"
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
-msgstr ""
-
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+msgstr "Indice"
+
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+msgstr "Salir"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
-msgstr ""
-
-#: ../ProjectController.py:1873
+msgstr "Rango:"
+
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
-msgstr ""
-
-#: ../BeremizIDE.py:1047
+msgstr "Código IEC puro"
+
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
-msgstr ""
-
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+msgstr "¿Realmente desea borrar el nodo '%s'?"
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr "Dominio:"
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:75
+msgstr "Rehacer"
+
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432
+msgstr "Referencia"
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:66
+msgstr "Refrescar"
+
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:96
+msgstr "Expresión regular"
+
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
-msgstr ""
-
-#: ../editors/Viewer.py:1603
+msgstr "Expresiones regulares"
+
+#: ../editors/Viewer.py:1636
msgid "Release value"
-msgstr ""
+msgstr "Valor de publicación"
#: ../plcopen/iec_std.csv:37
msgid "Remainder (modulo)"
-msgstr ""
-
-#: ../BeremizIDE.py:1048
+msgstr "Resto (módulo)"
+
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
-msgstr ""
-
-#: ../IDEFrame.py:2419
+msgstr "Eliminar el nodo %s"
+
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
-msgstr ""
-
-#: ../IDEFrame.py:2424
+msgstr "Eliminar el Tipo de Dato"
+
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:138
+msgstr "Eliminar POU"
+
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:353
+msgstr "Eliminar Acción"
+
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:63
+msgstr "Eliminar Elemento"
+
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:269
+msgstr "Eliminar una archivo de la carpeta a la izquierda"
+
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:104
+msgstr "Eliminar una instancia"
+
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:240
+msgstr "Eliminar esclavo"
+
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+msgstr "Eliminar Tarea"
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
-msgstr ""
-
-#: ../IDEFrame.py:1948
+msgstr "Eliminar Variable"
+
+#: ../IDEFrame.py:1979
msgid "Rename"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:181
+msgstr "Renombrar"
+
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
-msgstr ""
-
-#: ../editors/Viewer.py:561
+msgstr "Reemplazar Archivo"
+
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
-msgstr ""
+msgstr "Reemplazar Cable por Conexiones"
#: ../plcopen/iec_std.csv:89
msgid "Replacement (within)"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:76
+msgstr "Reemplazo (interno)"
+
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
-msgstr ""
-
-#: ../editors/Viewer.py:642
+msgstr "Reiniciar"
+
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
-msgstr ""
-
-#: ../IDEFrame.py:451
+msgstr "Reiniciar el Orden de Ejecusión"
+
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:105
+msgstr "Restablecer perspectiva"
+
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
-msgstr ""
-
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+msgstr "Reiniciar los resultados de la busqueda"
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
-msgstr ""
-
-#: ../controls/VariablePanel.py:62
+msgstr "Recursos"
+
+#: ../controls/VariablePanel.py:77
msgid "Retain"
-msgstr ""
-
-#: ../controls/VariablePanel.py:424
+msgstr "Retener"
+
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
-msgstr ""
-
-#: ../editors/Viewer.py:546
+msgstr "Tipo de retorno:"
+
+#: ../editors/Viewer.py:582
msgid "Right"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:64
+msgstr "Derecha"
+
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+msgstr "Línea de energía Derecha"
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
-msgstr ""
+msgstr "Flanco ascendente"
#: ../plcopen/iec_std.csv:65
msgid "Rotate left"
-msgstr ""
+msgstr "Girar a la izquierda"
#: ../plcopen/iec_std.csv:64
msgid "Rotate right"
-msgstr ""
+msgstr "Girar a la derecha"
#: ../plcopen/iec_std.csv:17
msgid "Rounding up/down"
-msgstr ""
-
-#: ../ProjectController.py:1841
+msgstr "Redondeo arriba / abajo"
+
+#: ../ProjectController.py:1828
msgid "Run"
-msgstr ""
-
-#: ../ProjectController.py:1099
+msgstr "Ejecutar"
+
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr ""
-
-#: ../ProjectController.py:1108
+" ¡Falló la generación del código C de la librería de extensión en runtime!\n"
+
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr ""
-
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+" ¡Falló la generación del código C de la librería de extensión de E/S en "
+"runtime!\n"
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+msgstr "Cliente SDO"
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+msgstr "Servidor SDO"
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "SFC"
-msgstr ""
-
-#: ../PLCGenerator.py:1392
+msgstr "SFC"
+
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
-msgstr ""
-
-#: ../PLCGenerator.py:773
+msgstr "El salto SFC en el POU \"{a1}\" se refiere un paso SFC inexistente \"{a2}\""
+
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+msgstr "La transición SFC en el POU \"%s\" debe estar conectada."
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "ST"
-msgstr ""
-
-#: ../PLCOpenEditor.py:334
+msgstr "ST"
+
+#: ../PLCOpenEditor.py:308
msgid "ST files (*.st)|*.st|All files|*.*"
-msgstr ""
-
-#: ../svgui/svgui.py:128
+msgstr "Archivos ST (*.st)|*.st|Todos los archivos|*.*"
+
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
-msgstr ""
-
-#: ../features.py:35
+msgstr "Archivos SVG (*.svg)|*.svg|Todos los archivos|*.*"
+
+#: ../features.py:36
msgid "SVGUI"
-msgstr ""
-
-#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113
-#: ../PLCOpenEditor.py:148
+msgstr "SVGUI"
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
msgid "Save"
-msgstr ""
-
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+msgstr "Guardar"
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
-msgstr ""
-
-#: ../BeremizIDE.py:224
+msgstr "Salvar como..."
+
+#: ../BeremizIDE.py:249
msgid "Save as"
-msgstr ""
-
-#: ../ProjectController.py:511
+msgstr "Salvar como"
+
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:69
+msgstr "¡La ruta indicada es la ruta de otro proyecto!\n"
+
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
-msgstr ""
-
-#: ../IDEFrame.py:623
+msgstr "Alcance"
+
+#: ../IDEFrame.py:644
msgid "Search"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382
-#: ../IDEFrame.py:428
+msgstr "Buscar"
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
msgid "Search in Project"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:47
+msgstr "Buscar en el Proyecto"
+
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
-msgstr ""
-
-#: ../IDEFrame.py:388
+msgstr "Segundos:"
+
+#: ../IDEFrame.py:390
msgid "Select All"
-msgstr ""
-
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+msgstr "Seleccionar todo"
+
+#: ../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:1257
+msgstr "Seleccione una clase de variable:"
+
+#: ../ProjectController.py:1293
msgid "Select an editor:"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:281
+msgstr "Seleccionar un editor:"
+
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
-msgstr ""
-
-#: ../IDEFrame.py:607
+msgstr "Seleccionar una Instancia"
+
+#: ../IDEFrame.py:628
msgid "Select an object"
-msgstr ""
-
-#: ../ProjectController.py:518
+msgstr "Selecionar un objeto"
+
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr ""
+"El directorio seleccionado ya contiene otro proyecto. ¿Desea "
+"sobreescribirlo?\n"
#: ../plcopen/iec_std.csv:70
msgid "Selection"
-msgstr ""
+msgstr "Selección"
+
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr "Convergencia de selección"
#: ../dialogs/SFCDivergenceDialog.py:65
-msgid "Selection Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:64
msgid "Selection Divergence"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:82
+msgstr "Divergencia de selección"
+
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:85
+msgstr "Descubrimiento de servicios"
+
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:76
+msgstr "Servicios disponibles:"
+
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
-msgstr ""
+msgstr "Set"
#: ../plcopen/iec_std.csv:62
msgid "Shift left"
-msgstr ""
+msgstr "Desplazamiento a la izquierda"
#: ../plcopen/iec_std.csv:63
msgid "Shift right"
-msgstr ""
-
-#: ../ProjectController.py:1867
+msgstr "Desplazamiento a la derecha"
+
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
-msgstr ""
-
-#: ../canfestival/canfestival.py:389
+msgstr "Mostrar el código IEC generado por PLCGenerator "
+
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
-msgstr ""
-
-#: ../canfestival/canfestival.py:390
+msgstr "Mostrar el Maestro"
+
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
-msgstr ""
-
-#: ../ProjectController.py:1865
+msgstr "Mostrar el Maestro generado por config_utils"
+
+#: ../ProjectController.py:1862
msgid "Show code"
-msgstr ""
+msgstr "Mostrar código"
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr "Divergencia simultanea"
#: ../dialogs/SFCDivergenceDialog.py:67
-msgid "Simultaneous Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Simultaneous Divergence"
-msgstr ""
+msgstr "Convergencia simultanea"
#: ../plcopen/iec_std.csv:27
msgid "Sine"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Seno"
+
+#: ../editors/ResourceEditor.py:76
msgid "Single"
-msgstr ""
-
-#: ../targets/toolchain_makefile.py:126
+msgstr "Sencilla"
+
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
-msgstr ""
-
-#: ../PLCGenerator.py:397
+msgstr "La fuente no cambió. No se ejecuta la construcción.\n"
+
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
"'{a2}.{a3}'."
msgstr ""
+"Se debe definir la señal de origen para la tarea única '{a1}' en el recurso "
+"'{a2}.{a3}'"
#: ../plcopen/iec_std.csv:23
msgid "Square root (base 2)"
-msgstr ""
-
-#: ../plcopen/definitions.py:48
+msgstr "Raíz cuadrada (base 2)"
+
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
-msgstr ""
-
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+msgstr "Bloques de función estandar"
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
-msgstr ""
-
-#: ../ProjectController.py:1046
+msgstr "Iniciar PLC"
+
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
-msgstr ""
-
-#: ../ProjectController.py:1360
+msgstr "Iniciar la construcción en %s\n"
+
+#: ../ProjectController.py:1397
msgid "Started"
-msgstr ""
-
-#: ../ProjectController.py:1648
+msgstr "Iniciado"
+
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
-msgstr ""
-
-#: ../BeremizIDE.py:365
+msgstr "Iniciando el PLC\n"
+
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
-msgstr ""
-
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+msgstr "Barra de Estados"
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
-msgstr ""
-
-#: ../ProjectController.py:1846
+msgstr "Paso"
+
+#: ../ProjectController.py:1835
msgid "Stop"
-msgstr ""
-
-#: ../Beremiz_service.py:264
+msgstr "Detener"
+
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
-msgstr ""
-
-#: ../ProjectController.py:1848
+msgstr "Detener el PLC"
+
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
-msgstr ""
-
-#: ../ProjectController.py:1361
+msgstr "Detener el PLC en ejecusión"
+
+#: ../ProjectController.py:1398
msgid "Stopped"
-msgstr ""
-
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Detenido"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Estructura"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
-msgstr ""
+msgstr "Subrango"
#: ../plcopen/iec_std.csv:35
msgid "Subtraction"
-msgstr ""
-
-#: ../ProjectController.py:1085
+msgstr "Substracción"
+
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
-msgstr ""
-
-#: ../IDEFrame.py:447
+msgstr "Construido con éxito.\n"
+
+#: ../IDEFrame.py:449
msgid "Switch perspective"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115
+msgstr "Cambiar la perspectiva"
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
msgid "Syntax error in regular expression of pattern to search!"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:93
+msgstr "¡Error de sintaxis en la expresión del patrón de busqueda!"
+
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
-msgstr ""
+msgstr "TIPO"
#: ../plcopen/iec_std.csv:29
msgid "Tangent"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:83
+msgstr "Tangente"
+
+#: ../editors/ResourceEditor.py:97
msgid "Task"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:235
+msgstr "Tarea"
+
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:73
+msgstr "Tareas:"
+
+#: ../controls/VariablePanel.py:91
msgid "Temp"
-msgstr ""
-
-#: ../version.py:30
+msgstr "Temporal"
+
+#: ../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"
@@ -3158,757 +3226,932 @@
"You can subscribe to the list here:\n"
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
msgstr ""
-
-#: ../editors/FileManagementPanel.py:180
+"El mejor lugar para preguntar sobre Beremiz/PLCOpenEditor es a través de la lista de correos: \n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"Este es el canal principal de soporte de la comunidad.\n"
+"Para escribir en ella se requiere estar subscrito a la lista de correos.\n"
+"\n"
+"Puedes hacerlo en la siguiente dirección:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
"Do you want to replace it?"
msgstr ""
-
-#: ../editors/LDViewer.py:882
+"El archivo '%s' ya existe.\n"
+"¿Desea reemplazarlo?"
+
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
-msgstr ""
-
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+msgstr "¡El grupo de bloques debe ser coherente!"
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
-msgstr ""
-
-#: ../IDEFrame.py:1658 ../IDEFrame.py:1677
+msgstr "Han habido cambios, ¿Desea salvar los cambios realizados?"
+
+#: ../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:1102
+"Ya existe un POU llamado \"%s\". Esto puede causar conflictos. ¿Desea "
+"continuar?"
+
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
msgstr ""
-
-#: ../editors/LDViewer.py:891
+"Hubo un problema en la impresión.\n"
+"¿Tal vez la impresora actual no esta configurada correctamente? "
+
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+msgstr "¡Esta opción no esta disponible aún!"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
-msgstr ""
+msgstr "Tick: %d"
#: ../plcopen/iec_std.csv:40
msgid "Time"
-msgstr ""
+msgstr "Tiempo"
#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
msgid "Time addition"
-msgstr ""
+msgstr "Suma de Tiempo"
#: ../plcopen/iec_std.csv:86
msgid "Time concatenation"
-msgstr ""
+msgstr "Concatenación de Tiempo"
#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
msgid "Time division"
-msgstr ""
+msgstr "División de Tiempo"
#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
msgid "Time multiplication"
-msgstr ""
+msgstr "Multiplicación de Tiempo"
#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
msgid "Time subtraction"
-msgstr ""
+msgstr "Resta de Tiempo"
#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
msgid "Time-of-day addition"
-msgstr ""
+msgstr "Suma de Time-of-day"
#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
msgid "Time-of-day subtraction"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:172
+msgstr "Resta de Time-of-day"
+
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
-msgstr ""
-
-#: ../editors/Viewer.py:548
+msgstr "Alternar Valor"
+
+#: ../editors/Viewer.py:584
msgid "Top"
-msgstr ""
-
-#: ../ProjectController.py:1855
+msgstr "Arriba"
+
+#: ../ProjectController.py:1848
msgid "Transfer"
-msgstr ""
-
-#: ../ProjectController.py:1857
+msgstr "Transferir"
+
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
-msgstr ""
-
-#: ../ProjectController.py:1820
+msgstr "Transferir PLC"
+
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
-msgstr ""
-
-#: ../ProjectController.py:1823
+msgstr "Transferencia completada con éxito.\n"
+
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
-msgstr ""
-
-#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393
-#: ../editors/Viewer.py:2420
+msgstr "Transferencia fallida\n"
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
msgid "Transition"
-msgstr ""
-
-#: ../PLCGenerator.py:1518
+msgstr "Transición "
+
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
"its name"
msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:84
+"El cuerpo de transición \"%s\" debe contener una variable de salida o bobina"
+" que haga referencia a su nombre"
+
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:53
+msgstr "Nombre de transición "
+
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
-msgstr ""
-
-#: ../PLCGenerator.py:1609
+msgstr "Nombre de transición:"
+
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-
-#: ../PLCGenerator.py:1598
+"La transición con contenido \"{a1}\" no esta conectada al siguiente paso en "
+"la POU \"{a2}\""
+
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr ""
-
-#: ../plcopen/plcopen.py:1323
+"La transición con contenido \"{a1}\" no esta conectada al paso previo en la "
+"POU \"{a2}\""
+
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
-msgstr ""
-
-#: ../PLCControler.py:98
+msgstr "¡La transición con el nombre %s no existe!"
+
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:131
+msgstr "Transiciones"
+
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Traducido por"
+
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
-msgstr ""
-
-#: ../Beremiz_service.py:478
+msgstr "Tipo de tarea"
+
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "El servicio web twisted no esta disponible."
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
msgid "Type"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:49
+msgstr "Tipo"
+
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
-msgstr ""
-
-#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624
+msgstr "Tipo y derivados"
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
#, python-format
msgid "Type conflict for location \"%s\""
-msgstr ""
+msgstr "Conflicto de tipos para la ubicación \"%s\""
#: ../plcopen/iec_std.csv:16
msgid "Type conversion"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:162
+msgstr "Conversión de Tipos"
+
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:50
+msgstr "Información del tipo:"
+
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58
-#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100
-#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59
+msgstr "Mismo tipo"
+
+#: ../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:462 ../canfestival/config_utils.py:476
+msgstr "Tipo:"
+
+#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
+msgid "URI host:"
+msgstr "Dirección URI del Host:"
+
+#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46
+msgid "URI port:"
+msgstr "Puerto URI del Host:"
+
+#: ../controls/UriLocationEditor.py:35
+msgid "URI type:"
+msgstr "Tipo de dirección URI:"
+
+#: ../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:39
+msgstr "No se puede definir la asignación de PDO para el nodo %02x"
+
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
-msgstr ""
-
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
+msgstr "No se puede obtener el %s de Xenomai\n"
+
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
-msgstr ""
-
-#: ../PLCGenerator.py:254
+msgstr "El tipo de bloque \"{a1}\" no esta definido en el POU \"{a2}\" "
+
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
-msgstr ""
-
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+msgstr "El Tipo de POU \"%s\" no esta definido "
+
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
-msgstr ""
-
-#: ../ProjectController.py:423
+msgstr "Deshacer"
+
+#: ../ProjectController.py:442
msgid "Unknown"
-msgstr ""
-
-#: ../editors/Viewer.py:394
+msgstr "Desconocido"
+
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
-msgstr ""
-
-#: ../ProjectController.py:420 ../ProjectController.py:421
+msgstr "¡La variable \"%s\" no existe en este POU!"
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
-msgstr ""
-
-#: ../PLCControler.py:638
+msgstr "Sin nombre"
+
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
-msgstr ""
-
-#: ../controls/VariablePanel.py:284
+msgstr "Desconocido%d"
+
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+msgstr "No se reconoce el tamaño de datos \"%s\""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+msgstr "Tipo de datos de usuario"
+
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
-msgstr ""
-
-#: ../PLCControler.py:97
+msgstr "Tipo de Usuario"
+
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
+msgstr "POUs definidos por el usuario"
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:259
+msgstr "Valor"
+
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585
-#: ../editors/Viewer.py:2423
+msgstr "Valores:"
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
msgid "Variable"
-msgstr ""
-
-#: ../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
+msgstr "Variable"
+
+#: ../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:64
+msgstr "Soltar Variable"
+
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
-msgstr ""
-
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+msgstr "Propiedades de la Variable"
+
+#: ../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:396 ../editors/TextViewer.py:387
+msgstr "Clase de Variable"
+
+#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388
msgid "Variable don't belong to this POU!"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:89
+msgstr "¡La variable no pertenece a este POU!"
+
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
+msgstr "Variable:"
+
+#: ../controls/VariablePanel.py:90
msgid "Variables"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:152
+msgstr "Variables"
+
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
-msgstr ""
-
-#: ../Beremiz_service.py:588
+msgstr "Vertical:"
+
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr "Falló la conexión al cliente WAMP (%s) ..Reintentando ."
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr "Se ha perdido la conexión al cliente WAMP (%s) ..Reintentando ..."
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr "WAMP ID:"
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr "Conectando al Cliente WAMP:"
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr "¡No se ha establecido la conexión al cliente WAMP!"
+
+#: ../Beremiz_service.py:625
msgid "WAMP client startup failed. "
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:91
+msgstr "El inicio del cliente WAMP falló."
+
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr "La configuración WAMP es incompleta"
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr "La configuración WAMP no se encuentra"
+
+#: ../connectors/WAMP/__init__.py:99
#, python-format
msgid "WAMP connecting to URL : %s\n"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:131
+msgstr "Conexión WAMP a la URL: %s\n"
+
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:150
+msgstr "Tiempo de espera para la conexión WAMP agotado"
+
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
-msgstr ""
-
-#: ../Beremiz_service.py:564
+msgstr "La conexión WAMP a '%s' falló.\n"
+
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:37
+msgstr "La importación WAMP falló"
+
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr "Error en la carga WAMP"
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr "Termino la sesión WAMP"
+
+#: ../wxglade_hmi/wxglade_hmi.py:44
msgid "WXGLADE GUI"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+msgstr "WXGLADE GUI"
+
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr "Error de carga del clave WAMP:"
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
-msgstr ""
-
-#: ../ProjectController.py:707
+msgstr "Advertencia"
+
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:78
+msgstr "Alertas en el generador de código ST/IL/SFC:\n"
+
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:120
+msgstr "Todo el Proyecto"
+
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:91
+msgstr "Ancho:"
+
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:130
+msgstr "Búsqueda desde el inicio"
+
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
-msgstr ""
-
-#: ../features.py:34
+msgstr "Escrito por"
+
+#: ../features.py:35
msgid "WxGlade GUI"
-msgstr ""
-
-#: ../svgui/svgui.py:142
+msgstr "WxGlade GUI"
+
+#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:154
+"No tiene permisos de escritura.\n"
+"¿Desea abrir Inkscape de todos modos?"
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
msgstr ""
-
-#: ../ProjectController.py:371
+"No tiene permisos de escritura.\n"
+"¿Desea abrir wxGlade de todos modos?"
+
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
msgstr ""
-
-#: ../editors/LDViewer.py:886
+"Debe tener permiso para trabajar en el proyecto\n"
+"¿Desea trabajar en un copia del proyecto?"
+
+#: ../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:666
+"¡Debe seleccionar el bloque o grupo de bloques en torno al cual se debe "
+"añadir la rama!"
+
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+msgstr "¡debe seleccionar el cable donde se añadirá el contacto!"
+
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:193
+msgstr "¡Debe escribir un nombre!"
+
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
-msgstr ""
-
-#: ../IDEFrame.py:438
+msgstr "¡Debe escribir un valor!"
+
+#: ../IDEFrame.py:440
msgid "Zoom"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:155
+msgstr "Escala"
+
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
-msgstr ""
-
-#: ../PLCOpenEditor.py:343
+msgstr "días"
+
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
-msgstr ""
-
-#: ../util/ProcessLogger.py:169
+msgstr "error: %s\n"
+
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
-msgstr ""
-
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+msgstr "Terminado con estatus {a1} (pid {a2})\n"
+
+#: ../dialogs/PouDialog.py:36
msgid "function"
-msgstr ""
-
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+msgstr "función"
+
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:155
+msgstr "functionBlock"
+
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
-msgstr ""
-
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:157
+msgstr "horas"
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "No se encuentra una instalación de matiec\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:156
+msgstr "milisegundos"
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+msgstr "minutos"
+
+#: ../dialogs/PouDialog.py:36
msgid "program"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:156
+msgstr "programa"
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
-msgstr ""
+msgstr "segundos"
#: ../plcopen/iec_std.csv:84
msgid "string from the middle"
-msgstr ""
+msgstr "cadena desde el medio"
#: ../plcopen/iec_std.csv:82
msgid "string left of"
-msgstr ""
+msgstr "cadena a la izquierda de"
#: ../plcopen/iec_std.csv:83
msgid "string right of"
-msgstr ""
-
-#: ../Beremiz.py:164
+msgstr "cadena a la derecha de"
+
+#: ../Beremiz.py:167
msgid "update info unavailable."
-msgstr ""
-
-#: ../PLCOpenEditor.py:341
+msgstr "Información de actualización no disponible."
+
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
-msgstr ""
-
-#: ../PLCControler.py:972
+msgstr "Alerta: %s\n"
+
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
-msgstr ""
-
-#: ../ConfigTreeNode.py:56
+msgstr "{a1} \"{a2}\" no se puede pegar como un {a3}."
+
+#: ../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} El archivo XML no sigue el esquema XSD en la línea {a2}:\n"
+"{a3}"
#: Extra XSD strings
msgid "CanFestivalSlaveNode"
-msgstr ""
+msgstr "CanFestivalSlaveNode"
msgid "CAN_Device"
-msgstr ""
+msgstr "CAN_Device"
msgid "CAN_Baudrate"
-msgstr ""
+msgstr "CAN_Baudrate"
msgid "NodeId"
-msgstr ""
+msgstr "NodeId"
msgid "Sync_Align"
-msgstr ""
+msgstr "Sync_Align"
msgid "Sync_Align_Ratio"
-msgstr ""
+msgstr "Sync_Align_Ratio"
msgid "CanFestivalNode"
-msgstr ""
+msgstr "CanFestivalNode"
msgid "Sync_TPDOs"
-msgstr ""
+msgstr "Sync_TPDOs"
msgid "CanFestivalInstance"
-msgstr ""
+msgstr "CanFestivalInstance"
msgid "CAN_Driver"
-msgstr ""
+msgstr "CAN_Driver"
msgid "Generic"
-msgstr ""
+msgstr "Genérico "
msgid "Command"
-msgstr ""
+msgstr "Comando"
msgid "Xenomai"
-msgstr ""
+msgstr "Xenomai"
msgid "XenoConfig"
-msgstr ""
+msgstr "XenoConfig"
msgid "Compiler"
-msgstr ""
+msgstr "Compilador"
msgid "CFLAGS"
-msgstr ""
+msgstr "CFLAGS"
msgid "Linker"
-msgstr ""
+msgstr "Enlazador"
msgid "LDFLAGS"
-msgstr ""
+msgstr "LDFLAGS"
msgid "Linux"
-msgstr ""
+msgstr "Linux"
msgid "Win32"
-msgstr ""
+msgstr "Win32"
+
+msgid "ModbusRequest"
+msgstr "SolicitudModbus"
+
+msgid "SlaveID"
+msgstr "Identificador del esclavo"
+
+msgid "Nr_of_Channels"
+msgstr "Numero_canales"
+
+msgid "Start_Address"
+msgstr "Direccion_Inicio"
+
+msgid "Timeout_in_ms"
+msgstr "Timeout_en_ms"
+
+msgid "MemoryArea"
+msgstr "AreaMemoria"
+
+msgid "MemoryAreaType"
+msgstr "TipoAreaMemoria"
+
+msgid "ModbusTCPclient"
+msgstr "ClienteTCPModbus"
+
+msgid "Remote_IP_Address"
+msgstr "Direccón_IP_Remota"
+
+msgid "Remote_Port_Number"
+msgstr "Puerto_Remoto"
+
+msgid "Invocation_Rate_in_ms"
+msgstr "Invocation_Rate_in_ms"
+
+msgid "ModbusServerNode"
+msgstr "NodoServidorModbus"
+
+msgid "Local_IP_Address"
+msgstr "Direccion_IP_Local"
+
+msgid "Local_Port_Number"
+msgstr "Numero_Puerto_Local"
+
+msgid "ModbusRTUclient"
+msgstr "ClienteModbusRTU"
+
+msgid "Serial_Port"
+msgstr "Puerto_Serial"
+
+msgid "Baud_Rate"
+msgstr "Velocidad"
+
+msgid "Parity"
+msgstr "Paridad"
+
+msgid "Stop_Bits"
+msgstr "Bits_Parada"
+
+msgid "ModbusRTUslave"
+msgstr "EsclavoModbusRTU"
+
+msgid "ModbusRoot"
+msgstr "RaizModbus"
+
+msgid "MaxRemoteTCPclients"
+msgstr "MaxRemoteTCPclients"
msgid "BaseParams"
-msgstr ""
+msgstr "BaseParams"
msgid "IEC_Channel"
-msgstr ""
+msgstr "IEC_Channel"
msgid "Enabled"
-msgstr ""
+msgstr "Habilitado"
msgid "BeremizRoot"
-msgstr ""
+msgstr "BeremizRoot"
msgid "TargetType"
-msgstr ""
+msgstr "TargetType"
msgid "Libraries"
-msgstr ""
+msgstr "Librerías"
msgid "URI_location"
-msgstr ""
+msgstr "Ubicacion_URL"
msgid "Disable_Extensions"
-msgstr ""
+msgstr "Deshabilitar_extensiones"
msgid "%(codefile_name)s"
-msgstr ""
+msgstr "%(codefile_name)s"
msgid "variables"
-msgstr ""
+msgstr "variables"
msgid "variable"
-msgstr ""
+msgstr "variable"
msgid "name"
-msgstr ""
+msgstr "nombre"
msgid "type"
-msgstr ""
+msgstr "tipo"
msgid "class"
-msgstr ""
+msgstr "clase"
msgid "initial"
-msgstr ""
+msgstr "inicial"
msgid "desc"
-msgstr ""
+msgstr "desc"
msgid "onchange"
-msgstr ""
+msgstr "En cambio"
msgid "opts"
-msgstr ""
+msgstr "opts"
#: Extra TC6 documentation strings
msgid "0 - current time, 1 - load time from PDT"
-msgstr ""
+msgstr "0 - tiempo actual, 1 - cargar tiempo desde PDT "
msgid "Preset datetime"
-msgstr ""
+msgstr "Tiempo predeterminado"
msgid "Copy of IN"
-msgstr ""
+msgstr "Copia de IN"
msgid "Datetime, current or relative to PDT"
-msgstr ""
+msgstr "Fecha y hora, actual o relativa al PDT"
msgid ""
"The real time clock has many uses including time stamping, setting dates and"
" times of day in batch reports, in alarm messages and so on."
msgstr ""
+"El reloj de tiempo real tiene muchos usos, incluyendo marca de tiempo y la "
+"configuracion de fecha y hora en reportes de lotes, mensajes de alarma, "
+"etc.. "
msgid "1 = integrate, 0 = hold"
-msgstr ""
+msgstr "1 = integrar, 0 = mantener"
msgid "Overriding reset"
-msgstr ""
+msgstr "Anulación de reset"
msgid "Input variable"
-msgstr ""
+msgstr "Variable de entrada"
msgid "Initial value"
-msgstr ""
+msgstr "Valor inicial"
msgid "Sampling period"
-msgstr ""
+msgstr "Período de muestreo"
msgid "NOT R1"
-msgstr ""
+msgstr "NOT R1"
msgid "Integrated output"
-msgstr ""
+msgstr "Salida integrada"
msgid ""
"The integral function block integrates the value of input XIN over time."
msgstr ""
+"El bloque de función integral, integra el valor de la entrada XIN en el "
+"tiempo."
msgid "0 = reset"
-msgstr ""
+msgstr "0 = reset"
msgid "Input to be differentiated"
-msgstr ""
+msgstr "Entrada a ser diferenciada"
msgid "Differentiated output"
-msgstr ""
+msgstr "Salida diferenciada"
msgid ""
"The derivative function block produces an output XOUT proportional to the "
"rate of change of the input XIN."
msgstr ""
+"El bloque derivativo produce una salida XOUT proporcional a la velocidad de "
+"cambio de la entrada XIN."
msgid "0 - manual , 1 - automatic"
-msgstr ""
+msgstr "0 - manual, 1 - automático"
msgid "Process variable"
-msgstr ""
+msgstr "Variable de proceso"
msgid "Set point"
-msgstr ""
+msgstr "Punto de ajuste"
msgid "Manual output adjustment - Typically from transfer station"
msgstr ""
+"Ajuste de salida manual - Típicamente desde la estación de transferencia"
msgid "Proportionality constant"
-msgstr ""
+msgstr "Constante proporcional"
msgid "Reset time"
-msgstr ""
+msgstr "Tiempo de reset"
msgid "Derivative time constant"
-msgstr ""
+msgstr "Constante de tiempo derivativo"
msgid "PV - SP"
-msgstr ""
+msgstr "PV-SP"
msgid "FB for integral term"
-msgstr ""
+msgstr "FB para el término integral"
msgid "FB for derivative term"
-msgstr ""
+msgstr "FB para el término derivativo"
msgid ""
"The PID (proportional, Integral, Derivative) function block provides the "
"classical three term controller for closed loop control."
msgstr ""
+"El bloque PID (Propocional, Integral, Derivativo) provee el clásico "
+"controlador de tres términos para el control de lazo cerrado. "
msgid "0 - track X0, 1 - ramp to/track X1"
-msgstr ""
+msgstr "0 - seguir X0, 1 - rampa a/seguir X1"
msgid "Ramp duration"
-msgstr ""
+msgstr "Duración de rampa"
msgid "BUSY = 1 during ramping period"
-msgstr ""
+msgstr "BUSY=1 durante el período de rampa."
msgid "Elapsed time of ramp"
-msgstr ""
+msgstr "Tiempo transcurrido de la rampa"
msgid "The RAMP function block is modelled on example given in the standard."
-msgstr ""
+msgstr "El bloque RAMPA se modela del ejemplo dado en el estandard."
msgid ""
"The hysteresis function block provides a hysteresis boolean output driven by"
" the difference of two floating point (REAL) inputs XIN1 and XIN2."
msgstr ""
+"El bloque de histéresis proporciona una salida booleana de histéresis "
+"impulsada por la diferencia de dos entradas de coma flotante (REAL) XIN1 y "
+"XIN2."
msgid "The SR bistable is a latch where the Set dominates."
-msgstr ""
+msgstr "El biestable SR es un enclavamiento donde la entrada SET es dominante"
msgid "The RS bistable is a latch where the Reset dominates."
msgstr ""
+"El biestable RS es un enclavamiento donde la entrada RESET es dominante"
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
-msgstr ""
+"exclusive access to certain resources."
+msgstr ""
+"El semáforo provee un mecanismo para permitir a elementos de software el "
+"acceso mutuamente exclusivo de un recurso especifico. "
msgid "The output produces a single pulse when a rising edge is detected."
msgstr ""
+"La salida produce un pulso único cuando se detecta en la entrada un flanco "
+"ascendente."
msgid "The output produces a single pulse when a falling edge is detected."
msgstr ""
+"La salida produce un pulso único cuando se detecta en la entrada un flanco "
+"descendente."
msgid ""
"The up-counter can be used to signal when a count has reached a maximum "
"value."
msgstr ""
+"El contador ascendente puede ser usado para indicar cuando una cuenta ha "
+"alcanzado su valor máximo predeternimado."
msgid ""
"The down-counter can be used to signal when a count has reached zero, on "
"counting down from a preset value."
msgstr ""
+"El contador descendente puede ser usado para indicar cuando una cuenta "
+"regresiva iniciada desde un valor predeterminado ha alcanzado el cero."
msgid ""
"The up-down counter has two inputs CU and CD. It can be used to both count "
"up on one input and down on the other."
msgstr ""
+"El contador arriba-abajo tiene dos entradas, CU y CD. Puede ser usado tanto "
+"para contar hacia arriba con la entrada CU, como para contar hacia abajo con"
+" la entrada CD."
msgid "first input parameter"
-msgstr ""
+msgstr "primer parámetro de entrada"
msgid "second input parameter"
-msgstr ""
+msgstr "segundo parámetro de entrada"
msgid "first output parameter"
-msgstr ""
+msgstr "primer parámetro de salida"
msgid "second output parameter"
-msgstr ""
+msgstr "segundo parámetro de salida"
msgid "internal state: 0-reset, 1-counting, 2-set"
-msgstr ""
+msgstr "estado interno: 0-reset, 1-contando, 2-set"
msgid ""
"The pulse timer can be used to generate output pulses of a given time "
"duration."
msgstr ""
+"El temporizador de pulso puede ser usado para generar un pulso de salida con"
+" una duración determinada."
msgid ""
"The on-delay timer can be used to delay setting an output true, for fixed "
"period after an input becomes true."
msgstr ""
+"El temporizador con retraso para activar puede ser usado para activar una "
+"salida, un tiempo fijo después de la activación de una entrada."
msgid ""
"The off-delay timer can be used to delay setting an output false, for fixed "
"period after input goes false."
msgstr ""
+"El temporizador con retraso para desactivar puede ser usado para desactivar "
+"una salida, un tiempo fijo después de la desactivación de una entrada."
--- a/i18n/Beremiz_fr_FR.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_fr_FR.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,17 +1,15 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017
-# Fabien M <mail@fabienm.eu>, 2017
+#, fuzzy
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: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Fabien M <mail@fabienm.eu>, 2017\n"
"Language-Team: French (France) (https://www.transifex.com/beremiz/teams/75746/fr_FR/)\n"
"MIME-Version: 1.0\n"
@@ -20,7 +18,7 @@
"Language: fr_FR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -44,153 +42,158 @@
"Vous devriez redémarrer le programme.\n"
"Trace:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr " Externe"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr " Entrée-Sortie"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr " Entrée"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr " Locale"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr " Sortie"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr " Temporaire"
-#: ../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 " et %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
-msgstr "la construction a échouée !\n"
-
-#: ../plcopen/plcopen.py:886
+msgstr "la génération a échouée !\n"
+
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "Le type de donnée \"%s\" n'existe pas !!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "Le POU \"%s\" existe déjà !!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "Le POU \"%s\" n'existe pas !!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" ne peut pas s'utiliser lui-même !"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "La configuration \"%s\" existe déjà !"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "La configuration \"%s\" existe déjà !!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "La configuration \"%s\" n'existe pas !!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "Le type de données \"%s\" existe déjà !"
-#: ../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 "Un élément \"%s\" existe déjà dans ce POU !"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "Le dossier \"%s\" ne contient pas de projet Beremiz valide\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\" est un mot réservé. Il ne peut être utilisé !"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" n'est pas une valeur valide !"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" n'est pas un répertoire valide !"
-#: ../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\" n'est pas un identifiant valide !"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr ""
"\"%s\" est utilisé par un POU ou plus. Souhaitez vous continuer malgré tout "
"?"
-#: ../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 "Le POU \"%s\" existe déjà !"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "L'étape \"%s\" existe déjà !"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "La valeur \"%s\" est déjà définie !"
-#: ../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\" n'est pas une dimension de tableau valide !"
-#: ../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"
@@ -199,200 +202,196 @@
"\"%s\" n'est pas une dimension de tableau valide !\n"
"La valeur de droite doit être supérieur à celle de gauche."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "Fonction \"{a1}\" annulée dans \"{a2}\" POU: Pas d'entrée connectée"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" est déjà utilisé par \"{a2}\"!"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "La ressource \"{a1}\" existe déjà dans la configuration \"{a2}\" !"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "La ressource \"${a1}\" n'existe pas dans la configuration \"{a2}\" !"
-#: ../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 "%dj"
-#: ../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 "Types de données de %s"
-#: ../PLCControler.py:1516
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
msgstr "POUs de %s"
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr "Profil %s"
-#: ../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 "Le code d'un %s n'a pas d'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 "Le code d'un %s n'a pas de texte !"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Ajouter un élément"
-#: ../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 "&Type de donnée"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Supprimer"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Affichage"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Editer"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&Fichier"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Fonction"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Aide"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&License"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Programme"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Propriétés"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "Projets &récent"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Ressource"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}' - {a2} concordent dans le projet"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} concordent dans le projet"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' est situé dans {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d correspondances)"
-#: ../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 "- Sélectionnez le type d'URI -"
+
+#: ../controls/LogViewer.py:287
msgid "1d"
msgstr "1j"
-#: ../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 "
@@ -401,9 +400,9 @@
"Un POU a un élément nommé \"%s\". Cela peut générer des conflits. Voulez-"
"vous continuer ?"
-#: ../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 "Un POU nommé \"%s\" existe déjà !"
@@ -413,26 +412,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "Un enfant nommé \"{a1}\" existe déjà -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "Une adresse doit être sélectionné !"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "Une tâche du même nom existe déjà"
-#: ../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 "Une variable nommée \"%s\" existe déjà dans ce POU !"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "Une variable avec le nom \"%s\" existe déjà !"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "A propos"
@@ -440,126 +439,126 @@
msgid "Absolute number"
msgstr "Nombre absolu"
-#: ../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 "Ajouter un bloc fonctionnel"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Nom de l'action"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Nom de l'action :"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "L'action nommée %s n'existe pas !"
-#: ../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 "Actif"
-#: ../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 "Ajouter"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
msgstr "Ajouter une action"
-#: ../features.py:32
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr ""
"Ajoute un code C ayant accès à des variables localisées de façon synchrone"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "Ajouter une configuration"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "Ajouter un type de donnée"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Ajouter une branche à la divergence"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "Ajouter IP"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "Ajouter un POU"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "Ajoute un code Python executé de façon asynchone"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "Ajouter une resource"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "Ajouter une transition"
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr "Ajouter un segment au fil"
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr "Ajouter une nouvelle étape initiale"
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr "Ajouter un nouveau renvoi"
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
msgstr "Ajouter une nouvelle étape"
-#: ../features.py:34
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
msgstr "Ajoute une interface simple utilisant WxGlade"
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "Ajouter une action"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "Ajouter un élément"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "Ajouter une instance"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Ajouter un esclave"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "Ajouter une tâche"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "Ajouter une variable"
@@ -567,44 +566,44 @@
msgid "Addition"
msgstr "Addition"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "Blocs fonctionnels additionnels"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "Ajuster la taille des blocs"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "Alignement"
-#: ../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 "Tout"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "Tous les fichiers|*.*|Fichiers CSV (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "Déjà connecté. Veuillez déconnecter\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "Un élément nommé \"%s\" existe déjà dans la structure !"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "Une instance avec le même nom existe déjà !"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr ""
"Appliquer la modification de nom à toutes les prolongements portant ce même "
@@ -626,8 +625,8 @@
msgid "Arithmetic"
msgstr "Arithmétique"
-#: ../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 "Tableau"
@@ -635,45 +634,37 @@
msgid "Assignment"
msgstr "Assignation"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "Au moins une variable ou une expression doit être sélectionné !"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Auteur"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Nom de l'auteur (optionel) :"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Vers le haut"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Mauvais nom de domaine (circulaire) à l'adresse"
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Mauvais nom de domaine à l'adresse"
-
-#: ../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 "Mauvaise taille d'adresse : %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 "Type de base :"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "Types de base"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -705,85 +696,85 @@
msgid "Bitwise inverting"
msgstr "Inversion bit à bit"
-#: ../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 "Propriétés du bloc"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "Nom du bloc"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "Bas"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr "Cassé"
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr "Explorer la liste des valeurs du paramètre '%s'"
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr "Naviger dans les adresses"
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "Compiler"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "Le répertoire de compilation est déjà nettoyé\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr "Compiler le projet dans le répertoire ce compilation"
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "La compilation du C a mal fonctionné !\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "La compilation du C a échouée !\n"
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr "Code C"
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr "Code C généré avec succès.\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr "La compilation a échouée\n"
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr "La compilation C de %s a échouée.\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "Extension C"
-#: ../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 "Réseau CANOpen"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "Esclave CANOpen"
@@ -791,36 +782,36 @@
msgid "CANopen support"
msgstr "Support CANopen"
-#: ../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 "L'ordre d'exécution ne peut être généré que dans les FBD !"
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr ""
"Une adresse ne peut être affecté qu'à des variables locales ou globales"
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr "Le programme n'a pu être généré dans le fichier \"%s\" !"
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr "Une adresse ne peut être affectée à une instance de Function Block"
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr "Le projet n'a pu être sauvé dans le fichier \"%s\" !"
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr ""
"Une valeur initiale ne peut être affectée une instance de Function Block"
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr "Impossible de créer l'enfant {a1} de type {a2}"
@@ -830,15 +821,15 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "Impossible de trouver un numéro IEC inférieur à %d libre\n"
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "Impossible d'obtenir le statut de l'automate - la connexion a échoué.\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "Impossible d'ouvrir ou d'analyser le fichier 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 "
@@ -847,31 +838,37 @@
"Impossible de configurer l'offset du bit de la variable non booléenne '{a1}'"
" (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 ""
+"Impossible de transférer lorsque l'API est en cours d'exécution. Arrêter "
+"maintenant?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr "Respecter la casse"
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "Centre"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "Changer l'adresse IP de l'interface à lier"
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "Changer le nom"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "Changer le type du POU pour"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "Changer le numéro de port"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "Changer le dossier de travail"
@@ -879,118 +876,122 @@
msgid "Character string"
msgstr "Chaîne de caractères"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "Choisissez un fichier SVG"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "Choisissez un dossier où enregistrer le projet"
-#: ../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 "Choisissez un fichier"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../BeremizIDE.py:900
msgid "Choose a project"
msgstr "Choisissez un projet"
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
msgstr "Choisissez une valeur pour le paramètre %s :"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "Choisissez un dossier de travail"
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Choisissez un dossier où créer le projet"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
"Le répertoire ne contient pas de programme. Ce n'est pas un projet valide !"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
"Le répertoire n'est pas vide. Vous ne pouvez pas l'utiliser pour créer un "
"nouveau projet !"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "Classe"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "Filtre de classe :"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "Classe :"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "Nettoyer"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "Nettoyer les messages de log"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "Nettoyer le répertoire de compilation"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "Répertoire de compilation en cours de nettoyage\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "Effacer les erreurs"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "Effacer l'ordre d'exécution"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "Fermer"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Fermer l'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 "Fermer le projet"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "Fermer l'onglet"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "Relai"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Commentaire"
-#: ../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 ""
-
-#: ../dialogs/ProjectDialog.py:60
+msgstr "Soutien de la communauté"
+
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "Nom de l'entreprise"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "Nom de l'entreprise (obligatoire) :"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "URL de l'entreprise (optionel) :"
@@ -998,7 +999,7 @@
msgid "Comparison"
msgstr "Comparaison"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "Compilation du program en IEC vers du code C en cours...\n"
@@ -1006,93 +1007,93 @@
msgid "Concatenation"
msgstr "Concaténation"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "Configuration"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "Variables de configuration"
-#: ../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 "Confirmer ou changer de nom de variable"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "Connecter"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "Connecter à l'automate cible"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "Connecté à l'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 "Connexion"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "Propriétés de la connexion"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "La connection a été abandonnée !\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "La connection à \"%s\" a échouée !\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 "Connexion perdu\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "La connexion à l'adresse '%s' a échouée.\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "Connecteur"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "Connecteurs :"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "Console"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "Constante"
-#: ../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 "Description du contenu (optionel) :"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "Prolongement"
@@ -1112,20 +1113,20 @@
msgid "Conversion to time-of-day"
msgstr "Conversion en heure de la journée"
-#: ../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 "Copier"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "Copier ce POU"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "Copier un fichier du dossier de gauche vers celui de droite"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "Copier un fichier du dossier de droite vers celui de gauche"
@@ -1133,7 +1134,7 @@
msgid "Cosine"
msgstr "Cosinus"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
@@ -1142,12 +1143,12 @@
"Impossible d'ajouter l'enfant \"{a1}\", de 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 "Impossible d'importer l'ancien fichier %s"
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
@@ -1156,7 +1157,7 @@
"Impossible de charger les parametres de base confnode {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"
@@ -1165,111 +1166,107 @@
"Impossible de charger les parametres confnode {a1}:\n"
"{a2}"
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Impossible de coller autre chose qu'un POU."
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "Impossible de démarrer l'automate !\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "Impossible d'arrêter l'automate !\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Impossible d'arrêter le débogage de l'automate !\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "Créer une IHM"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "Créer un nouveau POU"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "Créer une nouvelle action"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "Créer un nouveau bloc d'actions"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "Créer un nouveau bloc"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "Créer une nouvelle branche"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "Créer un nouveau relai"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "Créer un nouveau copmmentaire"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "Créer une nouvelle connexion"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "Créer un nouveau contact"
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr "Créer une nouvelle divergence"
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr "Créer une nouvelle divergence ou convergence"
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "Créer une nouvelle étape initiale"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "Créer un nouveau renvoi"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "Créer une nouvelle barre d'alimentation"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "Créer un nouvel échelon"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "Créer une nouvelle étape"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "Créer une nouvelle 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 "Créer une nouvelle 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 "Répertoire de travail actuel :"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "Couper"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "Périodique"
@@ -1281,19 +1278,19 @@
msgid "DEPRECATED"
msgstr "OBSOLETE"
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr "Profil DS-301"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "Profil DS-302"
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr "Type de donnée"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "Types de données"
@@ -1314,68 +1311,60 @@
msgid "Date subtraction"
msgstr "Soustraction de date"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "Jours :"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
"Les informations de débogage ne correspond pas l'automate connecté - "
"Arrêter/transférez/démarrer pour pouvoir débogguer.\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "Déboguer l'instance"
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr "Débogage : %s"
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr "Débogage : Variable '%s' inconnue\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Débogage : Type non supporté dans le débogage '%'\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "Déboggueur"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Débogueur désactivé\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "Débogueur \n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Débogueur désactivé\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "Supprimer"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "Supprimer une branche de divergence"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "Supprimer un fichier"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "Supprimer un segment de fil"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "Supprimer un élément"
@@ -1383,47 +1372,47 @@
msgid "Deletion (within)"
msgstr "Suppression (au milieu)"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "Type de dérivation :"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
-msgstr ""
-
-#: ../controls/VariablePanel.py:432
+msgstr "Description"
+
+#: ../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 "Direct"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "Déconnecter"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "Déconnecter l'automate"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "Déconnecté"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "Divergence"
@@ -1431,120 +1420,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 "Êtes-vous sûr de vouloir supprimer le fichier '%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 "Terminé"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Durée"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "Fichiers EDS (*.eds)|*.eds|Tous les fichiers|*.*"
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "Editer le block"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "Editer les valeurs du relai"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "Editer les valeurs du contact"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr "Editer une durée"
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr "Editer l'étape"
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "Editer une IHM WxWidgets à l'aide de WXGlade"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "Editer les propriétés du block d'actions"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "Editer les propriétés d'un type de données tableau"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "Editer le commentaire"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "Editer un fichier"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "Editer l'élément"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "Editer la cible du renvoi"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr "Editer le code IEC ajouté au code généré par PLCGenerator"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "Editer le nom de l'étape"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "Editer la transition"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "Barre d'outils d'édition"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "Selection d'un éditeur"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "Eléments :"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "Vide"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Activer Défaire/Refaire"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Dimension ne peut être vide."
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "Saisissez un nom"
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "Saisissez un numéro de port"
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "Saisissez l'adresse IP de l'interface à lier"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Enumération"
@@ -1552,37 +1541,36 @@
msgid "Equal to"
msgstr "Egal à"
-#: ../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 "Erreur"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
@@ -1590,12 +1578,12 @@
"Erreur : Au moins une configuration ou une ressource doit être déclarée dans"
" l'automate !\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Erreur : Le compilateur d'IEC en C a retourné %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1604,37 +1592,46 @@
"Erreur dans le générateur de code ST/IL/SFC :\n"
"%s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "Erreur lors de l'enregistrement de \"%s\"\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr "Erreur : L'export de l'esclave a échoué\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 ""
+"Erreur: Les serveurs Modbus/IP %{a1}.x et %{a2}.x utilisent le même numéro "
+"de port {a3}.\n"
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "Erreur : Aucun maître généré\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "Erreur : Aucun automate compilé\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "Une exception est apparu au cours de la connexion %s !\n"
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "Contrôle d'exécution :"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "Ordre d'exécution :"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "IHM expérimentale utilisant les technologies web"
@@ -1646,77 +1643,77 @@
msgid "Exponentiation"
msgstr "Exponentiel"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "Exporter un esclave CANopen sous la forme d'un fichier EDS"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr "Exporter les valeurs du graphique vers le presse-papier"
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr "Exporter un esclave"
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "Expression :"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "Externe"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "Extraction des variables adressées en cours...\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 "Echec : Le projet doit être compilé avant d'être transféré.\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "Front descendant"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "Erreur fatale : impossible de trouver un compilateur.\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr "Recherche %s"
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr "Le champ %s n'a pas une valeur valide !"
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr "Les champs %s n'ont pas une valeur valide !"
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr "Le fichier '%s' existe déjà !"
-#: ../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 "Rechercher"
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr "Recherche suivante"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr "Recherche précédente"
@@ -1724,94 +1721,90 @@
msgid "Find position"
msgstr "Trouver la position"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr "Rechercher :"
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "Redémarrage du runtime forcé\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "Forcer la valeur"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "Forcer la valeur de la variable"
-#: ../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 "Le formulaire est incomplet. %s doit être complété !"
-#: ../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 "Le formulaire est incomplet. Le nom doit être complété !"
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr ""
"Le formulaire est incomplet. Un type de bloc valide doit être sélectionné !"
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr "Vers le bas"
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "Fonction"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "&Bloc Fonctionnel"
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr "Bloc fonctionnel"
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr "Types de blocs fonctionnels"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr "Blocs fonctionnels"
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr "Les blocs fonctionnels ne peuvent être utilisés dans des functions !"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "Le bloc fonctionnel \"%s\" ne peuvent être collés dans une function !"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "Fonctions"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr "Générer le program"
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "Création du code ST/IL/SFC de l'automate IEC-61131 en cours...\n"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Global"
msgstr "Globale"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
msgid "Go to current value"
msgstr "Aller à la valeur actuelle"
-#: ../controls/ProjectPropertiesPanel.py:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "Graphiques"
@@ -1823,110 +1816,116 @@
msgid "Greater than or equal to"
msgstr "Supérieur ou égal à"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "Résolution de la grille :"
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr "Port d'interface HTTP:"
-#: ../controls/ProjectPropertiesPanel.py:121
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr "Hauteur :"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr "Répertoire utilisateur :"
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "Horizontal :"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr "Heures :"
-#: ../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 "l'IP est invalide !"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "Importer un 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 "Entrée-Sortie"
-#: ../editors/Viewer.py:431
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr ""
+"La variable InOut {a1} dans le bloc {a2} dans le POU {a3} doit être "
+"connectée."
+
+#: ../editors/Viewer.py:473
msgid "Inactive"
msgstr "Inactif"
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr "Type de données incompatible entre \"{a1}\" et \"{a2}\""
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "Taille de donnée incompatible entre \"%s\" et \"BOOL\""
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr "Taille de données incompatible entre \"{a1}\" et \"{a2}\""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "Indicateur"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
-msgstr ""
-
-#: ../editors/Viewer.py:611
+msgstr "Initiale"
+
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr "Étape initiale"
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "Valeur initiale"
-#: ../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 "Valeur initiale :"
-#: ../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 "Entrée"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "Entrées :"
@@ -1934,64 +1933,72 @@
msgid "Insertion (into)"
msgstr "Insertion (au milieu)"
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "L'instance dont l'id est %d n'existe pas !"
-#: ../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 "Interruption"
-#: ../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 ""
+"URL invalide!\n"
+"Veuillez entrer une adresse URL correcte"
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "Les éléments plcopen ne sont pas valides !!! "
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "Type invalide \"{a1}\"-> {a2} != {a3} pour \"{a4}\""
-#: ../canfestival/config_utils.py:645
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "Type invalide \"{a1}\"-> {a2} != {a3} pour \"{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 "Chemin de variable à déboguer \"%s\" invalide"
-#: ../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 "Valeur \"%s\" invalide pour un élément de la grille de variables"
-#: ../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 "Valeur \"%s\" invalide pour un élément graphique"
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr "Valeur invalide \"{a1}\" pour la variable \"{a2}\""
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1999,51 +2006,55 @@
"Valeur invalide !\n"
"Vous devez rentrer une valeur numérique."
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "Renvoi"
-#: ../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 "L'élément de LD dont l'id est %d apparait dans plusieurs échelons. "
-#: ../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 "Langue"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "Langue (optionnel) :"
-#: ../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 "Langue :"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr "La dernière compilation correspond à la cible actuelle...\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "Lancer un inspecteur d'IHM WX"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "Lancer une console Python"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "Gauche"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "Barre d'alimentation à gauche"
@@ -2059,11 +2070,11 @@
msgid "Less than or equal to"
msgstr "Inférieur ou égal à"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "Librairie"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "Licence"
@@ -2071,27 +2082,27 @@
msgid "Limitation"
msgstr "Limitation"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr "Linkage :\n"
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "Locale"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "Entrées locales"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr "Echec de la sélection d'un service!\n"
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "Adresse"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr "Adresses disponibles :"
@@ -2099,12 +2110,12 @@
msgid "Logarithm to base 10"
msgstr "Logarithme de base 10"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "Echec de la résolution MDNS pour '%s'\n"
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "Variable mappable"
@@ -2112,11 +2123,15 @@
msgid "Map located variables over CANopen"
msgstr "Mappe des variables localisées sur un bus CANopen"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr "Maître"
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr ""
@@ -2126,29 +2141,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 "Mémoire"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr "Barre d'outils du menu principal"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "Microsecondes :"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "Milieu"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "Millisecondes :"
@@ -2156,23 +2171,27 @@
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 "Divers"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "Modificateur :"
-#: ../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 "
@@ -2181,55 +2200,55 @@
"Plus d'un connecteur correspondant à \"{a1}\" trouvé dans la continuité de "
"\"{a2}\" POU"
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "Déplacer une action vers le bas"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "Déplacer une action vers le haut"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "Déplacer vers le haut"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "Déplcer un élément vers le bas"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "Déplacer un élément vers le haut"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "Déplacer une instance vers le bas"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "Déplacer une instance vers le haut"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "Déplcer une tâche vers le bas"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "Déplacer une tâche vers le haut"
-#: ../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 "Déplacer la vue"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "Déplacer vers le bas"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "Déplacer une variable vers le bas"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "Déplacer une variable vers le haut"
@@ -2241,26 +2260,26 @@
msgid "Multiplication"
msgstr "Multiplication"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "Poste de travail :"
-#: ../dialogs/DiscoveryDialog.py:92
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
msgstr "NOM"
-#: ../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 "Nom"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "Le nom ne doit pas être vide !"
-#: ../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 "Nom :"
@@ -2268,46 +2287,46 @@
msgid "Natural logarithm"
msgstr "Logarithme népérien"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "Inversé"
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
msgstr "Service Web Nevow échoué."
-#: ../Beremiz_service.py:556
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
msgstr "Import Nevow/Athena échoué:"
-#: ../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 "Nouveau"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "Nouvel élément"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "Pas de modificateur"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "Aucun automate à transférer (la compilation a-t-elle réussi ?)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "Pas de code défini dans le POU \"%s\""
-#: ../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 "Pas de connecteur correspondant à \"{a1}\" dans la continuité de \"{a2}\" POU"
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2315,12 +2334,12 @@
"Pas de documentation.\n"
"Bientôt disponible."
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr "Aucune information trouvée pour le block \"%s\""
-#: ../PLCGenerator.py:1194
+#: ../PLCGenerator.py:1232
#, python-brace-format
msgid ""
"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
@@ -2329,49 +2348,49 @@
"Pas de variable de sortie {a1} trouvée dans le bloc {a2} dans POU {a3}. La "
"connection doit-être cassée"
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "Pas de résultat de recherche disponible."
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "Fichier SVG inconnu : %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 "Pas de tel index/sous-index ({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 ""
"Pas de tel index/sous-index ({a1},{a2}) avec l'ID : {a3} (variable {a4})"
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "Aucune valeur valide sélectionnée !"
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "Pas de varaibles définies dans le POU \"%s\""
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr "Node ID inexistant : {a1} (variable {a2})"
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr "Non-Persistante"
-#: ../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 "Variable non mappable PDO : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
@@ -2380,7 +2399,7 @@
msgid "Not equal to"
msgstr "Non égal à"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Nombre de branches :"
@@ -2388,24 +2407,24 @@
msgid "Numerical"
msgstr "Numérique"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:84
+msgstr "OnChange"
+
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "Uniquement les éléments"
-#: ../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 "Ouvrir"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "Ouverture de 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."
@@ -2413,67 +2432,67 @@
"Cadriciel Open Source pour l'automatisme, IDE implémenté en IEC 61131 avec "
"un lot d'extensions constament croissant et un executable PLC flexible."
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr "Ouvrir un explorateur de fichier pour gérer les fichiers de projet"
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "Ouverture de 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 "Groupe (optionnel) :"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "Autre profil"
-#: ../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 "Sortie"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO reçu"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "PDO transmis"
-#: ../targets/toolchain_gcc.py:167
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr "Automate :\n"
-#: ../BeremizIDE.py:355
+#: ../BeremizIDE.py:383
msgid "PLC Log"
msgstr "Log de l'automate"
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr "Génération du code PLC échouée !\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "Le PLC est vide ou déjà lancé."
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "PLC non démarré"
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
@@ -2482,15 +2501,15 @@
"Erreur de syntaxe PLC à la ligne {a1}:\n"
"{a2}"
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "Fichiers PLCOpen (*.xml)|*.xml|Tous les fichiers|*.*"
-#: ../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"
@@ -2500,205 +2519,205 @@
"\n"
"Beremiz est un "
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr "PORT"
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "Nom du POU"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "Nom du POU :"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "Type du POU"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "Type du POU :"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr "Connexion de PYRO à l'URI:%s\n"
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr "PYRO utilise les certificats dans '%s'\n"
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "Mise en page..."
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "Taille de la page (optionnel) :"
-#: ../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 "Instance parent"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "Coller"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "Coller un POU"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "Modèle à rechercher :"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "Nombre de pattes :"
-#: ../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 "Choisissez une cible"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr "Entrer un nom de bloc s'il vous plaît"
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
msgid "Please enter comment text"
msgstr "Saisissez le texte du commentaire"
-#: ../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 "Saisissez le nom de l'étape"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "Saisissez le texte"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "Veuillez entrer la valeur pour une variable de type \"%s\" :"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "Le numéro de port doit être compris entre 0 et 65535 !"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "Le numéro de port doit être un entier !"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr "Barre d'alimentation"
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "Propriétés de la barre d'alimentation"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "Aperçu avant impression"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "Aperçu :"
-#: ../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 "Imprimer"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "Aperçu avant impression"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "Priorité"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "Priorité :"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "Problème au démarrage du PLC : erreur %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "Nom de produit"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "Nom du produit (obligatoire) :"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "Publication du produit (optionnel) :"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr "Version du produit"
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "Version du produit (obligatoire) :"
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr "Programme"
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr "Le programme a été généré avec succès !"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "Programmes"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr "Les programmes ne peuvent être utilisés par les autres POUs !"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "Projet"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr "Projet '%s' :"
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr "Fichiers de projet"
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr "Nom du projet"
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "Nom du projet (obligatoire) :"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "Version du projet (optionnel) :"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2706,90 +2725,92 @@
"Erreur de syntaxe dans le fichier du projet :\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "Propriétés du projet"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:98
+"La disposition de l'arborescence du projet ne correspond pas à confnode.xml "
+"{a1}!={a2} "
+
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr "Propager le nom"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "Propriétés"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:118
+msgstr "Publication du service sur le réseau local"
+
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
-msgstr ""
-
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:428
+msgstr "Exception Pyro: %s\n"
+
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr "Pyro port :"
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr "Code Python"
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr "Fichier Python"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr "Qualificatif"
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr "Quitter"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "Echelle :"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr "Ajout code IEC"
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr "Êtes-vous sûr de vouloir supprimer le noeud '%s' ?"
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
msgstr "Refaire"
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
msgstr "Référence"
-#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr "Actualiser"
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "Expression régulière"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr "Expressions régulières"
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr "Relacher la valeur"
@@ -2797,56 +2818,56 @@
msgid "Remainder (modulo)"
msgstr "Modulo"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr "Enlever un noeud %s"
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr "Supprimer le Datatype"
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr "Supprimer le Pou"
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr "Supprimer une action"
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr "Supprimer un élément"
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr "Supprimer un fichier du dossier de gauche"
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr "Supprimer une instance"
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "Enlever l'esclave"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr "Supprimer la tâche"
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr "Supprimer une variable"
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "Renommer"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr "Remplacer un fichier"
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr "Remplacer le fil par les connexions"
@@ -2854,43 +2875,43 @@
msgid "Replacement (within)"
msgstr "Remplacement (au milieu)"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr "Mise à zéro"
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr "Réinitialiser l'order d'exécution"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr "Réinitialiser l'interface"
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr "Réinitialiser le résultat de la recherche"
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "Ressources"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "Persistante"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "Type de retour :"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "Droite"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "Barre d'alimentation à droite"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "Front montant"
@@ -2906,138 +2927,141 @@
msgid "Rounding up/down"
msgstr "Arrondi"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "Exécuter"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr ""
-
-#: ../ProjectController.py:1108
+"La génération du code C pour les extensions d'entrées-sorties a échoué!\n"
+
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+msgstr "La génération du code C pour les extensions de librairie a échoué!\n"
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr "Client SDO"
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr "Serveur SDO"
-#: ../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 ""
-
-#: ../PLCGenerator.py:773
+"Le saut SFC dans le POU \"{a1}\" fait référence à l'étape SFC inexistante "
+"\"{a2}\""
+
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+msgstr "La transition SFC dans le POU \"%s\" doit être connectée."
+
+#: ../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 "Fichiers ST (*.st)|*.st|Tous les fichiers|*.*"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "Fichiers SVG (*.svg)|*.svg|Tous les fichiers|*.*"
-#: ../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 "Enregistrer"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "Enregistrer sous..."
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "Enregistrer sous..."
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:69
+msgstr "Le chemin d'enregistrement est le même que le chemin du projet!\n"
+
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "Contexte"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "Rechercher"
-#: ../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 "Rechercher dans le projet"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "Secondes :"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "Tout sélectionner"
-#: ../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 "Sélectionner une direction pour la variable :"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "Sélectionner un éditeur :"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "Sélectionnez une instance"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "Sélectionner un objet"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
-msgstr ""
+msgstr "Le répertoire sélectionné contient déjà un autre projet. Écraser?\n"
#: ../plcopen/iec_std.csv:70
msgid "Selection"
msgstr "Sélection"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "Convergence simple"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "Divergence simple"
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "Recherche de service"
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "Services disponibles:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "Mise à 1"
@@ -3049,27 +3073,27 @@
msgid "Shift right"
msgstr "Décalage à droite"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "Afficher le code IEC généré par PLCGenerator"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "Afficher le maître"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "Afficher le maître généré par config_utils"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "Afficher le code"
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
msgid "Simultaneous Convergence"
msgstr "Convergence double"
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
msgid "Simultaneous Divergence"
msgstr "Divergence double"
@@ -3077,79 +3101,77 @@
msgid "Sine"
msgstr "Sinus"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "Evènement"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
-msgstr ""
-
-#: ../PLCGenerator.py:397
+msgstr "La source n'a pas changé, pas de compilation.\n"
+
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
"'{a2}.{a3}'."
msgstr ""
+"Le signal source doit être défini pour la tâche évènement '{a1}' dans la "
+"ressource '{a2}. {A3}'."
#: ../plcopen/iec_std.csv:23
msgid "Square root (base 2)"
msgstr "Racine carré (base 2)"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "Blocs fonctionnels standards"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "Démarrer l'automate"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "Début de la compilation dans %s\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "Démarré"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "Démarrer l'automate\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "Barre d'outils de statut"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "Étape"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "Arrêter"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "Arrêter l'automate"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "Arrêter l'automate en cours d'exécution"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "Arrêté"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Arrêt du débogage en cours\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "Structure"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "Sous-ensemble"
@@ -3157,20 +3179,20 @@
msgid "Subtraction"
msgstr "Soustraction"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "Compilé avec succès.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115
+msgstr "Changer de perspective"
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
msgid "Syntax error in regular expression of pattern to search!"
msgstr ""
"Erreur de syntaxe dans l'expression régulière du modèle à rechercher !"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "TYPE"
@@ -3178,19 +3200,19 @@
msgid "Tangent"
msgstr "Tangente"
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr "Tâche"
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr "Tâches :"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr "Temporaire"
-#: ../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"
@@ -3201,8 +3223,16 @@
"You can subscribe to the list here:\n"
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
msgstr ""
-
-#: ../editors/FileManagementPanel.py:180
+"Le meilleur endroit pour poser des questions sur Beremiz / PLCOpenEditor\n"
+"est la liste de diffusion du projet: beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"C'est le principal canal de soutien communautaire.\n"
+"Pour poster, il est nécessaire d'être abonné à la liste de diffusion.\n"
+"\n"
+"Vous pouvez vous abonner à la liste ici:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
@@ -3211,15 +3241,15 @@
"Le fichier '%s' existe déjà.\n"
"Voulez-vous le remplacer ?"
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "Le groupe de blocs doit être cohérent !"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "Le projet a été modifié. Voulez-vous l'enregistrer ?"
-#: ../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 "
@@ -3228,7 +3258,7 @@
"Un POU a pour nom \"%s\". Cela peut générer des conflits. Voulez-vous "
"continuer ?"
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3236,14 +3266,14 @@
"Un problème est apparu lors de l'impression.\n"
"Peut-être que votre imprimante n'est pas correctement configurée ?"
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "Cette option n'a pas encore disponible"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
-msgstr ""
+msgstr "Tick: %d"
#: ../plcopen/iec_std.csv:40
msgid "Time"
@@ -3278,36 +3308,36 @@
msgid "Time-of-day subtraction"
msgstr "Soustraction d'horodatage"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
-msgstr ""
-
-#: ../editors/Viewer.py:548
+msgstr "Basculer la valeur"
+
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "Haut"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "Transférer"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "Transférer l'automate"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "Transfert effectué avec succès.\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "Le transfert a échoué\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 "
@@ -3316,58 +3346,62 @@
"Le code de la transition \"%s\" doit contenir une variable de sortie ou un "
"relai dont la référence est son nom"
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "Nom de la transition"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "Nom de la transition :"
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-
-#: ../PLCGenerator.py:1598
+"La transition avec le contenu \"{a1}\" n'est pas connectée à une étape "
+"suivante dans le POU \"{a2}\""
+
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr ""
-
-#: ../plcopen/plcopen.py:1323
+"La transition avec le contenu \"{a1}\" n'est pas connectée à une étape "
+"précédente dans le POU \"{a2}\""
+
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "La transition nommée %s n'existe pas !"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "Transitions"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Traduit par"
+
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "Activation"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "Twisted indisponible."
+
+#: ../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 et ses dérivés"
-#: ../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 "Conflit entre types pour l'adresse \"%s\""
@@ -3376,179 +3410,233 @@
msgid "Type conversion"
msgstr "Conversion de type"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr "Propriétés du type :"
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr "Type uniquement"
-#: ../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 ""
+
+#: ../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 "Impossible de définir le mappage des PDO pour le noeud %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 ""
-
-#: ../PLCGenerator.py:254
+msgstr "Type de bloc indéfini \"{a1}\" dans le module \"{a2}\""
+
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "Type de POU \"%s\" indéterminé !"
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "Défaire"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "Inconnu"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "Variable \"%s\" inconnue dans ce POU !"
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr "SansNom"
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "Sansnom%d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "Taille de donnée \"%s\" non identifié !"
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "Types de donnée du projet"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "Type utilisateur"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "POUs du projet"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "Valeur"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "Valeurs"
-#: ../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 ""
-
-#: ../dialogs/FBDVariableDialog.py:64
+msgstr "Dépôt de variable"
+
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "Propriétés de la variable"
-#: ../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 "Direction de la variable"
-#: ../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 "La variable n'appartient pas à ce 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 ""
+
+#: ../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:91
+msgstr "Le démarrage du client WAMP a échoué."
+
+#: ../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:131
+msgstr "WAMP se connectant à l'URL: %s\n"
+
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:150
+msgstr "Délai de connexion WAMP dépassé"
+
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
-msgstr ""
-
-#: ../Beremiz_service.py:564
+msgstr "La connexion WAMP à '%s' a échoué.\n"
+
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:37
+msgstr "L'importation de WAMP a échoué:"
+
+#: ../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 "IHM WXGlade"
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "Attention"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "Mises en garde du generateur de code ST/IL/SFC :\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "Tout le projet"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "Longueur :"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr "Boucler"
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Écrit par"
-#: ../features.py:34
+#: ../features.py:35
msgid "WxGlade GUI"
msgstr "Interface WxGlade"
-#: ../svgui/svgui.py:142
+#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
@@ -3556,7 +3644,7 @@
"Vous n'avez pas les permissions d'écriture.\n"
"Ouvrir Inkscape tout de même ?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3564,7 +3652,7 @@
"Vous n'avez pas les permissions d'écriture.\n"
"Ouvrir wxGlade tout de même ?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3572,7 +3660,7 @@
"Vous n'avez pas la permission de travailler sur le projet.\n"
"Travailler sur une copie du projet ?"
-#: ../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!"
@@ -3580,74 +3668,66 @@
"Vous devez sélectionné le bloc ou le group autour duquel un ebranche doit "
"être ajoutée !"
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr ""
"Vous devez sélectionner le fil sur lequel le contact doit être ajouté !"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "Vous devez saisir un nom !"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "Vous devez saisir une valeur !"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "Zoom"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr "jours"
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "erreur: %s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
-msgstr ""
-
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "fichier :"
-
-#: ../dialogs/PouDialog.py:32
+msgstr "quitté avec le statut {a1} (pid {a2})\n"
+
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr "fonction"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "fonction :"
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "Bloc fonctionnel"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr "heures"
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "ligne :"
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "L'installation de matiec n'est pas trouvée\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:156
+msgstr "millisecondes"
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr "minutes"
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "programme"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr "secondes"
@@ -3663,26 +3743,28 @@
msgid "string right of"
msgstr "Caractères à droite de"
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "Information de mise à jour non disponible."
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr "attention: %s\n"
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
-msgstr ""
-
-#: ../ConfigTreeNode.py:56
+msgstr "{a1} \"{a2}\" ne peut pas être collé comme {a3}."
+
+#: ../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 ""
+"Le fichier XML {a1} ne suit pas le schéma XSD à la ligne {a2}:\n"
+"{a3}"
#: Extra XSD strings
msgid "CanFestivalSlaveNode"
@@ -3716,10 +3798,10 @@
msgstr "Driver CAN"
msgid "Generic"
-msgstr ""
+msgstr "Générique"
msgid "Command"
-msgstr ""
+msgstr "Commande"
msgid "Xenomai"
msgstr "Xenomai"
@@ -3745,6 +3827,72 @@
msgid "Win32"
msgstr "Win32"
+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 "Paramètres de base"
@@ -3770,7 +3918,7 @@
msgstr "Disable_Extensions"
msgid "%(codefile_name)s"
-msgstr ""
+msgstr "%(codefile_name)s"
msgid "variables"
msgstr "variables"
@@ -3794,34 +3942,37 @@
msgstr "desc"
msgid "onchange"
-msgstr ""
+msgstr "onchange"
msgid "opts"
-msgstr ""
+msgstr "opts"
#: Extra TC6 documentation strings
msgid "0 - current time, 1 - load time from PDT"
-msgstr ""
+msgstr "0 - heure actuelle, 1 - utilise le temps donné dans PDT"
msgid "Preset datetime"
-msgstr ""
+msgstr "Date et heure prédéfinies"
msgid "Copy of IN"
msgstr "Copie de IN"
msgid "Datetime, current or relative to PDT"
-msgstr ""
+msgstr "Date et heure, actuel ou relatif à PDT"
msgid ""
"The real time clock has many uses including time stamping, setting dates and"
" times of day in batch reports, in alarm messages and so on."
msgstr ""
+"L'horloge temps réel a de nombreuses utilisations, y compris l'horodatage, "
+"définir les dates et heures dans les rapports de production, dans les "
+"messages d'alarme, etc."
msgid "1 = integrate, 0 = hold"
-msgstr ""
+msgstr "1 = intégrer, 0 = retenir"
msgid "Overriding reset"
-msgstr ""
+msgstr "Réinitialisation"
msgid "Input variable"
msgstr "Variable d'entrée"
@@ -3833,115 +3984,136 @@
msgstr "Période d'échantillonnage"
msgid "NOT R1"
-msgstr ""
+msgstr "NOT R1"
msgid "Integrated output"
-msgstr ""
+msgstr "Sortie intégrale"
msgid ""
"The integral function block integrates the value of input XIN over time."
msgstr ""
+"Le bloc fonction intégral intègre la valeur de l'entrée XIN dans le temps."
msgid "0 = reset"
msgstr "0 = reset"
msgid "Input to be differentiated"
-msgstr ""
+msgstr "Entrée à dériver"
msgid "Differentiated output"
-msgstr ""
+msgstr "Sortie dérivée"
msgid ""
"The derivative function block produces an output XOUT proportional to the "
"rate of change of the input XIN."
msgstr ""
+"Le bloc fonction dérivé produit une sortie XOUT proportionnelle à la "
+"variation dans le temps de l'entrée XIN."
msgid "0 - manual , 1 - automatic"
-msgstr ""
+msgstr "0 - manuel, 1 - automatique"
msgid "Process variable"
-msgstr ""
+msgstr "Variable de processus"
msgid "Set point"
-msgstr ""
+msgstr "Point de consigne"
msgid "Manual output adjustment - Typically from transfer station"
msgstr ""
+"Réglage manuel de la sortie - Généralement à partir de la station de "
+"transfert"
msgid "Proportionality constant"
-msgstr ""
+msgstr "Constante de proportionnalité"
msgid "Reset time"
msgstr "Temps de reset"
msgid "Derivative time constant"
-msgstr ""
+msgstr "Constante de temps dérivée"
msgid "PV - SP"
-msgstr ""
+msgstr "PV - SP"
msgid "FB for integral term"
-msgstr ""
+msgstr "FB pour terme intégral"
msgid "FB for derivative term"
-msgstr ""
+msgstr "FB pour terme dérivé"
msgid ""
"The PID (proportional, Integral, Derivative) function block provides the "
"classical three term controller for closed loop control."
msgstr ""
+"Le bloc fonctionnel PID (Proportionnel, Intégral, Dérivé) fournit le "
+"contrôleur classique à trois termes pour le contrôle en boucle fermée."
msgid "0 - track X0, 1 - ramp to/track X1"
-msgstr ""
+msgstr "0 - suivre X0, 1 - rampe vers/suivre X1"
msgid "Ramp duration"
-msgstr ""
+msgstr "Durée de la rampe"
msgid "BUSY = 1 during ramping period"
-msgstr ""
+msgstr "BUSY = 1 durant la rampe"
msgid "Elapsed time of ramp"
-msgstr ""
+msgstr "Temps écoulé de la rampe"
msgid "The RAMP function block is modelled on example given in the standard."
-msgstr ""
+msgstr "Le bloc fonction RAMP est basée sur l'exemple donné dans la norme."
msgid ""
"The hysteresis function block provides a hysteresis boolean output driven by"
" the difference of two floating point (REAL) inputs XIN1 and XIN2."
msgstr ""
+"Le bloc fonction hystérésis fournit une sortie booléenne à hystérésis "
+"pilotée par la différence de deux entrées à virgule flottante (REAL) XIN1 et"
+" XIN2."
msgid "The SR bistable is a latch where the Set dominates."
-msgstr ""
+msgstr "La bistable SR est une bascule où l'état Set est dominant."
msgid "The RS bistable is a latch where the Reset dominates."
-msgstr ""
+msgstr "La bistable RS est une bascule où l'état Reset est dominant."
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
-msgstr ""
+"exclusive access to certain resources."
+msgstr ""
+"Le sémaphore fournit un mécanisme permettant aux éléments logiciels "
+"d'accéder mutuellement à certaines ressources."
msgid "The output produces a single pulse when a rising edge is detected."
msgstr ""
+"La sortie produit une impulsion unique lorsqu'un front montant est détecté."
msgid "The output produces a single pulse when a falling edge is detected."
msgstr ""
+"La sortie produit une impulsion unique lorsqu'un front descendant est "
+"détecté."
msgid ""
"The up-counter can be used to signal when a count has reached a maximum "
"value."
msgstr ""
+"Le compteur peut être utilisé pour signaler qu'un compte a atteint une "
+"valeur maximale."
msgid ""
"The down-counter can be used to signal when a count has reached zero, on "
"counting down from a preset value."
msgstr ""
+"Le décompteur peut être utilisé pour signaler qu'un compte a atteint zéro, "
+"lors du décompte d'une valeur prédéfinie."
msgid ""
"The up-down counter has two inputs CU and CD. It can be used to both count "
"up on one input and down on the other."
msgstr ""
+"Le compteur-décompteur a deux entrées CU et CD. Il peut être utilisé pour "
+"compter à la fois sur une entrée et sur l'autre sur l'autre."
msgid "first input parameter"
msgstr "Premier paramètre d'entrée"
@@ -3956,19 +4128,25 @@
msgstr "Second paramètre de sortie"
msgid "internal state: 0-reset, 1-counting, 2-set"
-msgstr ""
+msgstr "état interne: 0-reset, 1-counting, 2-set"
msgid ""
"The pulse timer can be used to generate output pulses of a given time "
"duration."
msgstr ""
+"La temporisation d'impulsions peut être utilisée pour générer des impulsions"
+" de sortie d'une durée donnée."
msgid ""
"The on-delay timer can be used to delay setting an output true, for fixed "
"period after an input becomes true."
msgstr ""
+"La temporisation à retard peut être utilisée pour retarder un front montant "
+"d'une durée donnée."
msgid ""
"The off-delay timer can be used to delay setting an output false, for fixed "
"period after input goes false."
msgstr ""
+"La temporisation de retard peut être utilisée pour retarder un front "
+"descendant d'une durée donnée."
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/Beremiz_hr.po Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,4017 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Beremiz package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Beremiz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Language-Team: Croatian (https://www.transifex.com/beremiz/teams/75746/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: ../util/ExceptionHandler.py:58
+#, python-format
+msgid ""
+"\n"
+"An unhandled exception (bug) occured. Bug report saved at :\n"
+"(%s)\n"
+"\n"
+"Please be kind enough to send this file to:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"You should now restart program.\n"
+"\n"
+"Traceback:\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid " External"
+msgstr ""
+
+#: ../controls/VariablePanel.py:89
+msgid " InOut"
+msgstr ""
+
+#: ../controls/VariablePanel.py:89
+msgid " Input"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid " Local"
+msgstr ""
+
+#: ../controls/VariablePanel.py:89
+msgid " Output"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid " Temp"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#, python-format
+msgid " and %s"
+msgstr ""
+
+#: ../ProjectController.py:1182
+msgid " generation failed !\n"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1029
+#, python-format
+msgid "\"%s\" Data Type doesn't exist !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1047
+#, python-format
+msgid "\"%s\" POU already exists !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1068
+#, python-format
+msgid "\"%s\" POU doesn't exist !!!"
+msgstr ""
+
+#: ../editors/Viewer.py:288
+#, python-format
+msgid "\"%s\" can't use itself!"
+msgstr ""
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#, python-format
+msgid "\"%s\" config already exists!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:531
+#, python-format
+msgid "\"%s\" configuration already exists !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr ""
+
+#: ../IDEFrame.py:1638
+#, python-format
+msgid "\"%s\" data type already exists!"
+msgstr ""
+
+#: ../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:928
+#, python-format
+msgid "\"%s\" folder is not a valid Beremiz project\n"
+msgstr ""
+
+#: ../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: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: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: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:62
+#, python-format
+msgid "\"%s\" step already exists!"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:566
+#, python-format
+msgid "\"%s\" value already defined!"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
+#, python-format
+msgid "\"%s\" value isn't a valid array dimension!"
+msgstr ""
+
+#: ../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:1133
+#, python-brace-format
+msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
+msgstr ""
+
+#: ../editors/Viewer.py:292
+#, python-brace-format
+msgid "\"{a1}\" is already used by \"{a2}\"!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:557
+#, python-brace-format
+msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:577
+#, python-brace-format
+msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#, python-format
+msgid "%03gms"
+msgstr ""
+
+#: ../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
+#, python-format
+msgid "%dms"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#, python-format
+msgid "%ds"
+msgstr ""
+
+#: ../PLCControler.py:1114
+#, python-format
+msgid "%s Data Types"
+msgstr ""
+
+#: ../PLCControler.py:1097
+#, python-format
+msgid "%s POUs"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
+#, python-format
+msgid "%s Profile"
+msgstr ""
+
+#: ../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:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
+#, python-format
+msgid "%s body don't have text!"
+msgstr ""
+
+#: ../IDEFrame.py:388
+msgid "&Add Element"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
+msgid "&Close"
+msgstr ""
+
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr ""
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr ""
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr ""
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr ""
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr ""
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr ""
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr ""
+
+#: ../IDEFrame.py:356
+msgid "&Program"
+msgstr ""
+
+#: ../PLCOpenEditor.py:98
+msgid "&Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:244
+msgid "&Recent Projects"
+msgstr ""
+
+#: ../IDEFrame.py:358
+msgid "&Resource"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:247
+#, python-brace-format
+msgid "'{a1}' - {a2} match in project"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:249
+#, python-brace-format
+msgid "'{a1}' - {a2} matches in project"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:98
+#, python-brace-format
+msgid "'{a1}' is located at {a2}\n"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:298
+#, python-format
+msgid "(%d matches)"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
+#, python-format
+msgid ", %s"
+msgstr ""
+
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
+msgid "1d"
+msgstr ""
+
+#: ../controls/LogViewer.py:288
+msgid "1h"
+msgstr ""
+
+#: ../controls/LogViewer.py:289
+msgid "1m"
+msgstr ""
+
+#: ../controls/LogViewer.py:290
+msgid "1s"
+msgstr ""
+
+#: ../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: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:424
+#, python-brace-format
+msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:229
+msgid "A location must be selected!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:485
+msgid "A task with the same name already exists!"
+msgstr ""
+
+#: ../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:778
+#, python-format
+msgid "A variable with \"%s\" as name already exists!"
+msgstr ""
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
+msgid "About"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Absolute number"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
+msgid "Action"
+msgstr ""
+
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+msgid "Action Block"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:89
+msgid "Action Name"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:56
+msgid "Action Name:"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1567
+#, python-format
+msgid "Action with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Actions"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:139
+msgid "Actions:"
+msgstr ""
+
+#: ../editors/Viewer.py:473
+msgid "Active"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+msgid "Add"
+msgstr ""
+
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+msgid "Add Action"
+msgstr ""
+
+#: ../features.py:33
+msgid "Add C code accessing located variables synchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1907
+msgid "Add Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:1887
+msgid "Add DataType"
+msgstr ""
+
+#: ../editors/Viewer.py:609
+msgid "Add Divergence Branch"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:121
+msgid "Add IP"
+msgstr ""
+
+#: ../IDEFrame.py:1895
+msgid "Add POU"
+msgstr ""
+
+#: ../features.py:34
+msgid "Add Python code executed asynchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+msgid "Add Resource"
+msgstr ""
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+msgid "Add Transition"
+msgstr ""
+
+#: ../editors/Viewer.py:596
+msgid "Add Wire Segment"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447
+msgid "Add a new initial step"
+msgstr ""
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+msgid "Add a new jump"
+msgstr ""
+
+#: ../editors/SFCViewer.py:469
+msgid "Add a new step"
+msgstr ""
+
+#: ../features.py:35
+msgid "Add a simple WxGlade based GUI."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:143
+msgid "Add action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:364
+msgid "Add element"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:283
+msgid "Add instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:110
+msgid "Add slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:252
+msgid "Add task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+msgid "Add variable"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Addition"
+msgstr ""
+
+#: ../plcopen/definitions.py:51
+msgid "Additional function blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:669
+msgid "Adjust Block Size"
+msgstr ""
+
+#: ../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:307
+#: ../controls/VariablePanel.py:88
+msgid "All"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:37
+msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
+msgstr ""
+
+#: ../ProjectController.py:1670
+msgid "Already connected. Please disconnect\n"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:607
+#, python-format
+msgid "An element named \"%s\" already exists in this structure!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:520
+msgid "An instance with the same name already exists!"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:103
+msgid "Apply name modification to all continuations with the same name"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:31
+msgid "Arc cosine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:30
+msgid "Arc sine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:32
+msgid "Arc tangent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Arithmetic"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
+msgid "Array"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:39
+msgid "Assignment"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:226
+msgid "At least a variable or an expression must be selected!"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:111
+msgid "Author"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:108
+msgid "Author Name (optional):"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:80
+msgid "Backward"
+msgstr ""
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
+#, python-format
+msgid "Bad location size : %s"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
+msgid "Base Type:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+msgid "Base Types"
+msgstr ""
+
+#: ../BeremizIDE.py:483
+msgid "Beremiz"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Binary selection (1 of 2)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Bit-shift"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise AND"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:67
+msgid "Bitwise OR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:68
+msgid "Bitwise XOR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:69
+msgid "Bitwise inverting"
+msgstr ""
+
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+msgid "Block"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:63
+msgid "Block Properties"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Block name"
+msgstr ""
+
+#: ../editors/Viewer.py:586
+msgid "Bottom"
+msgstr ""
+
+#: ../ProjectController.py:1400
+msgid "Broken"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
+#, python-format
+msgid "Browse %s values library"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:72
+msgid "Browse Locations"
+msgstr ""
+
+#: ../ProjectController.py:1815
+msgid "Build"
+msgstr ""
+
+#: ../ProjectController.py:1335
+msgid "Build directory already clean\n"
+msgstr ""
+
+#: ../ProjectController.py:1816
+msgid "Build project into build folder"
+msgstr ""
+
+#: ../ProjectController.py:1108
+msgid "C Build crashed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1105
+msgid "C Build failed.\n"
+msgstr ""
+
+#: ../c_ext/CFileEditor.py:66
+msgid "C code"
+msgstr ""
+
+#: ../ProjectController.py:1186
+msgid "C code generated successfully.\n"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:126
+msgid "C compilation failed.\n"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:199
+#, python-format
+msgid "C compilation of %s failed.\n"
+msgstr ""
+
+#: ../features.py:33
+msgid "C extension"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:69
+msgid "C&redits"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:58
+msgid "CANOpen network"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:48
+msgid "CANOpen slave"
+msgstr ""
+
+#: ../features.py:31
+msgid "CANopen support"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:291
+msgid "Can only give a location to local or global variables"
+msgstr ""
+
+#: ../PLCOpenEditor.py:318
+#, python-format
+msgid "Can't generate program to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:289
+msgid "Can't give a location to a function block instance"
+msgstr ""
+
+#: ../PLCOpenEditor.py:363
+#, python-format
+msgid "Can't save project to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:339
+msgid "Can't set an initial value to a function block instance"
+msgstr ""
+
+#: ../ConfigTreeNode.py:532
+#, python-brace-format
+msgid "Cannot create child {a1} of type {a2} "
+msgstr ""
+
+#: ../ConfigTreeNode.py:454
+#, python-format
+msgid "Cannot find lower free IEC channel than %d\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:139
+msgid "Cannot get PLC status - connection failed.\n"
+msgstr ""
+
+#: ../ProjectController.py:967
+msgid "Cannot open/parse VARIABLES.csv!\n"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:581
+msgid "Center"
+msgstr ""
+
+#: ../Beremiz_service.py:276
+msgid "Change IP of interface to bind"
+msgstr ""
+
+#: ../Beremiz_service.py:275
+msgid "Change Name"
+msgstr ""
+
+#: ../IDEFrame.py:1977
+msgid "Change POU Type To"
+msgstr ""
+
+#: ../Beremiz_service.py:277
+msgid "Change Port Number"
+msgstr ""
+
+#: ../Beremiz_service.py:278
+msgid "Change working directory"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Character string"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "Choose a SVG file"
+msgstr ""
+
+#: ../ProjectController.py:561
+msgid "Choose a directory to save project"
+msgstr ""
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+msgid "Choose a file"
+msgstr ""
+
+#: ../BeremizIDE.py:900
+msgid "Choose a project"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
+#, python-format
+msgid "Choose a value for %s:"
+msgstr ""
+
+#: ../Beremiz_service.py:333
+msgid "Choose a working directory "
+msgstr ""
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
+msgid "Chosen folder doesn't contain a program. It's not a valid project!"
+msgstr ""
+
+#: ../ProjectController.py:435
+msgid "Chosen folder isn't empty. You can't use it for a new project!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:60
+msgid "Class"
+msgstr ""
+
+#: ../controls/VariablePanel.py:472
+msgid "Class Filter:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:74
+msgid "Class:"
+msgstr ""
+
+#: ../ProjectController.py:1821
+msgid "Clean"
+msgstr ""
+
+#: ../controls/LogViewer.py:327
+msgid "Clean log messages"
+msgstr ""
+
+#: ../ProjectController.py:1822
+msgid "Clean project build folder"
+msgstr ""
+
+#: ../ProjectController.py:1332
+msgid "Cleaning the build directory\n"
+msgstr ""
+
+#: ../IDEFrame.py:437
+msgid "Clear Errors"
+msgstr ""
+
+#: ../editors/Viewer.py:680
+msgid "Clear Execution Order"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+msgid "Close"
+msgstr ""
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+msgid "Close Application"
+msgstr ""
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
+msgid "Close Project"
+msgstr ""
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
+msgid "Close Tab"
+msgstr ""
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+msgid "Coil"
+msgstr ""
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+msgid "Comment"
+msgstr ""
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
+msgid "Community support"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:65
+msgid "Company Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:106
+msgid "Company Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:107
+msgid "Company URL (optional):"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Comparison"
+msgstr ""
+
+#: ../ProjectController.py:756
+msgid "Compiling IEC Program into C code...\n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:85
+msgid "Concatenation"
+msgstr ""
+
+#: ../editors/ConfTreeNodeEditor.py:241
+msgid "Config"
+msgstr ""
+
+#: ../editors/ProjectNodeEditor.py:39
+msgid "Config variables"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:43
+msgid "Configuration"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Configurations"
+msgstr ""
+
+#: ../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:1842
+msgid "Connect"
+msgstr ""
+
+#: ../ProjectController.py:1843
+msgid "Connect to the target PLC"
+msgstr ""
+
+#: ../ProjectController.py:1391
+#, python-format
+msgid "Connected to URI: %s"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
+msgid "Connection"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:55
+msgid "Connection Properties"
+msgstr ""
+
+#: ../ProjectController.py:1691
+msgid "Connection canceled!\n"
+msgstr ""
+
+#: ../ProjectController.py:1714
+#, python-format
+msgid "Connection failed to %s!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+msgid "Connection lost!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:110
+#, python-format
+msgid "Connection to '%s' failed.\n"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+msgid "Connector"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:68
+msgid "Connectors:"
+msgstr ""
+
+#: ../BeremizIDE.py:378
+msgid "Console"
+msgstr ""
+
+#: ../controls/VariablePanel.py:75
+msgid "Constant"
+msgstr ""
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+msgid "Contact"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:217
+msgid "Content Description (optional):"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+msgid "Continuation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:18
+msgid "Conversion from BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:19
+msgid "Conversion to BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:21
+msgid "Conversion to date"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:20
+msgid "Conversion to time-of-day"
+msgstr ""
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
+msgid "Copy"
+msgstr ""
+
+#: ../IDEFrame.py:1964
+msgid "Copy POU"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:68
+msgid "Copy file from left folder to right"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:67
+msgid "Copy file from right folder to left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:28
+msgid "Cosine"
+msgstr ""
+
+#: ../ConfigTreeNode.py:660
+#, python-brace-format
+msgid ""
+"Could not add child \"{a1}\", type {a2} :\n"
+"{a3}\n"
+msgstr ""
+
+#: ../py_ext/PythonFileCTNMixin.py:81
+#, python-format
+msgid "Couldn't import old %s file."
+msgstr ""
+
+#: ../ConfigTreeNode.py:630
+#, python-brace-format
+msgid ""
+"Couldn't load confnode base parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
+#, python-brace-format
+msgid ""
+"Couldn't load confnode parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../PLCControler.py:552
+msgid "Couldn't paste non-POU object."
+msgstr ""
+
+#: ../ProjectController.py:1636
+msgid "Couldn't start PLC !\n"
+msgstr ""
+
+#: ../ProjectController.py:1644
+msgid "Couldn't stop PLC !\n"
+msgstr ""
+
+#: ../svgui/svgui.py:57
+msgid "Create HMI"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:54
+msgid "Create a new POU"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:45
+msgid "Create a new action"
+msgstr ""
+
+#: ../IDEFrame.py:166
+msgid "Create a new action block"
+msgstr ""
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+msgid "Create a new block"
+msgstr ""
+
+#: ../IDEFrame.py:139
+msgid "Create a new branch"
+msgstr ""
+
+#: ../IDEFrame.py:133
+msgid "Create a new coil"
+msgstr ""
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+msgid "Create a new comment"
+msgstr ""
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+msgid "Create a new connection"
+msgstr ""
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
+msgid "Create a new contact"
+msgstr ""
+
+#: ../IDEFrame.py:169
+msgid "Create a new divergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:54
+msgid "Create a new divergence or convergence"
+msgstr ""
+
+#: ../IDEFrame.py:157
+msgid "Create a new initial step"
+msgstr ""
+
+#: ../IDEFrame.py:172
+msgid "Create a new jump"
+msgstr ""
+
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
+msgid "Create a new power rail"
+msgstr ""
+
+#: ../IDEFrame.py:130
+msgid "Create a new rung"
+msgstr ""
+
+#: ../IDEFrame.py:160
+msgid "Create a new step"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+msgid "Create a new transition"
+msgstr ""
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+msgid "Create a new variable"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:109
+msgid "Credits"
+msgstr ""
+
+#: ../Beremiz_service.py:424
+msgid "Current working directory :"
+msgstr ""
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+msgid "Cut"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Cyclic"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
+#: ../plcopen/iec_std.csv:60
+msgid "DEPRECATED"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
+msgid "DS-301 Profile"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
+msgid "DS-302 Profile"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:39
+msgid "Data Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Data Types"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Data type conversion"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
+msgid "Date addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
+#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
+msgid "Date and time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
+msgid "Date subtraction"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:46
+msgid "Days:"
+msgstr ""
+
+#: ../ProjectController.py:1729
+msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:144
+msgid "Debug instance"
+msgstr ""
+
+#: ../editors/Viewer.py:490
+#, python-format
+msgid "Debug: %s"
+msgstr ""
+
+#: ../ProjectController.py:1471
+#, python-format
+msgid "Debug: Unknown variable '%s'\n"
+msgstr ""
+
+#: ../ProjectController.py:1469
+#, python-format
+msgid "Debug: Unsupported type to debug '%s'\n"
+msgstr ""
+
+#: ../IDEFrame.py:660
+msgid "Debugger"
+msgstr ""
+
+#: ../ProjectController.py:1726
+msgid "Debugger ready\n"
+msgstr ""
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+msgid "Delete"
+msgstr ""
+
+#: ../editors/Viewer.py:610
+msgid "Delete Divergence Branch"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:157
+msgid "Delete File"
+msgstr ""
+
+#: ../editors/Viewer.py:597
+msgid "Delete Wire Segment"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:44
+msgid "Delete item"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:88
+msgid "Deletion (within)"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:161
+msgid "Derivation Type:"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:735
+msgid "Description"
+msgstr ""
+
+#: ../controls/VariablePanel.py:463
+msgid "Description:"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
+msgid "Dimensions:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:69
+msgid "Direction"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:102
+msgid "Direction:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Directly"
+msgstr ""
+
+#: ../ProjectController.py:1855
+msgid "Disconnect"
+msgstr ""
+
+#: ../ProjectController.py:1856
+msgid "Disconnect from PLC"
+msgstr ""
+
+#: ../ProjectController.py:1401
+msgid "Disconnected"
+msgstr ""
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+msgid "Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:36
+msgid "Division"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:156
+#, python-format
+msgid "Do you really want to delete the file '%s'?"
+msgstr ""
+
+#: ../controls/VariablePanel.py:65
+msgid "Documentation"
+msgstr ""
+
+#: ../PLCOpenEditor.py:312
+msgid "Done"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Duration"
+msgstr ""
+
+#: ../canfestival/canfestival.py:174
+msgid "EDS files (*.eds)|*.eds|All files|*.*"
+msgstr ""
+
+#: ../editors/Viewer.py:668
+msgid "Edit Block"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:56
+msgid "Edit Contact Values"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:62
+msgid "Edit Duration"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:53
+msgid "Edit Step"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:45
+msgid "Edit a WxWidgets GUI with WXGlade"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:127
+msgid "Edit action block properties"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:47
+msgid "Edit array type properties"
+msgstr ""
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+msgid "Edit comment"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:69
+msgid "Edit file"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:42
+msgid "Edit item"
+msgstr ""
+
+#: ../editors/Viewer.py:3059
+msgid "Edit jump target"
+msgstr ""
+
+#: ../ProjectController.py:1873
+msgid "Edit raw IEC code added to code generated by PLCGenerator"
+msgstr ""
+
+#: ../editors/SFCViewer.py:815
+msgid "Edit step name"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:53
+msgid "Edit transition"
+msgstr ""
+
+#: ../IDEFrame.py:632
+msgid "Editor ToolBar"
+msgstr ""
+
+#: ../ProjectController.py:1294
+msgid "Editor selection"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:360
+msgid "Elements :"
+msgstr ""
+
+#: ../ProjectController.py:1399
+msgid "Empty"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
+msgid "Enter a name "
+msgstr ""
+
+#: ../Beremiz_service.py:326
+msgid "Enter a port number "
+msgstr ""
+
+#: ../Beremiz_service.py:317
+msgid "Enter the IP of the interface to bind"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Enumerated"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:77
+msgid "Equal to"
+msgstr ""
+
+#: ../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 ""
+
+#: ../ProjectController.py:811
+msgid ""
+"Error : At least one configuration and one resource must be declared in PLC "
+"!\n"
+msgstr ""
+
+#: ../ProjectController.py:803
+#, python-format
+msgid "Error : IEC to C compiler returned %d\n"
+msgstr ""
+
+#: ../ProjectController.py:731
+#, python-format
+msgid ""
+"Error in ST/IL/SFC code generator :\n"
+"%s\n"
+msgstr ""
+
+#: ../ConfigTreeNode.py:219
+#, python-format
+msgid "Error while saving \"%s\"\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:179
+msgid "Error: Export slave failed\n"
+msgstr ""
+
+#: ../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:383
+msgid "Error: No PLC built\n"
+msgstr ""
+
+#: ../ProjectController.py:1708
+#, python-format
+msgid "Exception while connecting %s!\n"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:123
+msgid "Execution Control:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+msgid "Execution Order:"
+msgstr ""
+
+#: ../features.py:36
+msgid "Experimental web based HMI"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:38
+msgid "Exponent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:26
+msgid "Exponentiation"
+msgstr ""
+
+#: ../canfestival/canfestival.py:186
+msgid "Export CanOpen slave to EDS file"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+msgid "Export graph values to clipboard"
+msgstr ""
+
+#: ../canfestival/canfestival.py:185
+msgid "Export slave"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:94
+msgid "Expression:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "External"
+msgstr ""
+
+#: ../ProjectController.py:826
+msgid "Extracting Located Variables...\n"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "FBD"
+msgstr ""
+
+#: ../ProjectController.py:1773
+msgid "Failed : Must build before transfer.\n"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+msgid "Falling Edge"
+msgstr ""
+
+#: ../ProjectController.py:1098
+msgid "Fatal : cannot get builder.\n"
+msgstr ""
+
+#: ../Beremiz.py:160
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:167
+#, python-format
+msgid "Field %s hasn't a valid value!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:169
+#, python-format
+msgid "Fields %s haven't a valid value!"
+msgstr ""
+
+#: ../controls/FolderTree.py:221
+#, python-format
+msgid "File '%s' already exists!"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+msgid "Find"
+msgstr ""
+
+#: ../IDEFrame.py:379
+msgid "Find Next"
+msgstr ""
+
+#: ../IDEFrame.py:381
+msgid "Find Previous"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:90
+msgid "Find position"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:58
+msgid "Find:"
+msgstr ""
+
+#: ../editors/Viewer.py:1633
+msgid "Force value"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:176
+msgid "Forcing Variable Value"
+msgstr ""
+
+#: ../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:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
+msgid "Form isn't complete. Name must be filled!"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:235
+msgid "Form isn't complete. Valid block type must be selected!"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:75
+msgid "Forward"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+msgid "Function"
+msgstr ""
+
+#: ../IDEFrame.py:354
+msgid "Function &Block"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
+msgid "Function Block"
+msgstr ""
+
+#: ../controls/VariablePanel.py:868
+msgid "Function Block Types"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Function Blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:290
+msgid "Function Blocks can't be used in Functions!"
+msgstr ""
+
+#: ../PLCControler.py:1907
+#, python-format
+msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Functions"
+msgstr ""
+
+#: ../PLCOpenEditor.py:88
+msgid "Generate Program"
+msgstr ""
+
+#: ../ProjectController.py:722
+msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Global"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+msgid "Go to current value"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:189
+msgid "Graphics"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Greater than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:76
+msgid "Greater than or equal to"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:135
+msgid "Height:"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:89
+msgid "Home Directory:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:165
+msgid "Horizontal:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:47
+msgid "Hours:"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "IL"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:91
+msgid "IP"
+msgstr ""
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+msgid "IP is not valid!"
+msgstr ""
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
+msgid "Import SVG"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
+msgid "InOut"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:300
+#, python-brace-format
+msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:306
+#, python-format
+msgid "Incompatible size of data between \"%s\" and \"BOOL\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:310
+#, python-brace-format
+msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Indicator"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:734
+msgid "Initial"
+msgstr ""
+
+#: ../editors/Viewer.py:650
+msgid "Initial Step"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
+msgid "Initial Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
+msgid "Initial Value:"
+msgstr ""
+
+#: ../svgui/svgui.py:56
+msgid "Inkscape"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
+msgid "Inline"
+msgstr ""
+
+#: ../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:99
+msgid "Inputs:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:87
+msgid "Insertion (into)"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1948
+#, python-format
+msgid "Instance with id %d doesn't exist!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:279
+msgid "Instances:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:88
+msgid "Interface"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Interrupt"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Interval"
+msgstr ""
+
+#: ../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:407
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
+#, python-format
+msgid "Invalid value \"%s\" for variable grid element"
+msgstr ""
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
+#, python-format
+msgid "Invalid value \"%s\" for viewer block"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:211
+#, python-brace-format
+msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:124
+msgid ""
+"Invalid value!\n"
+"You must fill a numeric value."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+msgid "Jump"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "LD"
+msgstr ""
+
+#: ../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:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
+msgid "Language"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:206
+msgid "Language (optional):"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
+msgid "Language:"
+msgstr ""
+
+#: ../ProjectController.py:1779
+msgid "Latest build already matches current target. Transfering anyway...\n"
+msgstr ""
+
+#: ../Beremiz_service.py:281
+msgid "Launch WX GUI inspector"
+msgstr ""
+
+#: ../Beremiz_service.py:280
+msgid "Launch a live Python shell"
+msgstr ""
+
+#: ../editors/Viewer.py:580
+msgid "Left"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:64
+msgid "Left PowerRail"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Length of string"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:78
+msgid "Less than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:79
+msgid "Less than or equal to"
+msgstr ""
+
+#: ../IDEFrame.py:652
+msgid "Library"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:145
+msgid "License"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:73
+msgid "Limitation"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:209
+msgid "Linking :\n"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+msgid "Local"
+msgstr ""
+
+#: ../canfestival/canfestival.py:359
+msgid "Local entries"
+msgstr ""
+
+#: ../ProjectController.py:1685
+msgid "Local service discovery failed!\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:62
+msgid "Location"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:79
+msgid "Locations available:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:25
+msgid "Logarithm to base 10"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:102
+#, python-format
+msgid "MDNS resolution failure for '%s'\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
+msgid "Map Variable"
+msgstr ""
+
+#: ../features.py:31
+msgid "Map located variables over CANopen"
+msgstr ""
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
+msgid "Master"
+msgstr ""
+
+#: ../ConfigTreeNode.py:544
+#, python-brace-format
+msgid "Max count ({a1}) reached for this confnode of type {a2} "
+msgstr ""
+
+#: ../plcopen/iec_std.csv:71
+msgid "Maximum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:246
+msgid "Maximum:"
+msgstr ""
+
+#: ../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:617
+msgid "Menu ToolBar"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:51
+msgid "Microseconds:"
+msgstr ""
+
+#: ../editors/Viewer.py:585
+msgid "Middle"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:50
+msgid "Milliseconds:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:72
+msgid "Minimum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:233
+msgid "Minimum:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:48
+msgid "Minutes:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:231
+msgid "Miscellaneous"
+msgstr ""
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
+msgid "Modifier:"
+msgstr ""
+
+#: ../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:146
+msgid "Move action down"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:145
+msgid "Move action up"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:46
+msgid "Move down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:367
+msgid "Move element down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:366
+msgid "Move element up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:286
+msgid "Move instance down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:285
+msgid "Move instance up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:255
+msgid "Move task down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:254
+msgid "Move task up"
+msgstr ""
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+msgid "Move the view"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:45
+msgid "Move up"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+msgid "Move variable down"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+msgid "Move variable up"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:74
+msgid "Multiplexer (select 1 of N)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:34
+msgid "Multiplication"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:87
+msgid "My Computer:"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:89
+msgid "NAME"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
+msgid "Name"
+msgstr ""
+
+#: ../Beremiz_service.py:342
+msgid "Name must not be null!"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
+msgid "Name:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:24
+msgid "Natural logarithm"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+msgid "Negated"
+msgstr ""
+
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
+#: ../Beremiz_service.py:580
+msgid "Nevow/Athena import failed :"
+msgstr ""
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
+msgid "New"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:43
+msgid "New item"
+msgstr ""
+
+#: ../editors/Viewer.py:553
+msgid "No Modifier"
+msgstr ""
+
+#: ../ProjectController.py:1808
+msgid "No PLC to transfer (did build succeed ?)\n"
+msgstr ""
+
+#: ../PLCGenerator.py:1678
+#, python-format
+msgid "No body defined in \"%s\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#, python-brace-format
+msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCOpenEditor.py:331
+msgid ""
+"No documentation available.\n"
+"Coming soon."
+msgstr ""
+
+#: ../PLCGenerator.py:841
+#, python-format
+msgid "No informations found for \"%s\" block"
+msgstr ""
+
+#: ../PLCGenerator.py:1232
+#, python-brace-format
+msgid ""
+"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
+"broken"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:175
+msgid "No search results available."
+msgstr ""
+
+#: ../svgui/svgui.py:142
+#, python-format
+msgid "No such SVG file: %s\n"
+msgstr ""
+
+#: ../canfestival/config_utils.py:682
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
+msgstr ""
+
+#: ../canfestival/config_utils.py:387
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
+msgid "No valid value selected!"
+msgstr ""
+
+#: ../PLCGenerator.py:1676
+#, python-format
+msgid "No variable defined in \"%s\" POU"
+msgstr ""
+
+#: ../canfestival/config_utils.py:379
+#, python-brace-format
+msgid "Non existing node ID : {a1} (variable {a2})"
+msgstr ""
+
+#: ../controls/VariablePanel.py:79
+msgid "Non-Retain"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78
+msgid "Normal"
+msgstr ""
+
+#: ../canfestival/config_utils.py:426
+#, python-brace-format
+msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:80
+msgid "Not equal to"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:91
+msgid "Number of sequences:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Numerical"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:736
+msgid "OnChange"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:88
+msgid "Only Elements"
+msgstr ""
+
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
+msgid "Open"
+msgstr ""
+
+#: ../svgui/svgui.py:151
+msgid "Open Inkscape"
+msgstr ""
+
+#: ../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:1879
+msgid "Open a file explorer to manage project files"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
+msgid "Open wxGlade"
+msgstr ""
+
+#: ../controls/VariablePanel.py:64
+msgid "Option"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+msgid "Options"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:109
+msgid "Organization (optional):"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
+msgid "Other Profile"
+msgstr ""
+
+#: ../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:67 ../canfestival/NetworkEditor.py:91
+msgid "PDO Receive"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
+msgid "PDO Transmit"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:174
+msgid "PLC :\n"
+msgstr ""
+
+#: ../BeremizIDE.py:383
+msgid "PLC Log"
+msgstr ""
+
+#: ../ProjectController.py:1082
+msgid "PLC code generation failed !\n"
+msgstr ""
+
+#: ../Beremiz_service.py:305
+msgid "PLC is empty or already started."
+msgstr ""
+
+#: ../Beremiz_service.py:312
+msgid "PLC is not started."
+msgstr ""
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
+#, python-brace-format
+msgid ""
+"PLC syntax error at line {a1}:\n"
+"{a2}"
+msgstr ""
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
+msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
+msgstr ""
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
+msgid "PLCOpenEditor"
+msgstr ""
+
+#: ../PLCOpenEditor.py:339
+msgid ""
+"PLCOpenEditor is part of Beremiz project.\n"
+"\n"
+"Beremiz is an "
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:92
+msgid "PORT"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:109
+msgid "POU Name"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:66
+msgid "POU Name:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:111
+msgid "POU Type"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:73
+msgid "POU Type:"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:52
+#, python-format
+msgid "PYRO connecting to URI : %s\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:68
+#, python-format
+msgid "PYRO using certificates in '%s' \n"
+msgstr ""
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
+msgid "Page Setup"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:124
+msgid "Page Size (optional):"
+msgstr ""
+
+#: ../IDEFrame.py:2640
+#, python-format
+msgid "Page: %d"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:134
+msgid "Parent instance"
+msgstr ""
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+msgid "Paste"
+msgstr ""
+
+#: ../IDEFrame.py:1899
+msgid "Paste POU"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:60
+msgid "Pattern to search:"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:75
+msgid "Pin number:"
+msgstr ""
+
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
+msgid "Please choose a target"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Please enter a block name"
+msgstr ""
+
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+msgid "Please enter comment text"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
+msgid "Please enter step name"
+msgstr ""
+
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+msgid "Please enter text"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:177
+#, python-format
+msgid "Please enter value for a \"%s\" variable:"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be 0 <= port <= 65535!"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be an integer!"
+msgstr ""
+
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+msgid "Power Rail"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:52
+msgid "Power Rail Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
+msgid "Preview"
+msgstr ""
+
+#: ../dialogs/BlockPreviewDialog.py:59
+msgid "Preview:"
+msgstr ""
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
+msgid "Print"
+msgstr ""
+
+#: ../IDEFrame.py:1110
+msgid "Print preview"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Priority"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:91
+msgid "Priority:"
+msgstr ""
+
+#: ../runtime/PLCObject.py:518
+#, python-format
+msgid "Problem starting PLC : error %d"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:63
+msgid "Product Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:90
+msgid "Product Name (required):"
+msgstr ""
+
+#: ../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 "Project Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:88
+msgid "Project Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:89
+msgid "Project Version (optional):"
+msgstr ""
+
+#: ../PLCControler.py:2717
+msgid ""
+"Project file syntax error:\n"
+"\n"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
+msgid "Project properties"
+msgstr ""
+
+#: ../ConfigTreeNode.py:571
+#, python-brace-format
+msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:101
+msgid "Propagate Name"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Properties"
+msgstr ""
+
+#: ../Beremiz_service.py:427
+msgid "Publishing service on local network"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:126
+#, python-format
+msgid "Pyro exception: %s\n"
+msgstr ""
+
+#: ../Beremiz_service.py:420
+msgid "Pyro port :"
+msgstr ""
+
+#: ../py_ext/PythonEditor.py:84
+msgid "Python code"
+msgstr ""
+
+#: ../features.py:34
+msgid "Python file"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Qualifier"
+msgstr ""
+
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+msgid "Quit"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+msgid "Range:"
+msgstr ""
+
+#: ../ProjectController.py:1872
+msgid "Raw IEC code"
+msgstr ""
+
+#: ../BeremizIDE.py:1083
+#, python-format
+msgid "Really delete node '%s'?"
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
+msgid "Redo"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:76
+msgid "Reference"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+msgid "Refresh"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:70
+msgid "Regular expression"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:99
+msgid "Regular expressions"
+msgstr ""
+
+#: ../editors/Viewer.py:1636
+msgid "Release value"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:37
+msgid "Remainder (modulo)"
+msgstr ""
+
+#: ../BeremizIDE.py:1084
+#, python-format
+msgid "Remove %s node"
+msgstr ""
+
+#: ../IDEFrame.py:2445
+msgid "Remove Datatype"
+msgstr ""
+
+#: ../IDEFrame.py:2450
+msgid "Remove Pou"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:144
+msgid "Remove action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:365
+msgid "Remove element"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:66
+msgid "Remove file from left folder"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:284
+msgid "Remove instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:111
+msgid "Remove slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:253
+msgid "Remove task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+msgid "Remove variable"
+msgstr ""
+
+#: ../IDEFrame.py:1979
+msgid "Rename"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:187
+msgid "Replace File"
+msgstr ""
+
+#: ../editors/Viewer.py:598
+msgid "Replace Wire by connections"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:89
+msgid "Replacement (within)"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Reset"
+msgstr ""
+
+#: ../editors/Viewer.py:681
+msgid "Reset Execution Order"
+msgstr ""
+
+#: ../IDEFrame.py:453
+msgid "Reset Perspective"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:103
+msgid "Reset search result"
+msgstr ""
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+msgid "Resources"
+msgstr ""
+
+#: ../controls/VariablePanel.py:77
+msgid "Retain"
+msgstr ""
+
+#: ../controls/VariablePanel.py:455
+msgid "Return Type:"
+msgstr ""
+
+#: ../editors/Viewer.py:582
+msgid "Right"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:65
+msgid "Right PowerRail"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+msgid "Rising Edge"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:65
+msgid "Rotate left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:64
+msgid "Rotate right"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:17
+msgid "Rounding up/down"
+msgstr ""
+
+#: ../ProjectController.py:1828
+msgid "Run"
+msgstr ""
+
+#: ../ProjectController.py:1127
+msgid "Runtime IO extensions C code generation failed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1136
+msgid "Runtime library extensions C code generation failed !\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
+msgid "SDO Client"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
+msgid "SDO Server"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "SFC"
+msgstr ""
+
+#: ../PLCGenerator.py:1433
+#, python-brace-format
+msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
+msgstr ""
+
+#: ../PLCGenerator.py:780
+#, python-format
+msgid "SFC transition in POU \"%s\" must be connected."
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "ST"
+msgstr ""
+
+#: ../PLCOpenEditor.py:308
+msgid "ST files (*.st)|*.st|All files|*.*"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "SVG files (*.svg)|*.svg|All files|*.*"
+msgstr ""
+
+#: ../features.py:36
+msgid "SVGUI"
+msgstr ""
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
+msgid "Save"
+msgstr ""
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
+msgid "Save As..."
+msgstr ""
+
+#: ../BeremizIDE.py:249
+msgid "Save as"
+msgstr ""
+
+#: ../ProjectController.py:530
+msgid "Save path is the same as path of a project! \n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:73
+msgid "Scope"
+msgstr ""
+
+#: ../IDEFrame.py:644
+msgid "Search"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
+msgid "Search in Project"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:49
+msgid "Seconds:"
+msgstr ""
+
+#: ../IDEFrame.py:390
+msgid "Select All"
+msgstr ""
+
+#: ../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:1293
+msgid "Select an editor:"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:292
+msgid "Select an instance"
+msgstr ""
+
+#: ../IDEFrame.py:628
+msgid "Select an object"
+msgstr ""
+
+#: ../ProjectController.py:537
+msgid "Selected directory already contains another project. Overwrite? \n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Selection"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:65
+msgid "Selection Divergence"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:135
+msgid "Service Discovery"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:104
+msgid "Services available:"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Set"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Shift left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:63
+msgid "Shift right"
+msgstr ""
+
+#: ../ProjectController.py:1863
+msgid "Show IEC code generated by PLCGenerator"
+msgstr ""
+
+#: ../canfestival/canfestival.py:407
+msgid "Show Master"
+msgstr ""
+
+#: ../canfestival/canfestival.py:408
+msgid "Show Master generated by config_utils"
+msgstr ""
+
+#: ../ProjectController.py:1862
+msgid "Show code"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:67
+msgid "Simultaneous Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:27
+msgid "Sine"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Single"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:130
+msgid "Source didn't change, no build.\n"
+msgstr ""
+
+#: ../PLCGenerator.py:404
+#, python-brace-format
+msgid ""
+"Source signal has to be defined for single task '{a1}' in resource "
+"'{a2}.{a3}'."
+msgstr ""
+
+#: ../plcopen/iec_std.csv:23
+msgid "Square root (base 2)"
+msgstr ""
+
+#: ../plcopen/definitions.py:50
+msgid "Standard function blocks"
+msgstr ""
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+msgid "Start PLC"
+msgstr ""
+
+#: ../ProjectController.py:1074
+#, python-format
+msgid "Start build in %s\n"
+msgstr ""
+
+#: ../ProjectController.py:1397
+msgid "Started"
+msgstr ""
+
+#: ../ProjectController.py:1633
+msgid "Starting PLC\n"
+msgstr ""
+
+#: ../BeremizIDE.py:393
+msgid "Status ToolBar"
+msgstr ""
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+msgid "Step"
+msgstr ""
+
+#: ../ProjectController.py:1835
+msgid "Stop"
+msgstr ""
+
+#: ../Beremiz_service.py:272
+msgid "Stop PLC"
+msgstr ""
+
+#: ../ProjectController.py:1836
+msgid "Stop Running PLC"
+msgstr ""
+
+#: ../ProjectController.py:1398
+msgid "Stopped"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Structure"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Subrange"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:35
+msgid "Subtraction"
+msgstr ""
+
+#: ../ProjectController.py:1113
+msgid "Successfully built.\n"
+msgstr ""
+
+#: ../IDEFrame.py:449
+msgid "Switch perspective"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
+msgid "Syntax error in regular expression of pattern to search!"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:90
+msgid "TYPE"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:29
+msgid "Tangent"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:97
+msgid "Task"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:248
+msgid "Tasks:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Temp"
+msgstr ""
+
+#: ../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"
+"\n"
+"This is the main community support channel.\n"
+"For posting it is required to be subscribed to the mailing list.\n"
+"\n"
+"You can subscribe to the list here:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:186
+#, python-format
+msgid ""
+"The file '%s' already exist.\n"
+"Do you want to replace it?"
+msgstr ""
+
+#: ../editors/LDViewer.py:893
+msgid "The group of block must be coherent!"
+msgstr ""
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+msgid "There are changes, do you want to save?"
+msgstr ""
+
+#: ../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:1133
+msgid ""
+"There was a problem printing.\n"
+"Perhaps your current printer is not set correctly?"
+msgstr ""
+
+#: ../editors/LDViewer.py:902
+msgid "This option isn't available yet!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#, python-format
+msgid "Tick: %d"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40
+msgid "Time"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
+msgid "Time addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:86
+msgid "Time concatenation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
+msgid "Time division"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
+msgid "Time multiplication"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
+msgid "Time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
+msgid "Time-of-day addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
+#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
+msgid "Time-of-day subtraction"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:188
+msgid "Toggle value"
+msgstr ""
+
+#: ../editors/Viewer.py:584
+msgid "Top"
+msgstr ""
+
+#: ../ProjectController.py:1848
+msgid "Transfer"
+msgstr ""
+
+#: ../ProjectController.py:1849
+msgid "Transfer PLC"
+msgstr ""
+
+#: ../ProjectController.py:1802
+msgid "Transfer completed successfully.\n"
+msgstr ""
+
+#: ../ProjectController.py:1805
+msgid "Transfer failed\n"
+msgstr ""
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
+msgid "Transition"
+msgstr ""
+
+#: ../PLCGenerator.py:1564
+#, python-format
+msgid ""
+"Transition \"%s\" body must contain an output variable or coil referring to "
+"its name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:91
+msgid "Transition Name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:60
+msgid "Transition Name:"
+msgstr ""
+
+#: ../PLCGenerator.py:1657
+#, python-brace-format
+msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:1646
+#, python-brace-format
+msgid ""
+"Transition with content \"{a1}\" not connected to a previous step in "
+"\"{a2}\" POU"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1526
+#, python-format
+msgid "Transition with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Transitions"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:127
+msgid "Translated by"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Triggering"
+msgstr ""
+
+#: ../Beremiz_service.py:490
+msgid "Twisted unavailable."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
+msgid "Type"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:54
+msgid "Type and derivated"
+msgstr ""
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#, python-format
+msgid "Type conflict for location \"%s\""
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Type conversion"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:170
+msgid "Type infos:"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:55
+msgid "Type strict"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:43
+#, python-format
+msgid "Unable to get Xenomai's %s \n"
+msgstr ""
+
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#, python-brace-format
+msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:261
+#, python-format
+msgid "Undefined pou type \"%s\""
+msgstr ""
+
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
+msgid "Undo"
+msgstr ""
+
+#: ../ProjectController.py:442
+msgid "Unknown"
+msgstr ""
+
+#: ../editors/Viewer.py:437
+#, python-format
+msgid "Unknown variable \"%s\" for this POU!"
+msgstr ""
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
+msgid "Unnamed"
+msgstr ""
+
+#: ../PLCControler.py:263
+#, python-format
+msgid "Unnamed%d"
+msgstr ""
+
+#: ../controls/VariablePanel.py:308
+#, python-format
+msgid "Unrecognized data size \"%s\""
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+msgid "User Data Types"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
+msgid "User Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "User-defined POUs"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:267
+msgid "Values:"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
+msgid "Variable"
+msgstr ""
+
+#: ../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:68
+msgid "Variable Properties"
+msgstr ""
+
+#: ../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:439 ../editors/TextViewer.py:388
+msgid "Variable don't belong to this POU!"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:92
+msgid "Variable:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "Variables"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:166
+msgid "Vertical:"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:140
+msgid "WAMP connection timeout"
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:158
+#, python-format
+msgid "WAMP connection to '%s' failed.\n"
+msgstr ""
+
+#: ../Beremiz_service.py:595
+msgid "WAMP import failed :"
+msgstr ""
+
+#: ../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 ""
+
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+msgid "Warning"
+msgstr ""
+
+#: ../ProjectController.py:726
+msgid "Warnings in ST/IL/SFC code generator :\n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:82
+msgid "Whole Project"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:134
+msgid "Width:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:94
+msgid "Wrap search"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:126
+msgid "Written by"
+msgstr ""
+
+#: ../features.py:35
+msgid "WxGlade GUI"
+msgstr ""
+
+#: ../svgui/svgui.py:150
+msgid ""
+"You don't have write permissions.\n"
+"Open Inkscape anyway ?"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
+msgid ""
+"You don't have write permissions.\n"
+"Open wxGlade anyway ?"
+msgstr ""
+
+#: ../ProjectController.py:390
+msgid ""
+"You must have permission to work on the project\n"
+"Work on a project copy ?"
+msgstr ""
+
+#: ../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:677
+msgid "You must select the wire where a contact should be added!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
+msgid "You must type a name!"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:209
+msgid "You must type a value!"
+msgstr ""
+
+#: ../IDEFrame.py:440
+msgid "Zoom"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "days"
+msgstr ""
+
+#: ../PLCOpenEditor.py:317
+#, python-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../util/ProcessLogger.py:178
+#, python-brace-format
+msgid "exited with status {a1} (pid {a2})\n"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "function"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "functionBlock"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "hours"
+msgstr ""
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
+msgid "milliseconds"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "minutes"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "program"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "seconds"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:84
+msgid "string from the middle"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:82
+msgid "string left of"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:83
+msgid "string right of"
+msgstr ""
+
+#: ../Beremiz.py:167
+msgid "update info unavailable."
+msgstr ""
+
+#: ../PLCOpenEditor.py:315
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#: ../PLCControler.py:576
+#, python-brace-format
+msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
+msgstr ""
+
+#: ../ConfigTreeNode.py:58
+#, python-brace-format
+msgid ""
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
+"{a3}"
+msgstr ""
+
+#: Extra XSD strings
+msgid "CanFestivalSlaveNode"
+msgstr ""
+
+msgid "CAN_Device"
+msgstr ""
+
+msgid "CAN_Baudrate"
+msgstr ""
+
+msgid "NodeId"
+msgstr ""
+
+msgid "Sync_Align"
+msgstr ""
+
+msgid "Sync_Align_Ratio"
+msgstr ""
+
+msgid "CanFestivalNode"
+msgstr ""
+
+msgid "Sync_TPDOs"
+msgstr ""
+
+msgid "CanFestivalInstance"
+msgstr ""
+
+msgid "CAN_Driver"
+msgstr ""
+
+msgid "Generic"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Xenomai"
+msgstr ""
+
+msgid "XenoConfig"
+msgstr ""
+
+msgid "Compiler"
+msgstr ""
+
+msgid "CFLAGS"
+msgstr ""
+
+msgid "Linker"
+msgstr ""
+
+msgid "LDFLAGS"
+msgstr ""
+
+msgid "Linux"
+msgstr ""
+
+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 ""
+
+msgid "IEC_Channel"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "BeremizRoot"
+msgstr ""
+
+msgid "TargetType"
+msgstr ""
+
+msgid "Libraries"
+msgstr ""
+
+msgid "URI_location"
+msgstr ""
+
+msgid "Disable_Extensions"
+msgstr ""
+
+msgid "%(codefile_name)s"
+msgstr ""
+
+msgid "variables"
+msgstr ""
+
+msgid "variable"
+msgstr ""
+
+msgid "name"
+msgstr ""
+
+msgid "type"
+msgstr ""
+
+msgid "class"
+msgstr ""
+
+msgid "initial"
+msgstr ""
+
+msgid "desc"
+msgstr ""
+
+msgid "onchange"
+msgstr ""
+
+msgid "opts"
+msgstr ""
+
+#: Extra TC6 documentation strings
+msgid "0 - current time, 1 - load time from PDT"
+msgstr ""
+
+msgid "Preset datetime"
+msgstr ""
+
+msgid "Copy of IN"
+msgstr ""
+
+msgid "Datetime, current or relative to PDT"
+msgstr ""
+
+msgid ""
+"The real time clock has many uses including time stamping, setting dates and"
+" times of day in batch reports, in alarm messages and so on."
+msgstr ""
+
+msgid "1 = integrate, 0 = hold"
+msgstr ""
+
+msgid "Overriding reset"
+msgstr ""
+
+msgid "Input variable"
+msgstr ""
+
+msgid "Initial value"
+msgstr ""
+
+msgid "Sampling period"
+msgstr ""
+
+msgid "NOT R1"
+msgstr ""
+
+msgid "Integrated output"
+msgstr ""
+
+msgid ""
+"The integral function block integrates the value of input XIN over time."
+msgstr ""
+
+msgid "0 = reset"
+msgstr ""
+
+msgid "Input to be differentiated"
+msgstr ""
+
+msgid "Differentiated output"
+msgstr ""
+
+msgid ""
+"The derivative function block produces an output XOUT proportional to the "
+"rate of change of the input XIN."
+msgstr ""
+
+msgid "0 - manual , 1 - automatic"
+msgstr ""
+
+msgid "Process variable"
+msgstr ""
+
+msgid "Set point"
+msgstr ""
+
+msgid "Manual output adjustment - Typically from transfer station"
+msgstr ""
+
+msgid "Proportionality constant"
+msgstr ""
+
+msgid "Reset time"
+msgstr ""
+
+msgid "Derivative time constant"
+msgstr ""
+
+msgid "PV - SP"
+msgstr ""
+
+msgid "FB for integral term"
+msgstr ""
+
+msgid "FB for derivative term"
+msgstr ""
+
+msgid ""
+"The PID (proportional, Integral, Derivative) function block provides the "
+"classical three term controller for closed loop control."
+msgstr ""
+
+msgid "0 - track X0, 1 - ramp to/track X1"
+msgstr ""
+
+msgid "Ramp duration"
+msgstr ""
+
+msgid "BUSY = 1 during ramping period"
+msgstr ""
+
+msgid "Elapsed time of ramp"
+msgstr ""
+
+msgid "The RAMP function block is modelled on example given in the standard."
+msgstr ""
+
+msgid ""
+"The hysteresis function block provides a hysteresis boolean output driven by"
+" the difference of two floating point (REAL) inputs XIN1 and XIN2."
+msgstr ""
+
+msgid "The SR bistable is a latch where the Set dominates."
+msgstr ""
+
+msgid "The RS bistable is a latch where the Reset dominates."
+msgstr ""
+
+msgid ""
+"The semaphore provides a mechanism to allow software elements mutually "
+"exclusive access to certain resources."
+msgstr ""
+
+msgid "The output produces a single pulse when a rising edge is detected."
+msgstr ""
+
+msgid "The output produces a single pulse when a falling edge is detected."
+msgstr ""
+
+msgid ""
+"The up-counter can be used to signal when a count has reached a maximum "
+"value."
+msgstr ""
+
+msgid ""
+"The down-counter can be used to signal when a count has reached zero, on "
+"counting down from a preset value."
+msgstr ""
+
+msgid ""
+"The up-down counter has two inputs CU and CD. It can be used to both count "
+"up on one input and down on the other."
+msgstr ""
+
+msgid "first input parameter"
+msgstr ""
+
+msgid "second input parameter"
+msgstr ""
+
+msgid "first output parameter"
+msgstr ""
+
+msgid "second output parameter"
+msgstr ""
+
+msgid "internal state: 0-reset, 1-counting, 2-set"
+msgstr ""
+
+msgid ""
+"The pulse timer can be used to generate output pulses of a given time "
+"duration."
+msgstr ""
+
+msgid ""
+"The on-delay timer can be used to delay setting an output true, for fixed "
+"period after an input becomes true."
+msgstr ""
+
+msgid ""
+"The off-delay timer can be used to delay setting an output false, for fixed "
+"period after input goes false."
+msgstr ""
--- a/i18n/Beremiz_hu_HU.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_hu_HU.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,17 +1,16 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Gábor Véninger <veninger.gabor@gmail.com>, 2017
+#, fuzzy
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"
-"Last-Translator: Gábor Véninger <veninger.gabor@gmail.com>, 2017\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Krisztián Veress <krive001@gmail.com>, 2018\n"
"Language-Team: Hungarian (Hungary) (https://www.transifex.com/beremiz/teams/75746/hu_HU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +18,7 @@
"Language: hu_HU\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -44,153 +43,158 @@
"\n"
"Nyomonkövetés:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr "Külső"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr "Be/Ki"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr "Bemenet"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr "Helyi"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr "Kimenet"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr "Ideiglenes"
-#: ../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 " és %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr "létrehozás hibás !\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "\"%s\" Adat típus nem létezik !!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "\"%s\" POU már létezik !!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "\"%s\" POU nem létezik !!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" sajátmaga nem használható!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "\"%s\" konfiguráció már létezik!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "\"%s\" konfiguráció már létezik !!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr ""
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "\"%s\" adat típus már létezik!"
-#: ../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 "A(z) \"%s\" elem ehhez a POU-hoz már létezik!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "A(z) \"%s\" könyvtár egy nem érvényes Beremiz projekt\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 "A(z) \"%s\" egy kulcsszó. Nem használható!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "A(z) \"%s\" egy nem érvényes érték!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "A(z) \"%s\" egy nem érvényes könyvtár!"
-#: ../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 "A(z) \"%s\" egy nem érvényes azonosító!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr ""
"A(z) \"%s\" már használatban van egy vagy több POU-ban. Biztos folytatni "
"akarja?"
-#: ../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 már létezik!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "\"%s\" lépés már létezik!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "\"%s\" érték már definiálva van!"
-#: ../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\" érték nem valós tömb dimenzió!"
-#: ../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"
@@ -199,209 +203,205 @@
"\"%s\" érték nem valós tömb dimenzió!\n"
"A jobb oldali érték nagyobb kell legyen mint a bal oldali."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr ""
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr ""
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr ""
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr ""
-#: ../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 Adat Típusok"
-#: ../PLCControler.py:1516
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
msgstr "%s POU-k"
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr "%s Profil"
-#: ../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 testnek nincsenek példányai!"
-#: ../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 testben nincs szöveg!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Elem Hozzáadása"
-#: ../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 "&Bezárás"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&Konfiguráció"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&Adat Típus"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Törlés"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Nézet"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Szerkesztés"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&Fájl"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Funkció"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Segítség"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&Licensz"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Program"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Tulajdonságok"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&Legutóbbi Projektek"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Erőforrás"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}' - {a2} egyezés a projektben"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} egyezések a projektben"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr ""
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d találat)"
-#: ../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 ""
+
+#: ../controls/LogViewer.py:287
msgid "1d"
msgstr "1n"
-#: ../controls/LogViewer.py:280
+#: ../controls/LogViewer.py:288
msgid "1h"
msgstr "1ó"
-#: ../controls/LogViewer.py:281
+#: ../controls/LogViewer.py:289
msgid "1m"
msgstr "1p"
-#: ../controls/LogViewer.py:282
+#: ../controls/LogViewer.py:290
msgid "1s"
msgstr "1mp"
-#: ../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 ""
-#: ../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 \"%s\" nevű POU már létezik!"
@@ -411,26 +411,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "Egy helyet ki kell választani!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "Egy feladat ezzel a névvel már létezik!"
-#: ../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 "Egy változó a \"%s\" névvel már létezik ebben a POU-ban!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "Egy változó a \"%s\" névvel már létezik!"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "Névjegy"
@@ -438,127 +438,127 @@
msgid "Absolute number"
msgstr "Abszolut érték"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Művelet"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "Művelet Blokk"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Művelet Név"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Művelet Név:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "Művelet név %s nem létezik!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "Műveletek"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "Műveletek:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "Aktív"
-#: ../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 "Hozzáadás"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
msgstr "Művelet hozzáadás"
-#: ../features.py:32
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr ""
"A beazonosított változók szinkronizált eléréséhez tartózó C forráskód "
"hozzáadása"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "Konfiguráció Hozzáadás"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "Adattípus Hozzáadás"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Elágazás Hozzáadás"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "IP Hozzáadás"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "POU Hozzáadás"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "Aszinkron futású Python kód Hozzáadás"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "Erőforrás hozzáadás"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "Átváltás Hozzáadás"
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr "Vezeték Szakasz Hozzáadás"
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr "Új Kezdeti Lépés Hozzáadás"
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr "Új elugrás hozzáadás"
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
msgstr "Új lépés hozzáadás"
-#: ../features.py:34
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
msgstr "Egyszerű WxGlade alapú GUI hozzáadás"
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "Művelet hozzáadás"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "Elem hozzáadás"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "Új példány hozzáadás"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Szolga hozzáadás"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "Feladat hozzáadás"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "Változó hozzáadás"
@@ -566,44 +566,44 @@
msgid "Addition"
msgstr "Összeadás"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "További funkció blokkok"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "Blokk méret beállítás"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "Elrendezés"
-#: ../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 "Minden"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "Minden fájl (*.*)|*.*|CSV files (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "Már csatalakoztatva van. Kérem szétcsatlakoztatni.\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "Ez az elem név már létezik ebben a struktúrában: \"%s\""
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "Ilyen nevű példány már létezik!"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr "A névváltoztatás elfogadása az összes ilyen névre."
@@ -623,8 +623,8 @@
msgid "Arithmetic"
msgstr "Aritmetika"
-#: ../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 "Tömb"
@@ -632,45 +632,37 @@
msgid "Assignment"
msgstr "Hozzárendelés"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "Legalább egy változót vagy kifejezést ki kell választani!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Szerző"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Szerző Neve (opcionális):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Viszafele"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr ""
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr ""
-
-#: ../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 ""
-#: ../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 "Alaptípus:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "Alaptípusok"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -702,85 +694,85 @@
msgid "Bitwise inverting"
msgstr "Bitenkénti invertálás"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "Blokk"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "Blokk Tulajdonságok"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "Blokk neve"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "Alja"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr ""
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr ""
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr ""
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr ""
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr ""
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr ""
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
-msgstr ""
-
-#: ../ProjectController.py:1155
+msgstr "C kód"
+
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
-msgstr ""
-
-#: ../targets/toolchain_makefile.py:122
+msgstr "C kód sikeresen elkészűlt. \n"
+
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:192
+msgstr "C kód készítése sikertelen.\n"
+
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
-msgstr ""
-
-#: ../features.py:32
+msgstr "C fordítás a %s aikertelen.\n"
+
+#: ../features.py:33
msgid "C extension"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:71
+msgstr "C kiterjesztés"
+
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:52
+msgstr "K$reditek"
+
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
msgstr "CANOpen hálózat"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "CANOpen szolga"
@@ -788,34 +780,34 @@
msgid "CANopen support"
msgstr "CANOpen támogatás"
-#: ../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 ""
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr ""
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr ""
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr ""
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr ""
@@ -825,46 +817,50 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr ""
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr ""
-#: ../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 ""
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
+#: ../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:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "Közép"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "IP cím megváltoztatása a hozzákötött interfészen"
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "Név megváltoztatása"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "POU típus megváltoztatása"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "Port szám megváltoztatása"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "Munkakönyvtár megváltoztatása"
@@ -872,115 +868,119 @@
msgid "Character string"
msgstr "Karakter sztring"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "Válasszon SVG fájlt"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "Válasszon mappát a projekt mentéshez"
-#: ../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 "Válasszon fájlt"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../BeremizIDE.py:900
msgid "Choose a project"
msgstr "Válasszon projektet"
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
msgstr "Válasszon értéket a %s-nek:"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "Válasszon munkakönyvtárat"
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr "A kiválasztott mappa nem tartalmaz érvényes projektet!"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr "A kiválasztott mappa nem üres. Nem használható új projekthez."
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "Osztály"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "Osztály szűrő:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "Osztály:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "Takarítás"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "Log üzenetek kitakarítása"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "Project fordítás mappa takarítása"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "Fordítási mappa kitakarítása\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "Hibák törlése"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "Végrehajtási Sorrend Törlése"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "Bezárás"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Alkalmazás Bezárás"
-#: ../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 "Projekt Bezárás"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "Fül Bezárás"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "Tekercs"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Megjegyzés"
-#: ../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 "Közösségi támogatás"
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "Vállalat Neve"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "Vállalat Neve (kötelező):"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "Vállalat Weboldal (opcionális):"
@@ -988,7 +988,7 @@
msgid "Comparison"
msgstr "Összehasonlítás"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "IEC Program fordítása C kódra...\n"
@@ -996,93 +996,93 @@
msgid "Concatenation"
msgstr "Összefűzés"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "Konfiguráció"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "Változók konfigurálása"
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr "Konfiguráció"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr "Konfigurációk"
-#: ../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 "Erősítse meg vagy változtassa meg a változó nevét"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "Kapcsolódás"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "Kapcsolódás a cél PLC-hez"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "Az URI: %s csatlakoztatva"
-#: ../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 "Kapcsolat"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "Kapcsolat Tulajdonságok"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "Kapcsolódás megszakítva!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "Kapcsolódás a %s-hez nem sikerült!\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 "Kapcsolat elvesztve!\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "Kapcsolódás a '%s'-hez nem sikerült.\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "Csatlakozó"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "Csatlakozók:"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "Konzol"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "Konstans"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr "Kapcsolat"
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "Tartalom leírása (opcionális)"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "Folytatás"
@@ -1102,20 +1102,20 @@
msgid "Conversion to time-of-day"
msgstr "Konvertálás napszakká (TOD)"
-#: ../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 "Másolás"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "POU másolás"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "Másolás bal oldali mappából jobbra"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "Másolás jobb oldali mappából balra"
@@ -1123,137 +1123,133 @@
msgid "Cosine"
msgstr "Koszinusz"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
"{a3}\n"
msgstr ""
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr "Régi %s fájlt nem lehet beimportálni."
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
#, python-brace-format
msgid ""
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Nem POU típusú objektum beillesztése nem lehetséges."
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "PLC nem indult el!\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "PLC nem állt le!\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Hibakereső nem áll le.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "HMI létrehozása"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "Új Program Szervezési Egység (POU) létrehozása"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "Új művelet létrehozása"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "Új művelek blokk létrehozása"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "Új blokk létrehozása"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "Új ág létrehozása"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "Új tekercs létrehozása"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "Új megjegyzés létrehozása"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "Új kapcsolat léterhozása"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "Új kötés létrehozása"
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr "Új leágazás létrehozása"
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr "Új leágazás vagy összefutás léterhozása"
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "Új kezdeti lépés létrehozása"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "Új ugrás létrehozása"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "Új áramsin létrehozása"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "Új rung létrehozása"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "Új lépés létrehozása"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "Új átmenet létrehozása"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "Új változó létrehozása"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "Köszönet"
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr "Aktuális munka könyvtár:"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "Kivágás"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "Ciklikus"
@@ -1265,19 +1261,19 @@
msgid "DEPRECATED"
msgstr "ELAVULT"
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr "DS-301 Profil"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "DS-302 Profil"
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr "Adattípus"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "Adattípusok"
@@ -1298,68 +1294,60 @@
msgid "Date subtraction"
msgstr "Dátum kivonás"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "Napok:"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
"Hibakeresés nem egyezik a PLC-vel - megállítás / letöltés / újraindítás "
"szükséges, hogy engedélyezve legyen.\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "Példány hibakeresése"
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr "Hibakeresés: %s"
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr "Hibakeresés: Ismeretlen változó '%s'\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Hibakeresés: Nem támogatott típus '%s'\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "Hibakereső"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Hibakereső letiltva\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "Hibakereső kész\n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Hibakereső megállt.\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "Törlés"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "Elágazás törlése"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "File törlése"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "Vezeték szakasz törlése"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "Elem törlése"
@@ -1367,47 +1355,47 @@
msgid "Deletion (within)"
msgstr "Törlés (ebben)"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr ""
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr "Leírás"
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr "Leírás:"
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "Méretek:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr "Irány"
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "Irány:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "Közvetlenül"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "Szétkapcsolás"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "Szétkapcsolás PLC-ről"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "Szétkapcsolva"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "Elágazás"
@@ -1415,120 +1403,120 @@
msgid "Division"
msgstr "Osztás"
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr "Biztos, hogy törölni akarja a '%s' fájlt?"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "Dokumentáció"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "Kész"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Időtartam"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "EDS fájlok (*.eds)|*.eds|Minden fájl|*.*"
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "Blokk Szerkesztése"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "Tekercs Értékének Szerkesztése"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "Kötés Értékének Szerkesztése"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr "Időtartam Szerkesztése"
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr "Lépés Szerkesztése"
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "WxWidgets GUI szerkesztése WXGlade segítségével"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "Művelet blokk tulajdonságok szerkesztése"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "Tömb tulajdonságok szerkesztése"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "Megjegyzés szerkesztése"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "Fájl szerkesztése"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "Elem szerkesztése"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "Elugrás céljának szerkesztése"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr "PLCGenerator által létrehozott nyers IEC kód szerkesztése"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "Lépés név szerkesztése"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "Váltás szerkesztése"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "Szerkesztő Eszköztár"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "Szerkesztő kiválasztás"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "Elemek :"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "Üres"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Vissza/Újra Engedélyezés"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "Adjon meg egy nevet"
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "Adjon meg egy port számot"
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "Adja az kötéshez használt interfész IP címét"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Felsorolva"
@@ -1536,37 +1524,36 @@
msgid "Equal to"
msgstr "Egyenlő"
-#: ../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 "Hiba"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
@@ -1574,12 +1561,12 @@
"Hiba: Legalább egy konfiguráció és egy erőforrást deklarálni kell a PLC-"
"ben!\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Hiba: IEC-ről C-re fordítás hiba %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1588,37 +1575,44 @@
"Hiba az ST/IL/SFC kód generátorban:\n"
"%s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "Hiba a \"%s\" mentése közben\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr "Hiba: Szolga exportálás nem sikerült\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 ""
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "Hiba: Nincs Master létrehozva\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "Hiba: Nincs lefordított PLC\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "Végrehajtás vezérlés:"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "Végrehajtási Sorrend:"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "Kísérleti web alapú HMI"
@@ -1630,77 +1624,77 @@
msgid "Exponentiation"
msgstr "Hatvány"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "CanOpen slave exportálása EDS fájlba"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr "Grafikus értékek vágólapra másolása"
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr "Szolga exportálása"
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "Kifejezés:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "Külső"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "A megtalált változók kinyerése...\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 "Sikertelen: Le kell fordítani az átküldés előtt.\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "Lefutóél"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "Hiba: fordító nem található.\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr "%s Letöltése"
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr ""
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr ""
-#: ../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 "Keresés"
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr "Következő keresése"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr "Előző keresése"
@@ -1708,93 +1702,89 @@
msgid "Find position"
msgstr "Pozíció keresése"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr "Keresés:"
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "Futásidejű program kényszerítet újratöltése\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "Kényszerített érték"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "Változó érték kényszerítése"
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr "Előre"
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "Funkció"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "Funkcióblokk"
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr "Funkcióblokk"
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr "Funkcióblokk Típusok"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr "Funkcióblokkok"
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr "Funkcióblokkok nem használhatók a függvényekben!"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "Funkcióblokk \"%s\" nem illeszthető be a függvénybe!!!"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "Függvények"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr "Program Létrehozás"
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "SoftPLC IEC-61131 ST/IL/SFC kód létrehozása...\n"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Global"
msgstr "Globális"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
msgid "Go to current value"
msgstr "Menj az aktuális értékhez"
-#: ../controls/ProjectPropertiesPanel.py:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "Grafika"
@@ -1806,110 +1796,114 @@
msgid "Greater than or equal to"
msgstr "Nagyobb vagy egyenlő"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "Rács Felbontás:"
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr "HTTP interfész port:"
-#: ../controls/ProjectPropertiesPanel.py:121
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr "Magasság:"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr "Saját Könyvtár:"
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "Vízszintes:"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr "Órák:"
-#: ../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 cím nem valós!"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "SVG importálás"
-#: ../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 "BeKi"
-#: ../editors/Viewer.py:431
+#: ../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 "Inaktív"
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr "\"{a1}\" és \"{a2}\" nem kompatibilis adattípusok."
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "\"%s\" és \"BOOL\" nem kompatibilis adatméretűek."
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr "\"{a1}\" és \"{a2}\" nem kompatibilis méretűek"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "Kijelző"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr "Kezdeti"
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr "Kezdeti lépés"
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "Kezdőérték"
-#: ../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 "Kezdőérték:"
-#: ../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 "Bemenet"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "Bemenetek:"
@@ -1917,116 +1911,126 @@
msgid "Insertion (into)"
msgstr "Beszúrás (ide)"
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "Az %d azonosító nem létezik!"
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr "Példányok:"
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr "Interfész"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr "Megszakítás"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr "Intervallum"
-#: ../PLCControler.py:2331
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "Érvénytelen plcopen elem(ek)!!!"
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr ""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
msgstr ""
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "Ugrás"
-#: ../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 "A %d azonosítójú létra elem több rung-ban van használva."
-#: ../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 "Nyelv"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "Nyelv (opcionális):"
-#: ../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 "Nyelv:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
"A legutolsó fordítás már megegyezik az aktuális céllal. Mindenképpen "
"átküldésre kerül...\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "WX GUI elemző indítása"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "Élő Python shell indítása"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "Bal"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "Bal ÁramSin"
@@ -2042,11 +2046,11 @@
msgid "Less than or equal to"
msgstr "Kisebb vagy egyenlő"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "Könyvtár"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "Licensz"
@@ -2054,27 +2058,27 @@
msgid "Limitation"
msgstr "Határolás"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr "Összefűzés:\n"
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "Helyi"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "Helyi bejegyzések"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr "Helyi szolgáltatás felderítése nem sikerült!\n"
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "Hely"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr "Elérhető helyek:"
@@ -2082,12 +2086,12 @@
msgid "Logarithm to base 10"
msgstr "10-es alapú logaritmus"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "MDNS feloldás nem sikerült a '%s'-ra\n"
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "Változó Hozzárendelés"
@@ -2095,11 +2099,15 @@
msgid "Map located variables over CANopen"
msgstr "CANopen buszon feldezett változók hozzárendelése"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr "Fő"
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr ""
@@ -2108,29 +2116,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 "Memória"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr "Menü Eszköztár"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "Mikroszekundum:"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "Középső"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "Ezredmásodperc"
@@ -2138,78 +2146,82 @@
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 "Perc:"
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "Egyéb"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "Módosító:"
-#: ../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 ""
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "Tevékenység mozgatás le"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "Tevékenység mozgatás fel"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "Mozgatás le"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "Mozgatás fel"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "Elem mozgatás fel"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "Elem mozgatás le"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "Példány mozgatás fel"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "Feladat mozgatás le"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "Feladat mozgatás fel"
-#: ../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 "Nézet mozgatása"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "Mozgatás fel"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "Váltózó mozgatás le"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "Változó mozgatás fel"
@@ -2221,26 +2233,26 @@
msgid "Multiplication"
msgstr "Szorzás"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "Sajátgép:"
-#: ../dialogs/DiscoveryDialog.py:92
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
msgstr "NÉV"
-#: ../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 "Név"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "Név nem lehet üres!"
-#: ../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 "Név:"
@@ -2248,46 +2260,46 @@
msgid "Natural logarithm"
msgstr "Természetes alapú logaritmus"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "Negált"
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
#: ../Beremiz_service.py:580
-msgid "Nevow Web service failed. "
-msgstr ""
-
-#: ../Beremiz_service.py:556
msgid "Nevow/Athena import failed :"
msgstr ""
-#: ../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 "Új"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "Új elem"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "Nincs módosító"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "Nincs letöltendő PLC (sikeres volt a fordítás?)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "POU \"%s\"-ban nincs semmi definiálva."
-#: ../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 ""
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2295,60 +2307,60 @@
"Dokumentáció nem elérhető\n"
"Hamarosan érkezik."
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr ""
-#: ../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 ""
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "Nincs elérhető keresési eredmény."
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "Nincs ilyen SVG fájl: %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 ""
-#: ../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 ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr ""
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr ""
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr ""
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr "Nem megőrzött"
-#: ../dialogs/LDElementDialog.py:75
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
msgstr "Normál"
-#: ../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 ""
@@ -2357,7 +2369,7 @@
msgid "Not equal to"
msgstr "Nem egyenlő"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Szekvenciák száma:"
@@ -2365,24 +2377,24 @@
msgid "Numerical"
msgstr "Numerikus"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr "Változás esetén"
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "Csak elemek"
-#: ../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 "Megnyit"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "Inkscape Megnyitás"
-#: ../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."
@@ -2391,67 +2403,67 @@
"környezet megvalósítva folyamatosan növekvő számű bővítményekkel, és "
"rugalmas futásidejű PLC-vel."
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr "Fájlkezelő megnyitása a projektek kezeléséhez"
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "wxGlade Megnyitása"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr "Beállítás"
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr "Beállítások"
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "Szervezet (opcionális)"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "Másik Profil"
-#: ../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 "Kimenet"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO Fogadás"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "PDO Küldés"
-#: ../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 kód létrehozás nem sikerült!\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "A PLC üres vagy már el van indítva."
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "PLC nincs elindítva."
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
@@ -2460,15 +2472,15 @@
"PLC szintaktikai hiba az {a1} sorban:\n"
"{a2}"
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "PLCOpen fájlok (*.xml)|*.xml|Minden fájl|*.*"
-#: ../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"
@@ -2478,205 +2490,205 @@
"\n"
"A beremiz egy ..."
-#: ../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 Név"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "POU Név:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "POU Típus"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "POU Típus:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr ""
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "Oldalbeállítás"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "Oldalméret (opcionális):"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "Oldal: %d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr "Szülő példány"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "Beillesztés"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "POU beillesztés"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "Keresési minta:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "Tüske száma:"
-#: ../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 "Kérem válasszon célt"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr "Kérem adja meg a blokk nevét"
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
msgid "Please enter comment text"
msgstr "Kérem adja meg a megjegyzés szövegét"
-#: ../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 "Kérem adja meg a lépés nevét"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "Kérem adja meg a szöveget"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "Kérem adjon értéket a '%s' változónak:"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "Port száma 0 és 65535 közé kell essen."
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "Port száma egész szám kell legyen!"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr "Áramsin"
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "Áramsin Tulajdonságok"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "Előnézet"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "Előnézet:"
-#: ../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 "Nyomtatás"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "Nyomtatási kép"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "Prioritás"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "Prioritás:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "PLC indítási hiba: hiba %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "Terméknév"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "Terméknév (kötelező):"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "Termék kiadás (opcionális):"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr "Termék Verzió"
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "Termék Verzió (kötelező):"
-#: ../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 sikeresen létrehozva!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "Programok"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr "A program nem használható más POU-k által!"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "Projekt"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr "Projekt '%s':"
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr "Projekt Fájlok"
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr "Projektnév"
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "Projektnév (kötelező):"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "Projekt Verzió (opcionális):"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2684,90 +2696,90 @@
"Projekt fájl szintaktikai hiba:\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "Projekt tulajdonságok"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr "Projekt fa elrendezése nem egyezik meg a confnode.xml -el {a1}!={a2}"
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr "Terjesztési Név"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "Tulajdonságok"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr "Kiadási szolgáltatás a helyi hálózaton"
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr ""
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr ""
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr "Python kód"
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr "Píthon fájl"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr ""
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr "Kilépés"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "Tartomány:"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr "Nyers IEC kód"
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr "Valóban törli a '%s' csomópontot?"
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
msgstr "Újra"
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
msgstr "Referencia"
-#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr "Frissítés"
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "Reguláris kifejezés"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr "Reguláris kifejezések"
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr ""
@@ -2775,56 +2787,56 @@
msgid "Remainder (modulo)"
msgstr "Maradék (modulo)"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr "Node %s eltávolítása"
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr "Adattípus eltávolítása"
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr "POU eltávolítása"
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr "Művelel eltávolítása"
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr "Elem eltávolítása"
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr "Bal oldali mappából a fájl eltávolítása"
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr "Példány eltávolítása"
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "Szolga eltávolítása"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr "Feladat eltávolítása"
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr "Változó eltávolítása"
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "Átnevezés"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr "Fájl lecserélése"
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr ""
@@ -2832,43 +2844,43 @@
msgid "Replacement (within)"
msgstr ""
-#: ../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 "Végrehajtási sorrend törlése"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr "Perspektíva törlése"
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr "Keresési eredmény törlése"
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "Erőforrások"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "Megőriz"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "Visszatérési Típus:"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "Jobb"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "Jobb Áramsin"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "Felfutóél"
@@ -2884,114 +2896,114 @@
msgid "Rounding up/down"
msgstr "Kerekítés fel/le"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "Fut"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr "Futás idejú IO bővítmények C kódjának létrehozása nem sikerült!\n"
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr "Futás idejű könyvtárak C forráskódjának generálása nem sikerült!\n"
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr ""
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr ""
-#: ../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 ""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr ""
-#: ../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 ""
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr ""
-#: ../features.py:35
+#: ../features.py:36
msgid "SVGUI"
msgstr ""
-#: ../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 "Mentés"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "Mentés másként..."
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "Mentés mint"
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr "Mentési elérési út ugyanaz mint a projekt elérési újta!\n"
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr ""
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "Keresés"
-#: ../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 "Keresés a Projektben"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "Másodpercek:"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "Mindet kiválaszt"
-#: ../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 "Változó osztály kiválasztás:"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "Szerkesztő kiválasztás:"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "Példány kiválasztás"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "Objektum kiválasztás"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr ""
"A kiválasztott könyvtálr már tartalmaz egy másik projektet. Felülírjam?\n"
@@ -3000,23 +3012,23 @@
msgid "Selection"
msgstr "Kiválasztás"
+#: ../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:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "Szolgáltatás Felfedezés"
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "Elérhető szolgáltatások:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "Beállítás"
@@ -3028,27 +3040,27 @@
msgid "Shift right"
msgstr "Jobbra léptetés"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "PLCGenerator által létrehozott IEC kód mutatása"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "Master mutatása"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "Mutassa a config_utils által létrehozott Master-t"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "Kód mutatása"
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
#: ../dialogs/SFCDivergenceDialog.py:67
-msgid "Simultaneous Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Simultaneous Divergence"
msgstr ""
@@ -3056,15 +3068,15 @@
msgid "Sine"
msgstr "Szinusz"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "Egyes"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "Forrás nem változott, nincs újrafordítás.\n"
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3075,60 +3087,56 @@
msgid "Square root (base 2)"
msgstr ""
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr ""
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "PLC indítása"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "Fordítás indítása a %s-ban\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "Elindult"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "PLC elindul\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "Státusz Eszköztár"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "Lépés"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "Állj"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "PLC Állj"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "Futó PLC megállítása"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "Megállt"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Hibakereső megállítása...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "Struktúra"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "Altartomány"
@@ -3136,19 +3144,19 @@
msgid "Subtraction"
msgstr "Kivonás"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "Sikeres fordítás.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr "Perspektíva váltás"
-#: ../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 "Szintaktikai hiba a keresési reguláris kifejezés mintában."
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "TÍPUS"
@@ -3156,19 +3164,19 @@
msgid "Tangent"
msgstr "Tangens"
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr "Feladat"
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr "Feladatok:"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr "Ideiglenes"
-#: ../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"
@@ -3188,39 +3196,39 @@
"Itt lehet regisztrálni:\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"
"Do you want to replace it?"
msgstr ""
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr ""
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "Változások történtek, menteni akarja?"
-#: ../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 ""
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
msgstr ""
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "Ez az opció még nem létezik!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr "Ütem: %d"
@@ -3258,94 +3266,94 @@
msgid "Time-of-day subtraction"
msgstr "Napszak TOD kivonás"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr "Érték átbillentés"
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "Felső"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "Átvitel"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "PLC átvitel"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "Átvitel sikeresen befejezve.\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "Átvitel nem sikerült\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 "Átváltás"
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
"its name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr ""
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr ""
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr ""
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr ""
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr ""
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "Triggerelés"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr ""
-#: ../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 "Típus"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr ""
-#: ../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 ""
@@ -3354,269 +3362,315 @@
msgid "Type conversion"
msgstr "Típus konvertálás"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr ""
-#: ../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 "Típus:"
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../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:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr ""
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr ""
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "Vissza"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "Ismeretlen"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr ""
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr "Névtelen"
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "Névtelen %d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr ""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "Felhasználói Adat Típus"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "Érték"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "Értékek:"
-#: ../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 "Változó"
-#: ../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 ""
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "Változó Tulajdonságok"
-#: ../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 "Változó osztály"
-#: ../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 "Változó nem ehhez a POU-hoz tartozik!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "Változó:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "Változók"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "Függőleges"
-#: ../Beremiz_service.py:588
+#: ../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:91
+#: ../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:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr ""
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr ""
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../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 "WXGLADE GUI"
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "Figyelmeztetés"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "Teljes Projekt"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "Szélesség:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr ""
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Írta"
-#: ../features.py:34
+#: ../features.py:35
msgid "WxGlade GUI"
msgstr ""
-#: ../svgui/svgui.py:142
+#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
msgstr ""
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
msgstr ""
-#: ../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 ""
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr ""
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr ""
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr ""
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr ""
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr ""
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr ""
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr ""
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr ""
@@ -3632,24 +3686,24 @@
msgid "string right of"
msgstr ""
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr ""
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr ""
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr ""
-#: ../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 ""
@@ -3714,6 +3768,72 @@
msgid "Win32"
msgstr "Win32"
+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 ""
@@ -3890,7 +4010,7 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
+"exclusive access to certain resources."
msgstr ""
msgid "The output produces a single pulse when a rising edge is detected."
--- a/i18n/Beremiz_it_IT.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_it_IT.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,17 +1,16 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Luca Magnabosco <magnabosco.luca@gmail.com>, 2017
+#, fuzzy
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"
-"Last-Translator: Luca Magnabosco <magnabosco.luca@gmail.com>, 2017\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2018\n"
"Language-Team: Italian (Italy) (https://www.transifex.com/beremiz/teams/75746/it_IT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +18,7 @@
"Language: it_IT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -34,151 +33,156 @@
"Traceback:\n"
msgstr ""
-#: ../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 " e %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr " generazione fallita!\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "Il tipo di dato \"%s\" non esiste !!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "La POU \"%s\" esiste già !!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "La POU \"%s\" non esiste !!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" non può utilizzare se stesso!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "La config \"%s\" esiste già!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "La configurazione \"%s\" esiste già !!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr ""
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "Il tipo di dato \"%s\" esiste già!"
-#: ../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 "L'elemento \"%s\" per questa pou esiste già!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "La cartella \"%s\" non è un valido progetto Beremiz\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\" è una parola chiave. Non può essere usata!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" è un valore non valido!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" non è una cartella valida!"
-#: ../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\" non è un identificatore valido!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr "%s\" è utilizzato da una o più POU. Vuoi continuare?"
-#: ../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 "Il POU \"%s\" esiste già!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "Il passo \"%s\" esiste già!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "Il valore \"%s\" è già definito!"
-#: ../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 "Il valore \"%s\" non è una dimensione valida per un array!"
-#: ../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"
@@ -187,200 +191,196 @@
"Il valore \"%s\" non rappresenta una dimensione valida per un array!\n"
"Il valore di destra deve essere maggiore del valore di sinistra."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "Funzione \"{a1}\" cancellata nel POU \"{a2}\": Nessun input connesso"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" è già utilizzato da \"{a2}\"!"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "La risorsa \"{a1}\" esiste già nella configurazione di \"{a2}\" !!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "La risorsa \"{a1}\" non esiste nella configurazione di \"{a2}\" !!!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
msgstr "%03g ms"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
msgstr "%d d"
-#: ../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 "%d h"
-#: ../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 "%d m"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
#, python-format
msgid "%dms"
msgstr "%d ms"
-#: ../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 "%d s"
-#: ../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 Profilo"
-#: ../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 "Il corpo di %s non contiene istanze!"
-#: ../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 "Il corpo di %s non contiene testo!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Aggiungi Elemento"
-#: ../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 "&Chiudi"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&Configurazione"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&Data Type"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Cancella"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Visualizzazione"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Modifica"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&File"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Funzione"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Help"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&Licenza"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Programma"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Proprietà"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "Progetti &recenti"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Risorse"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "{a1}' - {a2} corrispondenza nel progetto"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} corrisponde nel progetto"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' si trova in {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d corrisponde)"
-#: ../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 ""
+
+#: ../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 "
@@ -389,9 +389,9 @@
"Una POU contiene un elemento con nome \"%s\". Questo può causare un "
"conflitto.Vuoi continuare?"
-#: ../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 "Esiste già una POU con nome \"%s\"!"
@@ -401,26 +401,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "Esiste già un figlio con nome \"{a1}\" -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "Deve essere selezionata una locazione!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "Esiste già un task con lo stesso nome!"
-#: ../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 "Una variabile con \"1%s\" come nome è già esistente in questo POU!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "Esiste già una variabile con il nome \"%s\"!"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "Informazioni"
@@ -428,126 +428,126 @@
msgid "Absolute number"
msgstr "Numero assoluto"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Azione"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "Blocco azione"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Nome dell'azione"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Nome dell'azione:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "L'azione con il nome %s non esiste!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "Azioni"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "Azioni:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "Attivo"
-#: ../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 "Aggiungi"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
msgstr "Aggiungi Azione"
-#: ../features.py:32
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr ""
"Aggiungi codice C con accesso in modo sincrono alle variabili localizzate."
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "Aggiungi Configurazione"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "Aggiungi DataType"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Aggiuni un ramo divergente"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "Aggiungi IP"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "Aggiungi POU"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "Aggiungi codice Python eseguito asincronomamente"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "Aggiungi Risorsa"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "Aggiungi Transazione"
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr "Aggiungi un segmento di cavo"
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr "Aggiungi un nuovo salto iniziale"
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr "Aggiungi un nuovo salto"
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
msgstr "Aggiungi un nuovo passo"
-#: ../features.py:34
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
msgstr "Aggiungi una semplice GUI basata su WxGlade."
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "Aggiungi azione"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "Aggiungi elemento"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "Aggiungi instanza"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Aggiungi slave"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "Aggiungi task"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "Aggiungere variabile"
@@ -555,44 +555,44 @@
msgid "Addition"
msgstr "Somma"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "Blocchi funzione aggiuntivi"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "Modificare la dimensione del blocco"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "Allineamento"
-#: ../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 "Tutti"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "Tutti i file (*.*)|*.*|CSV file (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "Già connesso. Per favore disconnettere\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "Un elemento con nome \"%s\" esiste già in questa struttura!"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "Un instanza con lo stesso nome esiste già!"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr "Applicare la modifica del nome a tutte le istanze con lo stesso nome"
@@ -612,8 +612,8 @@
msgid "Arithmetic"
msgstr "Aritmetica"
-#: ../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"
@@ -621,45 +621,37 @@
msgid "Assignment"
msgstr "Assegnazione"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "Deve essere selezionata almeno una variabile o un'espressione!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Autore"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Nome autore (opzionale):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Indietro"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Nome di dominio scorretto (circolare) a"
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Nome di dominio scorretto a "
-
-#: ../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 "Dimensione della locazione sbagliata; %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 "Tipo base:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "Tipi base"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -691,85 +683,85 @@
msgid "Bitwise inverting"
msgstr "Inversione bit a bit"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "Blocco"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "Proprietà blocco"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "Nome blocco"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "Sotto"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr "Rotto"
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr ""
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "Compila"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "Cartella di compilazione già vuota\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr "Compila il progetto nella cartella di compilazione"
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "La compilazione C si è bloccata inaspettatamente !\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "Compilazione C fallita.\n"
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr "Codice C"
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr "Codice C generato con successo.\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr "Compilazione C fallita.\n"
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr "La compilazione C di %s è fallita,\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "Estensione C"
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
msgstr "Ringraziamenti"
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
msgstr "Rete CANOpen"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "Slave CANOpen"
@@ -777,34 +769,34 @@
msgid "CANopen support"
msgstr "Supporto CANopen"
-#: ../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 ""
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr ""
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr ""
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr ""
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr ""
@@ -814,46 +806,50 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr ""
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr ""
-#: ../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 ""
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
+#: ../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:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr ""
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr ""
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "Cambiare Nome"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr ""
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr ""
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr ""
@@ -861,115 +857,119 @@
msgid "Character string"
msgstr "Stringa di caratteri"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "Scegliere un file SVG"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "Scegliere una cartella per salvare il progetto"
-#: ../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 "Scegliere n file"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../BeremizIDE.py:900
msgid "Choose a project"
msgstr "Scegliere un progetto"
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
msgstr "Scegliere un valore per %s:"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "Selezionare una cartella di lavoro "
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "Classe"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "Filtro Classi:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "Classe:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "Pulisci"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "Cancella i messaggi di log"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "Pulisci la cartella di compilazione del progetto"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "Cancellando la cartella di compilazione\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "Cancella gli Errori"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "Pulisci l'Ordine di Esecuzione"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "Chiusi"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Chiudi Applicazione"
-#: ../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 "Chiudi Progetto"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "Chiudi Tab"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "Bobina"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Commento"
-#: ../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 "Supporto della community"
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "Nome dell'azienda"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "Nome dell'azienda (necessario):"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "Indirizzo web dell'azienda (opzionale):"
@@ -977,7 +977,7 @@
msgid "Comparison"
msgstr "Comparazione"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "Compilando il IEC Programma IEC in codice C...\n"
@@ -985,93 +985,93 @@
msgid "Concatenation"
msgstr "Concatenazione"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "Configurazione"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "Configurazione varialibi"
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr "Configurazione"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr "Configurazioni"
-#: ../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 "Conferma o cambia il nome della variabile"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "Connetti"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "Connetti al PLC target"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "Connetti all 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 "Connessione"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "Proprietà della Connessione"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "Connessione cancellata!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "Connessione a %s fallita!\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 "Connessione persa!\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "Connessione a '%s' fallita.\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "Connettore"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "Connettori:"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "Console"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "Costante"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr "Contatto"
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "Descrizione del contenuto (opzionale):"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "Continuazione"
@@ -1091,20 +1091,20 @@
msgid "Conversion to time-of-day"
msgstr "Conversione a 'ora del giorno'"
-#: ../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 "Copia"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "Copia POU"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "Copia il file dalla cartella di sinistra a quella di destra"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "Copia il file dalla cartella di destra a quella di sinistra"
@@ -1112,7 +1112,7 @@
msgid "Cosine"
msgstr "Coseno"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
@@ -1121,12 +1121,12 @@
"Non è possibile aggiungere un figlio \"{a1}\",tipo {a2}:\n"
"{a3}\n"
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr "Impossibile importare il vecchio file %s."
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
@@ -1135,7 +1135,7 @@
"Impossibile caricare i parametri confnode di base {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"
@@ -1144,111 +1144,107 @@
"Impossibile caricare i parametri confnode {a1} :\n"
" {a2}"
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Impossibile incollare un oggetto non-POU."
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "Impossibile avviare il PLC !\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "Impossibile arrestare il PLC !\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Impossibile arrestare il debugger.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "Creare HMI"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "Creare un nuovo POU"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "Creare una nuova azione"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "Creare un nuovo blocco azione"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "Creare un nuovo blocco"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "Creare una nuova diramazione"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "Creare una nuovo relè"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "Creare un nuovo commento"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "Creare una nuova connessione"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "Creare un nuovo contatto"
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr "Creare una nuova divergenza"
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr "Creare una nuova divergenza o convergenza"
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "Creare un nuovo passo iniziale"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "Creare un nuovo salto"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "Creare una nuova barra di alimentazione"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "Crea un nuovo anello"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "Creare un nuovo passo"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "Creare una nuova transizione"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "Creare una nuova variabile"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "Ringraziamenti"
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr "Cartella di lavoro corrente :"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "Taglia"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "Ciclico"
@@ -1260,19 +1256,19 @@
msgid "DEPRECATED"
msgstr "DEPRECATO"
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr "Profilo DS-301"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "Profilo DS-302"
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr "Tipo di dato"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "Tipi di dato"
@@ -1293,67 +1289,59 @@
msgid "Date subtraction"
msgstr "Sottrazzione della data"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "Giorni:"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
"Il debug non corrisponde al PLC arresta/trasferisci/avvia per riabilitare\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "Istanza di Debug"
-#: ../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: Variabile sconosciuta '%s'\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Debug: Tipo non supportato per il debug '%s'\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "Debugger"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Debugger disabilitato\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "Debugger pronto\n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Debugger arrestato.\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "Eliminare"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "Eliminare la ramificazione divergente"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "Eliminare File"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "Eliminare un segmento di filo"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "Eliminare elemento"
@@ -1361,47 +1349,47 @@
msgid "Deletion (within)"
msgstr "Eliminazione (nei limiti)"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "Tipo di derivazione:"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr "Descrizione"
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr "Descrizione:"
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "Dimensioni:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr "Direzione"
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "Direzione:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "Direttamente"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "Disconnetti"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "Disconnetti dal PLC"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "Disconnesso"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "Divergenza"
@@ -1409,121 +1397,121 @@
msgid "Division"
msgstr "Divisione"
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr "Vuoi veramente rimuovere il file '%s'?"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "Documentazione"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "Fatto"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Durata"
-#: ../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 "Edita il Blocco"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "Edita i valori del relè"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "Edita i valori del contatto"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr "Edita la durata"
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr "Edita il passo"
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "Edita una GUI WxWidgets con WXGlade"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "Edita le proprietà del blocco azione"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "Edita le proprietà del tipo array"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "Edita commento"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "Edita file"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "Edita elemento"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "Edita la destinazione del salto"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr ""
"Edita il codice IEC grezzo aggiunto al codice generato da PLCGenerator"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "Edita il nome del passo"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "Edita transizione"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "Editor ToolBar"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "Selezione dell'editor"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "Elementi :"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "Vuoto"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Abilita Annulla/Ripeti"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "Inserisci un nome "
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "Inserisci il numero di una porta "
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "Inserisci l'IP dell'interfaccia da collegare"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Enum"
@@ -1531,37 +1519,36 @@
msgid "Equal to"
msgstr "Uguale a"
-#: ../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 "Errore"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
@@ -1569,49 +1556,56 @@
"Errore : Almeno una configurazione ed una risorsa devono essere dichiarate "
"nel PLC!\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Errore : il compilatore da IEC a C ha ritornato il codice %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
"%s\n"
msgstr ""
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr ""
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr ""
-#: ../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 ""
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr ""
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr ""
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr ""
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr ""
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr ""
@@ -1623,77 +1617,77 @@
msgid "Exponentiation"
msgstr ""
-#: ../canfestival/canfestival.py:176
+#: ../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:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr ""
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr ""
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr ""
-#: ../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 ""
-#: ../ProjectController.py:1791
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr ""
-#: ../ProjectController.py:1070
+#: ../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:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr ""
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr ""
-#: ../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 ""
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr ""
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr ""
@@ -1701,93 +1695,89 @@
msgid "Find position"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr ""
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr ""
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr ""
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr ""
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr ""
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr ""
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr ""
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr ""
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr ""
-#: ../controls/VariablePanel.py:73
+#: ../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:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr ""
@@ -1799,110 +1789,114 @@
msgid "Greater than or equal to"
msgstr ""
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
#: ../controls/ProjectPropertiesPanel.py:135
-msgid "Grid Resolution:"
-msgstr ""
-
-#: ../runtime/NevowServer.py:182
-msgid "HTTP interface port :"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:121
msgid "Height:"
msgstr ""
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr ""
-#: ../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 ""
-#: ../dialogs/DiscoveryDialog.py:94
+#: ../dialogs/DiscoveryDialog.py:91
msgid "IP"
msgstr ""
-#: ../Beremiz_service.py:310 ../Beremiz_service.py:311
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
msgid "IP is not valid!"
msgstr ""
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr ""
-#: ../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 ""
-#: ../editors/Viewer.py:431
+#: ../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 ""
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr ""
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr ""
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr ""
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr ""
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr ""
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr ""
-#: ../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 ""
-#: ../svgui/svgui.py:48
+#: ../svgui/svgui.py:56
msgid "Inkscape"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
msgid "Inline"
msgstr ""
-#: ../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 ""
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr ""
@@ -1910,114 +1904,124 @@
msgid "Insertion (into)"
msgstr ""
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr ""
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr ""
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr ""
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr ""
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr ""
-#: ../PLCControler.py:2331
+#: ../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:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr ""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../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 ""
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
msgstr ""
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "Salto"
-#: ../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 ""
-#: ../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 "Lingua"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "Lingua (opzionale):"
-#: ../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 "Lingua:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr ""
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr ""
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "Sinistra"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "Barra di potenza di sinistra"
@@ -2033,11 +2037,11 @@
msgid "Less than or equal to"
msgstr "Inferiore o uguale a"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "Libreria"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "Licenza"
@@ -2045,27 +2049,27 @@
msgid "Limitation"
msgstr "Limitazione"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "Locale"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "Valori locali"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr ""
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr ""
@@ -2073,12 +2077,12 @@
msgid "Logarithm to base 10"
msgstr ""
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr ""
@@ -2086,11 +2090,15 @@
msgid "Map located variables over CANopen"
msgstr ""
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../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 ""
@@ -2099,29 +2107,29 @@
msgid "Maximum"
msgstr "Massimo"
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr "Massimo:"
-#: ../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 "Memoria"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "Microsecondi:"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "Centro"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "Millisecondi:"
@@ -2129,78 +2137,82 @@
msgid "Minimum"
msgstr "Minimo"
-#: ../editors/DataTypeEditor.py:226
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
msgstr "Minimo:"
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
msgstr "Minuti:"
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "Miscellanea"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "Modificatore:"
-#: ../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 ""
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "Azione muovi verso il basso"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "Azione muovi verso l'alto"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "Muovi verso il basso"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "Muovi elemento verso il basso"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "Muovi elemento verso l'alto"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "Muovi l'istanza versio il basso"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "Muovi l'istanza verso l'alto"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "Muovi il task verso il basso"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "Muovi il task verso l'alto"
-#: ../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 "Muovi la vista"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "Muovi vero l'alto"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "Muovi la variabile verso il basso"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "Muovi la variabile verso l'alto"
@@ -2212,26 +2224,26 @@
msgid "Multiplication"
msgstr "Moltiplicazione"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "Il mio Computer:"
-#: ../dialogs/DiscoveryDialog.py:92
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
msgstr "NOME"
-#: ../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 "Nome"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "Il nome non deve essere vuoto!"
-#: ../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 "Nome:"
@@ -2239,105 +2251,105 @@
msgid "Natural logarithm"
msgstr "Logaritmo naturale"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "Negato"
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
#: ../Beremiz_service.py:580
-msgid "Nevow Web service failed. "
-msgstr ""
-
-#: ../Beremiz_service.py:556
msgid "Nevow/Athena import failed :"
msgstr ""
-#: ../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 "Nuovo"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "Nuovo elemento"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "No modificatore"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr ""
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr ""
-#: ../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 ""
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
msgstr ""
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr ""
-#: ../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 ""
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr ""
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr ""
-#: ../canfestival/config_utils.py:639
+#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
msgstr ""
-#: ../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 ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr ""
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr ""
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr ""
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr ""
-#: ../dialogs/LDElementDialog.py:75
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
msgstr "Normale"
-#: ../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 ""
@@ -2346,7 +2358,7 @@
msgid "Not equal to"
msgstr "Non uguale a"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Numero di sequenze:"
@@ -2354,399 +2366,399 @@
msgid "Numerical"
msgstr "Numerico"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "Solo elementi"
-#: ../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 "Apri"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "Apri 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 ""
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "Apri wxGlade"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr "Opzione"
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr "Opzioni"
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "Organizzazione (opzionale):"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "Altro profilo"
-#: ../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 ""
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr ""
-#: ../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 "Generazione del codice PLC fallita !\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "PLC vuoto o già avviato."
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "PLC non avviato."
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
"{a2}"
msgstr ""
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr ""
-#: ../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"
"Beremiz is an "
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr "PORTA"
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "Nome POU"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "Nome POU:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "Tipo POU"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "Tipo POU:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr ""
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "Impostazioni pagina"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "Dimensione pagina ()opzionale:"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "Pagina: %d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr "Istanza padre"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "Incolla"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "Incolla POU"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "Pattern da cercare:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "Numero di pin:"
-#: ../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 "Per favore indicare un target"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr ""
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../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:799
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr ""
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr ""
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr ""
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr ""
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr ""
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr ""
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr ""
-#: ../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 "Stampa"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr ""
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "Priorità"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "Priorità:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "Problema durante l'avvio del PLC : errore %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "Nome prodotto"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "Nome prodotto (necessario):"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr ""
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr "Programma"
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr ""
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "Programmi"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "Progetto"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr ""
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr ""
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr ""
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
msgstr ""
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr ""
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr ""
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr ""
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr ""
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr ""
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr ""
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr ""
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr ""
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr ""
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr ""
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr ""
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr ""
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../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:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr ""
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr ""
@@ -2754,56 +2766,56 @@
msgid "Remainder (modulo)"
msgstr ""
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr ""
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr ""
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr ""
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr ""
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr ""
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr ""
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr ""
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr ""
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr ""
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr ""
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr ""
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr ""
@@ -2811,43 +2823,43 @@
msgid "Replacement (within)"
msgstr ""
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr ""
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr ""
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr ""
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr ""
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr ""
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr ""
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr ""
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr ""
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr ""
@@ -2863,114 +2875,114 @@
msgid "Rounding up/down"
msgstr ""
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr ""
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr ""
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr ""
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr ""
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "SFC"
msgstr ""
-#: ../PLCGenerator.py:1392
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr ""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr "La transizione SFC nel POU \"%s\" deve essere connessa."
-#: ../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 "Salva"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "Salva come"
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "Salva come"
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr "Il percorso scelto per il salvataggio è lo stesso di un progetto! \n"
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "Cerca in"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "Cerca"
-#: ../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 "Cerca nel Progetto"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "Secondi:"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "Seleziona tutto"
-#: ../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 "Seleziona una classe per la variabile:"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "Seleziona un editor:"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "Seleziona un'istanza"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "Seleziona un oggetto"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr ""
"La cartella selezionata contiene già un altro progetto. Sovrascrivere? \n"
@@ -2979,23 +2991,23 @@
msgid "Selection"
msgstr "Selezione"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "Selezione Convergenza"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "Selezione Divergenza"
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "Scoperta Servizi"
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "Servici disponibili:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "Imposta"
@@ -3007,27 +3019,27 @@
msgid "Shift right"
msgstr "Trasla a destra"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "Mostra il codice IEC generato da PLCGenerator"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "Mostra il Master"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "Mostra il Master generato da config_utils"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "Mostra il codice"
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
#: ../dialogs/SFCDivergenceDialog.py:67
-msgid "Simultaneous Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Simultaneous Divergence"
msgstr ""
@@ -3035,15 +3047,15 @@
msgid "Sine"
msgstr "Seno"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "Singolo"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "I file sorgente non sono cambiati, compilazione non necessaria.\n"
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3054,60 +3066,56 @@
msgid "Square root (base 2)"
msgstr "Radice quadrata (base 2)"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "Blocchi funzione standard"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "Avvia il PLC"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "Avvia la compilazione in %s\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "Avviato"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "Avviando il PLC\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "Barra di Stato"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "Passo"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "Arresto"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "Arresto PLC"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "Arresto del PLC in esecuzione"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "Arrestato"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Arrestando il debugger...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "Struttura"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr ""
@@ -3115,19 +3123,19 @@
msgid "Subtraction"
msgstr "Sottrazione"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "Compilato con successo.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr "Cambia layout grafico"
-#: ../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 "Errore di sintassi nella 'regular expression' usata per la ricerca!"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "TIPO"
@@ -3135,19 +3143,19 @@
msgid "Tangent"
msgstr "Tangente"
-#: ../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"
@@ -3159,7 +3167,7 @@
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
msgstr ""
-#: ../editors/FileManagementPanel.py:180
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
@@ -3168,32 +3176,32 @@
"Il file '%s' esiste già.\n"
"Vuoi sovrascriverlo?"
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "Il gruppo di blocchi deve essere coerente!"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "Ci sono dei cambiamenti, vuoi salvare?"
-#: ../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 ""
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
msgstr ""
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "Questa opzione non è ancora disponibile"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr "Tick: %d"
@@ -3231,94 +3239,94 @@
msgid "Time-of-day subtraction"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr ""
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr ""
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "Trasferimento"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "Trasferimento PLC"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "Trasferimento completato con successo.\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "Trasferimento fallito\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 "Transizione"
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
"its name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "Nome della transizione"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "Nome della transizione:"
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr ""
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "La transizione con il nome %s non esiste!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "Transizioni"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr "Tradotto da"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr ""
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr ""
-#: ../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 "Yipo"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr "Tipo e derivati"
-#: ../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 ""
@@ -3327,179 +3335,233 @@
msgid "Type conversion"
msgstr ""
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr ""
-#: ../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 "Tipo:"
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../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 "Impossibile definire il PDO mapping per il nodo %02x"
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr ""
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "Tipo di POU \"%s\" non definito"
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "Annulla"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "Sconosciuto"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "Variabile \"%s\" sconosciuta per questo POU!"
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr "Senza_nome"
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "Senza_nome%d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "Dimensione del dato non riconosciuta: \"%s\""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "Tipi definiti dall'utente"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "Tipo Utente"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "POU definiti dall'Utente"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "Valore"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "Valori:"
-#: ../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 "Variabile"
-#: ../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 ""
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "Proprietà della variabile"
-#: ../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 "Classe della variabile"
-#: ../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 "La variabile non appartiene a questo POU!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "Variabile:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "Variabili"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "Verticale:"
-#: ../Beremiz_service.py:588
+#: ../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:91
+#: ../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:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr "WAMP connessione timeout"
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr "WAMP connessione a '1%s' fallita.\n"
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr "WAMP importazione fallita:"
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../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 "WXGLADE GUI"
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../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 nel ST/IL/SFC generatore di codice:\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "Intero Progetto"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "Largezza:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr ""
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Scritto da"
-#: ../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 ?"
@@ -3507,7 +3569,7 @@
"Non il permesso di scrittura.\n"
"Aprire Inkscape comunque?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3515,7 +3577,7 @@
"Non hai il permesso di scrittura.\n"
"Aprire wxGlade comunque?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3523,7 +3585,7 @@
"Devi avere il permesso di lavorare al progetto\n"
"Vuoi lavorare con una copia del progetto ?"
-#: ../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!"
@@ -3531,73 +3593,65 @@
"Devi selezionare il blocco o il gruppo di blocchi attorno al quale il ramo "
"deve essere aggiunto."
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr "Devi selezionare un filo dove un contatto puo' essere aggiunto!"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "Devi digitare un nome!"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "Devi digitare un valore!"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "Zoom"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr "giorni"
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "errore: %s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr "uscito con stato {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 "funzione"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "funzione : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "blocco funzione"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr "ore"
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "linea: "
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr "millisecondi"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr "minuti"
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "programma"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr "secondi"
@@ -3613,24 +3667,24 @@
msgid "string right of"
msgstr "stringa a destra di"
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "aggiornamento info non disponibile."
-#: ../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}\" non può essere copiato come {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 ""
"Il file XML {a1} non rispetta lo schema XSD alla linea %{a2}:\n"
@@ -3697,6 +3751,72 @@
msgid "Win32"
msgstr "Win32"
+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 "ParametriBase"
@@ -3872,7 +3992,7 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
+"exclusive access to certain resources."
msgstr ""
msgid "The output produces a single pulse when a rising edge is detected."
--- a/i18n/Beremiz_ko_KR.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_ko_KR.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,17 +1,16 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017
+#, fuzzy
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"
-"Last-Translator: Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: IKHWAN KIM <duo821228@gmail.com>, 2017\n"
"Language-Team: Korean (Korea) (https://www.transifex.com/beremiz/teams/75746/ko_KR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +18,7 @@
"Language: ko_KR\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -33,152 +32,167 @@
"\n"
"Traceback:\n"
msgstr ""
-
-#: ../controls/VariablePanel.py:72
+"\n"
+"제어할 수 없는 예외상황 (버그)이 발생하였습니다. 버그 리포트는 다음과 같이 저장됩니다:\n"
+"(%s)\n"
+"\n"
+"해당 파일을 다음과 같은 주소로 보내주시면 감사하겠습니다:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"프로그램을 재시작해야 합니다. \n"
+"\n"
+"Traceback:\n"
+
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr " 외부"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr " 입출력"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr " 입력"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr " 로컬"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr " 출력"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr " 임시"
-#: ../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 " , %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr "생성 실패!\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "\"%s\" 존재하지 않는 데이터 타입!!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "\"%s\" POU가 이미 존재합니다!!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "\"%s\" POU가 존재하지 않습니다!!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\": 자신을 사용 할 수 없습니다!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "\"%s\" 설정(config)이 이미 존재합니다!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "\"%s\" 설정(configuration)이 이미 존재합니다!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "\"%s\" 설정이 존재하지 않습니다!!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
-msgstr "\"%s\" 데이터 타입이 이미존재합니다!"
-
-#: ../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
+msgstr "\"%s\" 데이터 타입이 이미 존재합니다!"
+
+#: ../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 "이 POU에 \"%s\" 항목이 이미 존재합니다!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "\"%s\" 베레미즈 프로젝트 폴더가 아닙니다\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\" 는 키워드 입니다. 사용 할 수 없습니다!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" 유효하지 않은 값입니다!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" 유효하지 않은 폴더입니다!"
-#: ../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\"는 유효하지 않은 식별자입니다!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
-msgstr ""
-
-#: ../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
+msgstr "\"%s\"는 하나 이상의 POU에 의해 사용되고 있습니다. 계속하시겠습니까? "
+
+#: ../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는 이미 존재합니다!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "\"%s\" 스텝이 이미 생성되었습니다!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "\"%s\" 이미 정의된 값이 있습니다!"
-#: ../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\" 값은 올바른 배열 차원이 아닙니다!"
-#: ../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"
@@ -187,209 +201,205 @@
"\"%s\" 올바른 데이터를 입력하세요!\n"
"우측의 데이터는 좌측보다 커야 합니다."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
-msgstr ""
-
-#: ../editors/Viewer.py:251
+msgstr "\"{a2}\" POU 에서 \"{a1}\" 함수가 취소되었습니다: 입력이 연결되지 않았습니다. "
+
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
-msgstr ""
-
-#: ../plcopen/plcopen.py:496
+msgstr "\"{a1}\" 은 \"{a2}\" 에 의해 사용되고 있습니다. "
+
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
-msgstr ""
-
-#: ../plcopen/plcopen.py:514
+msgstr "\"{a1}\" 리소스는 \"{a2}\" 설정에 이미 존재합니다."
+
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+msgstr "\"{a1}\" 리소스는 \"{a2}\" 설정에 존재하지 않습니다!!!"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+msgstr "%03gms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570
+msgstr "%dd"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
#, python-format
msgid "%dh"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+msgstr "%dh"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
#, python-format
msgid "%dm"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+msgstr "%dm"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
#, python-format
msgid "%dms"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+msgstr "%dms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
#, python-format
msgid "%ds"
-msgstr ""
-
-#: ../PLCControler.py:1533
+msgstr "%ds"
+
+#: ../PLCControler.py:1114
#, python-format
msgid "%s Data Types"
-msgstr ""
-
-#: ../PLCControler.py:1516
+msgstr "%s 데이터 타입"
+
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+msgstr "%s POU들"
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr "%s 프로필"
-#: ../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 인스턴스를 찾을 수 없습니다!"
-#: ../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 텍스트를 찾을 수 없습니다!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&구성원 추가"
-#: ../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 ""
-
-#: ../IDEFrame.py:356
+msgstr "&종료"
+
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&설정(Configuration)"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&데이터 타입"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&삭제"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&보기"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
-msgstr ""
-
-#: ../IDEFrame.py:335
+msgstr "&편집"
+
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&파일"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&함수"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&도움말"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
-msgstr ""
-
-#: ../IDEFrame.py:351
+msgstr "&라이센스"
+
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&프로그램"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
-msgstr ""
-
-#: ../BeremizIDE.py:219
+msgstr "&속성"
+
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&최근 프로젝트"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:239
+msgstr "&리소스"
+
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:241
+msgstr "'{a1}' - 프로젝트내에서 {a2} 건이 매치됩니다. "
+
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:90
+msgstr "'{a1}' - 프로젝트 내에서 {a2} 건이 매치됩니다."
+
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:291
+msgstr "'{a1}' 은 {a2} 위치에 있습니다.\n"
+
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
-msgstr ""
-
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409
-msgid ", "
-msgstr ", "
-
-#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94
-#: ../dialogs/PouDialog.py:116
+msgstr "(%d 건이 매치됨)"
+
+#: ../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 "- URI 종류를 선택하세요 - "
+
+#: ../controls/LogViewer.py:287
msgid "1d"
-msgstr ""
-
-#: ../controls/LogViewer.py:280
+msgstr "1d"
+
+#: ../controls/LogViewer.py:288
msgid "1h"
-msgstr ""
-
-#: ../controls/LogViewer.py:281
+msgstr "1h"
+
+#: ../controls/LogViewer.py:289
msgid "1m"
-msgstr ""
-
-#: ../controls/LogViewer.py:282
+msgstr "1m"
+
+#: ../controls/LogViewer.py:290
msgid "1s"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663
-#: ../IDEFrame.py:1682
+msgstr "1s"
+
+#: ../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 "POU 구성원의 이름 \"%s\"은 오류를 발생시킬 수 있습니다. 계속 하시겠습니까?"
-#: ../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 "이미 생성된 POU 이름입니다 : \"%s\""
@@ -397,201 +407,201 @@
#: ../ConfigTreeNode.py:424
#, python-brace-format
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:218
+msgstr "\"{a1}\" 이름을 가진 child가 이미 존재합니다 ->\"{a2}\"\n"
+
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "위치를 지정해야 합니다!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777
-#: ../IDEFrame.py:1633 ../IDEFrame.py:1646
+msgstr "같은 이름을 가진 태스크가 존재합니다!"
+
+#: ../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 "변수 \"%s\"는 이미 POU에 정의 되어 있습니다!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
-msgstr ""
-
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+msgstr "이름이 \"%s\"인 변수는 이미 존재합니다!"
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
-msgstr ""
+msgstr "대하여"
#: ../plcopen/iec_std.csv:22
msgid "Absolute number"
msgstr "절대값 연산"
-#: ../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 ""
-
-#: ../dialogs/PouActionDialog.py:82
+msgstr "액션 블록"
+
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "액션 명"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "액션 명:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "액션 명 %s는 이미 존재합니다!"
-#: ../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 ""
-
-#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101
-#: ../BeremizIDE.py:965 ../editors/Viewer.py:647
+msgstr "활성화"
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
msgid "Add"
msgstr "추가"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../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 "동기적으로 위치한 변수를 액세스하는 C 코드를 추가합니다"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "설정(Configuration) 추가"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "데이터 타입 추가"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Branch 추가"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
-msgstr ""
-
-#: ../IDEFrame.py:1864
+msgstr "IP 추가"
+
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "POU 추가"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "비동기적으로 실행되는 파이썬 코드를 추가합니다"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "리소스 추가"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "트랜지션(Transition) 추가"
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr "와이어 세그먼트(Wire Segment) 추가"
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr "새로운 초기 스텝 추가"
-#: ../editors/Viewer.py:2757 ../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 "간단 WxGlade GUI를 추가합니다"
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:352
+msgstr "액션 추가"
+
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:268
+msgstr "구성원 추가"
+
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:103
+msgstr "인스턴스 추가"
+
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "슬레이브 추가"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+msgstr "태스크 추가"
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
-msgstr ""
+msgstr "변수 추가"
#: ../plcopen/iec_std.csv:33
msgid "Addition"
msgstr "추가"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "추가적 함수 블록"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
-msgstr ""
-
-#: ../editors/Viewer.py:1686
+msgstr "블록 크기 조절"
+
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "정렬"
-#: ../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 "모두"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
-msgstr ""
-
-#: ../ProjectController.py:1685
+msgstr "모든 파일들 (*.*)|*.*|CSV files (*.csv)|*.csv"
+
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
-msgstr "이미 접속중입니다. 연결을 해제 하세요\n"
-
-#: ../editors/DataTypeEditor.py:591
+msgstr "이미 접속되어 있습니다. 연결을 해제하세요\n"
+
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "항목 \"%s\" 는 이미 구조체 안에 존재 합니다!"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:100
+msgstr "같은 이름을 갖는 인스턴스가 존재합니다!"
+
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
-msgstr ""
+msgstr "같은 이름을 가지는 모든 연결자에 대해 이름 변경을 적용하세요."
#: ../plcopen/iec_std.csv:31
msgid "Arc cosine"
@@ -609,8 +619,8 @@
msgid "Arithmetic"
msgstr "산술 연산"
-#: ../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 "배열"
@@ -618,45 +628,37 @@
msgid "Assignment"
msgstr "할당"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "변수 또는 표현식이 필요합니다!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "작성자"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "작성자 이름(옵션):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
-msgstr ""
-
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "도메인 이름이 올바르지 않습니다(circular 네임):"
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "도메인 이름이 올바르지 않습니다:"
-
-#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630
+msgstr "뒤로"
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
#, python-format
msgid "Bad location size : %s"
msgstr "잘못된 로케이션 사이즈: %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 "기본 타입:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "기본 타입"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "베레미즈"
@@ -688,169 +690,174 @@
msgid "Bitwise inverting"
msgstr "비트 연산 반전 (Invert)"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
-msgstr ""
-
-#: ../dialogs/FBDBlockDialog.py:60
+msgstr "블록"
+
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "블럭 속성"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
-msgstr ""
-
-#: ../editors/Viewer.py:550
+msgstr "블록 이름"
+
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "하단"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
-msgstr ""
-
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+msgstr "깨짐"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:65
+msgstr "라이브러리에서 %s 값을 탐색"
+
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr "위치 탐색"
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "빌드"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "빌드 디렉토리가 이미 비어 있습니다\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
-msgstr "현재 작성된 프로젝트를 빌드 폴더에 생성합니다"
-
-#: ../ProjectController.py:1080
+msgstr "현재 프로젝트를 빌드합니다"
+
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "C 파일 빌드 과정에 문제가 있습니다!\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "C 파일 빌드에 실패 했습니다\n"
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
-msgstr ""
-
-#: ../ProjectController.py:1155
+msgstr "C 코드"
+
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr "C 코드가 성공적으로 생성되었습니다\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:192
+msgstr "C 컴파일 작업이 실패했습니다.\n"
+
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr "%s 의 C 컴파일 작업이 실패 했습니다\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "C 확장"
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:52
+msgstr "크레딧"
+
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:44
+msgstr "CANOpen 네트워크"
+
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
-msgstr ""
+msgstr "CANOpen 슬레이브"
#: ../features.py:31
msgid "CANopen support"
msgstr "CANopen 지원"
-#: ../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 "FBD 네트워크 상태에서만 실행 순서를 생성할 수 있습니다!"
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr "로컬 또는 전역 변수만 위치 지정 가능합니다"
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr "프로그램을 %s 파일로 생성할 수 없습니다!"
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr "함수 블럭 인스턴스에는 위치를 지정할 수 없습니다"
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr "프로젝트를 %s로 저장할 수 없습니다!"
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
-msgstr ""
-
-#: ../ConfigTreeNode.py:529
+msgstr "함수 블록 인스턴스에 대해 초기값을 설정할 수 없습니다. "
+
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
-msgstr ""
+msgstr "{a2} 타입의 차일드 {a1}을 생성할 수 없습니다."
#: ../ConfigTreeNode.py:454
#, python-format
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "%d보다 낮은 번호의 가용 IEC 채널을 검색하는데 실패했습니다\n"
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "현재 PLC 상태를 알 수 없습니다 - 접속 실패.\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "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 ""
-
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
+"Bool 타입이 아닌 '{a1}' 변수의 비트 오프셋을 설정할 수 없습니다. (ID:{a2},Idx:{a3},sIdx:{a4})) "
+
+#: ../ProjectController.py:1761
+msgid "Cannot transfer while PLC is running. Stop it now?"
+msgstr "PLC가 동작중 일 때 전송 할 수 없습니다. 지금 중단하시겠습니까?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr "대소문자 구별"
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "중앙"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "바인드 인터페이스 IP 변경"
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "이름 변경"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "POU 타입 변경"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "포트 번호 변경"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "작업 디렉토리 변경"
@@ -858,115 +865,119 @@
msgid "Character string"
msgstr "문자열"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "SVG 파일 선택"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "프로젝트 저장 디렉토리 선택"
-#: ../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 "파일 선택"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../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 ""
-
-#: ../Beremiz_service.py:325
+msgstr "%s 을 위한 값을 선택하세요:"
+
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "작업 디렉토리 선택"
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "새로운 프로젝트를 위한 비어있는 디렉토리를 선택하세요"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr "베레미즈 프로젝트 폴더를 선택해 주세요. 선택하신 폴더는 프로젝트 폴더가 아닙니다!"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr "선택된 폴더는 비어있지 않습니다. 새 프로젝트 폴더로 사용 할 수 없습니다!"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "클래스"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "클래스 필터:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "클래스:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "클린"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
-msgstr ""
-
-#: ../ProjectController.py:1838
+msgstr "로그 메세지 정리"
+
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "프로젝트 빌드 폴더를 비웁니다"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "빌드 디렉토리를 비우는 중\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
-msgstr ""
-
-#: ../editors/Viewer.py:641
+msgstr "에러 정리"
+
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "실행 순서 클리어"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
-msgstr ""
-
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+msgstr "닫기"
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "어플리케이션 닫기"
-#: ../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 "프로젝트 닫기"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
-msgstr ""
-
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+msgstr "탭 닫기"
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
-msgstr ""
-
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+msgstr "코일"
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "코멘트"
-#: ../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 ""
-
-#: ../dialogs/ProjectDialog.py:60
+msgstr "커뮤니티 지원"
+
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:95
+msgstr "회사명"
+
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "회사명(필수):"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "회사 URL(옵션):"
@@ -974,7 +985,7 @@
msgid "Comparison"
msgstr "비교연산"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "IEC 프로그램을 C코드로 컴파일링 중...\n"
@@ -982,95 +993,95 @@
msgid "Concatenation"
msgstr "문자열 연결(concatenation)"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
-msgstr ""
-
-#: ../editors/ProjectNodeEditor.py:36
+msgstr "프로젝트 설정"
+
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:40
+msgstr "설정 변수들"
+
+#: ../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 ""
-
-#: ../ProjectController.py:1851
+msgstr "승인 또는 변수 이름을 변경하세요"
+
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "연결하기"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "타겟 PLC와 연결"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586
-#: ../editors/Viewer.py:2408
+msgstr "URI: %s 에 연결되었습니다. "
+
+#: ../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:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "연결 취소!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "%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 ""
-
-#: ../connectors/PYRO/__init__.py:102
+msgstr "연결이 끊어졌습니다!\n"
+
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+msgstr "'%s'와의 연결이 실패하였습니다.\n"
+
+#: ../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 ""
-
-#: ../controls/VariablePanel.py:60
+msgstr "콘솔"
+
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "상수"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:198
+msgstr "지속 커넥터"
+
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "컨텐츠 설명(옵션):"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
-msgstr "지속 커넥터"
+msgstr "지속 연결자"
#: ../plcopen/iec_std.csv:18
msgid "Conversion from BCD"
@@ -1088,158 +1099,160 @@
msgid "Conversion to time-of-day"
msgstr "시간으로 변환"
-#: ../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 "복사하기"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "POU 복사"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:64
+msgstr "좌측폴더에서 우측폴더로 파일을 복사"
+
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
-msgstr ""
+msgstr "우측폴더에서 좌측폴더로 파일을 복사"
#: ../plcopen/iec_std.csv:28
msgid "Cosine"
msgstr "Cosine"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
"{a3}\n"
msgstr ""
-
-#: ../py_ext/PythonFileCTNMixin.py:78
+"차일드 \"{a1}\" 를 추가할 수 없습니다, 타입 {a2} :\n"
+"{a3}\n"
+
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
-msgstr ""
-
-#: ../ConfigTreeNode.py:626
+msgstr "예전 파일 %s을 불러올 수 없습니다."
+
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
" {a2}"
msgstr ""
-
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
+"confnode 기본 파라메터들을 불러올 수 없었습니다 {a1}:\n"
+"{a2}"
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
#, python-brace-format
msgid ""
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
msgstr ""
-
-#: ../PLCControler.py:948
+"confnode 파라메터들을 불러올 수 없었습니다 {a1}:\n"
+"{a2}"
+
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "POU 오브젝트만 붙여넣기 가능합니다"
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "PLC 를 시작 할 수 없습니다!\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "PLC 를 정지 할 수 없습니다!\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "디버거를 정지 할 수 없습니다.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "HMI 생성"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "새로운 POU 생성"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "새로운 액션 생성"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "새로운 액션 블럭 생성"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "새로운 블럭 생성"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "새로운 분기(Branch) 생성"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "새로운 코일 생성"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "새로운 코멘트 생성"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "새로운 연결 생성"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "새로운 접점 생성"
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr "새로운 분기(divergence) 생성"
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr "새로운 분기(divergence) 또는 합류(convergence) 생성"
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "새로운 이니셜 스텝 생성"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "새로운 점프 생성"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "새로운 전원 레일 생성"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "새로운 Rung 생성"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "새로운 스텝 생성"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "새로운 트랜지션 생성"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "새로운 변수 생성"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
-msgstr ""
-
-#: ../Beremiz_service.py:434
+msgstr "크레딧"
+
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
-msgstr ""
-
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+msgstr "현재 작업 디렉토리:"
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "잘라내기"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "주기적"
@@ -1251,19 +1264,19 @@
msgid "DEPRECATED"
msgstr "사용중지됨"
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr "DS-301 프로필"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "DS-302 프로필"
-#: ../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)"
@@ -1284,66 +1297,58 @@
msgid "Date subtraction"
msgstr "날짜 뺄셈"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
-msgstr ""
-
-#: ../ProjectController.py:1756
+msgstr "일:"
+
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:134
+msgstr "디버그 정보가 PLC와 일치하지 않습니다 - 활성화를 위해 정지/전송/시작 버튼을 누르세요\n"
+
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
-msgstr ""
-
-#: ../editors/Viewer.py:448
+msgstr "디버그 인스턴스"
+
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr "디버그: %s"
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
-msgstr ""
-
-#: ../ProjectController.py:1410
+msgstr "Debug: 알 수 없는 변수 '%s'\n"
+
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
-msgstr ""
-
-#: ../IDEFrame.py:639
+msgstr "Debug: 지원되지 않는 자료형 '%s'\n"
+
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "디버거"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "디버거 사용 불가\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
-msgstr ""
-
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "디버거 정지.\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+msgstr "디버거가 준비되었습니다. \n"
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "삭제"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "파생된 Branch 삭제 (Divergence Branch)"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
-msgstr ""
-
-#: ../editors/Viewer.py:560
+msgstr "파일 삭제"
+
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "와이어 세그먼트 삭제"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "항목 삭제"
@@ -1351,168 +1356,168 @@
msgid "Deletion (within)"
msgstr "내부 삭제"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "미분 타입"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
-msgstr ""
-
-#: ../controls/VariablePanel.py:432
+msgstr "상세설명"
+
+#: ../controls/VariablePanel.py:463
msgid "Description:"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+msgstr "상세설명:"
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "넓이:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:91
+msgstr "방향"
+
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "방향:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "직접"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "연결 해제"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "PLC 연결 해제"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
-msgstr ""
-
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+msgstr "연결 해제"
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
-msgstr ""
+msgstr "발산"
#: ../plcopen/iec_std.csv:36
msgid "Division"
msgstr "분할"
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "정말 '%s' 파일을 삭제해도 될까요? "
+
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "도움문서"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "완료"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "지속시간"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
-msgstr ""
-
-#: ../editors/Viewer.py:629
+msgstr "EDS 파일들 (*.eds)|*.eds|All files|*.*"
+
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "블럭 수정"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "코일 데이터 수정"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "접접 데이터 수정"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:51
+msgstr "지속시간 수정"
+
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr "스텝 수정"
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "WXGlade를 이용하여 GUI 수정"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "액션 블럭 속성 수정"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
-msgstr ""
-
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+msgstr "배열 타입 속성 수정"
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "코멘트 수정"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:39
+msgstr "파일 편집"
+
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "항목 수정"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "점프 타겟 수정"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr "PLCGenerator로 생성된 IEC 코드 수정"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "스텝 이름 수정"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "트랜지션 수정"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
-msgstr ""
-
-#: ../ProjectController.py:1257
+msgstr "툴바 에디터"
+
+#: ../ProjectController.py:1294
msgid "Editor selection"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:348
+msgstr "에디터 선택"
+
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "구성원:"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
-msgstr ""
-
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "되돌리기/되돌리기 취소 활성화"
-
-#: ../Beremiz_service.py:333
+msgstr "비어있는"
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "배열에서 비어있는 차원은 허용되지 않습니다. "
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "이름 입력"
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "포트 번호 입력"
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "바인드 인터페이스 IP 입력"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "열거형 데이터"
@@ -1520,48 +1525,47 @@
msgid "Equal to"
msgstr "같은 값 일때"
-#: ../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 "에러"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
msgstr "에러 : PLC 프로그램은 하나 이상의 설정과 리소스가 반드시 선언되어야 합니다!\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "에러 : IEC -> C 컴파일러 %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1570,37 +1574,44 @@
"ST/IL/SFC 코드 생성기 에러 : \n"
"%s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "저장 중 에러 발생 \"%s\"\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:371
+msgstr "에러: 슬레이브 내보내기 실패\n"
+
+#: ../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 "에러: Modbus/IP 서버 %{a1}.x와 %{a2}.x가 같은 port 번호 {a3}을 사용하고 있습니다.\n"
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "에러 : 마스터 미생성 \"%s\"\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "에러 : PLC 빌드 미생성\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "%s접속중 예외 상황이 발생했습니다!\n"
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "실행 제어:"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "실행 순서:"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "웹 기반의 HMI(실험중)"
@@ -1612,171 +1623,167 @@
msgid "Exponentiation"
msgstr "지수화"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+msgstr "CanOpen 슬레이브를 EDS 파일로 내보내기"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
-msgstr ""
-
-#: ../canfestival/canfestival.py:175
+msgstr "그래프 값들을 클립보드로 내보내기"
+
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:90
+msgstr "슬레이브 내보내기"
+
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "표현식:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "외부"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "위치 변수(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 "실패 : 빌드 후에 전송 하세요.\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "폴링 엣지"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "치명적 오류 : 빌드 파일 생성 프로그램을 찾을 수 없습니다.\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:164
+msgstr "%s 가져오기 중"
+
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:166
+msgstr "필드 %s는 유효하지 않은 값입니다!"
+
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
-msgstr ""
-
-#: ../controls/FolderTree.py:216
+msgstr "필드 %s는 유효한 값이 아닙니다!"
+
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37
-#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375
+msgstr "파일 '%s' 가 이미 존재합니다!"
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
msgid "Find"
-msgstr ""
-
-#: ../IDEFrame.py:377
+msgstr "찾기"
+
+#: ../IDEFrame.py:379
msgid "Find Next"
-msgstr ""
-
-#: ../IDEFrame.py:379
+msgstr "다음 찾기"
+
+#: ../IDEFrame.py:381
msgid "Find Previous"
-msgstr ""
+msgstr "이전 찾기"
#: ../plcopen/iec_std.csv:90
msgid "Find position"
msgstr "위치 찾기"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "실행환경 강제 리로딩\n"
-
-#: ../editors/Viewer.py:1600
+msgstr "찾기:"
+
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "강제 데이터 입력"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "강제 변수 데이터"
-#: ../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 "형식이 완성되지 않았습니다. %s 를 입력하세요!"
-#: ../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 "형식이 완성되지 않았습니다. 이름을 입력하세요"
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr "형식이 완성되지 않았습니다. 블럭 타입을 선택하세요!"
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+msgstr "앞으로"
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "함수"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "함수 &블록"
-#: ../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 "함수 블럭 타입"
-#: ../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 "함수 블럭을 함수에서 사용할 수 없습니다!"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "함수 블럭 \"%s\" 을 함수에 붙여 넣기 할 수 없습니다!!!"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "함수 (Functions)"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
-msgstr ""
-
-#: ../ProjectController.py:703
+msgstr "프로그램 생성"
+
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "IEC-61131 기반의 ST/IL/SFC 코드 생성중...\n"
-#: ../controls/VariablePanel.py:73
+#: ../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:174
+msgstr "현재 값으로 가기"
+
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "그래픽"
@@ -1788,110 +1795,114 @@
msgid "Greater than or equal to"
msgstr "크거나 같은 값 일때"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "격자 해상도:"
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:121
+msgstr "HTTP 인터페이스 포트:"
+
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr "높이:"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:151
+msgstr "홈 디렉토리:"
+
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "가로:"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+msgstr "시간:"
+
+#: ../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 ""
-
-#: ../Beremiz_service.py:310 ../Beremiz_service.py:311
+msgstr "IP"
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
msgid "IP is not valid!"
msgstr "IP를 정확히 입력하세요!"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "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 "입출력"
-#: ../editors/Viewer.py:431
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr "POU {a3} 안의 블록 {a2} 내의 입출력 변수 {a1}이 연결되어야 합니다. "
+
+#: ../editors/Viewer.py:473
msgid "Inactive"
-msgstr ""
-
-#: ../controls/VariablePanel.py:276
+msgstr "비활성"
+
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../controls/VariablePanel.py:282
+msgstr "\"{a1}\" 과 \"{a2}\" 의 데이터 형이 호환되지 않습니다."
+
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "\"%s\"와 \"BOOL\"간의 데이터 크기가 호환되지 않습니다"
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
+msgstr "\"{a1}\" 과 \"{a2}\" 의 데이터 크기가 호환되지 않습니다."
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "지시기(Indicator)"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
-msgstr ""
-
-#: ../editors/Viewer.py:611
+msgstr "초기값"
+
+#: ../editors/Viewer.py:650
msgid "Initial Step"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+msgstr "초기 스텝"
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "초기 값"
-#: ../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 "초기 값:"
-#: ../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 "인라인"
-#: ../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 "입력"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "입력(Inputs):"
@@ -1899,114 +1910,128 @@
msgid "Insertion (into)"
msgstr "대상에 삽입"
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "ID %d의 인스턴스가 존재하지 않습니다!"
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr "인스턴스:"
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr "인터페이스"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr "인터럽트"
-#: ../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 ""
+"부적절한 URL 입니다!\n"
+"올바른 URL 주소를 입력하세요. "
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "알 수 없는 plcopen 항목입니다!!!"
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr ""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "위치 \"{a4}\" 에 대한 부적절한 타입 \"{a1}\"->{a2} != {a3}"
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166
+msgstr "위치 \"{a4}\" 에 대한 부적절한 타입 \"{a1}\"->{a2} != {a3}"
+
+#: ../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 "\"%s\"값은 디버그 변수에 적합하지 않습니다!"
-#: ../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 ""
-
-#: ../editors/Viewer.py:234 ../editors/Viewer.py:237
+msgstr "변수 그리드 엘리먼트에 대해 부적절한 값 \"%s\" 입니다"
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
#, python-format
msgid "Invalid value \"%s\" for viewer block"
msgstr "\"%s\" 값은 뷰어 블록에 적합하지 않습니다!"
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:121
+msgstr "\"{a2}\" 변수에 대해 \"{a1}\" 값은 적절하지 않습니다!"
+
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
msgstr ""
-
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+"부적절한 값입니다!\n"
+"숫자 값을 채우셔야 합니다."
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr "연결이 보안 되어있습니까?"
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+msgstr "점프"
+
+#: ../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 "래더 항목 ID %d이 하나 이상의 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 "언어"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "언어(옵션):"
-#: ../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 "언어:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr "최근 빌드가 이미 타겟과 일치합니다. 전송합니다...\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "WX GUI Inspector 실행"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "Live Python Shell 실행"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "좌측"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "좌측 전원 레일"
@@ -2022,52 +2047,52 @@
msgid "Less than or equal to"
msgstr "작거나 같은 값 일때"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "라이브러리"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
-msgstr ""
+msgstr "라이센스"
#: ../plcopen/iec_std.csv:73
msgid "Limitation"
msgstr "한도"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr "링크 중 : \n"
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "로컬"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
-msgstr ""
-
-#: ../ProjectController.py:1703
+msgstr "Local Entries"
+
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53
+msgstr "로컬 서비스 발견이 실패하였습니다!\n"
+
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "위치"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
-msgstr "가능한 위치:"
+msgstr "이용 가능한 Location:"
#: ../plcopen/iec_std.csv:25
msgid "Logarithm to base 10"
msgstr "상용로그(상용대수)"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+msgstr "'%s'에 대한 MDNS 확인 실패\n"
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "변수 맵"
@@ -2075,123 +2100,131 @@
msgid "Map located variables over CANopen"
msgstr "CANopen 변수 맵"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr "Modbus 상에서의 위치 변수 맵"
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr "CAN 마스터"
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
-msgstr ""
+msgstr "confnode 타입 {a2}에 대해 최대 카운트({a1})가 도달하였습니다."
#: ../plcopen/iec_std.csv:71
msgid "Maximum"
msgstr "최대값"
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr "최대값:"
-#: ../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 "메모리"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:49
+msgstr "툴바"
+
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
-msgstr ""
-
-#: ../editors/Viewer.py:549
+msgstr "마이크로초:"
+
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "중간"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
-msgstr ""
+msgstr "밀리초:"
#: ../plcopen/iec_std.csv:72
msgid "Minimum"
msgstr "최소값"
-#: ../editors/DataTypeEditor.py:226
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
msgstr "최소값:"
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:211
+msgstr "분:"
+
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "기타"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr "Modbus 지원"
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "수정자:"
-#: ../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 ""
-
-#: ../dialogs/ActionBlockDialog.py:140
+msgstr "\"{a2}\" POU에서 하나 이상의 \"{a1}\" 연속적인 커넥터를 찾았습니다"
+
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:139
+msgstr "액션을 아래로 이동"
+
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:43
+msgstr "액션을 위로 이동"
+
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "하단 이동"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:354
+msgstr "엘리먼트를 아래로 이동"
+
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:271
+msgstr "엘리먼트를 위로 이동"
+
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:270
+msgstr "인스턴스를 아래로 이동"
+
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:242
+msgstr "인스턴스를 위로 이동"
+
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:241
+msgstr "태스크를 아래로 이동"
+
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
-msgstr ""
-
-#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185
+msgstr "태스크를 위로 이동"
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
msgid "Move the view"
msgstr "화면을 드래그하여 이동"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "상단 이동"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+msgstr "변수를 아래로 이동"
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
-msgstr ""
+msgstr "변수를 위로 이동"
#: ../plcopen/iec_std.csv:74
msgid "Multiplexer (select 1 of N)"
@@ -2201,26 +2234,26 @@
msgid "Multiplication"
msgstr "곱셈"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:92
+msgstr "내 컴퓨터:"
+
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "이름"
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
msgid "Name"
msgstr "이름"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "이름은 널(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 "이름:"
@@ -2228,46 +2261,46 @@
msgid "Natural logarithm"
msgstr "자연 로그"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "역 방향(Negate)"
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr "Nevow 웹서비스 실패"
+
#: ../Beremiz_service.py:580
-msgid "Nevow Web service failed. "
-msgstr ""
-
-#: ../Beremiz_service.py:556
msgid "Nevow/Athena import failed :"
-msgstr ""
-
-#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104
-#: ../PLCOpenEditor.py:146
+msgstr "Nevow/Athena 불러오기가 실패했습니다:"
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
msgid "New"
msgstr "새로 만들기"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "새로운 아이템"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "수정자 없음"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "전송할 PLC 파일이 없습니다 (빌드 성공 여부를 확인하세요)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "\"%s\" POU에 바디(body)가 정의되어 있지 않습니다"
-#: ../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 ""
-
-#: ../PLCOpenEditor.py:357
+msgstr "\"{a2}\" POU에서 연속적인 \"{a1}\" 커넥터를 찾을 수 없습니다. "
+
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2275,69 +2308,69 @@
"현재 지원되는 도움 문서가 없습니다.\n"
"지원 예정"
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr "\"%s\"블럭에 대한 정보를 찾을 수 없습니다"
-#: ../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 ""
-
-#: ../controls/SearchResultPanel.py:169
+msgstr "POU {a3} 내부 블록 {a2}에 대해 출력 변수 {a1}를 찾을 수 없습니다. 연결이 끊어졌음이 틀림없습니다."
+
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "검색된 결과가 없습니다"
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
-msgstr "선택하신 %s파일은 없습니다\n"
-
-#: ../canfestival/config_utils.py:639
+msgstr "선택하신 %s SVG 파일은 없습니다\n"
+
+#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
-msgstr ""
-
-#: ../canfestival/config_utils.py:362
+msgstr "({a1}, {a2})와 같은 index/subindex가 없습니다(변수 {a3})."
+
+#: ../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
+msgstr "{a3} ID 에서 ({a1}, {a2})와 같은 index/subindex가 없습니다: (변수 {a4}). "
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "유효한 데이터 값을 선택하세요!"
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "\"%s\" POU에 정의된 변수가 없습니다"
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
-msgstr ""
-
-#: ../controls/VariablePanel.py:64
+msgstr "node ID {a1}이 존재하지 않습니다: (변수 {a2})"
+
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr "유지 안함(No 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 ""
+msgstr "PDO 매핑 가능한 변수가 아닙니다: '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
#: ../plcopen/iec_std.csv:80
msgid "Not equal to"
msgstr "같지 않을 때"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "시퀀스 넘버:"
@@ -2345,310 +2378,317 @@
msgid "Numerical"
msgstr "수치(Numeric)"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:84
+msgstr "값 변경 알림"
+
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "구성원 내부 검색"
-#: ../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 ""
-
-#: ../svgui/svgui.py:143
+msgstr "프로젝트 불러오기"
+
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "잉크스케이프 열기"
-#: ../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 ""
-
-#: ../ProjectController.py:1878
+"IEC 61131 통합 개발환경과 다양한 확장 모듈들을 바탕으로 유연한 소프트 PLC 런타임을 생성하는, 자동화 분야를 위한 오픈 소스 "
+"프레임워크"
+
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:155
+msgstr "프로젝트 파일들을 관리하기 위해 파일 탐색기를 실행하세요"
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "WxGlade 열기"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr "옵션"
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:98
+msgstr "옵션들"
+
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "구성단체(옵션):"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "다른 프로필"
-#: ../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 "출력"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "수신 PDO"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "전송 PDO"
-#: ../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 ""
-
-#: ../ProjectController.py:1054
+msgstr "PLC 로그"
+
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
-msgstr ""
-
-#: ../Beremiz_service.py:297
+msgstr "PLC 코드 생성에 실패하였습니다!\n"
+
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
-msgstr ""
-
-#: ../Beremiz_service.py:304
+msgstr "비어있는 PLC 이거나 PLC가 이미 시작되었습니다."
+
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
-msgstr ""
-
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+msgstr "PLC가 시작되지 않았습니다."
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
"{a2}"
msgstr ""
-
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+"PLC 문법 에러 발생 {a1}:\n"
+"{a2}"
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "PLCOpen files (*.xml)|*.xml|모든 파일|*.*"
-#: ../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"
"Beremiz is an "
msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:95
+"PLCOpenEditor는 Beremiz 프로젝트의 일부입니다.\n"
+"\n"
+"Beremiz는"
+
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:101
+msgstr "포트"
+
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "POU 이름"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "POU 이름:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "POU 타입"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "POU 타입:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:61
+msgstr "PYRO가 URI:%s 에 연결중입니다. \n"
+
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
-msgstr ""
-
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+msgstr "PYRO는 '%s'에 있는 증명서를 사용합니다.\n"
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "인쇄 페이지 설정"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "페이지 크기(옵션):"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "인쇄 페이지: %d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
-msgstr ""
-
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+msgstr "부모 인스턴스"
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "붙여넣기"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "POU 붙여넣기"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "검색할 문자열 패턴:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "핀 넘버:"
-#: ../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 "타겟을 선택하세요"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
-msgstr ""
-
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+msgstr "블록의 이름을 입력하세요"
+
+#: ../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:799
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr "스텝 이름을 입력하세요"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "텍스트를 입력하세요"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "\"%s\" 변수의 데이터를 입력하세요"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "포트 번호는 0~65535까지 유효합니다!"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "포트 번호는 숫자로만 입력하세요!"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:51
+msgstr "전원 레일"
+
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "전원 레일 속성"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "인쇄 페이지 미리보기"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "인쇄 페이지 미리보기:"
-#: ../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 "인쇄"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "인쇄 미리보기"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "우선권"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "우선권:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:58
+msgstr "PLC를 시작하는데 문제가 발생했습니다: 에러 %d"
+
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:81
+msgstr "제품명"
+
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "제품 이름(필수):"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "제품 출시 번호(옵션):"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:82
+msgstr "제품 버전"
+
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "제품 버젼(필수):"
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr "프로그램"
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr "프로그램이 성공적으로 생성되었습니다!"
-#: ../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 "다른 POU에서 사용할 수 없는 프로그램입니다!"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "프로젝트"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
-msgstr ""
-
-#: ../ProjectController.py:1877
+msgstr "프로젝트 '%s':"
+
+#: ../ProjectController.py:1878
msgid "Project Files"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:57
+msgstr "프로젝트 파일"
+
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:79
+msgstr "프로젝트 명"
+
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "프로젝트 명(필수):"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "프로젝트 버젼(옵션):"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2656,90 +2696,90 @@
"프로젝트 파일 구문 오류:\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "프로젝트 속성"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:98
+msgstr "프로젝트 트리 레이아웃이 confnode.xml과 일치하지 않습니다. {a1}!={a2}"
+
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
-msgstr ""
-
-#: ../PLCControler.py:99
+msgstr "연결자 이름 수정"
+
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "속성"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:118
+msgstr "로컬 네트워크에 서비스를 퍼블리싱하는 중"
+
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
-msgstr ""
-
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:428
+msgstr "Pyro 예외상황: %s\n"
+
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
-msgstr ""
-
-#: ../py_ext/PythonEditor.py:81
+msgstr "Pyro 포트:"
+
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
-msgstr ""
-
-#: ../features.py:33
+msgstr "Python 코드"
+
+#: ../features.py:34
msgid "Python file"
msgstr "파이썬 파일"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr "한정자"
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr "프로그램 종료"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "범위:"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr "IEC 코드"
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
-msgstr ""
-
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+msgstr " 정말로 노드 '%s' 를 지우겠습니까?"
+
+#: ../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:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr "새로고침"
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "정규 표현식"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
-msgstr ""
-
-#: ../editors/Viewer.py:1603
+msgstr "정규 표현식"
+
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr "강제 데이터 입력 해제"
@@ -2747,100 +2787,100 @@
msgid "Remainder (modulo)"
msgstr "잔여 (모듈)"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
-msgstr ""
-
-#: ../IDEFrame.py:2419
+msgstr "%s 노드 제거"
+
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
-msgstr ""
-
-#: ../IDEFrame.py:2424
+msgstr "데이터 타입 제거"
+
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:138
+msgstr "POU 제거"
+
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:353
+msgstr "액션 제거"
+
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:63
+msgstr "엘리먼트 제거"
+
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:269
+msgstr "좌측 폴더로부터 파일 제거"
+
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:104
+msgstr "인스턴스 제거"
+
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "슬레이브 제거"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+msgstr "태스크 제거"
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
-msgstr ""
-
-#: ../IDEFrame.py:1948
+msgstr "변수 제거"
+
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "이름 변경"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
-msgstr ""
-
-#: ../editors/Viewer.py:561
+msgstr "파일 교체"
+
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
-msgstr ""
+msgstr "와이어를 연결자로 교체"
#: ../plcopen/iec_std.csv:89
msgid "Replacement (within)"
msgstr "내부 교체"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr "리셋 코일(Unlatch)"
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr "실행 순서 초기화"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:105
+msgstr "풀 스크린 에디팅 모드에서 복귀"
+
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
-msgstr ""
-
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+msgstr "검색 결과 재설정"
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "리소스"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "유지 변수"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "반환(Return) 타입:"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "우측"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "우측 전원 레일"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "라이징 엣지"
@@ -2856,138 +2896,138 @@
msgid "Rounding up/down"
msgstr "라운딩 업/다운"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "실행"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
-msgstr ""
-
-#: ../ProjectController.py:1108
+msgstr "런타임 IO 확장 C 코드 생성에 실패했습니다 !\n"
+
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+msgstr "런타임 라이브러리 확장 C 코드 생성에 실패했습니다 !\n"
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr "SDO 클라이언트"
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr "SDO 서버"
-#: ../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 ""
-
-#: ../PLCGenerator.py:773
+msgstr "POU \"{a1}\"에 있는 SFC jump는 존재하지 않는 SFC 스텝 \"{a2}\"를 참조합니다."
+
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+msgstr "POU \"%s\" 안의 SFC 트랜지션은 연결이 되어야 합니다."
+
+#: ../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 파일 (*.st)|*.st|모든 파일|*.*"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "SVG 파일 (*.svg)|*svg|모든 파일|*.*"
-#: ../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 ""
-
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+msgstr "저장"
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
-msgstr ""
-
-#: ../BeremizIDE.py:224
+msgstr "다른 이름으로 저장..."
+
+#: ../BeremizIDE.py:249
msgid "Save as"
-msgstr ""
-
-#: ../ProjectController.py:511
+msgstr "다른 이름으로 저장"
+
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:69
+msgstr "저장 경로는 프로젝트 경로와 동일하여야 합니다!\n"
+
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "검색 범위"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "검색"
-#: ../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 "프로젝트 내부 검색"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
-msgstr ""
-
-#: ../IDEFrame.py:388
+msgstr "초:"
+
+#: ../IDEFrame.py:390
msgid "Select All"
-msgstr ""
-
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+msgstr "전부 선택"
+
+#: ../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:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:281
+msgstr "에디터 선택"
+
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
-msgstr ""
-
-#: ../IDEFrame.py:607
+msgstr "인스턴스 선택"
+
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "오브젝트 선택"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
-msgstr ""
+msgstr "선택한 디렉토리는 다른 프로젝트가 사용중입니다. 덮어쓰겠습니까?\n"
#: ../plcopen/iec_std.csv:70
msgid "Selection"
msgstr "선택"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "수렴(Convergence) 선택"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "벡터 발산(Divergence) 선택"
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:85
+msgstr "서비스 발견"
+
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "서비스 이용 가능:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "셋팅 코일(Latch)"
@@ -2999,27 +3039,27 @@
msgid "Shift right"
msgstr "우측이로 이동(Shift)"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "PLCGenerator가 생성한 IEC 코드 보기"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "마스터 보기"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "config_util(설정 유틸리티)에 의해 생성된 마스터 보기"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "코드 보기"
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
msgid "Simultaneous Convergence"
msgstr "동시 수렴"
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
msgid "Simultaneous Divergence"
msgstr "동시 발산"
@@ -3027,79 +3067,75 @@
msgid "Sine"
msgstr "Sine"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "싱글"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
-msgstr ""
-
-#: ../PLCGenerator.py:397
+msgstr "소스파일이 변경되지 않았습니다, 재빌드되지 않습니다.\n"
+
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
"'{a2}.{a3}'."
-msgstr ""
+msgstr "소스 신호는 리소스 '{a2}.{a3}' 내의 단일 태스크 '{a1}' 에 대해서 정의되어야만 합니다. "
#: ../plcopen/iec_std.csv:23
msgid "Square root (base 2)"
msgstr "제곱근 (SQRT: base 2)"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "기본 함수 블럭"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "PLC 시작"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "%s에서 빌드를 시작합니다\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
-msgstr ""
-
-#: ../ProjectController.py:1648
+msgstr "시작됨"
+
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "PLC 시작중\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
-msgstr ""
-
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+msgstr "툴바"
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
-msgstr ""
-
-#: ../ProjectController.py:1846
+msgstr "스텝"
+
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "정지"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "PLC 정지"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "작동중인 PLC 정지"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
-msgstr ""
-
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "디버거 정지중...\n"
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "멈춤"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "구조"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "서브레인지"
@@ -3107,39 +3143,39 @@
msgid "Subtraction"
msgstr "뺄셈 연산"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "성공적으로 빌드 완료 되었습니다\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115
+msgstr "풀 스크린 에디팅 모드로 전환"
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
msgid "Syntax error in regular expression of pattern to search!"
msgstr "정규 표현식에 적합하지 않은 검색어 입니다!"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
-msgstr ""
+msgstr "타입"
#: ../plcopen/iec_std.csv:29
msgid "Tangent"
msgstr "Tangent"
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr "태스크"
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr "태스크:"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr "임시"
-#: ../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"
@@ -3150,30 +3186,39 @@
"You can subscribe to the list here:\n"
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
msgstr ""
-
-#: ../editors/FileManagementPanel.py:180
+"Beremiz 및 PLCOpenEditor에 관한 질문들을 남길 수 있는 제일 좋은 장소는 프로젝트 메일링 리스트입니다: beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"이곳은 메인 커뮤니티 지원 채널입니다. \n"
+"글을 남기기 위해서는 메일링 리스트를 구독해야 합니다.\n"
+"\n"
+"메일링 리스트 구독은 다음 주소에서 가능합니다:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
"Do you want to replace it?"
msgstr ""
-
-#: ../editors/LDViewer.py:882
+"파일 '%s' 가 이미 존재합니다. \n"
+"정말 교체하겠습니까?"
+
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "블럭 그룹은 일관성을 가져야 합니다!"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
-msgstr ""
-
-#: ../IDEFrame.py:1658 ../IDEFrame.py:1677
+msgstr "변경된 사항이 있습니다, 저장하시겠습니까?"
+
+#: ../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 "\"%s\" POU 에 문제가 있을 수 있습니다. 계속 하시겠습니까?"
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3181,14 +3226,14 @@
"인쇄 작업에 문제가 있습니다.\n"
"프린터 설정을 확인하세요"
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "선택하신 옵션은 지원되지 않습니다!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
-msgstr ""
+msgstr "Tick: %d"
#: ../plcopen/iec_std.csv:40
msgid "Time"
@@ -3223,94 +3268,94 @@
msgid "Time-of-day subtraction"
msgstr "하루의 시간 빼기"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
-msgstr ""
-
-#: ../editors/Viewer.py:548
+msgstr "값을 토글"
+
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "상단"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "전송"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "PLC에 전송"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "전송이 성공적으로 완료되었습니다\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "전송 실패\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 ""
-
-#: ../PLCGenerator.py:1518
+msgstr "트랜지션"
+
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
"its name"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:84
+msgstr "트랜지션 \"%s\" body는 출력 변수 또는 출력 변수의 이름을 참조하는 코일을 포함해야 합니다."
+
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "트랜지션 이름"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "트랜지션 이름:"
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
-msgstr ""
-
-#: ../PLCGenerator.py:1598
+msgstr "컨텐츠 \"{a1}\"의 트렌지션은 \"{a2}\" POU 내의 다음 스텝으로 연결되지 않았습니다. "
+
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1323
+msgstr " 컨텐츠 \"{a1}\"의 트랜지션은 \"{a2}\" POU 내의 이전 스텝으로 연결되지 않았습니다. "
+
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "%s 트랜지션 이름이 존재 하지 않습니다!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "트랜지션"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "번역자"
+
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "트리거링 스위치"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "Twisted 모듈을 이용할 수 없습니다."
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
msgid "Type"
msgstr "타입"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
-msgstr ""
-
-#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624
+msgstr "타입과 파생형 타입"
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
#, python-format
msgid "Type conflict for location \"%s\""
msgstr "\"%s\" 타입 에러"
@@ -3319,179 +3364,233 @@
msgid "Type conversion"
msgstr "변환 타입"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr "타입 정보:"
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58
-#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100
-#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59
+msgstr "엄격한 형"
+
+#: ../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:462 ../canfestival/config_utils.py:476
+#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
+msgid "URI host:"
+msgstr "URI 호스트:"
+
+#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46
+msgid "URI port:"
+msgstr "URI 포트:"
+
+#: ../controls/UriLocationEditor.py:35
+msgid "URI type:"
+msgstr "URI 종류:"
+
+#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515
#, python-format
msgid "Unable to define PDO mapping for node %02x"
msgstr "PDO 매핑 정의 에러:%02x"
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr "Xenomai의 %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 ""
-
-#: ../PLCGenerator.py:254
+msgstr "\"{a2}\" POU에서 정의되지 않은 블록 타입 \"{a1}\""
+
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "\"%s\" 의 POU 타입이 정의되지 않았습니다"
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "되돌리기"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
-msgstr ""
-
-#: ../editors/Viewer.py:394
+msgstr "알려지지 않은"
+
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "\"%s\" 변수를 현재 POU에서 알 수 없습니다!"
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
-msgstr ""
-
-#: ../PLCControler.py:638
+msgstr "이름이 없는"
+
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "이름 없음%d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "\"%s\"의 데이터 크기를 알 수 없습니다"
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "사용자 데이터 타입"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "사용자 타입"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "사용자 정의 POU"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "데이터 값"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "데이터 값:"
-#: ../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 "변수"
-#: ../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 ""
-
-#: ../dialogs/FBDVariableDialog.py:64
+msgstr "변수 드롭"
+
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "변수 속성"
-#: ../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 "변수 클래스"
-#: ../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 "POU에 속하지 않는 변수 입니다!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
+msgstr "변수:"
+
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "변수"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "수직:"
-#: ../Beremiz_service.py:588
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr "WAMP 클라이언트 연결이 실패하였습니다 (%s) ...재시도 중..."
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr "WAMP 클라이언트 연결이 끈겼습니다 (%s) ..재시도중.."
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr "WAMP 아이디:"
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr "WAMP 클라이언트가 연결중입니다:"
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr "WAMP 클라이언트 연결이 성립되지 않았습니다!"
+
+#: ../Beremiz_service.py:625
msgid "WAMP client startup failed. "
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:91
+msgstr "WAMP 클라이언트의 시작이 실패했습니다."
+
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr "WAMP 설정이 불완전합니다."
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr "WAMP 설정이 누락되어 있습니다."
+
+#: ../connectors/WAMP/__init__.py:99
#, python-format
msgid "WAMP connecting to URL : %s\n"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:131
+msgstr "WAMP URL에 연결중입니다: %s\n"
+
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:150
+msgstr "WAMP 연결 타임아웃"
+
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
-msgstr ""
-
-#: ../Beremiz_service.py:564
+msgstr "WAMP '%s'에 연결이 실패하였습니다.\n"
+
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:37
+msgstr "WAMP 불러오기 실패:"
+
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr "WAMP 로드 에러:"
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr "WAMP 세션 종료"
+
+#: ../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 비밀 로드 에러:"
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "경고"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "ST/IL/SFC 코드 생성기 경고:\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "프로젝트 전체 검색"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "폭:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:130
+msgstr "페이지 끝까지 검색한 후 처음으로 와서 다시 검색"
+
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
-msgstr ""
-
-#: ../features.py:34
+msgstr "개발자"
+
+#: ../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 ?"
@@ -3499,7 +3598,7 @@
"현재 쓰기 권한이 없습니다\n"
"그래도 Inkscape를 열까요?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3507,7 +3606,7 @@
"현재 쓰기 권한이 없습니다\n"
"그래도 WxGlade를 열까요?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3515,81 +3614,73 @@
"프로젝트 작업에는 권한이 필요합니다\n"
"사본으로 작업하시겠습니까?"
-#: ../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 "Branch를 추가할 블럭 또는 블럭 그룹을 선택해야 합니다!"
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr "접점에 추가될 와이어를 선택해야 합니다!"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "이름을 입력하세요!"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "데이터 값을 입력하세요!"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "확대(Zoom)"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
-msgstr ""
-
-#: ../PLCOpenEditor.py:343
+msgstr "일"
+
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "에러: %s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
-msgstr ""
-
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "파일 :"
-
-#: ../dialogs/PouDialog.py:32
+msgstr "상태 {a1}과 함께 종료되었음 (pid {a2})\n"
+
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr "함수"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "함수 :"
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "함수 블럭"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
-msgstr ""
-
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "라인 :"
-
-#: ../dialogs/DurationEditorDialog.py:157
+msgstr "시간"
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "matiec 설치 경로를 찾을 수 없습니다.\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:156
+msgstr "밀리초"
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
+msgstr "분"
+
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "프로그램"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
-msgstr ""
+msgstr "초"
#: ../plcopen/iec_std.csv:84
msgid "string from the middle"
@@ -3603,26 +3694,28 @@
msgid "string right of"
msgstr "우측 문자열"
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
-msgstr ""
-
-#: ../PLCOpenEditor.py:341
+msgstr "업데이트 정보를 이용할 수 없습니다."
+
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr "경고: %s\n"
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
-msgstr ""
-
-#: ../ConfigTreeNode.py:56
+msgstr "{a1} \"{a2}\"는 {a3}으로 붙여넣을 수 없습니다."
+
+#: ../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 파일은 XSD 스키마를 따르지 않습니다. 라인 넘버 {a2}:\n"
+"{a3}"
#: Extra XSD strings
msgid "CanFestivalSlaveNode"
@@ -3656,10 +3749,10 @@
msgstr "CAN 드라이버"
msgid "Generic"
-msgstr ""
+msgstr "지너릭"
msgid "Command"
-msgstr ""
+msgstr "명령"
msgid "Xenomai"
msgstr "Xenomai"
@@ -3685,6 +3778,72 @@
msgid "Win32"
msgstr "Win32"
+msgid "ModbusRequest"
+msgstr "Modbus 요청"
+
+msgid "SlaveID"
+msgstr "슬레이브ID"
+
+msgid "Nr_of_Channels"
+msgstr "채널 수"
+
+msgid "Start_Address"
+msgstr "시작 주소"
+
+msgid "Timeout_in_ms"
+msgstr "타임아웃_ms"
+
+msgid "MemoryArea"
+msgstr "메모리공간"
+
+msgid "MemoryAreaType"
+msgstr "MemoryArea 종류"
+
+msgid "ModbusTCPclient"
+msgstr "ModbusTCP 클라이언트"
+
+msgid "Remote_IP_Address"
+msgstr "원격 IP 주소"
+
+msgid "Remote_Port_Number"
+msgstr "원격 포트 번호"
+
+msgid "Invocation_Rate_in_ms"
+msgstr "ms당 호출비율"
+
+msgid "ModbusServerNode"
+msgstr "Modbus 서버 노드"
+
+msgid "Local_IP_Address"
+msgstr "로컬 IP 주소"
+
+msgid "Local_Port_Number"
+msgstr "로컬 Port 번호"
+
+msgid "ModbusRTUclient"
+msgstr "ModbusRTU 클라이언트"
+
+msgid "Serial_Port"
+msgstr "시리얼 포트"
+
+msgid "Baud_Rate"
+msgstr "보레이트"
+
+msgid "Parity"
+msgstr "패리티"
+
+msgid "Stop_Bits"
+msgstr "스탑 비트"
+
+msgid "ModbusRTUslave"
+msgstr "ModbusRTU 슬레이브"
+
+msgid "ModbusRoot"
+msgstr "Modbus 루트"
+
+msgid "MaxRemoteTCPclients"
+msgstr "최대 원격 TCP 클라이언트"
+
msgid "BaseParams"
msgstr "베이스 파라메터"
@@ -3710,205 +3869,209 @@
msgstr "확장 모듈 제거 (Extension 제거)"
msgid "%(codefile_name)s"
-msgstr ""
+msgstr "%(codefile_name)s"
msgid "variables"
-msgstr ""
+msgstr "변수들"
msgid "variable"
-msgstr ""
+msgstr "변수"
msgid "name"
-msgstr ""
+msgstr "이름"
msgid "type"
-msgstr ""
+msgstr "타입"
msgid "class"
-msgstr ""
+msgstr "클래스"
msgid "initial"
-msgstr ""
+msgstr "초기"
msgid "desc"
-msgstr ""
+msgstr "설명"
msgid "onchange"
-msgstr ""
+msgstr "값 변경 알림"
msgid "opts"
-msgstr ""
+msgstr "옵션들"
#: Extra TC6 documentation strings
msgid "0 - current time, 1 - load time from PDT"
-msgstr ""
+msgstr "0 - 현재 시간, 1 - PDT로부터 시간 읽어오기"
msgid "Preset datetime"
-msgstr ""
+msgstr "날짜 기본설정"
msgid "Copy of IN"
-msgstr ""
+msgstr "IN의 복사"
msgid "Datetime, current or relative to PDT"
-msgstr ""
+msgstr "태평양 일광 절약 시간 기준으로 현재 또는 그에 상대적인 현재 시간"
msgid ""
"The real time clock has many uses including time stamping, setting dates and"
" times of day in batch reports, in alarm messages and so on."
-msgstr ""
+msgstr "실시간 시계는 타임 스탬핑, batch 리포트에서의 시간/날짜 설정, 알람 메세지 등과 같은 일에 사용됩니다. "
msgid "1 = integrate, 0 = hold"
-msgstr ""
+msgstr "1 = 인테그레이트, 0 = 홀드"
msgid "Overriding reset"
-msgstr ""
+msgstr "Overriding 리셋"
msgid "Input variable"
-msgstr ""
+msgstr "입력 변수"
msgid "Initial value"
-msgstr ""
+msgstr "초기값"
msgid "Sampling period"
-msgstr ""
+msgstr "샘플링 주기"
msgid "NOT R1"
-msgstr ""
+msgstr "R1이 아님"
msgid "Integrated output"
-msgstr ""
+msgstr "적분된 출력"
msgid ""
"The integral function block integrates the value of input XIN over time."
-msgstr ""
+msgstr "적분 함수 블록은 시간에 따라 입력 XIN의 값을 적분합니다."
msgid "0 = reset"
-msgstr ""
+msgstr "0 = 리셋"
msgid "Input to be differentiated"
-msgstr ""
+msgstr "미분되어야 하는 입력"
msgid "Differentiated output"
-msgstr ""
+msgstr "미분된 출력"
msgid ""
"The derivative function block produces an output XOUT proportional to the "
"rate of change of the input XIN."
-msgstr ""
+msgstr "미분 함수 블록은 입력 XIN의 변화율에 비례하는 출력 XOUT을 생성합니다."
msgid "0 - manual , 1 - automatic"
-msgstr ""
+msgstr "0 - 수동, 1 - 자동"
msgid "Process variable"
-msgstr ""
+msgstr "프로세스 변수"
msgid "Set point"
-msgstr ""
+msgstr "셋 포인트"
msgid "Manual output adjustment - Typically from transfer station"
-msgstr ""
+msgstr "수동 출력값 조정 - 일반적으로 전송 스테이션으로부터"
msgid "Proportionality constant"
-msgstr ""
+msgstr "비례 상수"
msgid "Reset time"
-msgstr ""
+msgstr "시간 초기화"
msgid "Derivative time constant"
-msgstr ""
+msgstr "미분 시간 상수"
msgid "PV - SP"
-msgstr ""
+msgstr "PV-SP"
msgid "FB for integral term"
-msgstr ""
+msgstr "적분항을 위한 함수 블록"
msgid "FB for derivative term"
-msgstr ""
+msgstr "미분항을 위한 함수 블록"
msgid ""
"The PID (proportional, Integral, Derivative) function block provides the "
"classical three term controller for closed loop control."
-msgstr ""
+msgstr "PID (비례, 적분, 미분) 함수 블록은 폐루프 제어를 위한 세 가지 항 제어기를 제공합니다. "
msgid "0 - track X0, 1 - ramp to/track X1"
-msgstr ""
+msgstr "0 - X0 따라가기, 1 - X1 ramp / X1 따라가기 "
msgid "Ramp duration"
-msgstr ""
+msgstr "Ramp 지속시간"
msgid "BUSY = 1 during ramping period"
-msgstr ""
+msgstr "ramping 주기동안 BUSY = 1"
msgid "Elapsed time of ramp"
-msgstr ""
+msgstr "ramp의 경과된 시간"
msgid "The RAMP function block is modelled on example given in the standard."
-msgstr ""
+msgstr "RAMP 함수 블록은 표준에서 주어진 예제를 모델로 합니다."
msgid ""
"The hysteresis function block provides a hysteresis boolean output driven by"
" the difference of two floating point (REAL) inputs XIN1 and XIN2."
msgstr ""
+"히스테리시스 기능 블록은 두 개의 부동 소수점 (REAL) 입력 XIN1 및 XIN2의 차이로 구동되는 히스테리시스 부울 출력을 "
+"제공합니다."
msgid "The SR bistable is a latch where the Set dominates."
-msgstr ""
+msgstr "SR bistable은 Set 도미넌트한 래치입니다."
msgid "The RS bistable is a latch where the Reset dominates."
-msgstr ""
+msgstr "RS bistable은 Reset 도미넌트한 래치입니다."
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
-msgstr ""
+"exclusive access to certain resources."
+msgstr "세마포어는 소프트웨어 엘리먼트들이 특정 자원에 접근에 대해 상호배제 매커니즘을 제공합니다."
msgid "The output produces a single pulse when a rising edge is detected."
-msgstr ""
+msgstr "상승 엣지가 감지되면 출력은 단일한 펄스를 만들어냅니다. "
msgid "The output produces a single pulse when a falling edge is detected."
-msgstr ""
+msgstr "하강 엣지가 검출되면 출력은 단일한 펄스를 만들어냅니다."
msgid ""
"The up-counter can be used to signal when a count has reached a maximum "
"value."
-msgstr ""
+msgstr "업 카운터는 카운트가 최대값에 도달하였을때 신호를 주기 위해 사용될 수 있습니다. "
msgid ""
"The down-counter can be used to signal when a count has reached zero, on "
"counting down from a preset value."
-msgstr ""
+msgstr "다운 카운터는 특정 값에서부터 감소하여 제로값이 될 때 신호를 주기 위해 사용될 수 있습니다. "
msgid ""
"The up-down counter has two inputs CU and CD. It can be used to both count "
"up on one input and down on the other."
msgstr ""
+"업 다운 카운터는 두 개의 입력값 CU,CD을 가집니다. 입력값들은 하나의 입력을 업 카운트하거나 다운 카운트하는데 사용될 수 있습니다."
+" "
msgid "first input parameter"
-msgstr ""
+msgstr "첫번째 입력 파라메터"
msgid "second input parameter"
-msgstr ""
+msgstr "두번째 입력 파라메터"
msgid "first output parameter"
-msgstr ""
+msgstr "첫번째 출력 파라메터"
msgid "second output parameter"
-msgstr ""
+msgstr "두번째 출력 파라메터"
msgid "internal state: 0-reset, 1-counting, 2-set"
-msgstr ""
+msgstr "초기 상태: 0-리셋, 1-카운팅, 2-셋"
msgid ""
"The pulse timer can be used to generate output pulses of a given time "
"duration."
-msgstr ""
+msgstr "펄스 타이머는 주어진 시간동안의 아웃풋 펄스 생성에 사용될 수 있습니다. "
msgid ""
"The on-delay timer can be used to delay setting an output true, for fixed "
"period after an input becomes true."
-msgstr ""
+msgstr "온 딜레이 타이머는 입력이 참이 된 이후 고정된 시간 동안 출력 설정을 참으로 지연시키는데 사용될 수 있습니다. "
msgid ""
"The off-delay timer can be used to delay setting an output false, for fixed "
"period after input goes false."
-msgstr ""
+msgstr "오프 딜레이 타이머는 입력이 거짓값이 된 이후 고정된 시간 동안 출력 설정을 거짓값으로 지연시키는데 사용될 수 있습니다. "
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/Beremiz_nl_NL.po Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,4056 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Beremiz package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Beremiz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Jordy van der Heijden <jordyvanderheijden@gmail.com>, 2018\n"
+"Language-Team: Dutch (Netherlands) (https://www.transifex.com/beremiz/teams/75746/nl_NL/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl_NL\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../util/ExceptionHandler.py:58
+#, python-format
+msgid ""
+"\n"
+"An unhandled exception (bug) occured. Bug report saved at :\n"
+"(%s)\n"
+"\n"
+"Please be kind enough to send this file to:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"You should now restart program.\n"
+"\n"
+"Traceback:\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid " External"
+msgstr "Extern"
+
+#: ../controls/VariablePanel.py:89
+msgid " InOut"
+msgstr "InUit"
+
+#: ../controls/VariablePanel.py:89
+msgid " Input"
+msgstr "Invoer"
+
+#: ../controls/VariablePanel.py:90
+msgid " Local"
+msgstr "Lokaal"
+
+#: ../controls/VariablePanel.py:89
+msgid " Output"
+msgstr "Uitvoer"
+
+#: ../controls/VariablePanel.py:91
+msgid " Temp"
+msgstr "Tijdelijk"
+
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#, python-format
+msgid " and %s"
+msgstr "en %s"
+
+#: ../ProjectController.py:1182
+msgid " generation failed !\n"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1029
+#, python-format
+msgid "\"%s\" Data Type doesn't exist !!!"
+msgstr "Datatype \"%s\" bestaat niet !!!"
+
+#: ../plcopen/plcopen.py:1047
+#, python-format
+msgid "\"%s\" POU already exists !!!"
+msgstr "\"%s\" bestaat al !!!"
+
+#: ../plcopen/plcopen.py:1068
+#, python-format
+msgid "\"%s\" POU doesn't exist !!!"
+msgstr "\"%s\" bestaat niet !!!"
+
+#: ../editors/Viewer.py:288
+#, python-format
+msgid "\"%s\" can't use itself!"
+msgstr ""
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#, python-format
+msgid "\"%s\" config already exists!"
+msgstr "\"%s\" config bestaat al !!!"
+
+#: ../plcopen/plcopen.py:531
+#, python-format
+msgid "\"%s\" configuration already exists !!!"
+msgstr "\"%s\" configuratie bestaat al !!!"
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "\"%s\" configuratie bestaat niet !!!"
+
+#: ../IDEFrame.py:1638
+#, python-format
+msgid "\"%s\" data type already exists!"
+msgstr "\"%s\" datatype bestaat al !!!"
+
+#: ../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 voor deze POU bestaat al !!!"
+
+#: ../BeremizIDE.py:928
+#, python-format
+msgid "\"%s\" folder is not a valid Beremiz project\n"
+msgstr "\"%s\" map is geen geldig Beremiz project.\n"
+
+#: ../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 een keyword en mag niet gebruikt worden."
+
+#: ../plcopen/plcopen.py:2836
+#, python-format
+msgid "\"%s\" is an invalid value!"
+msgstr "\"%s\" is een ongeldige waarde!"
+
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
+#, python-format
+msgid "\"%s\" is not a valid folder!"
+msgstr "\"%s\" is geen geldige map!"
+
+#: ../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 geen geldige identifier!"
+
+#: ../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: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 bestaat al!"
+
+#: ../dialogs/SFCStepNameDialog.py:62
+#, python-format
+msgid "\"%s\" step already exists!"
+msgstr "\"%s\" stap bestaat al!"
+
+#: ../editors/DataTypeEditor.py:566
+#, python-format
+msgid "\"%s\" value already defined!"
+msgstr "\"%s\" waarde al gedefiniëerd!"
+
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
+#, python-format
+msgid "\"%s\" value isn't a valid array dimension!"
+msgstr "\"%s\" waarde is geen geldige arraydimensie!"
+
+#: ../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 ""
+"\"%s\" waarde is geen geldige arraydimensie! Rechterwaarde moet groter zijn "
+"dan linkerwaarde."
+
+#: ../PLCGenerator.py:1133
+#, python-brace-format
+msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
+msgstr "\"{a1}\" functie afgebroken in \"{a2}\" POU: Geen invoer aangesloten!"
+
+#: ../editors/Viewer.py:292
+#, python-brace-format
+msgid "\"{a1}\" is already used by \"{a2}\"!"
+msgstr "\"{a1}\" wordt al gebruikt door \"{a2}\"!"
+
+#: ../plcopen/plcopen.py:557
+#, python-brace-format
+msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
+msgstr "\"{a1}\" bron bestaat al in \"{a2}\" configuratie !!!"
+
+#: ../plcopen/plcopen.py:577
+#, python-brace-format
+msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
+msgstr "\"{a1}\" bron bestaat niet in \"{a2}\" configuratie !!!"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#, python-format
+msgid "%03gms"
+msgstr "%03gms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#, python-format
+msgid "%dd"
+msgstr "%dd"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#, python-format
+msgid "%dh"
+msgstr "%dh"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
+#, python-format
+msgid "%dm"
+msgstr "%dm"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
+#, python-format
+msgid "%dms"
+msgstr "%dms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#, python-format
+msgid "%ds"
+msgstr "%ds"
+
+#: ../PLCControler.py:1114
+#, python-format
+msgid "%s Data Types"
+msgstr "%sDatatypes"
+
+#: ../PLCControler.py:1097
+#, python-format
+msgid "%s POUs"
+msgstr "%sPOU's"
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
+#, python-format
+msgid "%s Profile"
+msgstr "%sProfiel"
+
+#: ../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 "%sbody heeft geen instances!"
+
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
+#, python-format
+msgid "%s body don't have text!"
+msgstr "%sbody heeft geen tekst!"
+
+#: ../IDEFrame.py:388
+msgid "&Add Element"
+msgstr "&Element Toevoegen"
+
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
+msgid "&Close"
+msgstr "&Sluiten"
+
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr "&Configuratie"
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr "&Datatype"
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr "&Verwijderen"
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr "&Weegeven"
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr "&Wijzigen"
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr "&Bestand"
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr "&Functie"
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr "&Help"
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr "&Licentie"
+
+#: ../IDEFrame.py:356
+msgid "&Program"
+msgstr "&Programma"
+
+#: ../PLCOpenEditor.py:98
+msgid "&Properties"
+msgstr "&Eigenschappen"
+
+#: ../BeremizIDE.py:244
+msgid "&Recent Projects"
+msgstr "&Recente Projecten"
+
+#: ../IDEFrame.py:358
+msgid "&Resource"
+msgstr "&Bron"
+
+#: ../controls/SearchResultPanel.py:247
+#, python-brace-format
+msgid "'{a1}' - {a2} match in project"
+msgstr "'{a1}' - {a2} overeenkomst in project."
+
+#: ../controls/SearchResultPanel.py:249
+#, python-brace-format
+msgid "'{a1}' - {a2} matches in project"
+msgstr "'{a1}' - {a2} overeenkomsten in project."
+
+#: ../connectors/PYRO/__init__.py:98
+#, python-brace-format
+msgid "'{a1}' is located at {a2}\n"
+msgstr "'{a1}' bevindt zich op {a2} \n"
+
+#: ../controls/SearchResultPanel.py:298
+#, python-format
+msgid "(%d matches)"
+msgstr "(%d overeenkomsten)"
+
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
+#, python-format
+msgid ", %s"
+msgstr ", %s"
+
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
+msgid "1d"
+msgstr "1d"
+
+#: ../controls/LogViewer.py:288
+msgid "1h"
+msgstr "1u"
+
+#: ../controls/LogViewer.py:289
+msgid "1m"
+msgstr "1m"
+
+#: ../controls/LogViewer.py:290
+msgid "1s"
+msgstr "1s"
+
+#: ../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 ""
+"Een POU heeft een element genaamd \"%s\". Dit kan een conflict veroorzaken. "
+"Wilt u toch doorgaan?"
+
+#: ../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 "Er bestaat al een POU genaamd \"%s\"!"
+
+#: ../ConfigTreeNode.py:424
+#, python-brace-format
+msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
+msgstr "Een kind genaamd \"{a1}\" bestaat al -> \"{a2}\"\n"
+
+#: ../dialogs/BrowseLocationsDialog.py:229
+msgid "A location must be selected!"
+msgstr "Er moet een locatie geselecteerd worden!"
+
+#: ../editors/ResourceEditor.py:485
+msgid "A task with the same name already exists!"
+msgstr "Er bestaat al een taak met dezelfde naam!"
+
+#: ../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 "Er bestaat al een variabele met de naam \"%s\" in deze POU!"
+
+#: ../editors/CodeFileEditor.py:778
+#, python-format
+msgid "A variable with \"%s\" as name already exists!"
+msgstr "Er bestaat al een variabele met de naam \"%s\"!"
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
+msgid "About"
+msgstr "Over"
+
+#: ../plcopen/iec_std.csv:22
+msgid "Absolute number"
+msgstr "Absoluut getal"
+
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
+msgid "Action"
+msgstr "Actie"
+
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+msgid "Action Block"
+msgstr "Actieblok"
+
+#: ../dialogs/PouActionDialog.py:89
+msgid "Action Name"
+msgstr "Actienaam"
+
+#: ../dialogs/PouActionDialog.py:56
+msgid "Action Name:"
+msgstr "Actienaam:"
+
+#: ../plcopen/plcopen.py:1567
+#, python-format
+msgid "Action with name %s doesn't exist!"
+msgstr "Er bestaat geen actie met naam \"%s\"!"
+
+#: ../plcopen/types_enums.py:76
+msgid "Actions"
+msgstr "Acties"
+
+#: ../dialogs/ActionBlockDialog.py:139
+msgid "Actions:"
+msgstr "Acties:"
+
+#: ../editors/Viewer.py:473
+msgid "Active"
+msgstr "Actief"
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+msgid "Add"
+msgstr "Toevoegen"
+
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+msgid "Add Action"
+msgstr "Actie Toevoegen"
+
+#: ../features.py:33
+msgid "Add C code accessing located variables synchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1907
+msgid "Add Configuration"
+msgstr "Configuratie Toevoegen"
+
+#: ../IDEFrame.py:1887
+msgid "Add DataType"
+msgstr "Datatype Toevoegen"
+
+#: ../editors/Viewer.py:609
+msgid "Add Divergence Branch"
+msgstr "Divergentietak Toevoegen"
+
+#: ../dialogs/DiscoveryDialog.py:121
+msgid "Add IP"
+msgstr "IP Toevoegen"
+
+#: ../IDEFrame.py:1895
+msgid "Add POU"
+msgstr "POU Toevoegen"
+
+#: ../features.py:34
+msgid "Add Python code executed asynchronously"
+msgstr "Asynchrone Pythoncode toevoegen"
+
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+msgid "Add Resource"
+msgstr "Bron Toevoegen"
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+msgid "Add Transition"
+msgstr "Overgang Toevoegen"
+
+#: ../editors/Viewer.py:596
+msgid "Add Wire Segment"
+msgstr "Draadsegment Toevoegen"
+
+#: ../editors/SFCViewer.py:447
+msgid "Add a new initial step"
+msgstr "Nieuwe Initiële Stap Toevoegen"
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+msgid "Add a new jump"
+msgstr "Nieuwe Sprong Toevoegen"
+
+#: ../editors/SFCViewer.py:469
+msgid "Add a new step"
+msgstr "Nieuwe Stap Toevoegen"
+
+#: ../features.py:35
+msgid "Add a simple WxGlade based GUI."
+msgstr "Simpele WxGlade GUI Toevoegen"
+
+#: ../dialogs/ActionBlockDialog.py:143
+msgid "Add action"
+msgstr "Actie Toevoegen"
+
+#: ../editors/DataTypeEditor.py:364
+msgid "Add element"
+msgstr "Element Toevoegen"
+
+#: ../editors/ResourceEditor.py:283
+msgid "Add instance"
+msgstr "Instance Toevoegen"
+
+#: ../canfestival/NetworkEditor.py:110
+msgid "Add slave"
+msgstr "Slaaf Toevoegen"
+
+#: ../editors/ResourceEditor.py:252
+msgid "Add task"
+msgstr "Taak Toevoegen"
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+msgid "Add variable"
+msgstr "Variabele Toevoegen"
+
+#: ../plcopen/iec_std.csv:33
+msgid "Addition"
+msgstr "Toevoeging"
+
+#: ../plcopen/definitions.py:51
+msgid "Additional function blocks"
+msgstr "Extra Functieblokken"
+
+#: ../editors/Viewer.py:669
+msgid "Adjust Block Size"
+msgstr "Blokgrootte Aanpassen"
+
+#: ../editors/Viewer.py:1720
+msgid "Alignment"
+msgstr "Uitlijning"
+
+#: ../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 "Alles"
+
+#: ../editors/FileManagementPanel.py:37
+msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
+msgstr "Alle bestanden (*.*)|*.*|CSV (*.csv)|*.csv"
+
+#: ../ProjectController.py:1670
+msgid "Already connected. Please disconnect\n"
+msgstr "Al verbonden. Verbinding verbreken alstublieft.\n"
+
+#: ../editors/DataTypeEditor.py:607
+#, python-format
+msgid "An element named \"%s\" already exists in this structure!"
+msgstr "Er bestaat al een element genaamd \"%s\" in deze constructie!"
+
+#: ../editors/ResourceEditor.py:520
+msgid "An instance with the same name already exists!"
+msgstr "Er bestaat al een instance met dezelfde naam!"
+
+#: ../dialogs/ConnectionDialog.py:103
+msgid "Apply name modification to all continuations with the same name"
+msgstr "Naamwijziging toepassen op alle continuations met dezelfde naam."
+
+#: ../plcopen/iec_std.csv:31
+msgid "Arc cosine"
+msgstr "Boogcosinus"
+
+#: ../plcopen/iec_std.csv:30
+msgid "Arc sine"
+msgstr "Boogsinus"
+
+#: ../plcopen/iec_std.csv:32
+msgid "Arc tangent"
+msgstr "Boogtangens"
+
+#: ../plcopen/iec_std.csv:33
+msgid "Arithmetic"
+msgstr "Rekenkundig"
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
+msgid "Array"
+msgstr "Array"
+
+#: ../plcopen/iec_std.csv:39
+msgid "Assignment"
+msgstr "Opdracht/Toewijzing"
+
+#: ../dialogs/FBDVariableDialog.py:226
+msgid "At least a variable or an expression must be selected!"
+msgstr "Er moet minstens één variabele of uitdrukking geselecteerd worden!"
+
+#: ../controls/ProjectPropertiesPanel.py:111
+msgid "Author"
+msgstr "Auteur"
+
+#: ../controls/ProjectPropertiesPanel.py:108
+msgid "Author Name (optional):"
+msgstr "Auteursnaam (optioneel):"
+
+#: ../dialogs/FindInPouDialog.py:80
+msgid "Backward"
+msgstr ""
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
+#, python-format
+msgid "Bad location size : %s"
+msgstr "Ongeldige locatiegrootte: %s"
+
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
+msgid "Base Type:"
+msgstr "Basistype:"
+
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+msgid "Base Types"
+msgstr "Basistypes"
+
+#: ../BeremizIDE.py:483
+msgid "Beremiz"
+msgstr "Beremiz"
+
+#: ../plcopen/iec_std.csv:70
+msgid "Binary selection (1 of 2)"
+msgstr "Binaire selectie (1 van 2)"
+
+#: ../plcopen/iec_std.csv:62
+msgid "Bit-shift"
+msgstr "Bitverschuiving"
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise"
+msgstr "Bitsgewijs"
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise AND"
+msgstr "Bitsgewijze AND"
+
+#: ../plcopen/iec_std.csv:67
+msgid "Bitwise OR"
+msgstr "Bitsgewijze OR"
+
+#: ../plcopen/iec_std.csv:68
+msgid "Bitwise XOR"
+msgstr "Bitsgewijze XOR"
+
+#: ../plcopen/iec_std.csv:69
+msgid "Bitwise inverting"
+msgstr "Bitsgewijze inversie"
+
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+msgid "Block"
+msgstr "Blok"
+
+#: ../dialogs/FBDBlockDialog.py:63
+msgid "Block Properties"
+msgstr "Blokeigenschappen"
+
+#: ../editors/TextViewer.py:260
+msgid "Block name"
+msgstr "Bloknaam"
+
+#: ../editors/Viewer.py:586
+msgid "Bottom"
+msgstr "Bodem"
+
+#: ../ProjectController.py:1400
+msgid "Broken"
+msgstr "Kapot"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
+#, python-format
+msgid "Browse %s values library"
+msgstr "%s waardenbibliotheek doorbladeren,"
+
+#: ../dialogs/BrowseLocationsDialog.py:72
+msgid "Browse Locations"
+msgstr "Locaties doorbladeren."
+
+#: ../ProjectController.py:1815
+msgid "Build"
+msgstr "Compileer"
+
+#: ../ProjectController.py:1335
+msgid "Build directory already clean\n"
+msgstr "Compilatiemap al schoon.\n"
+
+#: ../ProjectController.py:1816
+msgid "Build project into build folder"
+msgstr "Compileer project in compilatiemap"
+
+#: ../ProjectController.py:1108
+msgid "C Build crashed !\n"
+msgstr "C compilatie vastgelopen!\n"
+
+#: ../ProjectController.py:1105
+msgid "C Build failed.\n"
+msgstr "C compilatie niet geslaagd!\n"
+
+#: ../c_ext/CFileEditor.py:66
+msgid "C code"
+msgstr "C code"
+
+#: ../ProjectController.py:1186
+msgid "C code generated successfully.\n"
+msgstr "C code succesvol gegenereerd.\n"
+
+#: ../targets/toolchain_makefile.py:126
+msgid "C compilation failed.\n"
+msgstr "C compilatie niet geslaagd.\n"
+
+#: ../targets/toolchain_gcc.py:199
+#, python-format
+msgid "C compilation of %s failed.\n"
+msgstr "C compilatie van %s niet geslaagd.\n"
+
+#: ../features.py:33
+msgid "C extension"
+msgstr "C uitbreiding"
+
+#: ../dialogs/AboutDialog.py:69
+msgid "C&redits"
+msgstr "C&redits"
+
+#: ../canfestival/NetworkEditor.py:58
+msgid "CANOpen network"
+msgstr "CANOpen netwerk"
+
+#: ../canfestival/SlaveEditor.py:48
+msgid "CANOpen slave"
+msgstr "CANOpen slaaf"
+
+#: ../features.py:31
+msgid "CANopen support"
+msgstr "CANOpen ondersteuning"
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:291
+msgid "Can only give a location to local or global variables"
+msgstr "Kan alleen een locatie toewijzen aan lokale of globale variabelen"
+
+#: ../PLCOpenEditor.py:318
+#, python-format
+msgid "Can't generate program to file %s!"
+msgstr "Kan geen programma genereren naar bestand%s!"
+
+#: ../controls/VariablePanel.py:289
+msgid "Can't give a location to a function block instance"
+msgstr "Kan geen locatie toewijzen aan een functieblok instance"
+
+#: ../PLCOpenEditor.py:363
+#, python-format
+msgid "Can't save project to file %s!"
+msgstr "Kan project niet opslaan naar bestand %s!"
+
+#: ../controls/VariablePanel.py:339
+msgid "Can't set an initial value to a function block instance"
+msgstr "Kan geen initiële variabele instellen voor een functieblok."
+
+#: ../ConfigTreeNode.py:532
+#, python-brace-format
+msgid "Cannot create child {a1} of type {a2} "
+msgstr "Kan geen {a1} kind aanmaken van type {a2}"
+
+#: ../ConfigTreeNode.py:454
+#, python-format
+msgid "Cannot find lower free IEC channel than %d\n"
+msgstr "Kan geen lager vrij IEC kanaal vinden dan %d\n"
+
+#: ../connectors/PYRO/__init__.py:139
+msgid "Cannot get PLC status - connection failed.\n"
+msgstr "Kan geen PLC status opvragen - verbinden niet gelukt\n"
+
+#: ../ProjectController.py:967
+msgid "Cannot open/parse VARIABLES.csv!\n"
+msgstr "Kan VARIABLES.csv niet openen/verwerken!\n"
+
+#: ../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 ""
+"Kan geen bit-offset instellen voor niet-booleaanse '{a1}' variabele "
+"(ID:{a2},Idx:{a3},sIdx:{a4}))"
+
+#: ../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 "Hoofdlettergevoelig"
+
+#: ../editors/Viewer.py:581
+msgid "Center"
+msgstr "Centreer"
+
+#: ../Beremiz_service.py:276
+msgid "Change IP of interface to bind"
+msgstr "Verander IP of interface om te binden"
+
+#: ../Beremiz_service.py:275
+msgid "Change Name"
+msgstr "Naam Wijzigen"
+
+#: ../IDEFrame.py:1977
+msgid "Change POU Type To"
+msgstr "Verander POU-type Naar"
+
+#: ../Beremiz_service.py:277
+msgid "Change Port Number"
+msgstr "Verander Poortnummer"
+
+#: ../Beremiz_service.py:278
+msgid "Change working directory"
+msgstr "Verander Werkmap"
+
+#: ../plcopen/iec_std.csv:81
+msgid "Character string"
+msgstr "Karakterstreng"
+
+#: ../svgui/svgui.py:136
+msgid "Choose a SVG file"
+msgstr "Kies een SVG-bestand"
+
+#: ../ProjectController.py:561
+msgid "Choose a directory to save project"
+msgstr "Kies een map om het project in op te slaan"
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+msgid "Choose a file"
+msgstr "Kies een bestand"
+
+#: ../BeremizIDE.py:900
+msgid "Choose a project"
+msgstr "Kies een project"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
+#, python-format
+msgid "Choose a value for %s:"
+msgstr "Kies een waarde voor %s:"
+
+#: ../Beremiz_service.py:333
+msgid "Choose a working directory "
+msgstr "Kies een werkmap"
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Kies een lege map voor een nieuw project"
+
+#: ../ProjectController.py:468
+msgid "Chosen folder doesn't contain a program. It's not a valid project!"
+msgstr "Gekozen map bevat geen programma. Het is geen geldig project."
+
+#: ../ProjectController.py:435
+msgid "Chosen folder isn't empty. You can't use it for a new project!"
+msgstr ""
+"De gekozen map is niet leeg. Je kunt het niet gebruiken voor een nieuw "
+"project!"
+
+#: ../controls/VariablePanel.py:60
+msgid "Class"
+msgstr "Klasse"
+
+#: ../controls/VariablePanel.py:472
+msgid "Class Filter:"
+msgstr "Klassefilter:"
+
+#: ../dialogs/FBDVariableDialog.py:74
+msgid "Class:"
+msgstr "Klasse:"
+
+#: ../ProjectController.py:1821
+msgid "Clean"
+msgstr "Schoonmaken"
+
+#: ../controls/LogViewer.py:327
+msgid "Clean log messages"
+msgstr "Maak berichtenlog schoon"
+
+#: ../ProjectController.py:1822
+msgid "Clean project build folder"
+msgstr "Project buildmap schoonmaken"
+
+#: ../ProjectController.py:1332
+msgid "Cleaning the build directory\n"
+msgstr "Buildmap aan het schoonmaken\n"
+
+#: ../IDEFrame.py:437
+msgid "Clear Errors"
+msgstr "Foutmeldingen verwijderen"
+
+#: ../editors/Viewer.py:680
+msgid "Clear Execution Order"
+msgstr "Uitvoerorder verwijderen"
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+msgid "Close"
+msgstr "Sluiten"
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+msgid "Close Application"
+msgstr "Programma Afsluiten"
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
+msgid "Close Project"
+msgstr "Project Sluiten"
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
+msgid "Close Tab"
+msgstr "Tab Sluiten"
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+msgid "Coil"
+msgstr ""
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+msgid "Comment"
+msgstr "Commentaar"
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
+msgid "Community support"
+msgstr "Community Ondersteuning"
+
+#: ../dialogs/ProjectDialog.py:65
+msgid "Company Name"
+msgstr "Bedrijfsnaam"
+
+#: ../controls/ProjectPropertiesPanel.py:106
+msgid "Company Name (required):"
+msgstr "Bedrijfsnaam (verplicht):"
+
+#: ../controls/ProjectPropertiesPanel.py:107
+msgid "Company URL (optional):"
+msgstr "Bedrijfs-URL (optioneel):"
+
+#: ../plcopen/iec_std.csv:75
+msgid "Comparison"
+msgstr "Vergelijking"
+
+#: ../ProjectController.py:756
+msgid "Compiling IEC Program into C code...\n"
+msgstr "IEC Progamma compileren naar C-code...\n"
+
+#: ../plcopen/iec_std.csv:85
+msgid "Concatenation"
+msgstr "Aaneenschakeling"
+
+#: ../editors/ConfTreeNodeEditor.py:241
+msgid "Config"
+msgstr "Config"
+
+#: ../editors/ProjectNodeEditor.py:39
+msgid "Config variables"
+msgstr "Config variabelen"
+
+#: ../dialogs/SearchInProjectDialog.py:43
+msgid "Configuration"
+msgstr "Configuratie"
+
+#: ../plcopen/types_enums.py:77
+msgid "Configurations"
+msgstr "Configuraties"
+
+#: ../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 "Bevestig of verander variabelenaam"
+
+#: ../ProjectController.py:1842
+msgid "Connect"
+msgstr "Verbinden"
+
+#: ../ProjectController.py:1843
+msgid "Connect to the target PLC"
+msgstr "Verbind met doel-PLC"
+
+#: ../ProjectController.py:1391
+#, python-format
+msgid "Connected to URI: %s"
+msgstr "Verbonden met URI: %s"
+
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
+msgid "Connection"
+msgstr "Verbinding"
+
+#: ../dialogs/ConnectionDialog.py:55
+msgid "Connection Properties"
+msgstr "Verbindingseigenschappen"
+
+#: ../ProjectController.py:1691
+msgid "Connection canceled!\n"
+msgstr "Verbinden afgebroken!\n"
+
+#: ../ProjectController.py:1714
+#, python-format
+msgid "Connection failed to %s!\n"
+msgstr "Verbinden met %s niet gelukt!\n"
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+msgid "Connection lost!\n"
+msgstr "Verbinding verbroken!\n"
+
+#: ../connectors/PYRO/__init__.py:110
+#, python-format
+msgid "Connection to '%s' failed.\n"
+msgstr "Verbinden met '%s' niet gelukt! \n"
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+msgid "Connector"
+msgstr "Stekker"
+
+#: ../dialogs/SFCStepDialog.py:68
+msgid "Connectors:"
+msgstr "Stekkers:"
+
+#: ../BeremizIDE.py:378
+msgid "Console"
+msgstr ""
+
+#: ../controls/VariablePanel.py:75
+msgid "Constant"
+msgstr "Constante"
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+msgid "Contact"
+msgstr "Contact"
+
+#: ../controls/ProjectPropertiesPanel.py:217
+msgid "Content Description (optional):"
+msgstr "Inhoudsbeschrijving (optioneel):"
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+msgid "Continuation"
+msgstr "Vervolg"
+
+#: ../plcopen/iec_std.csv:18
+msgid "Conversion from BCD"
+msgstr "Conversie van BCD"
+
+#: ../plcopen/iec_std.csv:19
+msgid "Conversion to BCD"
+msgstr "Conversie naar BCD"
+
+#: ../plcopen/iec_std.csv:21
+msgid "Conversion to date"
+msgstr "Conversie naar datum"
+
+#: ../plcopen/iec_std.csv:20
+msgid "Conversion to time-of-day"
+msgstr "Conversie naar tijd van de dag"
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
+msgid "Copy"
+msgstr "Kopiëren"
+
+#: ../IDEFrame.py:1964
+msgid "Copy POU"
+msgstr "POU Kopiëren"
+
+#: ../editors/FileManagementPanel.py:68
+msgid "Copy file from left folder to right"
+msgstr "Bestand kopiëren van linker- naar rechtermap"
+
+#: ../editors/FileManagementPanel.py:67
+msgid "Copy file from right folder to left"
+msgstr "Bestand kopiëren van rechter- naar linkermap"
+
+#: ../plcopen/iec_std.csv:28
+msgid "Cosine"
+msgstr "Cosinus"
+
+#: ../ConfigTreeNode.py:660
+#, python-brace-format
+msgid ""
+"Could not add child \"{a1}\", type {a2} :\n"
+"{a3}\n"
+msgstr ""
+"Kan kind \"{a1}\", type {a2} niet toevoegen:\n"
+"{a3}\n"
+
+#: ../py_ext/PythonFileCTNMixin.py:81
+#, python-format
+msgid "Couldn't import old %s file."
+msgstr "Kan oud%s bestand niet importeren."
+
+#: ../ConfigTreeNode.py:630
+#, python-brace-format
+msgid ""
+"Couldn't load confnode base parameters {a1} :\n"
+" {a2}"
+msgstr ""
+"Kan conflode basisparameters {a1} niet laden:\n"
+"{a2}"
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
+#, python-brace-format
+msgid ""
+"Couldn't load confnode parameters {a1} :\n"
+" {a2}"
+msgstr ""
+"Kan conflode parameters {a1} niet laden:\n"
+"{a2}"
+
+#: ../PLCControler.py:552
+msgid "Couldn't paste non-POU object."
+msgstr "Kan niet-POU object niet plakken."
+
+#: ../ProjectController.py:1636
+msgid "Couldn't start PLC !\n"
+msgstr "Kan PLC niet opstarten!\n"
+
+#: ../ProjectController.py:1644
+msgid "Couldn't stop PLC !\n"
+msgstr "Kan PLC niet stoppen!\n"
+
+#: ../svgui/svgui.py:57
+msgid "Create HMI"
+msgstr "Maak HMI"
+
+#: ../dialogs/PouDialog.py:54
+msgid "Create a new POU"
+msgstr "Maak een nieuwe POU"
+
+#: ../dialogs/PouActionDialog.py:45
+msgid "Create a new action"
+msgstr "Maak een nieuwe actie"
+
+#: ../IDEFrame.py:166
+msgid "Create a new action block"
+msgstr "Maak een nieuw actieblok"
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+msgid "Create a new block"
+msgstr "Maak een nieuw blok"
+
+#: ../IDEFrame.py:139
+msgid "Create a new branch"
+msgstr "Maak een nieuwe tak"
+
+#: ../IDEFrame.py:133
+msgid "Create a new coil"
+msgstr ""
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+msgid "Create a new comment"
+msgstr "Maak een nieuwe opmerking"
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+msgid "Create a new connection"
+msgstr "Maak een nieuwe verbinding"
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
+msgid "Create a new contact"
+msgstr "Maak een nieuw contact"
+
+#: ../IDEFrame.py:169
+msgid "Create a new divergence"
+msgstr "Maak een nieuwe divergentie"
+
+#: ../dialogs/SFCDivergenceDialog.py:54
+msgid "Create a new divergence or convergence"
+msgstr "Maak een nieuwe di- of convergentie"
+
+#: ../IDEFrame.py:157
+msgid "Create a new initial step"
+msgstr "Maak een nieuwe beginstap"
+
+#: ../IDEFrame.py:172
+msgid "Create a new jump"
+msgstr "Maak een nieuwe sprong"
+
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
+msgid "Create a new power rail"
+msgstr "Maak een nieuwe spanningslijn"
+
+#: ../IDEFrame.py:130
+msgid "Create a new rung"
+msgstr ""
+
+#: ../IDEFrame.py:160
+msgid "Create a new step"
+msgstr "Maak een nieuwe stap"
+
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+msgid "Create a new transition"
+msgstr "Maak een nieuwe overgang"
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+msgid "Create a new variable"
+msgstr "Maak een nieuwe variabele"
+
+#: ../dialogs/AboutDialog.py:109
+msgid "Credits"
+msgstr "Credits"
+
+#: ../Beremiz_service.py:424
+msgid "Current working directory :"
+msgstr "Huidige werkmap:"
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+msgid "Cut"
+msgstr "Knip"
+
+#: ../editors/ResourceEditor.py:81
+msgid "Cyclic"
+msgstr "Cyclisch"
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
+#: ../plcopen/iec_std.csv:60
+msgid "DEPRECATED"
+msgstr "VEROUDERD"
+
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
+msgid "DS-301 Profile"
+msgstr "DS-301 Profiel"
+
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
+msgid "DS-302 Profile"
+msgstr "DS-302 Profiel"
+
+#: ../dialogs/SearchInProjectDialog.py:39
+msgid "Data Type"
+msgstr "Datatype"
+
+#: ../plcopen/types_enums.py:76
+msgid "Data Types"
+msgstr "Datatypes"
+
+#: ../plcopen/iec_std.csv:16
+msgid "Data type conversion"
+msgstr "Datatypeconversie"
+
+#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
+msgid "Date addition"
+msgstr "Datatoevoeging"
+
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
+#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
+msgid "Date and time subtraction"
+msgstr "Datum- en tijdaftrekking"
+
+#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
+msgid "Date subtraction"
+msgstr "Datumaftrekking"
+
+#: ../dialogs/DurationEditorDialog.py:46
+msgid "Days:"
+msgstr "Dagen:"
+
+#: ../ProjectController.py:1729
+msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
+msgstr ""
+"Debug komt niet overeen met PLC - stop/transfer/start om opnieuw in te "
+"schakelen\n"
+
+#: ../controls/PouInstanceVariablesPanel.py:144
+msgid "Debug instance"
+msgstr "Instance Debuggen"
+
+#: ../editors/Viewer.py:490
+#, python-format
+msgid "Debug: %s"
+msgstr "Debuggen: %s"
+
+#: ../ProjectController.py:1471
+#, python-format
+msgid "Debug: Unknown variable '%s'\n"
+msgstr "Debug: Onbekende variabele '%s'\n"
+
+#: ../ProjectController.py:1469
+#, python-format
+msgid "Debug: Unsupported type to debug '%s'\n"
+msgstr "Debug: Type om te debuggen '%s' wordt niet ondersteund\n"
+
+#: ../IDEFrame.py:660
+msgid "Debugger"
+msgstr "Debugger"
+
+#: ../ProjectController.py:1726
+msgid "Debugger ready\n"
+msgstr "Debugger klaar\n"
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: ../editors/Viewer.py:610
+msgid "Delete Divergence Branch"
+msgstr "Divergerende Tak Verwijderen"
+
+#: ../editors/FileManagementPanel.py:157
+msgid "Delete File"
+msgstr "Bestand Verwijderen"
+
+#: ../editors/Viewer.py:597
+msgid "Delete Wire Segment"
+msgstr "Draadsegment Verwijderen"
+
+#: ../controls/CustomEditableListBox.py:44
+msgid "Delete item"
+msgstr "Item Verwijderen"
+
+#: ../plcopen/iec_std.csv:88
+msgid "Deletion (within)"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:161
+msgid "Derivation Type:"
+msgstr "Afleidingstype:"
+
+#: ../editors/CodeFileEditor.py:735
+msgid "Description"
+msgstr "Beschrijving"
+
+#: ../controls/VariablePanel.py:463
+msgid "Description:"
+msgstr "Beschrijving:"
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
+msgid "Dimensions:"
+msgstr "Dimensies:"
+
+#: ../dialogs/FindInPouDialog.py:69
+msgid "Direction"
+msgstr "Richting"
+
+#: ../dialogs/BrowseLocationsDialog.py:102
+msgid "Direction:"
+msgstr "Richting:"
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Directly"
+msgstr "Direct"
+
+#: ../ProjectController.py:1855
+msgid "Disconnect"
+msgstr "Verbinding Verbreken"
+
+#: ../ProjectController.py:1856
+msgid "Disconnect from PLC"
+msgstr "Verbinding met PLC verbreken"
+
+#: ../ProjectController.py:1401
+msgid "Disconnected"
+msgstr "Verbinding Verbroken"
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+msgid "Divergence"
+msgstr "Divergentie"
+
+#: ../plcopen/iec_std.csv:36
+msgid "Division"
+msgstr "Deling"
+
+#: ../editors/FileManagementPanel.py:156
+#, python-format
+msgid "Do you really want to delete the file '%s'?"
+msgstr "Weet u zeker dat u het bestand '%s' wilt verwijderen?"
+
+#: ../controls/VariablePanel.py:65
+msgid "Documentation"
+msgstr "Documentatie"
+
+#: ../PLCOpenEditor.py:312
+msgid "Done"
+msgstr "Klaar"
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Duration"
+msgstr "Duur"
+
+#: ../canfestival/canfestival.py:174
+msgid "EDS files (*.eds)|*.eds|All files|*.*"
+msgstr "EDS bestanden (*.eds)|*.eds|All files|*.*"
+
+#: ../editors/Viewer.py:668
+msgid "Edit Block"
+msgstr "Blok wijzigen"
+
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:56
+msgid "Edit Contact Values"
+msgstr "Contactwaarden Wijzigen"
+
+#: ../dialogs/DurationEditorDialog.py:62
+msgid "Edit Duration"
+msgstr "Duur Wijzigen"
+
+#: ../dialogs/SFCStepDialog.py:53
+msgid "Edit Step"
+msgstr "Stap Wijzigen"
+
+#: ../wxglade_hmi/wxglade_hmi.py:45
+msgid "Edit a WxWidgets GUI with WXGlade"
+msgstr "Een WxWidgets GUI with WXGlade wijzigen"
+
+#: ../dialogs/ActionBlockDialog.py:127
+msgid "Edit action block properties"
+msgstr "Actieblokeigenschappen wijzigen"
+
+#: ../dialogs/ArrayTypeDialog.py:47
+msgid "Edit array type properties"
+msgstr "Arraytype-eigenschappen wijzigen"
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+msgid "Edit comment"
+msgstr "Opmerking Wijzigen"
+
+#: ../editors/FileManagementPanel.py:69
+msgid "Edit file"
+msgstr "Bestand Wijzigen"
+
+#: ../controls/CustomEditableListBox.py:42
+msgid "Edit item"
+msgstr "Item Wijzigen"
+
+#: ../editors/Viewer.py:3059
+msgid "Edit jump target"
+msgstr "Springdoel wijzigen"
+
+#: ../ProjectController.py:1873
+msgid "Edit raw IEC code added to code generated by PLCGenerator"
+msgstr ""
+"Wijzig rauwe IEC-code die toegevoegd is aan de door PLCGenerator "
+"gegenereerde code"
+
+#: ../editors/SFCViewer.py:815
+msgid "Edit step name"
+msgstr "Stapnaam wijzigen"
+
+#: ../dialogs/SFCTransitionDialog.py:53
+msgid "Edit transition"
+msgstr "Vertaling Wijzigen"
+
+#: ../IDEFrame.py:632
+msgid "Editor ToolBar"
+msgstr "Editor ToolBar "
+
+#: ../ProjectController.py:1294
+msgid "Editor selection"
+msgstr "Editorkeuze"
+
+#: ../editors/DataTypeEditor.py:360
+msgid "Elements :"
+msgstr "Elementen:"
+
+#: ../ProjectController.py:1399
+msgid "Empty"
+msgstr "Leeg"
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Lege dimensie niet toegestaan."
+
+#: ../Beremiz_service.py:341
+msgid "Enter a name "
+msgstr "Voer een naam in"
+
+#: ../Beremiz_service.py:326
+msgid "Enter a port number "
+msgstr "Voer een poortnummer in"
+
+#: ../Beremiz_service.py:317
+msgid "Enter the IP of the interface to bind"
+msgstr "Voer het IP van de te binden interface in"
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Enumerated"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:77
+msgid "Equal to"
+msgstr "Gelijk aan"
+
+#: ../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 "Fout"
+
+#: ../ProjectController.py:811
+msgid ""
+"Error : At least one configuration and one resource must be declared in PLC "
+"!\n"
+msgstr ""
+"Fout: Er moeten tenminste één configuratie en één bron gedeclareerd worden "
+"in de PLC!\n"
+
+#: ../ProjectController.py:803
+#, python-format
+msgid "Error : IEC to C compiler returned %d\n"
+msgstr "Fout: IEC naar C compiler geeft %d\n"
+
+#: ../ProjectController.py:731
+#, python-format
+msgid ""
+"Error in ST/IL/SFC code generator :\n"
+"%s\n"
+msgstr ""
+"Fout in ST/IL/SFC codegenerator:\n"
+"%s\n"
+
+#: ../ConfigTreeNode.py:219
+#, python-format
+msgid "Error while saving \"%s\"\n"
+msgstr "Fout tijdens het opslaan \"%s\"\n"
+
+#: ../canfestival/canfestival.py:179
+msgid "Error: Export slave failed\n"
+msgstr "Fout: Export Slaaf niet gelukt\n"
+
+#: ../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 "Fout: Geen Meester gegenereerd\n"
+
+#: ../canfestival/canfestival.py:383
+msgid "Error: No PLC built\n"
+msgstr ""
+
+#: ../ProjectController.py:1708
+#, python-format
+msgid "Exception while connecting %s!\n"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:123
+msgid "Execution Control:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+msgid "Execution Order:"
+msgstr ""
+
+#: ../features.py:36
+msgid "Experimental web based HMI"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:38
+msgid "Exponent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:26
+msgid "Exponentiation"
+msgstr ""
+
+#: ../canfestival/canfestival.py:186
+msgid "Export CanOpen slave to EDS file"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+msgid "Export graph values to clipboard"
+msgstr ""
+
+#: ../canfestival/canfestival.py:185
+msgid "Export slave"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:94
+msgid "Expression:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "External"
+msgstr ""
+
+#: ../ProjectController.py:826
+msgid "Extracting Located Variables...\n"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "FBD"
+msgstr ""
+
+#: ../ProjectController.py:1773
+msgid "Failed : Must build before transfer.\n"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+msgid "Falling Edge"
+msgstr ""
+
+#: ../ProjectController.py:1098
+msgid "Fatal : cannot get builder.\n"
+msgstr ""
+
+#: ../Beremiz.py:160
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:167
+#, python-format
+msgid "Field %s hasn't a valid value!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:169
+#, python-format
+msgid "Fields %s haven't a valid value!"
+msgstr ""
+
+#: ../controls/FolderTree.py:221
+#, python-format
+msgid "File '%s' already exists!"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+msgid "Find"
+msgstr ""
+
+#: ../IDEFrame.py:379
+msgid "Find Next"
+msgstr ""
+
+#: ../IDEFrame.py:381
+msgid "Find Previous"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:90
+msgid "Find position"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:58
+msgid "Find:"
+msgstr ""
+
+#: ../editors/Viewer.py:1633
+msgid "Force value"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:176
+msgid "Forcing Variable Value"
+msgstr ""
+
+#: ../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:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
+msgid "Form isn't complete. Name must be filled!"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:235
+msgid "Form isn't complete. Valid block type must be selected!"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:75
+msgid "Forward"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+msgid "Function"
+msgstr ""
+
+#: ../IDEFrame.py:354
+msgid "Function &Block"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
+msgid "Function Block"
+msgstr ""
+
+#: ../controls/VariablePanel.py:868
+msgid "Function Block Types"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Function Blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:290
+msgid "Function Blocks can't be used in Functions!"
+msgstr ""
+
+#: ../PLCControler.py:1907
+#, python-format
+msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Functions"
+msgstr ""
+
+#: ../PLCOpenEditor.py:88
+msgid "Generate Program"
+msgstr ""
+
+#: ../ProjectController.py:722
+msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Global"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+msgid "Go to current value"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:189
+msgid "Graphics"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Greater than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:76
+msgid "Greater than or equal to"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:135
+msgid "Height:"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:89
+msgid "Home Directory:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:165
+msgid "Horizontal:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:47
+msgid "Hours:"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "IL"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:91
+msgid "IP"
+msgstr ""
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+msgid "IP is not valid!"
+msgstr ""
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
+msgid "Import SVG"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
+msgid "InOut"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:300
+#, python-brace-format
+msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:306
+#, python-format
+msgid "Incompatible size of data between \"%s\" and \"BOOL\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:310
+#, python-brace-format
+msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Indicator"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:734
+msgid "Initial"
+msgstr ""
+
+#: ../editors/Viewer.py:650
+msgid "Initial Step"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
+msgid "Initial Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
+msgid "Initial Value:"
+msgstr ""
+
+#: ../svgui/svgui.py:56
+msgid "Inkscape"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
+msgid "Inline"
+msgstr ""
+
+#: ../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:99
+msgid "Inputs:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:87
+msgid "Insertion (into)"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1948
+#, python-format
+msgid "Instance with id %d doesn't exist!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:279
+msgid "Instances:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:88
+msgid "Interface"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Interrupt"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Interval"
+msgstr ""
+
+#: ../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:407
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
+#, python-format
+msgid "Invalid value \"%s\" for variable grid element"
+msgstr ""
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
+#, python-format
+msgid "Invalid value \"%s\" for viewer block"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:211
+#, python-brace-format
+msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:124
+msgid ""
+"Invalid value!\n"
+"You must fill a numeric value."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+msgid "Jump"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "LD"
+msgstr ""
+
+#: ../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:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
+msgid "Language"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:206
+msgid "Language (optional):"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
+msgid "Language:"
+msgstr ""
+
+#: ../ProjectController.py:1779
+msgid "Latest build already matches current target. Transfering anyway...\n"
+msgstr ""
+
+#: ../Beremiz_service.py:281
+msgid "Launch WX GUI inspector"
+msgstr ""
+
+#: ../Beremiz_service.py:280
+msgid "Launch a live Python shell"
+msgstr ""
+
+#: ../editors/Viewer.py:580
+msgid "Left"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:64
+msgid "Left PowerRail"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Length of string"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:78
+msgid "Less than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:79
+msgid "Less than or equal to"
+msgstr ""
+
+#: ../IDEFrame.py:652
+msgid "Library"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:145
+msgid "License"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:73
+msgid "Limitation"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:209
+msgid "Linking :\n"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+msgid "Local"
+msgstr ""
+
+#: ../canfestival/canfestival.py:359
+msgid "Local entries"
+msgstr ""
+
+#: ../ProjectController.py:1685
+msgid "Local service discovery failed!\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:62
+msgid "Location"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:79
+msgid "Locations available:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:25
+msgid "Logarithm to base 10"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:102
+#, python-format
+msgid "MDNS resolution failure for '%s'\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
+msgid "Map Variable"
+msgstr ""
+
+#: ../features.py:31
+msgid "Map located variables over CANopen"
+msgstr ""
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
+msgid "Master"
+msgstr ""
+
+#: ../ConfigTreeNode.py:544
+#, python-brace-format
+msgid "Max count ({a1}) reached for this confnode of type {a2} "
+msgstr ""
+
+#: ../plcopen/iec_std.csv:71
+msgid "Maximum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:246
+msgid "Maximum:"
+msgstr ""
+
+#: ../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:617
+msgid "Menu ToolBar"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:51
+msgid "Microseconds:"
+msgstr ""
+
+#: ../editors/Viewer.py:585
+msgid "Middle"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:50
+msgid "Milliseconds:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:72
+msgid "Minimum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:233
+msgid "Minimum:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:48
+msgid "Minutes:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:231
+msgid "Miscellaneous"
+msgstr ""
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
+msgid "Modifier:"
+msgstr ""
+
+#: ../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:146
+msgid "Move action down"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:145
+msgid "Move action up"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:46
+msgid "Move down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:367
+msgid "Move element down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:366
+msgid "Move element up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:286
+msgid "Move instance down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:285
+msgid "Move instance up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:255
+msgid "Move task down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:254
+msgid "Move task up"
+msgstr ""
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+msgid "Move the view"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:45
+msgid "Move up"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+msgid "Move variable down"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+msgid "Move variable up"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:74
+msgid "Multiplexer (select 1 of N)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:34
+msgid "Multiplication"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:87
+msgid "My Computer:"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:89
+msgid "NAME"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
+msgid "Name"
+msgstr ""
+
+#: ../Beremiz_service.py:342
+msgid "Name must not be null!"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
+msgid "Name:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:24
+msgid "Natural logarithm"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+msgid "Negated"
+msgstr ""
+
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
+#: ../Beremiz_service.py:580
+msgid "Nevow/Athena import failed :"
+msgstr ""
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
+msgid "New"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:43
+msgid "New item"
+msgstr ""
+
+#: ../editors/Viewer.py:553
+msgid "No Modifier"
+msgstr ""
+
+#: ../ProjectController.py:1808
+msgid "No PLC to transfer (did build succeed ?)\n"
+msgstr ""
+
+#: ../PLCGenerator.py:1678
+#, python-format
+msgid "No body defined in \"%s\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#, python-brace-format
+msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCOpenEditor.py:331
+msgid ""
+"No documentation available.\n"
+"Coming soon."
+msgstr ""
+
+#: ../PLCGenerator.py:841
+#, python-format
+msgid "No informations found for \"%s\" block"
+msgstr ""
+
+#: ../PLCGenerator.py:1232
+#, python-brace-format
+msgid ""
+"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
+"broken"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:175
+msgid "No search results available."
+msgstr ""
+
+#: ../svgui/svgui.py:142
+#, python-format
+msgid "No such SVG file: %s\n"
+msgstr ""
+
+#: ../canfestival/config_utils.py:682
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
+msgstr ""
+
+#: ../canfestival/config_utils.py:387
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
+msgid "No valid value selected!"
+msgstr ""
+
+#: ../PLCGenerator.py:1676
+#, python-format
+msgid "No variable defined in \"%s\" POU"
+msgstr ""
+
+#: ../canfestival/config_utils.py:379
+#, python-brace-format
+msgid "Non existing node ID : {a1} (variable {a2})"
+msgstr ""
+
+#: ../controls/VariablePanel.py:79
+msgid "Non-Retain"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78
+msgid "Normal"
+msgstr ""
+
+#: ../canfestival/config_utils.py:426
+#, python-brace-format
+msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:80
+msgid "Not equal to"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:91
+msgid "Number of sequences:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Numerical"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:736
+msgid "OnChange"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:88
+msgid "Only Elements"
+msgstr ""
+
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
+msgid "Open"
+msgstr ""
+
+#: ../svgui/svgui.py:151
+msgid "Open Inkscape"
+msgstr ""
+
+#: ../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:1879
+msgid "Open a file explorer to manage project files"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
+msgid "Open wxGlade"
+msgstr ""
+
+#: ../controls/VariablePanel.py:64
+msgid "Option"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+msgid "Options"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:109
+msgid "Organization (optional):"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
+msgid "Other Profile"
+msgstr ""
+
+#: ../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:67 ../canfestival/NetworkEditor.py:91
+msgid "PDO Receive"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
+msgid "PDO Transmit"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:174
+msgid "PLC :\n"
+msgstr ""
+
+#: ../BeremizIDE.py:383
+msgid "PLC Log"
+msgstr ""
+
+#: ../ProjectController.py:1082
+msgid "PLC code generation failed !\n"
+msgstr ""
+
+#: ../Beremiz_service.py:305
+msgid "PLC is empty or already started."
+msgstr ""
+
+#: ../Beremiz_service.py:312
+msgid "PLC is not started."
+msgstr ""
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
+#, python-brace-format
+msgid ""
+"PLC syntax error at line {a1}:\n"
+"{a2}"
+msgstr ""
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
+msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
+msgstr ""
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
+msgid "PLCOpenEditor"
+msgstr ""
+
+#: ../PLCOpenEditor.py:339
+msgid ""
+"PLCOpenEditor is part of Beremiz project.\n"
+"\n"
+"Beremiz is an "
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:92
+msgid "PORT"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:109
+msgid "POU Name"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:66
+msgid "POU Name:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:111
+msgid "POU Type"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:73
+msgid "POU Type:"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:52
+#, python-format
+msgid "PYRO connecting to URI : %s\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:68
+#, python-format
+msgid "PYRO using certificates in '%s' \n"
+msgstr ""
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
+msgid "Page Setup"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:124
+msgid "Page Size (optional):"
+msgstr ""
+
+#: ../IDEFrame.py:2640
+#, python-format
+msgid "Page: %d"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:134
+msgid "Parent instance"
+msgstr ""
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+msgid "Paste"
+msgstr ""
+
+#: ../IDEFrame.py:1899
+msgid "Paste POU"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:60
+msgid "Pattern to search:"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:75
+msgid "Pin number:"
+msgstr ""
+
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
+msgid "Please choose a target"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Please enter a block name"
+msgstr ""
+
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+msgid "Please enter comment text"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
+msgid "Please enter step name"
+msgstr ""
+
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+msgid "Please enter text"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:177
+#, python-format
+msgid "Please enter value for a \"%s\" variable:"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be 0 <= port <= 65535!"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be an integer!"
+msgstr ""
+
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+msgid "Power Rail"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:52
+msgid "Power Rail Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
+msgid "Preview"
+msgstr ""
+
+#: ../dialogs/BlockPreviewDialog.py:59
+msgid "Preview:"
+msgstr ""
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
+msgid "Print"
+msgstr ""
+
+#: ../IDEFrame.py:1110
+msgid "Print preview"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Priority"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:91
+msgid "Priority:"
+msgstr ""
+
+#: ../runtime/PLCObject.py:518
+#, python-format
+msgid "Problem starting PLC : error %d"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:63
+msgid "Product Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:90
+msgid "Product Name (required):"
+msgstr ""
+
+#: ../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 "Project Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:88
+msgid "Project Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:89
+msgid "Project Version (optional):"
+msgstr ""
+
+#: ../PLCControler.py:2717
+msgid ""
+"Project file syntax error:\n"
+"\n"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
+msgid "Project properties"
+msgstr ""
+
+#: ../ConfigTreeNode.py:571
+#, python-brace-format
+msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:101
+msgid "Propagate Name"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Properties"
+msgstr ""
+
+#: ../Beremiz_service.py:427
+msgid "Publishing service on local network"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:126
+#, python-format
+msgid "Pyro exception: %s\n"
+msgstr ""
+
+#: ../Beremiz_service.py:420
+msgid "Pyro port :"
+msgstr ""
+
+#: ../py_ext/PythonEditor.py:84
+msgid "Python code"
+msgstr ""
+
+#: ../features.py:34
+msgid "Python file"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Qualifier"
+msgstr ""
+
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+msgid "Quit"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+msgid "Range:"
+msgstr ""
+
+#: ../ProjectController.py:1872
+msgid "Raw IEC code"
+msgstr ""
+
+#: ../BeremizIDE.py:1083
+#, python-format
+msgid "Really delete node '%s'?"
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
+msgid "Redo"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:76
+msgid "Reference"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+msgid "Refresh"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:70
+msgid "Regular expression"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:99
+msgid "Regular expressions"
+msgstr ""
+
+#: ../editors/Viewer.py:1636
+msgid "Release value"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:37
+msgid "Remainder (modulo)"
+msgstr ""
+
+#: ../BeremizIDE.py:1084
+#, python-format
+msgid "Remove %s node"
+msgstr ""
+
+#: ../IDEFrame.py:2445
+msgid "Remove Datatype"
+msgstr ""
+
+#: ../IDEFrame.py:2450
+msgid "Remove Pou"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:144
+msgid "Remove action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:365
+msgid "Remove element"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:66
+msgid "Remove file from left folder"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:284
+msgid "Remove instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:111
+msgid "Remove slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:253
+msgid "Remove task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+msgid "Remove variable"
+msgstr ""
+
+#: ../IDEFrame.py:1979
+msgid "Rename"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:187
+msgid "Replace File"
+msgstr ""
+
+#: ../editors/Viewer.py:598
+msgid "Replace Wire by connections"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:89
+msgid "Replacement (within)"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Reset"
+msgstr ""
+
+#: ../editors/Viewer.py:681
+msgid "Reset Execution Order"
+msgstr ""
+
+#: ../IDEFrame.py:453
+msgid "Reset Perspective"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:103
+msgid "Reset search result"
+msgstr ""
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+msgid "Resources"
+msgstr ""
+
+#: ../controls/VariablePanel.py:77
+msgid "Retain"
+msgstr ""
+
+#: ../controls/VariablePanel.py:455
+msgid "Return Type:"
+msgstr ""
+
+#: ../editors/Viewer.py:582
+msgid "Right"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:65
+msgid "Right PowerRail"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+msgid "Rising Edge"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:65
+msgid "Rotate left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:64
+msgid "Rotate right"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:17
+msgid "Rounding up/down"
+msgstr ""
+
+#: ../ProjectController.py:1828
+msgid "Run"
+msgstr ""
+
+#: ../ProjectController.py:1127
+msgid "Runtime IO extensions C code generation failed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1136
+msgid "Runtime library extensions C code generation failed !\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
+msgid "SDO Client"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
+msgid "SDO Server"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "SFC"
+msgstr ""
+
+#: ../PLCGenerator.py:1433
+#, python-brace-format
+msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
+msgstr ""
+
+#: ../PLCGenerator.py:780
+#, python-format
+msgid "SFC transition in POU \"%s\" must be connected."
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "ST"
+msgstr ""
+
+#: ../PLCOpenEditor.py:308
+msgid "ST files (*.st)|*.st|All files|*.*"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "SVG files (*.svg)|*.svg|All files|*.*"
+msgstr ""
+
+#: ../features.py:36
+msgid "SVGUI"
+msgstr ""
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
+msgid "Save"
+msgstr ""
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
+msgid "Save As..."
+msgstr ""
+
+#: ../BeremizIDE.py:249
+msgid "Save as"
+msgstr ""
+
+#: ../ProjectController.py:530
+msgid "Save path is the same as path of a project! \n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:73
+msgid "Scope"
+msgstr ""
+
+#: ../IDEFrame.py:644
+msgid "Search"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
+msgid "Search in Project"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:49
+msgid "Seconds:"
+msgstr ""
+
+#: ../IDEFrame.py:390
+msgid "Select All"
+msgstr ""
+
+#: ../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:1293
+msgid "Select an editor:"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:292
+msgid "Select an instance"
+msgstr ""
+
+#: ../IDEFrame.py:628
+msgid "Select an object"
+msgstr ""
+
+#: ../ProjectController.py:537
+msgid "Selected directory already contains another project. Overwrite? \n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Selection"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:65
+msgid "Selection Divergence"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:135
+msgid "Service Discovery"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:104
+msgid "Services available:"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Set"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Shift left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:63
+msgid "Shift right"
+msgstr ""
+
+#: ../ProjectController.py:1863
+msgid "Show IEC code generated by PLCGenerator"
+msgstr ""
+
+#: ../canfestival/canfestival.py:407
+msgid "Show Master"
+msgstr ""
+
+#: ../canfestival/canfestival.py:408
+msgid "Show Master generated by config_utils"
+msgstr ""
+
+#: ../ProjectController.py:1862
+msgid "Show code"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:67
+msgid "Simultaneous Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:27
+msgid "Sine"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Single"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:130
+msgid "Source didn't change, no build.\n"
+msgstr ""
+
+#: ../PLCGenerator.py:404
+#, python-brace-format
+msgid ""
+"Source signal has to be defined for single task '{a1}' in resource "
+"'{a2}.{a3}'."
+msgstr ""
+
+#: ../plcopen/iec_std.csv:23
+msgid "Square root (base 2)"
+msgstr ""
+
+#: ../plcopen/definitions.py:50
+msgid "Standard function blocks"
+msgstr ""
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+msgid "Start PLC"
+msgstr ""
+
+#: ../ProjectController.py:1074
+#, python-format
+msgid "Start build in %s\n"
+msgstr ""
+
+#: ../ProjectController.py:1397
+msgid "Started"
+msgstr ""
+
+#: ../ProjectController.py:1633
+msgid "Starting PLC\n"
+msgstr ""
+
+#: ../BeremizIDE.py:393
+msgid "Status ToolBar"
+msgstr ""
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+msgid "Step"
+msgstr ""
+
+#: ../ProjectController.py:1835
+msgid "Stop"
+msgstr ""
+
+#: ../Beremiz_service.py:272
+msgid "Stop PLC"
+msgstr ""
+
+#: ../ProjectController.py:1836
+msgid "Stop Running PLC"
+msgstr ""
+
+#: ../ProjectController.py:1398
+msgid "Stopped"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Structure"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Subrange"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:35
+msgid "Subtraction"
+msgstr ""
+
+#: ../ProjectController.py:1113
+msgid "Successfully built.\n"
+msgstr ""
+
+#: ../IDEFrame.py:449
+msgid "Switch perspective"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
+msgid "Syntax error in regular expression of pattern to search!"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:90
+msgid "TYPE"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:29
+msgid "Tangent"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:97
+msgid "Task"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:248
+msgid "Tasks:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Temp"
+msgstr ""
+
+#: ../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"
+"\n"
+"This is the main community support channel.\n"
+"For posting it is required to be subscribed to the mailing list.\n"
+"\n"
+"You can subscribe to the list here:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:186
+#, python-format
+msgid ""
+"The file '%s' already exist.\n"
+"Do you want to replace it?"
+msgstr ""
+
+#: ../editors/LDViewer.py:893
+msgid "The group of block must be coherent!"
+msgstr ""
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+msgid "There are changes, do you want to save?"
+msgstr ""
+
+#: ../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:1133
+msgid ""
+"There was a problem printing.\n"
+"Perhaps your current printer is not set correctly?"
+msgstr ""
+
+#: ../editors/LDViewer.py:902
+msgid "This option isn't available yet!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#, python-format
+msgid "Tick: %d"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40
+msgid "Time"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
+msgid "Time addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:86
+msgid "Time concatenation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
+msgid "Time division"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
+msgid "Time multiplication"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
+msgid "Time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
+msgid "Time-of-day addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
+#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
+msgid "Time-of-day subtraction"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:188
+msgid "Toggle value"
+msgstr ""
+
+#: ../editors/Viewer.py:584
+msgid "Top"
+msgstr ""
+
+#: ../ProjectController.py:1848
+msgid "Transfer"
+msgstr ""
+
+#: ../ProjectController.py:1849
+msgid "Transfer PLC"
+msgstr ""
+
+#: ../ProjectController.py:1802
+msgid "Transfer completed successfully.\n"
+msgstr ""
+
+#: ../ProjectController.py:1805
+msgid "Transfer failed\n"
+msgstr ""
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
+msgid "Transition"
+msgstr ""
+
+#: ../PLCGenerator.py:1564
+#, python-format
+msgid ""
+"Transition \"%s\" body must contain an output variable or coil referring to "
+"its name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:91
+msgid "Transition Name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:60
+msgid "Transition Name:"
+msgstr ""
+
+#: ../PLCGenerator.py:1657
+#, python-brace-format
+msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:1646
+#, python-brace-format
+msgid ""
+"Transition with content \"{a1}\" not connected to a previous step in "
+"\"{a2}\" POU"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1526
+#, python-format
+msgid "Transition with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Transitions"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:127
+msgid "Translated by"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Triggering"
+msgstr ""
+
+#: ../Beremiz_service.py:490
+msgid "Twisted unavailable."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
+msgid "Type"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:54
+msgid "Type and derivated"
+msgstr ""
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#, python-format
+msgid "Type conflict for location \"%s\""
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Type conversion"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:170
+msgid "Type infos:"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:55
+msgid "Type strict"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:43
+#, python-format
+msgid "Unable to get Xenomai's %s \n"
+msgstr ""
+
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#, python-brace-format
+msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:261
+#, python-format
+msgid "Undefined pou type \"%s\""
+msgstr ""
+
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
+msgid "Undo"
+msgstr ""
+
+#: ../ProjectController.py:442
+msgid "Unknown"
+msgstr ""
+
+#: ../editors/Viewer.py:437
+#, python-format
+msgid "Unknown variable \"%s\" for this POU!"
+msgstr ""
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
+msgid "Unnamed"
+msgstr ""
+
+#: ../PLCControler.py:263
+#, python-format
+msgid "Unnamed%d"
+msgstr ""
+
+#: ../controls/VariablePanel.py:308
+#, python-format
+msgid "Unrecognized data size \"%s\""
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+msgid "User Data Types"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
+msgid "User Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "User-defined POUs"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:267
+msgid "Values:"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
+msgid "Variable"
+msgstr ""
+
+#: ../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:68
+msgid "Variable Properties"
+msgstr ""
+
+#: ../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:439 ../editors/TextViewer.py:388
+msgid "Variable don't belong to this POU!"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:92
+msgid "Variable:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "Variables"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:166
+msgid "Vertical:"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:140
+msgid "WAMP connection timeout"
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:158
+#, python-format
+msgid "WAMP connection to '%s' failed.\n"
+msgstr ""
+
+#: ../Beremiz_service.py:595
+msgid "WAMP import failed :"
+msgstr ""
+
+#: ../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 ""
+
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+msgid "Warning"
+msgstr ""
+
+#: ../ProjectController.py:726
+msgid "Warnings in ST/IL/SFC code generator :\n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:82
+msgid "Whole Project"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:134
+msgid "Width:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:94
+msgid "Wrap search"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:126
+msgid "Written by"
+msgstr ""
+
+#: ../features.py:35
+msgid "WxGlade GUI"
+msgstr ""
+
+#: ../svgui/svgui.py:150
+msgid ""
+"You don't have write permissions.\n"
+"Open Inkscape anyway ?"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
+msgid ""
+"You don't have write permissions.\n"
+"Open wxGlade anyway ?"
+msgstr ""
+
+#: ../ProjectController.py:390
+msgid ""
+"You must have permission to work on the project\n"
+"Work on a project copy ?"
+msgstr ""
+
+#: ../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:677
+msgid "You must select the wire where a contact should be added!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
+msgid "You must type a name!"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:209
+msgid "You must type a value!"
+msgstr ""
+
+#: ../IDEFrame.py:440
+msgid "Zoom"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "days"
+msgstr ""
+
+#: ../PLCOpenEditor.py:317
+#, python-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../util/ProcessLogger.py:178
+#, python-brace-format
+msgid "exited with status {a1} (pid {a2})\n"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "function"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "functionBlock"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "hours"
+msgstr ""
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
+msgid "milliseconds"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "minutes"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "program"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "seconds"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:84
+msgid "string from the middle"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:82
+msgid "string left of"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:83
+msgid "string right of"
+msgstr ""
+
+#: ../Beremiz.py:167
+msgid "update info unavailable."
+msgstr ""
+
+#: ../PLCOpenEditor.py:315
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#: ../PLCControler.py:576
+#, python-brace-format
+msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
+msgstr ""
+
+#: ../ConfigTreeNode.py:58
+#, python-brace-format
+msgid ""
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
+"{a3}"
+msgstr ""
+
+#: Extra XSD strings
+msgid "CanFestivalSlaveNode"
+msgstr ""
+
+msgid "CAN_Device"
+msgstr ""
+
+msgid "CAN_Baudrate"
+msgstr ""
+
+msgid "NodeId"
+msgstr ""
+
+msgid "Sync_Align"
+msgstr ""
+
+msgid "Sync_Align_Ratio"
+msgstr ""
+
+msgid "CanFestivalNode"
+msgstr ""
+
+msgid "Sync_TPDOs"
+msgstr ""
+
+msgid "CanFestivalInstance"
+msgstr ""
+
+msgid "CAN_Driver"
+msgstr ""
+
+msgid "Generic"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Xenomai"
+msgstr ""
+
+msgid "XenoConfig"
+msgstr ""
+
+msgid "Compiler"
+msgstr ""
+
+msgid "CFLAGS"
+msgstr ""
+
+msgid "Linker"
+msgstr ""
+
+msgid "LDFLAGS"
+msgstr ""
+
+msgid "Linux"
+msgstr ""
+
+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 ""
+
+msgid "IEC_Channel"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "BeremizRoot"
+msgstr ""
+
+msgid "TargetType"
+msgstr ""
+
+msgid "Libraries"
+msgstr ""
+
+msgid "URI_location"
+msgstr ""
+
+msgid "Disable_Extensions"
+msgstr ""
+
+msgid "%(codefile_name)s"
+msgstr ""
+
+msgid "variables"
+msgstr ""
+
+msgid "variable"
+msgstr ""
+
+msgid "name"
+msgstr ""
+
+msgid "type"
+msgstr ""
+
+msgid "class"
+msgstr ""
+
+msgid "initial"
+msgstr ""
+
+msgid "desc"
+msgstr ""
+
+msgid "onchange"
+msgstr ""
+
+msgid "opts"
+msgstr ""
+
+#: Extra TC6 documentation strings
+msgid "0 - current time, 1 - load time from PDT"
+msgstr ""
+
+msgid "Preset datetime"
+msgstr ""
+
+msgid "Copy of IN"
+msgstr ""
+
+msgid "Datetime, current or relative to PDT"
+msgstr ""
+
+msgid ""
+"The real time clock has many uses including time stamping, setting dates and"
+" times of day in batch reports, in alarm messages and so on."
+msgstr ""
+
+msgid "1 = integrate, 0 = hold"
+msgstr ""
+
+msgid "Overriding reset"
+msgstr ""
+
+msgid "Input variable"
+msgstr ""
+
+msgid "Initial value"
+msgstr ""
+
+msgid "Sampling period"
+msgstr ""
+
+msgid "NOT R1"
+msgstr ""
+
+msgid "Integrated output"
+msgstr ""
+
+msgid ""
+"The integral function block integrates the value of input XIN over time."
+msgstr ""
+
+msgid "0 = reset"
+msgstr ""
+
+msgid "Input to be differentiated"
+msgstr ""
+
+msgid "Differentiated output"
+msgstr ""
+
+msgid ""
+"The derivative function block produces an output XOUT proportional to the "
+"rate of change of the input XIN."
+msgstr ""
+
+msgid "0 - manual , 1 - automatic"
+msgstr ""
+
+msgid "Process variable"
+msgstr ""
+
+msgid "Set point"
+msgstr ""
+
+msgid "Manual output adjustment - Typically from transfer station"
+msgstr ""
+
+msgid "Proportionality constant"
+msgstr ""
+
+msgid "Reset time"
+msgstr ""
+
+msgid "Derivative time constant"
+msgstr ""
+
+msgid "PV - SP"
+msgstr ""
+
+msgid "FB for integral term"
+msgstr ""
+
+msgid "FB for derivative term"
+msgstr ""
+
+msgid ""
+"The PID (proportional, Integral, Derivative) function block provides the "
+"classical three term controller for closed loop control."
+msgstr ""
+
+msgid "0 - track X0, 1 - ramp to/track X1"
+msgstr ""
+
+msgid "Ramp duration"
+msgstr ""
+
+msgid "BUSY = 1 during ramping period"
+msgstr ""
+
+msgid "Elapsed time of ramp"
+msgstr ""
+
+msgid "The RAMP function block is modelled on example given in the standard."
+msgstr ""
+
+msgid ""
+"The hysteresis function block provides a hysteresis boolean output driven by"
+" the difference of two floating point (REAL) inputs XIN1 and XIN2."
+msgstr ""
+
+msgid "The SR bistable is a latch where the Set dominates."
+msgstr ""
+
+msgid "The RS bistable is a latch where the Reset dominates."
+msgstr ""
+
+msgid ""
+"The semaphore provides a mechanism to allow software elements mutually "
+"exclusive access to certain resources."
+msgstr ""
+
+msgid "The output produces a single pulse when a rising edge is detected."
+msgstr ""
+"De uitgang produceert één enkele puls wanneer een stijgende flank wordt "
+"gedetecteerd."
+
+msgid "The output produces a single pulse when a falling edge is detected."
+msgstr ""
+"De uitgang produceert één enkele puls wanneer een dalende flank wordt "
+"gedetecteerd."
+
+msgid ""
+"The up-counter can be used to signal when a count has reached a maximum "
+"value."
+msgstr ""
+"De opteller kan gebruikt worden om aan te geven wanneer een teller de "
+"maximale waarde heeft bereikt."
+
+msgid ""
+"The down-counter can be used to signal when a count has reached zero, on "
+"counting down from a preset value."
+msgstr ""
+"De afteller kan gebruikt worden om aan te geven wanneer een teller de nul "
+"heeft bereikt na het aftellen vanaf een vooraf ingestelde waarde."
+
+msgid ""
+"The up-down counter has two inputs CU and CD. It can be used to both count "
+"up on one input and down on the other."
+msgstr ""
+"De op/af-teller heeft twee ingangen, CU en CD. Deze kan gebruikt worden om "
+"op één ingang op, en de andere af te tellen."
+
+msgid "first input parameter"
+msgstr "eerste ingangsparameter"
+
+msgid "second input parameter"
+msgstr "tweede ingangsparameter"
+
+msgid "first output parameter"
+msgstr "eerste uitgangsparameter"
+
+msgid "second output parameter"
+msgstr "tweede uitgangsparameter"
+
+msgid "internal state: 0-reset, 1-counting, 2-set"
+msgstr "Interne staat: 0-reset, 1-tellen, 2-set"
+
+msgid ""
+"The pulse timer can be used to generate output pulses of a given time "
+"duration."
+msgstr ""
+"Met de pulse timer kunt u uitgangspulsen met een bepaalde tijdsduur "
+"genereren."
+
+msgid ""
+"The on-delay timer can be used to delay setting an output true, for fixed "
+"period after an input becomes true."
+msgstr ""
+"Met de on-delay timer kunt instellen hoe lang na het 'waar' worden van de "
+"ingang, de uitgang 'waa' geschakeld wordt. "
+
+msgid ""
+"The off-delay timer can be used to delay setting an output false, for fixed "
+"period after input goes false."
+msgstr ""
+"Met de off-delay timer kunt instellen hoe lang na het 'onwaar' worden van de"
+" ingang, de uitgang 'onwaar' geschakeld wordt. "
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/Beremiz_pl.po Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,4032 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Beremiz package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Beremiz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Adam B <adisz.pl@gmail.com>, 2018\n"
+"Language-Team: Polish (https://www.transifex.com/beremiz/teams/75746/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
+
+#: ../util/ExceptionHandler.py:58
+#, python-format
+msgid ""
+"\n"
+"An unhandled exception (bug) occured. Bug report saved at :\n"
+"(%s)\n"
+"\n"
+"Please be kind enough to send this file to:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"You should now restart program.\n"
+"\n"
+"Traceback:\n"
+msgstr ""
+"\n"
+"Wystąpił nieobsługiwany wyjątek (błąd). Raport błędu zapisano w:\n"
+"(%s)\n"
+"\n"
+"Proszę o przesłanie go na adres:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"Zaleca się zrestartowanie programu.\n"
+"\n"
+"Przegląd:\n"
+
+#: ../controls/VariablePanel.py:90
+msgid " External"
+msgstr "Zewnętrzny"
+
+#: ../controls/VariablePanel.py:89
+msgid " InOut"
+msgstr "WeWyj"
+
+#: ../controls/VariablePanel.py:89
+msgid " Input"
+msgstr "Wejście"
+
+#: ../controls/VariablePanel.py:90
+msgid " Local"
+msgstr "Lokalny"
+
+#: ../controls/VariablePanel.py:89
+msgid " Output"
+msgstr "Wyjście"
+
+#: ../controls/VariablePanel.py:91
+msgid " Temp"
+msgstr "Tymczasowe"
+
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#, python-format
+msgid " and %s"
+msgstr "i %s"
+
+#: ../ProjectController.py:1182
+msgid " generation failed !\n"
+msgstr "generowanie nieudane!\n"
+
+#: ../plcopen/plcopen.py:1029
+#, python-format
+msgid "\"%s\" Data Type doesn't exist !!!"
+msgstr "\"%s\" Typ danych nie istnieje !!!"
+
+#: ../plcopen/plcopen.py:1047
+#, python-format
+msgid "\"%s\" POU already exists !!!"
+msgstr "\"%s\" POU już istnieje!"
+
+#: ../plcopen/plcopen.py:1068
+#, python-format
+msgid "\"%s\" POU doesn't exist !!!"
+msgstr "\"POU %s\" nie istnieje !!!"
+
+#: ../editors/Viewer.py:288
+#, python-format
+msgid "\"%s\" can't use itself!"
+msgstr "\"%s\" nie może używać samego siebie!"
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#, python-format
+msgid "\"%s\" config already exists!"
+msgstr "Konfiguracja \"%s\" już istnieje!"
+
+#: ../plcopen/plcopen.py:531
+#, python-format
+msgid "\"%s\" configuration already exists !!!"
+msgstr "Konfiguracja \"%s\" już istnieje !!!"
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "Konfiguracja \"%s\" nie istnieje !!!"
+
+#: ../IDEFrame.py:1638
+#, python-format
+msgid "\"%s\" data type already exists!"
+msgstr "Typ danych \"%s\" już istnieje!"
+
+#: ../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 "Element \"%s\" dla tego pou już istnieje!"
+
+#: ../BeremizIDE.py:928
+#, python-format
+msgid "\"%s\" folder is not a valid Beremiz project\n"
+msgstr "Folder \"%s\" nie jest prawidłowym projektem Beremiz\n"
+
+#: ../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\" jest słowem kluczowym. Nie można go użyć!"
+
+#: ../plcopen/plcopen.py:2836
+#, python-format
+msgid "\"%s\" is an invalid value!"
+msgstr "\"%s\" jest nieprawidłową wartością!"
+
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
+#, python-format
+msgid "\"%s\" is not a valid folder!"
+msgstr "\"%s\" nie jest prawidłowym folderem!"
+
+#: ../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\" nie jest prawidłowym identyfikatorem!"
+
+#: ../IDEFrame.py:2436
+#, python-format
+msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
+msgstr "\"%s\" jest używane przez jeden lub więcej POU. Czy chcesz kontynuować?"
+
+#: ../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 już istnieje!"
+
+#: ../dialogs/SFCStepNameDialog.py:62
+#, python-format
+msgid "\"%s\" step already exists!"
+msgstr "Krok \"%s\" już istnieje!"
+
+#: ../editors/DataTypeEditor.py:566
+#, python-format
+msgid "\"%s\" value already defined!"
+msgstr "\"%s\" wartość już zdefiniowana!"
+
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
+#, python-format
+msgid "\"%s\" value isn't a valid array dimension!"
+msgstr "\"%s\" wartość nie jest prawidłowym wymiarem tablicy!"
+
+#: ../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 ""
+"\"%s\" wartość nie jest prawidłowym wymiarem tablicy!\n"
+"Prawa wartość musi być większa od lewej."
+
+#: ../PLCGenerator.py:1133
+#, python-brace-format
+msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
+msgstr "Funkcja \"{a1}\" anulowana w \"{a2}\" POU: brak podłączonego wejścia"
+
+#: ../editors/Viewer.py:292
+#, python-brace-format
+msgid "\"{a1}\" is already used by \"{a2}\"!"
+msgstr "\"{a1}\" jest już używane przez \"{a2}\"!"
+
+#: ../plcopen/plcopen.py:557
+#, python-brace-format
+msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
+msgstr "Zasób \"{a1}\" już istnieje w konfiguracji \"{a2}\" !!!"
+
+#: ../plcopen/plcopen.py:577
+#, python-brace-format
+msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
+msgstr "Zasób \"{a1}\" nie istnieje w konfiguracji \"{a2}\" !!!"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#, python-format
+msgid "%03gms"
+msgstr "%03gms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#, python-format
+msgid "%dd"
+msgstr "%dd"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#, python-format
+msgid "%dh"
+msgstr "%dh"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
+#, python-format
+msgid "%dm"
+msgstr "%dm"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
+#, python-format
+msgid "%dms"
+msgstr "%dms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#, python-format
+msgid "%ds"
+msgstr "%ds"
+
+#: ../PLCControler.py:1114
+#, python-format
+msgid "%s Data Types"
+msgstr "%s Typy danych"
+
+#: ../PLCControler.py:1097
+#, python-format
+msgid "%s POUs"
+msgstr "%s POU"
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
+#, python-format
+msgid "%s Profile"
+msgstr "%s Profil"
+
+#: ../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' nie ma instancji!"
+
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
+#, python-format
+msgid "%s body don't have text!"
+msgstr "%s 'body' nie ma tekstu!"
+
+#: ../IDEFrame.py:388
+msgid "&Add Element"
+msgstr "&Dodaj element"
+
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
+msgid "&Close"
+msgstr "&Zamknij"
+
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr "&Konfiguracja"
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr "&Typ danych"
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr "&Usuń"
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr "&Wyświetlanie"
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr "&Edytuj"
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr "&Plik"
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr "&Funkcja"
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr "&Pomoc"
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr "&Licencja"
+
+#: ../IDEFrame.py:356
+msgid "&Program"
+msgstr "&Program"
+
+#: ../PLCOpenEditor.py:98
+msgid "&Properties"
+msgstr "&Właściwości"
+
+#: ../BeremizIDE.py:244
+msgid "&Recent Projects"
+msgstr "&Ostatnie projekty"
+
+#: ../IDEFrame.py:358
+msgid "&Resource"
+msgstr "&Zasoby"
+
+#: ../controls/SearchResultPanel.py:247
+#, python-brace-format
+msgid "'{a1}' - {a2} match in project"
+msgstr "\"{a1}\" - {a2} powiązanie w projekcie"
+
+#: ../controls/SearchResultPanel.py:249
+#, python-brace-format
+msgid "'{a1}' - {a2} matches in project"
+msgstr "\"{a1}\" - {a2} powiązań w projekcie"
+
+#: ../connectors/PYRO/__init__.py:98
+#, python-brace-format
+msgid "'{a1}' is located at {a2}\n"
+msgstr "\"{a1}\" znajduje się w {a2}\n"
+
+#: ../controls/SearchResultPanel.py:298
+#, python-format
+msgid "(%d matches)"
+msgstr "(%d powiązań)"
+
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
+#, python-format
+msgid ", %s"
+msgstr ", %s"
+
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr "- Wybierz typ URI -"
+
+#: ../controls/LogViewer.py:287
+msgid "1d"
+msgstr "1d"
+
+#: ../controls/LogViewer.py:288
+msgid "1h"
+msgstr "1h"
+
+#: ../controls/LogViewer.py:289
+msgid "1m"
+msgstr "1m"
+
+#: ../controls/LogViewer.py:290
+msgid "1s"
+msgstr "1s"
+
+#: ../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 ""
+"POU ma element o nazwie \"%s\". Może to spowodować konflikt. Czy chcesz "
+"kontynuować?"
+
+#: ../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 "POU o nazwie \"%s\" już istnieje!"
+
+#: ../ConfigTreeNode.py:424
+#, python-brace-format
+msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
+msgstr "Podobiekt o nazwie \"{a1}\" już istnieje -> \"{a2}\"\n"
+
+#: ../dialogs/BrowseLocationsDialog.py:229
+msgid "A location must be selected!"
+msgstr "Lokalizacja musi być wybrana!"
+
+#: ../editors/ResourceEditor.py:485
+msgid "A task with the same name already exists!"
+msgstr "Zadanie o tej samej nazwie już istnieje!"
+
+#: ../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 "Zmienna o nazwie \"%s\" już istnieje w tym pou!"
+
+#: ../editors/CodeFileEditor.py:778
+#, python-format
+msgid "A variable with \"%s\" as name already exists!"
+msgstr "Zmienna o nazwie \"%s\" już istnieje!"
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
+msgid "About"
+msgstr "O programie"
+
+#: ../plcopen/iec_std.csv:22
+msgid "Absolute number"
+msgstr "Liczba bezwzględna"
+
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
+msgid "Action"
+msgstr "Akcja"
+
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+msgid "Action Block"
+msgstr "Blok akcji"
+
+#: ../dialogs/PouActionDialog.py:89
+msgid "Action Name"
+msgstr "Nazwa akcji"
+
+#: ../dialogs/PouActionDialog.py:56
+msgid "Action Name:"
+msgstr "Nazwa akcji:"
+
+#: ../plcopen/plcopen.py:1567
+#, python-format
+msgid "Action with name %s doesn't exist!"
+msgstr "Akcja o nazwie %s nie istnieje!"
+
+#: ../plcopen/types_enums.py:76
+msgid "Actions"
+msgstr "Akcje"
+
+#: ../dialogs/ActionBlockDialog.py:139
+msgid "Actions:"
+msgstr "Akcje:"
+
+#: ../editors/Viewer.py:473
+msgid "Active"
+msgstr "Aktywny"
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+msgid "Add"
+msgstr "Dodaj"
+
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+msgid "Add Action"
+msgstr "Dodaj akcję"
+
+#: ../features.py:33
+msgid "Add C code accessing located variables synchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1907
+msgid "Add Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:1887
+msgid "Add DataType"
+msgstr ""
+
+#: ../editors/Viewer.py:609
+msgid "Add Divergence Branch"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:121
+msgid "Add IP"
+msgstr ""
+
+#: ../IDEFrame.py:1895
+msgid "Add POU"
+msgstr ""
+
+#: ../features.py:34
+msgid "Add Python code executed asynchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+msgid "Add Resource"
+msgstr ""
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+msgid "Add Transition"
+msgstr ""
+
+#: ../editors/Viewer.py:596
+msgid "Add Wire Segment"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447
+msgid "Add a new initial step"
+msgstr ""
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+msgid "Add a new jump"
+msgstr ""
+
+#: ../editors/SFCViewer.py:469
+msgid "Add a new step"
+msgstr ""
+
+#: ../features.py:35
+msgid "Add a simple WxGlade based GUI."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:143
+msgid "Add action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:364
+msgid "Add element"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:283
+msgid "Add instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:110
+msgid "Add slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:252
+msgid "Add task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+msgid "Add variable"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Addition"
+msgstr ""
+
+#: ../plcopen/definitions.py:51
+msgid "Additional function blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:669
+msgid "Adjust Block Size"
+msgstr ""
+
+#: ../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:307
+#: ../controls/VariablePanel.py:88
+msgid "All"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:37
+msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
+msgstr ""
+
+#: ../ProjectController.py:1670
+msgid "Already connected. Please disconnect\n"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:607
+#, python-format
+msgid "An element named \"%s\" already exists in this structure!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:520
+msgid "An instance with the same name already exists!"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:103
+msgid "Apply name modification to all continuations with the same name"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:31
+msgid "Arc cosine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:30
+msgid "Arc sine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:32
+msgid "Arc tangent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Arithmetic"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
+msgid "Array"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:39
+msgid "Assignment"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:226
+msgid "At least a variable or an expression must be selected!"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:111
+msgid "Author"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:108
+msgid "Author Name (optional):"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:80
+msgid "Backward"
+msgstr ""
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
+#, python-format
+msgid "Bad location size : %s"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
+msgid "Base Type:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+msgid "Base Types"
+msgstr ""
+
+#: ../BeremizIDE.py:483
+msgid "Beremiz"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Binary selection (1 of 2)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Bit-shift"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise AND"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:67
+msgid "Bitwise OR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:68
+msgid "Bitwise XOR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:69
+msgid "Bitwise inverting"
+msgstr ""
+
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+msgid "Block"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:63
+msgid "Block Properties"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Block name"
+msgstr ""
+
+#: ../editors/Viewer.py:586
+msgid "Bottom"
+msgstr ""
+
+#: ../ProjectController.py:1400
+msgid "Broken"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
+#, python-format
+msgid "Browse %s values library"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:72
+msgid "Browse Locations"
+msgstr ""
+
+#: ../ProjectController.py:1815
+msgid "Build"
+msgstr ""
+
+#: ../ProjectController.py:1335
+msgid "Build directory already clean\n"
+msgstr ""
+
+#: ../ProjectController.py:1816
+msgid "Build project into build folder"
+msgstr ""
+
+#: ../ProjectController.py:1108
+msgid "C Build crashed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1105
+msgid "C Build failed.\n"
+msgstr ""
+
+#: ../c_ext/CFileEditor.py:66
+msgid "C code"
+msgstr ""
+
+#: ../ProjectController.py:1186
+msgid "C code generated successfully.\n"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:126
+msgid "C compilation failed.\n"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:199
+#, python-format
+msgid "C compilation of %s failed.\n"
+msgstr ""
+
+#: ../features.py:33
+msgid "C extension"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:69
+msgid "C&redits"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:58
+msgid "CANOpen network"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:48
+msgid "CANOpen slave"
+msgstr ""
+
+#: ../features.py:31
+msgid "CANopen support"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:291
+msgid "Can only give a location to local or global variables"
+msgstr ""
+
+#: ../PLCOpenEditor.py:318
+#, python-format
+msgid "Can't generate program to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:289
+msgid "Can't give a location to a function block instance"
+msgstr ""
+
+#: ../PLCOpenEditor.py:363
+#, python-format
+msgid "Can't save project to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:339
+msgid "Can't set an initial value to a function block instance"
+msgstr ""
+
+#: ../ConfigTreeNode.py:532
+#, python-brace-format
+msgid "Cannot create child {a1} of type {a2} "
+msgstr ""
+
+#: ../ConfigTreeNode.py:454
+#, python-format
+msgid "Cannot find lower free IEC channel than %d\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:139
+msgid "Cannot get PLC status - connection failed.\n"
+msgstr ""
+
+#: ../ProjectController.py:967
+msgid "Cannot open/parse VARIABLES.csv!\n"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:581
+msgid "Center"
+msgstr ""
+
+#: ../Beremiz_service.py:276
+msgid "Change IP of interface to bind"
+msgstr ""
+
+#: ../Beremiz_service.py:275
+msgid "Change Name"
+msgstr ""
+
+#: ../IDEFrame.py:1977
+msgid "Change POU Type To"
+msgstr ""
+
+#: ../Beremiz_service.py:277
+msgid "Change Port Number"
+msgstr ""
+
+#: ../Beremiz_service.py:278
+msgid "Change working directory"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Character string"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "Choose a SVG file"
+msgstr ""
+
+#: ../ProjectController.py:561
+msgid "Choose a directory to save project"
+msgstr ""
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+msgid "Choose a file"
+msgstr ""
+
+#: ../BeremizIDE.py:900
+msgid "Choose a project"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
+#, python-format
+msgid "Choose a value for %s:"
+msgstr ""
+
+#: ../Beremiz_service.py:333
+msgid "Choose a working directory "
+msgstr ""
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
+msgid "Chosen folder doesn't contain a program. It's not a valid project!"
+msgstr ""
+
+#: ../ProjectController.py:435
+msgid "Chosen folder isn't empty. You can't use it for a new project!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:60
+msgid "Class"
+msgstr ""
+
+#: ../controls/VariablePanel.py:472
+msgid "Class Filter:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:74
+msgid "Class:"
+msgstr ""
+
+#: ../ProjectController.py:1821
+msgid "Clean"
+msgstr ""
+
+#: ../controls/LogViewer.py:327
+msgid "Clean log messages"
+msgstr ""
+
+#: ../ProjectController.py:1822
+msgid "Clean project build folder"
+msgstr ""
+
+#: ../ProjectController.py:1332
+msgid "Cleaning the build directory\n"
+msgstr ""
+
+#: ../IDEFrame.py:437
+msgid "Clear Errors"
+msgstr ""
+
+#: ../editors/Viewer.py:680
+msgid "Clear Execution Order"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+msgid "Close"
+msgstr ""
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+msgid "Close Application"
+msgstr ""
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
+msgid "Close Project"
+msgstr ""
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
+msgid "Close Tab"
+msgstr ""
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+msgid "Coil"
+msgstr ""
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+msgid "Comment"
+msgstr ""
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
+msgid "Community support"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:65
+msgid "Company Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:106
+msgid "Company Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:107
+msgid "Company URL (optional):"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Comparison"
+msgstr ""
+
+#: ../ProjectController.py:756
+msgid "Compiling IEC Program into C code...\n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:85
+msgid "Concatenation"
+msgstr ""
+
+#: ../editors/ConfTreeNodeEditor.py:241
+msgid "Config"
+msgstr ""
+
+#: ../editors/ProjectNodeEditor.py:39
+msgid "Config variables"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:43
+msgid "Configuration"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Configurations"
+msgstr ""
+
+#: ../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:1842
+msgid "Connect"
+msgstr ""
+
+#: ../ProjectController.py:1843
+msgid "Connect to the target PLC"
+msgstr ""
+
+#: ../ProjectController.py:1391
+#, python-format
+msgid "Connected to URI: %s"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
+msgid "Connection"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:55
+msgid "Connection Properties"
+msgstr ""
+
+#: ../ProjectController.py:1691
+msgid "Connection canceled!\n"
+msgstr ""
+
+#: ../ProjectController.py:1714
+#, python-format
+msgid "Connection failed to %s!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+msgid "Connection lost!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:110
+#, python-format
+msgid "Connection to '%s' failed.\n"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+msgid "Connector"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:68
+msgid "Connectors:"
+msgstr ""
+
+#: ../BeremizIDE.py:378
+msgid "Console"
+msgstr ""
+
+#: ../controls/VariablePanel.py:75
+msgid "Constant"
+msgstr ""
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+msgid "Contact"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:217
+msgid "Content Description (optional):"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+msgid "Continuation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:18
+msgid "Conversion from BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:19
+msgid "Conversion to BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:21
+msgid "Conversion to date"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:20
+msgid "Conversion to time-of-day"
+msgstr ""
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
+msgid "Copy"
+msgstr ""
+
+#: ../IDEFrame.py:1964
+msgid "Copy POU"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:68
+msgid "Copy file from left folder to right"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:67
+msgid "Copy file from right folder to left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:28
+msgid "Cosine"
+msgstr ""
+
+#: ../ConfigTreeNode.py:660
+#, python-brace-format
+msgid ""
+"Could not add child \"{a1}\", type {a2} :\n"
+"{a3}\n"
+msgstr ""
+
+#: ../py_ext/PythonFileCTNMixin.py:81
+#, python-format
+msgid "Couldn't import old %s file."
+msgstr ""
+
+#: ../ConfigTreeNode.py:630
+#, python-brace-format
+msgid ""
+"Couldn't load confnode base parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
+#, python-brace-format
+msgid ""
+"Couldn't load confnode parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../PLCControler.py:552
+msgid "Couldn't paste non-POU object."
+msgstr ""
+
+#: ../ProjectController.py:1636
+msgid "Couldn't start PLC !\n"
+msgstr ""
+
+#: ../ProjectController.py:1644
+msgid "Couldn't stop PLC !\n"
+msgstr ""
+
+#: ../svgui/svgui.py:57
+msgid "Create HMI"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:54
+msgid "Create a new POU"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:45
+msgid "Create a new action"
+msgstr ""
+
+#: ../IDEFrame.py:166
+msgid "Create a new action block"
+msgstr ""
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+msgid "Create a new block"
+msgstr ""
+
+#: ../IDEFrame.py:139
+msgid "Create a new branch"
+msgstr ""
+
+#: ../IDEFrame.py:133
+msgid "Create a new coil"
+msgstr ""
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+msgid "Create a new comment"
+msgstr ""
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+msgid "Create a new connection"
+msgstr ""
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
+msgid "Create a new contact"
+msgstr ""
+
+#: ../IDEFrame.py:169
+msgid "Create a new divergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:54
+msgid "Create a new divergence or convergence"
+msgstr ""
+
+#: ../IDEFrame.py:157
+msgid "Create a new initial step"
+msgstr ""
+
+#: ../IDEFrame.py:172
+msgid "Create a new jump"
+msgstr ""
+
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
+msgid "Create a new power rail"
+msgstr ""
+
+#: ../IDEFrame.py:130
+msgid "Create a new rung"
+msgstr ""
+
+#: ../IDEFrame.py:160
+msgid "Create a new step"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+msgid "Create a new transition"
+msgstr ""
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+msgid "Create a new variable"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:109
+msgid "Credits"
+msgstr ""
+
+#: ../Beremiz_service.py:424
+msgid "Current working directory :"
+msgstr ""
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+msgid "Cut"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Cyclic"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
+#: ../plcopen/iec_std.csv:60
+msgid "DEPRECATED"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
+msgid "DS-301 Profile"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
+msgid "DS-302 Profile"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:39
+msgid "Data Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Data Types"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Data type conversion"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
+msgid "Date addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
+#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
+msgid "Date and time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
+msgid "Date subtraction"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:46
+msgid "Days:"
+msgstr ""
+
+#: ../ProjectController.py:1729
+msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:144
+msgid "Debug instance"
+msgstr ""
+
+#: ../editors/Viewer.py:490
+#, python-format
+msgid "Debug: %s"
+msgstr ""
+
+#: ../ProjectController.py:1471
+#, python-format
+msgid "Debug: Unknown variable '%s'\n"
+msgstr ""
+
+#: ../ProjectController.py:1469
+#, python-format
+msgid "Debug: Unsupported type to debug '%s'\n"
+msgstr ""
+
+#: ../IDEFrame.py:660
+msgid "Debugger"
+msgstr ""
+
+#: ../ProjectController.py:1726
+msgid "Debugger ready\n"
+msgstr ""
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+msgid "Delete"
+msgstr ""
+
+#: ../editors/Viewer.py:610
+msgid "Delete Divergence Branch"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:157
+msgid "Delete File"
+msgstr ""
+
+#: ../editors/Viewer.py:597
+msgid "Delete Wire Segment"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:44
+msgid "Delete item"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:88
+msgid "Deletion (within)"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:161
+msgid "Derivation Type:"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:735
+msgid "Description"
+msgstr ""
+
+#: ../controls/VariablePanel.py:463
+msgid "Description:"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
+msgid "Dimensions:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:69
+msgid "Direction"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:102
+msgid "Direction:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Directly"
+msgstr ""
+
+#: ../ProjectController.py:1855
+msgid "Disconnect"
+msgstr ""
+
+#: ../ProjectController.py:1856
+msgid "Disconnect from PLC"
+msgstr ""
+
+#: ../ProjectController.py:1401
+msgid "Disconnected"
+msgstr ""
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+msgid "Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:36
+msgid "Division"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:156
+#, python-format
+msgid "Do you really want to delete the file '%s'?"
+msgstr ""
+
+#: ../controls/VariablePanel.py:65
+msgid "Documentation"
+msgstr ""
+
+#: ../PLCOpenEditor.py:312
+msgid "Done"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Duration"
+msgstr ""
+
+#: ../canfestival/canfestival.py:174
+msgid "EDS files (*.eds)|*.eds|All files|*.*"
+msgstr ""
+
+#: ../editors/Viewer.py:668
+msgid "Edit Block"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:56
+msgid "Edit Contact Values"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:62
+msgid "Edit Duration"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:53
+msgid "Edit Step"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:45
+msgid "Edit a WxWidgets GUI with WXGlade"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:127
+msgid "Edit action block properties"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:47
+msgid "Edit array type properties"
+msgstr ""
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+msgid "Edit comment"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:69
+msgid "Edit file"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:42
+msgid "Edit item"
+msgstr ""
+
+#: ../editors/Viewer.py:3059
+msgid "Edit jump target"
+msgstr ""
+
+#: ../ProjectController.py:1873
+msgid "Edit raw IEC code added to code generated by PLCGenerator"
+msgstr ""
+
+#: ../editors/SFCViewer.py:815
+msgid "Edit step name"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:53
+msgid "Edit transition"
+msgstr ""
+
+#: ../IDEFrame.py:632
+msgid "Editor ToolBar"
+msgstr ""
+
+#: ../ProjectController.py:1294
+msgid "Editor selection"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:360
+msgid "Elements :"
+msgstr ""
+
+#: ../ProjectController.py:1399
+msgid "Empty"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
+msgid "Enter a name "
+msgstr ""
+
+#: ../Beremiz_service.py:326
+msgid "Enter a port number "
+msgstr ""
+
+#: ../Beremiz_service.py:317
+msgid "Enter the IP of the interface to bind"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Enumerated"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:77
+msgid "Equal to"
+msgstr ""
+
+#: ../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 ""
+
+#: ../ProjectController.py:811
+msgid ""
+"Error : At least one configuration and one resource must be declared in PLC "
+"!\n"
+msgstr ""
+
+#: ../ProjectController.py:803
+#, python-format
+msgid "Error : IEC to C compiler returned %d\n"
+msgstr ""
+
+#: ../ProjectController.py:731
+#, python-format
+msgid ""
+"Error in ST/IL/SFC code generator :\n"
+"%s\n"
+msgstr ""
+
+#: ../ConfigTreeNode.py:219
+#, python-format
+msgid "Error while saving \"%s\"\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:179
+msgid "Error: Export slave failed\n"
+msgstr ""
+
+#: ../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:383
+msgid "Error: No PLC built\n"
+msgstr ""
+
+#: ../ProjectController.py:1708
+#, python-format
+msgid "Exception while connecting %s!\n"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:123
+msgid "Execution Control:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+msgid "Execution Order:"
+msgstr ""
+
+#: ../features.py:36
+msgid "Experimental web based HMI"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:38
+msgid "Exponent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:26
+msgid "Exponentiation"
+msgstr ""
+
+#: ../canfestival/canfestival.py:186
+msgid "Export CanOpen slave to EDS file"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+msgid "Export graph values to clipboard"
+msgstr ""
+
+#: ../canfestival/canfestival.py:185
+msgid "Export slave"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:94
+msgid "Expression:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "External"
+msgstr ""
+
+#: ../ProjectController.py:826
+msgid "Extracting Located Variables...\n"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "FBD"
+msgstr ""
+
+#: ../ProjectController.py:1773
+msgid "Failed : Must build before transfer.\n"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+msgid "Falling Edge"
+msgstr ""
+
+#: ../ProjectController.py:1098
+msgid "Fatal : cannot get builder.\n"
+msgstr ""
+
+#: ../Beremiz.py:160
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:167
+#, python-format
+msgid "Field %s hasn't a valid value!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:169
+#, python-format
+msgid "Fields %s haven't a valid value!"
+msgstr ""
+
+#: ../controls/FolderTree.py:221
+#, python-format
+msgid "File '%s' already exists!"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+msgid "Find"
+msgstr ""
+
+#: ../IDEFrame.py:379
+msgid "Find Next"
+msgstr ""
+
+#: ../IDEFrame.py:381
+msgid "Find Previous"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:90
+msgid "Find position"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:58
+msgid "Find:"
+msgstr ""
+
+#: ../editors/Viewer.py:1633
+msgid "Force value"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:176
+msgid "Forcing Variable Value"
+msgstr ""
+
+#: ../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:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
+msgid "Form isn't complete. Name must be filled!"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:235
+msgid "Form isn't complete. Valid block type must be selected!"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:75
+msgid "Forward"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+msgid "Function"
+msgstr ""
+
+#: ../IDEFrame.py:354
+msgid "Function &Block"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
+msgid "Function Block"
+msgstr ""
+
+#: ../controls/VariablePanel.py:868
+msgid "Function Block Types"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Function Blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:290
+msgid "Function Blocks can't be used in Functions!"
+msgstr ""
+
+#: ../PLCControler.py:1907
+#, python-format
+msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Functions"
+msgstr ""
+
+#: ../PLCOpenEditor.py:88
+msgid "Generate Program"
+msgstr ""
+
+#: ../ProjectController.py:722
+msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Global"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+msgid "Go to current value"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:189
+msgid "Graphics"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Greater than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:76
+msgid "Greater than or equal to"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:135
+msgid "Height:"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:89
+msgid "Home Directory:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:165
+msgid "Horizontal:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:47
+msgid "Hours:"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "IL"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:91
+msgid "IP"
+msgstr ""
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+msgid "IP is not valid!"
+msgstr ""
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
+msgid "Import SVG"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
+msgid "InOut"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:300
+#, python-brace-format
+msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:306
+#, python-format
+msgid "Incompatible size of data between \"%s\" and \"BOOL\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:310
+#, python-brace-format
+msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Indicator"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:734
+msgid "Initial"
+msgstr ""
+
+#: ../editors/Viewer.py:650
+msgid "Initial Step"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
+msgid "Initial Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
+msgid "Initial Value:"
+msgstr ""
+
+#: ../svgui/svgui.py:56
+msgid "Inkscape"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
+msgid "Inline"
+msgstr ""
+
+#: ../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:99
+msgid "Inputs:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:87
+msgid "Insertion (into)"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1948
+#, python-format
+msgid "Instance with id %d doesn't exist!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:279
+msgid "Instances:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:88
+msgid "Interface"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Interrupt"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Interval"
+msgstr ""
+
+#: ../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:407
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
+#, python-format
+msgid "Invalid value \"%s\" for variable grid element"
+msgstr ""
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
+#, python-format
+msgid "Invalid value \"%s\" for viewer block"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:211
+#, python-brace-format
+msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:124
+msgid ""
+"Invalid value!\n"
+"You must fill a numeric value."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+msgid "Jump"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "LD"
+msgstr ""
+
+#: ../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:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
+msgid "Language"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:206
+msgid "Language (optional):"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
+msgid "Language:"
+msgstr ""
+
+#: ../ProjectController.py:1779
+msgid "Latest build already matches current target. Transfering anyway...\n"
+msgstr ""
+
+#: ../Beremiz_service.py:281
+msgid "Launch WX GUI inspector"
+msgstr ""
+
+#: ../Beremiz_service.py:280
+msgid "Launch a live Python shell"
+msgstr ""
+
+#: ../editors/Viewer.py:580
+msgid "Left"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:64
+msgid "Left PowerRail"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Length of string"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:78
+msgid "Less than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:79
+msgid "Less than or equal to"
+msgstr ""
+
+#: ../IDEFrame.py:652
+msgid "Library"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:145
+msgid "License"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:73
+msgid "Limitation"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:209
+msgid "Linking :\n"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+msgid "Local"
+msgstr ""
+
+#: ../canfestival/canfestival.py:359
+msgid "Local entries"
+msgstr ""
+
+#: ../ProjectController.py:1685
+msgid "Local service discovery failed!\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:62
+msgid "Location"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:79
+msgid "Locations available:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:25
+msgid "Logarithm to base 10"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:102
+#, python-format
+msgid "MDNS resolution failure for '%s'\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
+msgid "Map Variable"
+msgstr ""
+
+#: ../features.py:31
+msgid "Map located variables over CANopen"
+msgstr ""
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
+msgid "Master"
+msgstr ""
+
+#: ../ConfigTreeNode.py:544
+#, python-brace-format
+msgid "Max count ({a1}) reached for this confnode of type {a2} "
+msgstr ""
+
+#: ../plcopen/iec_std.csv:71
+msgid "Maximum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:246
+msgid "Maximum:"
+msgstr ""
+
+#: ../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:617
+msgid "Menu ToolBar"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:51
+msgid "Microseconds:"
+msgstr ""
+
+#: ../editors/Viewer.py:585
+msgid "Middle"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:50
+msgid "Milliseconds:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:72
+msgid "Minimum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:233
+msgid "Minimum:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:48
+msgid "Minutes:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:231
+msgid "Miscellaneous"
+msgstr ""
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
+msgid "Modifier:"
+msgstr ""
+
+#: ../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:146
+msgid "Move action down"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:145
+msgid "Move action up"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:46
+msgid "Move down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:367
+msgid "Move element down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:366
+msgid "Move element up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:286
+msgid "Move instance down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:285
+msgid "Move instance up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:255
+msgid "Move task down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:254
+msgid "Move task up"
+msgstr ""
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+msgid "Move the view"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:45
+msgid "Move up"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+msgid "Move variable down"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+msgid "Move variable up"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:74
+msgid "Multiplexer (select 1 of N)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:34
+msgid "Multiplication"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:87
+msgid "My Computer:"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:89
+msgid "NAME"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
+msgid "Name"
+msgstr ""
+
+#: ../Beremiz_service.py:342
+msgid "Name must not be null!"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
+msgid "Name:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:24
+msgid "Natural logarithm"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+msgid "Negated"
+msgstr ""
+
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
+#: ../Beremiz_service.py:580
+msgid "Nevow/Athena import failed :"
+msgstr ""
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
+msgid "New"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:43
+msgid "New item"
+msgstr ""
+
+#: ../editors/Viewer.py:553
+msgid "No Modifier"
+msgstr ""
+
+#: ../ProjectController.py:1808
+msgid "No PLC to transfer (did build succeed ?)\n"
+msgstr ""
+
+#: ../PLCGenerator.py:1678
+#, python-format
+msgid "No body defined in \"%s\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#, python-brace-format
+msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCOpenEditor.py:331
+msgid ""
+"No documentation available.\n"
+"Coming soon."
+msgstr ""
+
+#: ../PLCGenerator.py:841
+#, python-format
+msgid "No informations found for \"%s\" block"
+msgstr ""
+
+#: ../PLCGenerator.py:1232
+#, python-brace-format
+msgid ""
+"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
+"broken"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:175
+msgid "No search results available."
+msgstr ""
+
+#: ../svgui/svgui.py:142
+#, python-format
+msgid "No such SVG file: %s\n"
+msgstr ""
+
+#: ../canfestival/config_utils.py:682
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
+msgstr ""
+
+#: ../canfestival/config_utils.py:387
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
+msgid "No valid value selected!"
+msgstr ""
+
+#: ../PLCGenerator.py:1676
+#, python-format
+msgid "No variable defined in \"%s\" POU"
+msgstr ""
+
+#: ../canfestival/config_utils.py:379
+#, python-brace-format
+msgid "Non existing node ID : {a1} (variable {a2})"
+msgstr ""
+
+#: ../controls/VariablePanel.py:79
+msgid "Non-Retain"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78
+msgid "Normal"
+msgstr ""
+
+#: ../canfestival/config_utils.py:426
+#, python-brace-format
+msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:80
+msgid "Not equal to"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:91
+msgid "Number of sequences:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Numerical"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:736
+msgid "OnChange"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:88
+msgid "Only Elements"
+msgstr ""
+
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
+msgid "Open"
+msgstr ""
+
+#: ../svgui/svgui.py:151
+msgid "Open Inkscape"
+msgstr ""
+
+#: ../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:1879
+msgid "Open a file explorer to manage project files"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
+msgid "Open wxGlade"
+msgstr ""
+
+#: ../controls/VariablePanel.py:64
+msgid "Option"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+msgid "Options"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:109
+msgid "Organization (optional):"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
+msgid "Other Profile"
+msgstr ""
+
+#: ../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:67 ../canfestival/NetworkEditor.py:91
+msgid "PDO Receive"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
+msgid "PDO Transmit"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:174
+msgid "PLC :\n"
+msgstr ""
+
+#: ../BeremizIDE.py:383
+msgid "PLC Log"
+msgstr ""
+
+#: ../ProjectController.py:1082
+msgid "PLC code generation failed !\n"
+msgstr ""
+
+#: ../Beremiz_service.py:305
+msgid "PLC is empty or already started."
+msgstr ""
+
+#: ../Beremiz_service.py:312
+msgid "PLC is not started."
+msgstr ""
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
+#, python-brace-format
+msgid ""
+"PLC syntax error at line {a1}:\n"
+"{a2}"
+msgstr ""
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
+msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
+msgstr ""
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
+msgid "PLCOpenEditor"
+msgstr ""
+
+#: ../PLCOpenEditor.py:339
+msgid ""
+"PLCOpenEditor is part of Beremiz project.\n"
+"\n"
+"Beremiz is an "
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:92
+msgid "PORT"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:109
+msgid "POU Name"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:66
+msgid "POU Name:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:111
+msgid "POU Type"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:73
+msgid "POU Type:"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:52
+#, python-format
+msgid "PYRO connecting to URI : %s\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:68
+#, python-format
+msgid "PYRO using certificates in '%s' \n"
+msgstr ""
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
+msgid "Page Setup"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:124
+msgid "Page Size (optional):"
+msgstr ""
+
+#: ../IDEFrame.py:2640
+#, python-format
+msgid "Page: %d"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:134
+msgid "Parent instance"
+msgstr ""
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+msgid "Paste"
+msgstr ""
+
+#: ../IDEFrame.py:1899
+msgid "Paste POU"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:60
+msgid "Pattern to search:"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:75
+msgid "Pin number:"
+msgstr ""
+
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
+msgid "Please choose a target"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Please enter a block name"
+msgstr ""
+
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+msgid "Please enter comment text"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
+msgid "Please enter step name"
+msgstr ""
+
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+msgid "Please enter text"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:177
+#, python-format
+msgid "Please enter value for a \"%s\" variable:"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be 0 <= port <= 65535!"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be an integer!"
+msgstr ""
+
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+msgid "Power Rail"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:52
+msgid "Power Rail Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
+msgid "Preview"
+msgstr ""
+
+#: ../dialogs/BlockPreviewDialog.py:59
+msgid "Preview:"
+msgstr ""
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
+msgid "Print"
+msgstr ""
+
+#: ../IDEFrame.py:1110
+msgid "Print preview"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Priority"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:91
+msgid "Priority:"
+msgstr ""
+
+#: ../runtime/PLCObject.py:518
+#, python-format
+msgid "Problem starting PLC : error %d"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:63
+msgid "Product Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:90
+msgid "Product Name (required):"
+msgstr ""
+
+#: ../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 "Project Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:88
+msgid "Project Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:89
+msgid "Project Version (optional):"
+msgstr ""
+
+#: ../PLCControler.py:2717
+msgid ""
+"Project file syntax error:\n"
+"\n"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
+msgid "Project properties"
+msgstr ""
+
+#: ../ConfigTreeNode.py:571
+#, python-brace-format
+msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:101
+msgid "Propagate Name"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Properties"
+msgstr ""
+
+#: ../Beremiz_service.py:427
+msgid "Publishing service on local network"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:126
+#, python-format
+msgid "Pyro exception: %s\n"
+msgstr ""
+
+#: ../Beremiz_service.py:420
+msgid "Pyro port :"
+msgstr ""
+
+#: ../py_ext/PythonEditor.py:84
+msgid "Python code"
+msgstr ""
+
+#: ../features.py:34
+msgid "Python file"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Qualifier"
+msgstr ""
+
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+msgid "Quit"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+msgid "Range:"
+msgstr ""
+
+#: ../ProjectController.py:1872
+msgid "Raw IEC code"
+msgstr ""
+
+#: ../BeremizIDE.py:1083
+#, python-format
+msgid "Really delete node '%s'?"
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
+msgid "Redo"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:76
+msgid "Reference"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+msgid "Refresh"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:70
+msgid "Regular expression"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:99
+msgid "Regular expressions"
+msgstr ""
+
+#: ../editors/Viewer.py:1636
+msgid "Release value"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:37
+msgid "Remainder (modulo)"
+msgstr ""
+
+#: ../BeremizIDE.py:1084
+#, python-format
+msgid "Remove %s node"
+msgstr ""
+
+#: ../IDEFrame.py:2445
+msgid "Remove Datatype"
+msgstr ""
+
+#: ../IDEFrame.py:2450
+msgid "Remove Pou"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:144
+msgid "Remove action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:365
+msgid "Remove element"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:66
+msgid "Remove file from left folder"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:284
+msgid "Remove instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:111
+msgid "Remove slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:253
+msgid "Remove task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+msgid "Remove variable"
+msgstr ""
+
+#: ../IDEFrame.py:1979
+msgid "Rename"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:187
+msgid "Replace File"
+msgstr ""
+
+#: ../editors/Viewer.py:598
+msgid "Replace Wire by connections"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:89
+msgid "Replacement (within)"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Reset"
+msgstr ""
+
+#: ../editors/Viewer.py:681
+msgid "Reset Execution Order"
+msgstr ""
+
+#: ../IDEFrame.py:453
+msgid "Reset Perspective"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:103
+msgid "Reset search result"
+msgstr ""
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+msgid "Resources"
+msgstr ""
+
+#: ../controls/VariablePanel.py:77
+msgid "Retain"
+msgstr ""
+
+#: ../controls/VariablePanel.py:455
+msgid "Return Type:"
+msgstr ""
+
+#: ../editors/Viewer.py:582
+msgid "Right"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:65
+msgid "Right PowerRail"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+msgid "Rising Edge"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:65
+msgid "Rotate left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:64
+msgid "Rotate right"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:17
+msgid "Rounding up/down"
+msgstr ""
+
+#: ../ProjectController.py:1828
+msgid "Run"
+msgstr ""
+
+#: ../ProjectController.py:1127
+msgid "Runtime IO extensions C code generation failed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1136
+msgid "Runtime library extensions C code generation failed !\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
+msgid "SDO Client"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
+msgid "SDO Server"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "SFC"
+msgstr ""
+
+#: ../PLCGenerator.py:1433
+#, python-brace-format
+msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
+msgstr ""
+
+#: ../PLCGenerator.py:780
+#, python-format
+msgid "SFC transition in POU \"%s\" must be connected."
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "ST"
+msgstr ""
+
+#: ../PLCOpenEditor.py:308
+msgid "ST files (*.st)|*.st|All files|*.*"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "SVG files (*.svg)|*.svg|All files|*.*"
+msgstr ""
+
+#: ../features.py:36
+msgid "SVGUI"
+msgstr ""
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
+msgid "Save"
+msgstr ""
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
+msgid "Save As..."
+msgstr ""
+
+#: ../BeremizIDE.py:249
+msgid "Save as"
+msgstr ""
+
+#: ../ProjectController.py:530
+msgid "Save path is the same as path of a project! \n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:73
+msgid "Scope"
+msgstr ""
+
+#: ../IDEFrame.py:644
+msgid "Search"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
+msgid "Search in Project"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:49
+msgid "Seconds:"
+msgstr ""
+
+#: ../IDEFrame.py:390
+msgid "Select All"
+msgstr ""
+
+#: ../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:1293
+msgid "Select an editor:"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:292
+msgid "Select an instance"
+msgstr ""
+
+#: ../IDEFrame.py:628
+msgid "Select an object"
+msgstr ""
+
+#: ../ProjectController.py:537
+msgid "Selected directory already contains another project. Overwrite? \n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Selection"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:65
+msgid "Selection Divergence"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:135
+msgid "Service Discovery"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:104
+msgid "Services available:"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Set"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Shift left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:63
+msgid "Shift right"
+msgstr ""
+
+#: ../ProjectController.py:1863
+msgid "Show IEC code generated by PLCGenerator"
+msgstr ""
+
+#: ../canfestival/canfestival.py:407
+msgid "Show Master"
+msgstr ""
+
+#: ../canfestival/canfestival.py:408
+msgid "Show Master generated by config_utils"
+msgstr ""
+
+#: ../ProjectController.py:1862
+msgid "Show code"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:67
+msgid "Simultaneous Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:27
+msgid "Sine"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Single"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:130
+msgid "Source didn't change, no build.\n"
+msgstr ""
+
+#: ../PLCGenerator.py:404
+#, python-brace-format
+msgid ""
+"Source signal has to be defined for single task '{a1}' in resource "
+"'{a2}.{a3}'."
+msgstr ""
+
+#: ../plcopen/iec_std.csv:23
+msgid "Square root (base 2)"
+msgstr ""
+
+#: ../plcopen/definitions.py:50
+msgid "Standard function blocks"
+msgstr ""
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+msgid "Start PLC"
+msgstr ""
+
+#: ../ProjectController.py:1074
+#, python-format
+msgid "Start build in %s\n"
+msgstr ""
+
+#: ../ProjectController.py:1397
+msgid "Started"
+msgstr ""
+
+#: ../ProjectController.py:1633
+msgid "Starting PLC\n"
+msgstr ""
+
+#: ../BeremizIDE.py:393
+msgid "Status ToolBar"
+msgstr ""
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+msgid "Step"
+msgstr ""
+
+#: ../ProjectController.py:1835
+msgid "Stop"
+msgstr ""
+
+#: ../Beremiz_service.py:272
+msgid "Stop PLC"
+msgstr ""
+
+#: ../ProjectController.py:1836
+msgid "Stop Running PLC"
+msgstr ""
+
+#: ../ProjectController.py:1398
+msgid "Stopped"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Structure"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Subrange"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:35
+msgid "Subtraction"
+msgstr ""
+
+#: ../ProjectController.py:1113
+msgid "Successfully built.\n"
+msgstr ""
+
+#: ../IDEFrame.py:449
+msgid "Switch perspective"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
+msgid "Syntax error in regular expression of pattern to search!"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:90
+msgid "TYPE"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:29
+msgid "Tangent"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:97
+msgid "Task"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:248
+msgid "Tasks:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Temp"
+msgstr ""
+
+#: ../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"
+"\n"
+"This is the main community support channel.\n"
+"For posting it is required to be subscribed to the mailing list.\n"
+"\n"
+"You can subscribe to the list here:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:186
+#, python-format
+msgid ""
+"The file '%s' already exist.\n"
+"Do you want to replace it?"
+msgstr ""
+
+#: ../editors/LDViewer.py:893
+msgid "The group of block must be coherent!"
+msgstr ""
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+msgid "There are changes, do you want to save?"
+msgstr ""
+
+#: ../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:1133
+msgid ""
+"There was a problem printing.\n"
+"Perhaps your current printer is not set correctly?"
+msgstr ""
+
+#: ../editors/LDViewer.py:902
+msgid "This option isn't available yet!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#, python-format
+msgid "Tick: %d"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40
+msgid "Time"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
+msgid "Time addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:86
+msgid "Time concatenation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
+msgid "Time division"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
+msgid "Time multiplication"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
+msgid "Time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
+msgid "Time-of-day addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
+#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
+msgid "Time-of-day subtraction"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:188
+msgid "Toggle value"
+msgstr ""
+
+#: ../editors/Viewer.py:584
+msgid "Top"
+msgstr ""
+
+#: ../ProjectController.py:1848
+msgid "Transfer"
+msgstr ""
+
+#: ../ProjectController.py:1849
+msgid "Transfer PLC"
+msgstr ""
+
+#: ../ProjectController.py:1802
+msgid "Transfer completed successfully.\n"
+msgstr ""
+
+#: ../ProjectController.py:1805
+msgid "Transfer failed\n"
+msgstr ""
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
+msgid "Transition"
+msgstr ""
+
+#: ../PLCGenerator.py:1564
+#, python-format
+msgid ""
+"Transition \"%s\" body must contain an output variable or coil referring to "
+"its name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:91
+msgid "Transition Name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:60
+msgid "Transition Name:"
+msgstr ""
+
+#: ../PLCGenerator.py:1657
+#, python-brace-format
+msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:1646
+#, python-brace-format
+msgid ""
+"Transition with content \"{a1}\" not connected to a previous step in "
+"\"{a2}\" POU"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1526
+#, python-format
+msgid "Transition with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Transitions"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:127
+msgid "Translated by"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Triggering"
+msgstr ""
+
+#: ../Beremiz_service.py:490
+msgid "Twisted unavailable."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
+msgid "Type"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:54
+msgid "Type and derivated"
+msgstr ""
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#, python-format
+msgid "Type conflict for location \"%s\""
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Type conversion"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:170
+msgid "Type infos:"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:55
+msgid "Type strict"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:43
+#, python-format
+msgid "Unable to get Xenomai's %s \n"
+msgstr ""
+
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#, python-brace-format
+msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:261
+#, python-format
+msgid "Undefined pou type \"%s\""
+msgstr ""
+
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
+msgid "Undo"
+msgstr ""
+
+#: ../ProjectController.py:442
+msgid "Unknown"
+msgstr ""
+
+#: ../editors/Viewer.py:437
+#, python-format
+msgid "Unknown variable \"%s\" for this POU!"
+msgstr ""
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
+msgid "Unnamed"
+msgstr ""
+
+#: ../PLCControler.py:263
+#, python-format
+msgid "Unnamed%d"
+msgstr ""
+
+#: ../controls/VariablePanel.py:308
+#, python-format
+msgid "Unrecognized data size \"%s\""
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+msgid "User Data Types"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
+msgid "User Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "User-defined POUs"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:267
+msgid "Values:"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
+msgid "Variable"
+msgstr ""
+
+#: ../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:68
+msgid "Variable Properties"
+msgstr ""
+
+#: ../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:439 ../editors/TextViewer.py:388
+msgid "Variable don't belong to this POU!"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:92
+msgid "Variable:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "Variables"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:166
+msgid "Vertical:"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:140
+msgid "WAMP connection timeout"
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:158
+#, python-format
+msgid "WAMP connection to '%s' failed.\n"
+msgstr ""
+
+#: ../Beremiz_service.py:595
+msgid "WAMP import failed :"
+msgstr ""
+
+#: ../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 ""
+
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+msgid "Warning"
+msgstr ""
+
+#: ../ProjectController.py:726
+msgid "Warnings in ST/IL/SFC code generator :\n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:82
+msgid "Whole Project"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:134
+msgid "Width:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:94
+msgid "Wrap search"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:126
+msgid "Written by"
+msgstr ""
+
+#: ../features.py:35
+msgid "WxGlade GUI"
+msgstr ""
+
+#: ../svgui/svgui.py:150
+msgid ""
+"You don't have write permissions.\n"
+"Open Inkscape anyway ?"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
+msgid ""
+"You don't have write permissions.\n"
+"Open wxGlade anyway ?"
+msgstr ""
+
+#: ../ProjectController.py:390
+msgid ""
+"You must have permission to work on the project\n"
+"Work on a project copy ?"
+msgstr ""
+
+#: ../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:677
+msgid "You must select the wire where a contact should be added!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
+msgid "You must type a name!"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:209
+msgid "You must type a value!"
+msgstr ""
+
+#: ../IDEFrame.py:440
+msgid "Zoom"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "days"
+msgstr ""
+
+#: ../PLCOpenEditor.py:317
+#, python-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../util/ProcessLogger.py:178
+#, python-brace-format
+msgid "exited with status {a1} (pid {a2})\n"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "function"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "functionBlock"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "hours"
+msgstr ""
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
+msgid "milliseconds"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "minutes"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "program"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "seconds"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:84
+msgid "string from the middle"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:82
+msgid "string left of"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:83
+msgid "string right of"
+msgstr ""
+
+#: ../Beremiz.py:167
+msgid "update info unavailable."
+msgstr ""
+
+#: ../PLCOpenEditor.py:315
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#: ../PLCControler.py:576
+#, python-brace-format
+msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
+msgstr ""
+
+#: ../ConfigTreeNode.py:58
+#, python-brace-format
+msgid ""
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
+"{a3}"
+msgstr ""
+
+#: Extra XSD strings
+msgid "CanFestivalSlaveNode"
+msgstr ""
+
+msgid "CAN_Device"
+msgstr ""
+
+msgid "CAN_Baudrate"
+msgstr ""
+
+msgid "NodeId"
+msgstr ""
+
+msgid "Sync_Align"
+msgstr ""
+
+msgid "Sync_Align_Ratio"
+msgstr ""
+
+msgid "CanFestivalNode"
+msgstr ""
+
+msgid "Sync_TPDOs"
+msgstr ""
+
+msgid "CanFestivalInstance"
+msgstr ""
+
+msgid "CAN_Driver"
+msgstr ""
+
+msgid "Generic"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Xenomai"
+msgstr ""
+
+msgid "XenoConfig"
+msgstr ""
+
+msgid "Compiler"
+msgstr ""
+
+msgid "CFLAGS"
+msgstr ""
+
+msgid "Linker"
+msgstr ""
+
+msgid "LDFLAGS"
+msgstr ""
+
+msgid "Linux"
+msgstr ""
+
+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 ""
+
+msgid "IEC_Channel"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "BeremizRoot"
+msgstr ""
+
+msgid "TargetType"
+msgstr ""
+
+msgid "Libraries"
+msgstr ""
+
+msgid "URI_location"
+msgstr ""
+
+msgid "Disable_Extensions"
+msgstr ""
+
+msgid "%(codefile_name)s"
+msgstr ""
+
+msgid "variables"
+msgstr ""
+
+msgid "variable"
+msgstr ""
+
+msgid "name"
+msgstr ""
+
+msgid "type"
+msgstr ""
+
+msgid "class"
+msgstr ""
+
+msgid "initial"
+msgstr ""
+
+msgid "desc"
+msgstr ""
+
+msgid "onchange"
+msgstr ""
+
+msgid "opts"
+msgstr ""
+
+#: Extra TC6 documentation strings
+msgid "0 - current time, 1 - load time from PDT"
+msgstr ""
+
+msgid "Preset datetime"
+msgstr ""
+
+msgid "Copy of IN"
+msgstr ""
+
+msgid "Datetime, current or relative to PDT"
+msgstr ""
+
+msgid ""
+"The real time clock has many uses including time stamping, setting dates and"
+" times of day in batch reports, in alarm messages and so on."
+msgstr ""
+
+msgid "1 = integrate, 0 = hold"
+msgstr ""
+
+msgid "Overriding reset"
+msgstr ""
+
+msgid "Input variable"
+msgstr ""
+
+msgid "Initial value"
+msgstr ""
+
+msgid "Sampling period"
+msgstr ""
+
+msgid "NOT R1"
+msgstr ""
+
+msgid "Integrated output"
+msgstr ""
+
+msgid ""
+"The integral function block integrates the value of input XIN over time."
+msgstr ""
+
+msgid "0 = reset"
+msgstr ""
+
+msgid "Input to be differentiated"
+msgstr ""
+
+msgid "Differentiated output"
+msgstr ""
+
+msgid ""
+"The derivative function block produces an output XOUT proportional to the "
+"rate of change of the input XIN."
+msgstr ""
+
+msgid "0 - manual , 1 - automatic"
+msgstr ""
+
+msgid "Process variable"
+msgstr ""
+
+msgid "Set point"
+msgstr ""
+
+msgid "Manual output adjustment - Typically from transfer station"
+msgstr ""
+
+msgid "Proportionality constant"
+msgstr ""
+
+msgid "Reset time"
+msgstr ""
+
+msgid "Derivative time constant"
+msgstr ""
+
+msgid "PV - SP"
+msgstr ""
+
+msgid "FB for integral term"
+msgstr ""
+
+msgid "FB for derivative term"
+msgstr ""
+
+msgid ""
+"The PID (proportional, Integral, Derivative) function block provides the "
+"classical three term controller for closed loop control."
+msgstr ""
+
+msgid "0 - track X0, 1 - ramp to/track X1"
+msgstr ""
+
+msgid "Ramp duration"
+msgstr ""
+
+msgid "BUSY = 1 during ramping period"
+msgstr ""
+
+msgid "Elapsed time of ramp"
+msgstr ""
+
+msgid "The RAMP function block is modelled on example given in the standard."
+msgstr ""
+
+msgid ""
+"The hysteresis function block provides a hysteresis boolean output driven by"
+" the difference of two floating point (REAL) inputs XIN1 and XIN2."
+msgstr ""
+
+msgid "The SR bistable is a latch where the Set dominates."
+msgstr ""
+
+msgid "The RS bistable is a latch where the Reset dominates."
+msgstr ""
+
+msgid ""
+"The semaphore provides a mechanism to allow software elements mutually "
+"exclusive access to certain resources."
+msgstr ""
+
+msgid "The output produces a single pulse when a rising edge is detected."
+msgstr ""
+
+msgid "The output produces a single pulse when a falling edge is detected."
+msgstr ""
+
+msgid ""
+"The up-counter can be used to signal when a count has reached a maximum "
+"value."
+msgstr ""
+
+msgid ""
+"The down-counter can be used to signal when a count has reached zero, on "
+"counting down from a preset value."
+msgstr ""
+
+msgid ""
+"The up-down counter has two inputs CU and CD. It can be used to both count "
+"up on one input and down on the other."
+msgstr ""
+
+msgid "first input parameter"
+msgstr ""
+
+msgid "second input parameter"
+msgstr ""
+
+msgid "first output parameter"
+msgstr ""
+
+msgid "second output parameter"
+msgstr ""
+
+msgid "internal state: 0-reset, 1-counting, 2-set"
+msgstr ""
+
+msgid ""
+"The pulse timer can be used to generate output pulses of a given time "
+"duration."
+msgstr ""
+
+msgid ""
+"The on-delay timer can be used to delay setting an output true, for fixed "
+"period after an input becomes true."
+msgstr ""
+
+msgid ""
+"The off-delay timer can be used to delay setting an output false, for fixed "
+"period after input goes false."
+msgstr ""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/Beremiz_pt.po Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,4036 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Beremiz package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Beremiz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Pedro Coimbra <pcoimbra310@gmail.com>, 2017\n"
+"Language-Team: Portuguese (https://www.transifex.com/beremiz/teams/75746/pt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../util/ExceptionHandler.py:58
+#, python-format
+msgid ""
+"\n"
+"An unhandled exception (bug) occured. Bug report saved at :\n"
+"(%s)\n"
+"\n"
+"Please be kind enough to send this file to:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"You should now restart program.\n"
+"\n"
+"Traceback:\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid " External"
+msgstr "Externo"
+
+#: ../controls/VariablePanel.py:89
+msgid " InOut"
+msgstr "EntradaSaída"
+
+#: ../controls/VariablePanel.py:89
+msgid " Input"
+msgstr "Entrada"
+
+#: ../controls/VariablePanel.py:90
+msgid " Local"
+msgstr "Local"
+
+#: ../controls/VariablePanel.py:89
+msgid " Output"
+msgstr "Saída"
+
+#: ../controls/VariablePanel.py:91
+msgid " Temp"
+msgstr "Temp"
+
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#, python-format
+msgid " and %s"
+msgstr "e %s"
+
+#: ../ProjectController.py:1182
+msgid " generation failed !\n"
+msgstr "geração falhada !\n"
+
+#: ../plcopen/plcopen.py:1029
+#, python-format
+msgid "\"%s\" Data Type doesn't exist !!!"
+msgstr "\" %s \" O tipo de dados não existe !!!"
+
+#: ../plcopen/plcopen.py:1047
+#, python-format
+msgid "\"%s\" POU already exists !!!"
+msgstr "\" %s \" POU já existe !!!"
+
+#: ../plcopen/plcopen.py:1068
+#, python-format
+msgid "\"%s\" POU doesn't exist !!!"
+msgstr "\" %s \" POU não existe !!!"
+
+#: ../editors/Viewer.py:288
+#, python-format
+msgid "\"%s\" can't use itself!"
+msgstr "\"%s\" não pode usar-se!"
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#, python-format
+msgid "\"%s\" config already exists!"
+msgstr "\"%s \" config já existe!"
+
+#: ../plcopen/plcopen.py:531
+#, python-format
+msgid "\"%s\" configuration already exists !!!"
+msgstr "\"%s\" configuração já existe !!!"
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr ""
+
+#: ../IDEFrame.py:1638
+#, python-format
+msgid "\"%s\" data type already exists!"
+msgstr "\"%s\" o tipo de dados já existe!"
+
+#: ../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\" o elemento para esta pou já existe!"
+
+#: ../BeremizIDE.py:928
+#, python-format
+msgid "\"%s\" folder is not a valid Beremiz project\n"
+msgstr "\"%s\" o ficheiro não é um projecto Beremiz válido\n"
+
+#: ../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\" é uma palavra-chave. Não pode ser usada!"
+
+#: ../plcopen/plcopen.py:2836
+#, python-format
+msgid "\"%s\" is an invalid value!"
+msgstr "\"%s\" é um valor inválido!"
+
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
+#, python-format
+msgid "\"%s\" is not a valid folder!"
+msgstr "\"%s\" não é um ficheiro válido!"
+
+#: ../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\" não é um identificador válido!"
+
+#: ../IDEFrame.py:2436
+#, python-format
+msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
+msgstr "\"%s\" é usáda por uma ou mais POUs. Deseja continuar?"
+
+#: ../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 já existe!"
+
+#: ../dialogs/SFCStepNameDialog.py:62
+#, python-format
+msgid "\"%s\" step already exists!"
+msgstr "\"%s\" o passo já existe!"
+
+#: ../editors/DataTypeEditor.py:566
+#, python-format
+msgid "\"%s\" value already defined!"
+msgstr "\"%s\" valor já defenido|"
+
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
+#, python-format
+msgid "\"%s\" value isn't a valid array dimension!"
+msgstr "\"%s\" o valor não é uma dimensão de matriz válida!"
+
+#: ../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 ""
+"\"%s\" o valor não é uma dimensão de matriz válida!\n"
+"O valor direito tem de ser maior do que o valor esquerdo."
+
+#: ../PLCGenerator.py:1133
+#, python-brace-format
+msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
+msgstr "\"{a1}\" função cancelada na POU \"{a2}\" : Sem entrada conectada"
+
+#: ../editors/Viewer.py:292
+#, python-brace-format
+msgid "\"{a1}\" is already used by \"{a2}\"!"
+msgstr "\"{a1}\" já está a ser usada por \"{a2}\"!"
+
+#: ../plcopen/plcopen.py:557
+#, python-brace-format
+msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
+msgstr "o recurso\"{a1}\" já existe na configuração\"{a2}\" !!!"
+
+#: ../plcopen/plcopen.py:577
+#, python-brace-format
+msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
+msgstr "o recurso\"{a1}\" não existe na configuração\"{a2}\" !!!"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#, python-format
+msgid "%03gms"
+msgstr "%03gms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#, python-format
+msgid "%dd"
+msgstr "%dd"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#, python-format
+msgid "%dh"
+msgstr "%dh"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
+#, python-format
+msgid "%dm"
+msgstr "%dm"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
+#, python-format
+msgid "%dms"
+msgstr "%dms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#, python-format
+msgid "%ds"
+msgstr "%ds"
+
+#: ../PLCControler.py:1114
+#, python-format
+msgid "%s Data Types"
+msgstr "%s Tipo de dados"
+
+#: ../PLCControler.py:1097
+#, python-format
+msgid "%s POUs"
+msgstr "%s POUs"
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
+#, python-format
+msgid "%s Profile"
+msgstr "%s Perfil"
+
+#: ../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 o corpo não tem instâncias!"
+
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
+#, python-format
+msgid "%s body don't have text!"
+msgstr "%s o corpo não tem texto!"
+
+#: ../IDEFrame.py:388
+msgid "&Add Element"
+msgstr "&Adicione elemento"
+
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
+msgid "&Close"
+msgstr "&Fechar"
+
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr "&Configuração"
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr "&Tipo de dados"
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr "&Apagar"
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr "&Exibir"
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr "&Editar"
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr "&Ficheiro"
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr "&Função"
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr "&Ajuda"
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr "&Licensa"
+
+#: ../IDEFrame.py:356
+msgid "&Program"
+msgstr "&Programa"
+
+#: ../PLCOpenEditor.py:98
+msgid "&Properties"
+msgstr "&Propriedades"
+
+#: ../BeremizIDE.py:244
+msgid "&Recent Projects"
+msgstr "&Projectos recentes"
+
+#: ../IDEFrame.py:358
+msgid "&Resource"
+msgstr "&Recurso"
+
+#: ../controls/SearchResultPanel.py:247
+#, python-brace-format
+msgid "'{a1}' - {a2} match in project"
+msgstr "'{a1}' - {a2} é idêntico no projecto"
+
+#: ../controls/SearchResultPanel.py:249
+#, python-brace-format
+msgid "'{a1}' - {a2} matches in project"
+msgstr "'{a1}' - {a2} são idênticos no projecto"
+
+#: ../connectors/PYRO/__init__.py:98
+#, python-brace-format
+msgid "'{a1}' is located at {a2}\n"
+msgstr "'{a1}' está localizado em {a2}\n"
+
+#: ../controls/SearchResultPanel.py:298
+#, python-format
+msgid "(%d matches)"
+msgstr "(%d corresponde)"
+
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
+#, python-format
+msgid ", %s"
+msgstr ", %s"
+
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
+msgid "1d"
+msgstr "1d"
+
+#: ../controls/LogViewer.py:288
+msgid "1h"
+msgstr "1h"
+
+#: ../controls/LogViewer.py:289
+msgid "1m"
+msgstr "1m"
+
+#: ../controls/LogViewer.py:290
+msgid "1s"
+msgstr "1s"
+
+#: ../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 ""
+"Uma POU contém um elemento chamado \"%s\" Isto pode causar um conflito. "
+"Deseja continuar?"
+
+#: ../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 "Uma POU chmada \"%s\" já existe!"
+
+#: ../ConfigTreeNode.py:424
+#, python-brace-format
+msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
+msgstr "Um filho chamado \"{a1}\" ajá existe -> \"{a2}\"\n"
+
+#: ../dialogs/BrowseLocationsDialog.py:229
+msgid "A location must be selected!"
+msgstr "Uma localização tem de ser seleccionada!"
+
+#: ../editors/ResourceEditor.py:485
+msgid "A task with the same name already exists!"
+msgstr "Uma tarefa com o mesmo nome já existe!"
+
+#: ../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 "Uma variavel com o nome\"%s\" já existe nesta pou!"
+
+#: ../editors/CodeFileEditor.py:778
+#, python-format
+msgid "A variable with \"%s\" as name already exists!"
+msgstr "Uma variavel com o nome\"%s\" já existe!"
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
+msgid "About"
+msgstr "Sobre"
+
+#: ../plcopen/iec_std.csv:22
+msgid "Absolute number"
+msgstr "Numero absoluto"
+
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
+msgid "Action"
+msgstr "Acção"
+
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+msgid "Action Block"
+msgstr "Bloco de acção"
+
+#: ../dialogs/PouActionDialog.py:89
+msgid "Action Name"
+msgstr "Nome da acção"
+
+#: ../dialogs/PouActionDialog.py:56
+msgid "Action Name:"
+msgstr "Nome da acção:"
+
+#: ../plcopen/plcopen.py:1567
+#, python-format
+msgid "Action with name %s doesn't exist!"
+msgstr "A acção com o nome \"%s\" não existe!"
+
+#: ../plcopen/types_enums.py:76
+msgid "Actions"
+msgstr "Acções"
+
+#: ../dialogs/ActionBlockDialog.py:139
+msgid "Actions:"
+msgstr "Acções:"
+
+#: ../editors/Viewer.py:473
+msgid "Active"
+msgstr "Activo"
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+msgid "Add"
+msgstr "Adicionar"
+
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+msgid "Add Action"
+msgstr "Adicionar acção"
+
+#: ../features.py:33
+msgid "Add C code accessing located variables synchronously"
+msgstr "Adicionar codigo C acessando variaveis localizadas sincronamente"
+
+#: ../IDEFrame.py:1907
+msgid "Add Configuration"
+msgstr "Adicionar Configuração"
+
+#: ../IDEFrame.py:1887
+msgid "Add DataType"
+msgstr "Adicionar um Tipo de Dados"
+
+#: ../editors/Viewer.py:609
+msgid "Add Divergence Branch"
+msgstr "Adicionar um Ramo de divergência"
+
+#: ../dialogs/DiscoveryDialog.py:121
+msgid "Add IP"
+msgstr "Adicionar IP"
+
+#: ../IDEFrame.py:1895
+msgid "Add POU"
+msgstr "Adicionao POU"
+
+#: ../features.py:34
+msgid "Add Python code executed asynchronously"
+msgstr "Adicionar codigo Python executado assincronamente"
+
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+msgid "Add Resource"
+msgstr "Adicionar Recurso"
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+msgid "Add Transition"
+msgstr "Adicionar Transição"
+
+#: ../editors/Viewer.py:596
+msgid "Add Wire Segment"
+msgstr "Adicionar seguemento de ligação"
+
+#: ../editors/SFCViewer.py:447
+msgid "Add a new initial step"
+msgstr "Adicionar um novo passo de inicio"
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+msgid "Add a new jump"
+msgstr "Adicionar um novo salto"
+
+#: ../editors/SFCViewer.py:469
+msgid "Add a new step"
+msgstr "Adicionar um novo passo"
+
+#: ../features.py:35
+msgid "Add a simple WxGlade based GUI."
+msgstr "Adicionar um simples GUI baseado em WxGlade"
+
+#: ../dialogs/ActionBlockDialog.py:143
+msgid "Add action"
+msgstr "Adicionar acção"
+
+#: ../editors/DataTypeEditor.py:364
+msgid "Add element"
+msgstr "Adicionar elemento"
+
+#: ../editors/ResourceEditor.py:283
+msgid "Add instance"
+msgstr "Adicionar instância"
+
+#: ../canfestival/NetworkEditor.py:110
+msgid "Add slave"
+msgstr "Adicionar escravo"
+
+#: ../editors/ResourceEditor.py:252
+msgid "Add task"
+msgstr "Adicionar tarefa"
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+msgid "Add variable"
+msgstr "Adicionar variável"
+
+#: ../plcopen/iec_std.csv:33
+msgid "Addition"
+msgstr "Adição"
+
+#: ../plcopen/definitions.py:51
+msgid "Additional function blocks"
+msgstr "Blocos de função adicionais"
+
+#: ../editors/Viewer.py:669
+msgid "Adjust Block Size"
+msgstr "Ajustar tamanho de bloco"
+
+#: ../editors/Viewer.py:1720
+msgid "Alignment"
+msgstr "Alinhamento"
+
+#: ../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 "Tudo"
+
+#: ../editors/FileManagementPanel.py:37
+msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
+msgstr "Todos os ficheiros (*.*)|*.*|CSV files (*.csv)|*.csv"
+
+#: ../ProjectController.py:1670
+msgid "Already connected. Please disconnect\n"
+msgstr "Já conectado. Por favor desconecte-se\n"
+
+#: ../editors/DataTypeEditor.py:607
+#, python-format
+msgid "An element named \"%s\" already exists in this structure!"
+msgstr "Um elemento chamado \"%s\" já existe nesta estrutura!"
+
+#: ../editors/ResourceEditor.py:520
+msgid "An instance with the same name already exists!"
+msgstr "Uma instância com o mesmo nome já existe!"
+
+#: ../dialogs/ConnectionDialog.py:103
+msgid "Apply name modification to all continuations with the same name"
+msgstr ""
+"Aplicar modificação de nome para todas as continuações com o mesmo nome"
+
+#: ../plcopen/iec_std.csv:31
+msgid "Arc cosine"
+msgstr "Arco coseno"
+
+#: ../plcopen/iec_std.csv:30
+msgid "Arc sine"
+msgstr "Arco seno"
+
+#: ../plcopen/iec_std.csv:32
+msgid "Arc tangent"
+msgstr "Arco tangente"
+
+#: ../plcopen/iec_std.csv:33
+msgid "Arithmetic"
+msgstr "Aritmético"
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
+msgid "Array"
+msgstr "Array"
+
+#: ../plcopen/iec_std.csv:39
+msgid "Assignment"
+msgstr "Atribuição"
+
+#: ../dialogs/FBDVariableDialog.py:226
+msgid "At least a variable or an expression must be selected!"
+msgstr "Pelo menos uma variável ou expressão tem de ser seleccionada!"
+
+#: ../controls/ProjectPropertiesPanel.py:111
+msgid "Author"
+msgstr "Autor"
+
+#: ../controls/ProjectPropertiesPanel.py:108
+msgid "Author Name (optional):"
+msgstr "Nome de Autor (opcional)"
+
+#: ../dialogs/FindInPouDialog.py:80
+msgid "Backward"
+msgstr "Para trás"
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
+#, python-format
+msgid "Bad location size : %s"
+msgstr "Mau tamanho de posição %s"
+
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
+msgid "Base Type:"
+msgstr "Tipo base"
+
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+msgid "Base Types"
+msgstr "Tipos base"
+
+#: ../BeremizIDE.py:483
+msgid "Beremiz"
+msgstr "Beremiz"
+
+#: ../plcopen/iec_std.csv:70
+msgid "Binary selection (1 of 2)"
+msgstr "Selecção binária (1 de 2)"
+
+#: ../plcopen/iec_std.csv:62
+msgid "Bit-shift"
+msgstr "Bit-shift"
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise"
+msgstr "Bitwise"
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise AND"
+msgstr "Bitwise AND"
+
+#: ../plcopen/iec_std.csv:67
+msgid "Bitwise OR"
+msgstr "Bitwise OR"
+
+#: ../plcopen/iec_std.csv:68
+msgid "Bitwise XOR"
+msgstr "Bitwise XOR"
+
+#: ../plcopen/iec_std.csv:69
+msgid "Bitwise inverting"
+msgstr "Bitwise inverting"
+
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+msgid "Block"
+msgstr "Bloco"
+
+#: ../dialogs/FBDBlockDialog.py:63
+msgid "Block Properties"
+msgstr "Propriedades do bloco"
+
+#: ../editors/TextViewer.py:260
+msgid "Block name"
+msgstr "Nome do bloco "
+
+#: ../editors/Viewer.py:586
+msgid "Bottom"
+msgstr "Fundo"
+
+#: ../ProjectController.py:1400
+msgid "Broken"
+msgstr "Avariado"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
+#, python-format
+msgid "Browse %s values library"
+msgstr "Explore a biblioteca de valores %s"
+
+#: ../dialogs/BrowseLocationsDialog.py:72
+msgid "Browse Locations"
+msgstr "Navegar nos endereços"
+
+#: ../ProjectController.py:1815
+msgid "Build"
+msgstr "Compilar"
+
+#: ../ProjectController.py:1335
+msgid "Build directory already clean\n"
+msgstr "Directório de compilação já está limpo\n"
+
+#: ../ProjectController.py:1816
+msgid "Build project into build folder"
+msgstr "Compilar projecto no ficheiro de compilação"
+
+#: ../ProjectController.py:1108
+msgid "C Build crashed !\n"
+msgstr "A compilação C quebrou !\n"
+
+#: ../ProjectController.py:1105
+msgid "C Build failed.\n"
+msgstr "A compilação C falhou.\n"
+
+#: ../c_ext/CFileEditor.py:66
+msgid "C code"
+msgstr "Codigo C"
+
+#: ../ProjectController.py:1186
+msgid "C code generated successfully.\n"
+msgstr "Codigo C gerado com sucesso.\n"
+
+#: ../targets/toolchain_makefile.py:126
+msgid "C compilation failed.\n"
+msgstr "A compilação C falhou.\n"
+
+#: ../targets/toolchain_gcc.py:199
+#, python-format
+msgid "C compilation of %s failed.\n"
+msgstr "A compilação C de %s falhou.\n"
+
+#: ../features.py:33
+msgid "C extension"
+msgstr "Extensão C"
+
+#: ../dialogs/AboutDialog.py:69
+msgid "C&redits"
+msgstr "C&redits"
+
+#: ../canfestival/NetworkEditor.py:58
+msgid "CANOpen network"
+msgstr "Rede CANOpen"
+
+#: ../canfestival/SlaveEditor.py:48
+msgid "CANOpen slave"
+msgstr "Escravo CANOpen"
+
+#: ../features.py:31
+msgid "CANopen support"
+msgstr "Suporte CANOpen"
+
+#: ../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 "Só pode gerar ordens de execução em redes FBD!"
+
+#: ../controls/VariablePanel.py:291
+msgid "Can only give a location to local or global variables"
+msgstr "Só pode gerar um endereço para variáveis locais ou globais"
+
+#: ../PLCOpenEditor.py:318
+#, python-format
+msgid "Can't generate program to file %s!"
+msgstr "Não é possivel gerar um programa no ficheiro %s !"
+
+#: ../controls/VariablePanel.py:289
+msgid "Can't give a location to a function block instance"
+msgstr ""
+"Não é possivel gerar um endereço para uma instância de bloco de função"
+
+#: ../PLCOpenEditor.py:363
+#, python-format
+msgid "Can't save project to file %s!"
+msgstr "Não é possivel salvar o projecto no ficheiro %s !"
+
+#: ../controls/VariablePanel.py:339
+msgid "Can't set an initial value to a function block instance"
+msgstr ""
+"Não é possivel atribuir um valor inicial a uma instância de bloco de função"
+
+#: ../ConfigTreeNode.py:532
+#, python-brace-format
+msgid "Cannot create child {a1} of type {a2} "
+msgstr "Não é possivel criar um elemento filho {a1} do tipo {a2} "
+
+#: ../ConfigTreeNode.py:454
+#, python-format
+msgid "Cannot find lower free IEC channel than %d\n"
+msgstr "Nâo é possivel encontrar um canal IEC livre inferior a %d\n"
+
+#: ../connectors/PYRO/__init__.py:139
+msgid "Cannot get PLC status - connection failed.\n"
+msgstr "Não é possivel obter o estado do PLC - falha de conexão.\n"
+
+#: ../ProjectController.py:967
+msgid "Cannot open/parse VARIABLES.csv!\n"
+msgstr "Não é possível abrir / analisar VARIÁVEIS.csv!\n"
+
+#: ../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 ""
+"Não é possível defenir o bit de offset para uma variavel não bool '{a1}' "
+"(ID:{a2},Idx:{a3},sIdx:{a4}))"
+
+#: ../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 "Maiúsculas e minúsculas"
+
+#: ../editors/Viewer.py:581
+msgid "Center"
+msgstr "Centrar"
+
+#: ../Beremiz_service.py:276
+msgid "Change IP of interface to bind"
+msgstr "Alterar IP da interface a ligar"
+
+#: ../Beremiz_service.py:275
+msgid "Change Name"
+msgstr "Alterar nome"
+
+#: ../IDEFrame.py:1977
+msgid "Change POU Type To"
+msgstr "Alterar tipo de Pou para"
+
+#: ../Beremiz_service.py:277
+msgid "Change Port Number"
+msgstr "Alterar numero de porto"
+
+#: ../Beremiz_service.py:278
+msgid "Change working directory"
+msgstr "Alterar directoria de trabalho"
+
+#: ../plcopen/iec_std.csv:81
+msgid "Character string"
+msgstr "Cadeia de caracteres"
+
+#: ../svgui/svgui.py:136
+msgid "Choose a SVG file"
+msgstr "Escolha um ficheiro SVG"
+
+#: ../ProjectController.py:561
+msgid "Choose a directory to save project"
+msgstr "Escolha um directório para salvar projecto"
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+msgid "Choose a file"
+msgstr "Escolha um ficheiro"
+
+#: ../BeremizIDE.py:900
+msgid "Choose a project"
+msgstr "Escolha um projecto"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
+#, python-format
+msgid "Choose a value for %s:"
+msgstr "Escalha um valor para %s :"
+
+#: ../Beremiz_service.py:333
+msgid "Choose a working directory "
+msgstr "Escolha um directório de trabalho"
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
+msgid "Chosen folder doesn't contain a program. It's not a valid project!"
+msgstr "A pasta escolhida não contém um programa. Não é um projecto válido!"
+
+#: ../ProjectController.py:435
+msgid "Chosen folder isn't empty. You can't use it for a new project!"
+msgstr ""
+"A pasta escolhida não está vazia. Não pode ser usada para um novo projecto!"
+
+#: ../controls/VariablePanel.py:60
+msgid "Class"
+msgstr "Classe"
+
+#: ../controls/VariablePanel.py:472
+msgid "Class Filter:"
+msgstr "Filtro de Classe:"
+
+#: ../dialogs/FBDVariableDialog.py:74
+msgid "Class:"
+msgstr "Classe:"
+
+#: ../ProjectController.py:1821
+msgid "Clean"
+msgstr "Limpar"
+
+#: ../controls/LogViewer.py:327
+msgid "Clean log messages"
+msgstr "Limpar menssagens log"
+
+#: ../ProjectController.py:1822
+msgid "Clean project build folder"
+msgstr "Limpar a pasta de compilação do projeto"
+
+#: ../ProjectController.py:1332
+msgid "Cleaning the build directory\n"
+msgstr "Limpar o directório de compilação\n"
+
+#: ../IDEFrame.py:437
+msgid "Clear Errors"
+msgstr "limpar erros"
+
+#: ../editors/Viewer.py:680
+msgid "Clear Execution Order"
+msgstr "limpar ordem de execução"
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+msgid "Close"
+msgstr "Fechar"
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+msgid "Close Application"
+msgstr "Fechar aplicação"
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
+msgid "Close Project"
+msgstr "Fechar projecto"
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
+msgid "Close Tab"
+msgstr "Fechar aba"
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+msgid "Coil"
+msgstr "Bobine"
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+msgid "Comment"
+msgstr "Comentário"
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
+msgid "Community support"
+msgstr "Suporte da comunidade"
+
+#: ../dialogs/ProjectDialog.py:65
+msgid "Company Name"
+msgstr "Nome da Empresa"
+
+#: ../controls/ProjectPropertiesPanel.py:106
+msgid "Company Name (required):"
+msgstr "Nome da Empresa (obrigatório):"
+
+#: ../controls/ProjectPropertiesPanel.py:107
+msgid "Company URL (optional):"
+msgstr "URL da Empresa (opcional):"
+
+#: ../plcopen/iec_std.csv:75
+msgid "Comparison"
+msgstr "Comparação"
+
+#: ../ProjectController.py:756
+msgid "Compiling IEC Program into C code...\n"
+msgstr "A compilar programa ICE para codigo C...\n"
+
+#: ../plcopen/iec_std.csv:85
+msgid "Concatenation"
+msgstr "Concatenação"
+
+#: ../editors/ConfTreeNodeEditor.py:241
+msgid "Config"
+msgstr "Config"
+
+#: ../editors/ProjectNodeEditor.py:39
+msgid "Config variables"
+msgstr "Config variáveis"
+
+#: ../dialogs/SearchInProjectDialog.py:43
+msgid "Configuration"
+msgstr "Configuração"
+
+#: ../plcopen/types_enums.py:77
+msgid "Configurations"
+msgstr "Configurações"
+
+#: ../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 "Confirme ou altere o nome da variável"
+
+#: ../ProjectController.py:1842
+msgid "Connect"
+msgstr "Conectar"
+
+#: ../ProjectController.py:1843
+msgid "Connect to the target PLC"
+msgstr "Conectar ao PLC alvo"
+
+#: ../ProjectController.py:1391
+#, python-format
+msgid "Connected to URI: %s"
+msgstr "Conectar ao URI: %s"
+
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
+msgid "Connection"
+msgstr "Conexão"
+
+#: ../dialogs/ConnectionDialog.py:55
+msgid "Connection Properties"
+msgstr "Propriedades da conexão"
+
+#: ../ProjectController.py:1691
+msgid "Connection canceled!\n"
+msgstr "Conexão cancelada!\n"
+
+#: ../ProjectController.py:1714
+#, python-format
+msgid "Connection failed to %s!\n"
+msgstr "Falha na conexão a %s !\n"
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+msgid "Connection lost!\n"
+msgstr "Conexão perdida!\n"
+
+#: ../connectors/PYRO/__init__.py:110
+#, python-format
+msgid "Connection to '%s' failed.\n"
+msgstr "A conexão com %s falhou.\n"
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+msgid "Connector"
+msgstr "Conector"
+
+#: ../dialogs/SFCStepDialog.py:68
+msgid "Connectors:"
+msgstr "Conectores:"
+
+#: ../BeremizIDE.py:378
+msgid "Console"
+msgstr "Consola"
+
+#: ../controls/VariablePanel.py:75
+msgid "Constant"
+msgstr "Constante"
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+msgid "Contact"
+msgstr "Contacto"
+
+#: ../controls/ProjectPropertiesPanel.py:217
+msgid "Content Description (optional):"
+msgstr "descrição de conteúdo (opcional):"
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+msgid "Continuation"
+msgstr "Continuação"
+
+#: ../plcopen/iec_std.csv:18
+msgid "Conversion from BCD"
+msgstr "Conversão de BCD"
+
+#: ../plcopen/iec_std.csv:19
+msgid "Conversion to BCD"
+msgstr "Conversão para BCD"
+
+#: ../plcopen/iec_std.csv:21
+msgid "Conversion to date"
+msgstr "Conversão para data"
+
+#: ../plcopen/iec_std.csv:20
+msgid "Conversion to time-of-day"
+msgstr "Conversão para hora-do-dia"
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
+msgid "Copy"
+msgstr "Copiar"
+
+#: ../IDEFrame.py:1964
+msgid "Copy POU"
+msgstr "Copiar POU"
+
+#: ../editors/FileManagementPanel.py:68
+msgid "Copy file from left folder to right"
+msgstr "Copiar o arquivo da pasta esquerda para a direita"
+
+#: ../editors/FileManagementPanel.py:67
+msgid "Copy file from right folder to left"
+msgstr "Copiar o arquivo da pasta direita para a esquerda"
+
+#: ../plcopen/iec_std.csv:28
+msgid "Cosine"
+msgstr "Coseno"
+
+#: ../ConfigTreeNode.py:660
+#, python-brace-format
+msgid ""
+"Could not add child \"{a1}\", type {a2} :\n"
+"{a3}\n"
+msgstr ""
+"Não foi possível adicionar elemento filho \"{a1}\", tipo {a2}:\n"
+" {a3} \n"
+
+#: ../py_ext/PythonFileCTNMixin.py:81
+#, python-format
+msgid "Couldn't import old %s file."
+msgstr "Não foi possivél importar o ficheiro antigo %s."
+
+#: ../ConfigTreeNode.py:630
+#, python-brace-format
+msgid ""
+"Couldn't load confnode base parameters {a1} :\n"
+" {a2}"
+msgstr ""
+"Não foi possível carregar parâmetros base de confnode {a1} : \n"
+" {a2}"
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
+#, python-brace-format
+msgid ""
+"Couldn't load confnode parameters {a1} :\n"
+" {a2}"
+msgstr ""
+"Não foi possível carregar parâmetros de confnode {a1} : \n"
+" {a2}"
+
+#: ../PLCControler.py:552
+msgid "Couldn't paste non-POU object."
+msgstr "Não foi possível colar o objeto não-POU."
+
+#: ../ProjectController.py:1636
+msgid "Couldn't start PLC !\n"
+msgstr "Não foi possível iniciar o PLC!\n"
+
+#: ../ProjectController.py:1644
+msgid "Couldn't stop PLC !\n"
+msgstr "Não foi possível parar o PLC!\n"
+
+#: ../svgui/svgui.py:57
+msgid "Create HMI"
+msgstr "Criar HMI"
+
+#: ../dialogs/PouDialog.py:54
+msgid "Create a new POU"
+msgstr "Criar uma nova POU"
+
+#: ../dialogs/PouActionDialog.py:45
+msgid "Create a new action"
+msgstr "Criar uma nova acção"
+
+#: ../IDEFrame.py:166
+msgid "Create a new action block"
+msgstr "Criar um novo bloco de ação"
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+msgid "Create a new block"
+msgstr "Criar um novo bloco"
+
+#: ../IDEFrame.py:139
+msgid "Create a new branch"
+msgstr "Criar uma nova ramificação"
+
+#: ../IDEFrame.py:133
+msgid "Create a new coil"
+msgstr "Criar uma nova bobine"
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+msgid "Create a new comment"
+msgstr "Criar um novo comentário"
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+msgid "Create a new connection"
+msgstr "Criar uma nova conexão"
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
+msgid "Create a new contact"
+msgstr "Criar um novo contacto"
+
+#: ../IDEFrame.py:169
+msgid "Create a new divergence"
+msgstr "Criar uma nova divergência"
+
+#: ../dialogs/SFCDivergenceDialog.py:54
+msgid "Create a new divergence or convergence"
+msgstr "Criar uma nova divergência ou convergência"
+
+#: ../IDEFrame.py:157
+msgid "Create a new initial step"
+msgstr "Criar um novo passo inicial"
+
+#: ../IDEFrame.py:172
+msgid "Create a new jump"
+msgstr "Criar um novo salto"
+
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
+msgid "Create a new power rail"
+msgstr "Criar um novo trilho de energia"
+
+#: ../IDEFrame.py:130
+msgid "Create a new rung"
+msgstr "Criar uma nova rung"
+
+#: ../IDEFrame.py:160
+msgid "Create a new step"
+msgstr "Criar um novo passo"
+
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+msgid "Create a new transition"
+msgstr "Criar uma nova transição"
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+msgid "Create a new variable"
+msgstr "Criar uma nova variável"
+
+#: ../dialogs/AboutDialog.py:109
+msgid "Credits"
+msgstr "Creditos"
+
+#: ../Beremiz_service.py:424
+msgid "Current working directory :"
+msgstr "Directoria de trabalho actual"
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+msgid "Cut"
+msgstr "Cortar"
+
+#: ../editors/ResourceEditor.py:81
+msgid "Cyclic"
+msgstr "Cíclico"
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
+#: ../plcopen/iec_std.csv:60
+msgid "DEPRECATED"
+msgstr "Descontinuada"
+
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
+msgid "DS-301 Profile"
+msgstr "Perfile DS-301"
+
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
+msgid "DS-302 Profile"
+msgstr "Perfile DS-302"
+
+#: ../dialogs/SearchInProjectDialog.py:39
+msgid "Data Type"
+msgstr "Tipo de dado"
+
+#: ../plcopen/types_enums.py:76
+msgid "Data Types"
+msgstr "Tipo de dados"
+
+#: ../plcopen/iec_std.csv:16
+msgid "Data type conversion"
+msgstr "Converção de tipo de dados"
+
+#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
+msgid "Date addition"
+msgstr "Adição de data"
+
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
+#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
+msgid "Date and time subtraction"
+msgstr "Subtração de data e hora"
+
+#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
+msgid "Date subtraction"
+msgstr "Subtração de data"
+
+#: ../dialogs/DurationEditorDialog.py:46
+msgid "Days:"
+msgstr "Dias:"
+
+#: ../ProjectController.py:1729
+msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
+msgstr ""
+"Depuração não corresponde ao PLC - parar / transferir / iniciar para "
+"reativar\n"
+
+#: ../controls/PouInstanceVariablesPanel.py:144
+msgid "Debug instance"
+msgstr "Depurar a instância"
+
+#: ../editors/Viewer.py:490
+#, python-format
+msgid "Debug: %s"
+msgstr "depuração %s"
+
+#: ../ProjectController.py:1471
+#, python-format
+msgid "Debug: Unknown variable '%s'\n"
+msgstr "Depuração: Variável desconhecida '%s '\n"
+
+#: ../ProjectController.py:1469
+#, python-format
+msgid "Debug: Unsupported type to debug '%s'\n"
+msgstr "Depuração: Tipo não suportado para depurar ' %s '\n"
+
+#: ../IDEFrame.py:660
+msgid "Debugger"
+msgstr "Depurador"
+
+#: ../ProjectController.py:1726
+msgid "Debugger ready\n"
+msgstr "Depurador pronto\n"
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+msgid "Delete"
+msgstr "Eliminar"
+
+#: ../editors/Viewer.py:610
+msgid "Delete Divergence Branch"
+msgstr "Eliminar ramificação de divergência"
+
+#: ../editors/FileManagementPanel.py:157
+msgid "Delete File"
+msgstr "Eliminar ficheiro"
+
+#: ../editors/Viewer.py:597
+msgid "Delete Wire Segment"
+msgstr "Eliminar seguemento de fio"
+
+#: ../controls/CustomEditableListBox.py:44
+msgid "Delete item"
+msgstr "Eliminar item"
+
+#: ../plcopen/iec_std.csv:88
+msgid "Deletion (within)"
+msgstr "Eliminação (dentro)"
+
+#: ../editors/DataTypeEditor.py:161
+msgid "Derivation Type:"
+msgstr "Tipo de Derivação:"
+
+#: ../editors/CodeFileEditor.py:735
+msgid "Description"
+msgstr "Descrição"
+
+#: ../controls/VariablePanel.py:463
+msgid "Description:"
+msgstr "Descrição:"
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
+msgid "Dimensions:"
+msgstr "Dimensões:"
+
+#: ../dialogs/FindInPouDialog.py:69
+msgid "Direction"
+msgstr "Direcção"
+
+#: ../dialogs/BrowseLocationsDialog.py:102
+msgid "Direction:"
+msgstr "Direcção:"
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Directly"
+msgstr "Diretamente"
+
+#: ../ProjectController.py:1855
+msgid "Disconnect"
+msgstr ""
+
+#: ../ProjectController.py:1856
+msgid "Disconnect from PLC"
+msgstr ""
+
+#: ../ProjectController.py:1401
+msgid "Disconnected"
+msgstr ""
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+msgid "Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:36
+msgid "Division"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:156
+#, python-format
+msgid "Do you really want to delete the file '%s'?"
+msgstr ""
+
+#: ../controls/VariablePanel.py:65
+msgid "Documentation"
+msgstr ""
+
+#: ../PLCOpenEditor.py:312
+msgid "Done"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Duration"
+msgstr ""
+
+#: ../canfestival/canfestival.py:174
+msgid "EDS files (*.eds)|*.eds|All files|*.*"
+msgstr ""
+
+#: ../editors/Viewer.py:668
+msgid "Edit Block"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:56
+msgid "Edit Contact Values"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:62
+msgid "Edit Duration"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:53
+msgid "Edit Step"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:45
+msgid "Edit a WxWidgets GUI with WXGlade"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:127
+msgid "Edit action block properties"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:47
+msgid "Edit array type properties"
+msgstr ""
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+msgid "Edit comment"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:69
+msgid "Edit file"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:42
+msgid "Edit item"
+msgstr ""
+
+#: ../editors/Viewer.py:3059
+msgid "Edit jump target"
+msgstr ""
+
+#: ../ProjectController.py:1873
+msgid "Edit raw IEC code added to code generated by PLCGenerator"
+msgstr ""
+
+#: ../editors/SFCViewer.py:815
+msgid "Edit step name"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:53
+msgid "Edit transition"
+msgstr ""
+
+#: ../IDEFrame.py:632
+msgid "Editor ToolBar"
+msgstr ""
+
+#: ../ProjectController.py:1294
+msgid "Editor selection"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:360
+msgid "Elements :"
+msgstr ""
+
+#: ../ProjectController.py:1399
+msgid "Empty"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
+msgid "Enter a name "
+msgstr ""
+
+#: ../Beremiz_service.py:326
+msgid "Enter a port number "
+msgstr ""
+
+#: ../Beremiz_service.py:317
+msgid "Enter the IP of the interface to bind"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Enumerated"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:77
+msgid "Equal to"
+msgstr ""
+
+#: ../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 ""
+
+#: ../ProjectController.py:811
+msgid ""
+"Error : At least one configuration and one resource must be declared in PLC "
+"!\n"
+msgstr ""
+
+#: ../ProjectController.py:803
+#, python-format
+msgid "Error : IEC to C compiler returned %d\n"
+msgstr ""
+
+#: ../ProjectController.py:731
+#, python-format
+msgid ""
+"Error in ST/IL/SFC code generator :\n"
+"%s\n"
+msgstr ""
+
+#: ../ConfigTreeNode.py:219
+#, python-format
+msgid "Error while saving \"%s\"\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:179
+msgid "Error: Export slave failed\n"
+msgstr ""
+
+#: ../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:383
+msgid "Error: No PLC built\n"
+msgstr ""
+
+#: ../ProjectController.py:1708
+#, python-format
+msgid "Exception while connecting %s!\n"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:123
+msgid "Execution Control:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+msgid "Execution Order:"
+msgstr ""
+
+#: ../features.py:36
+msgid "Experimental web based HMI"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:38
+msgid "Exponent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:26
+msgid "Exponentiation"
+msgstr ""
+
+#: ../canfestival/canfestival.py:186
+msgid "Export CanOpen slave to EDS file"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+msgid "Export graph values to clipboard"
+msgstr ""
+
+#: ../canfestival/canfestival.py:185
+msgid "Export slave"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:94
+msgid "Expression:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "External"
+msgstr ""
+
+#: ../ProjectController.py:826
+msgid "Extracting Located Variables...\n"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "FBD"
+msgstr ""
+
+#: ../ProjectController.py:1773
+msgid "Failed : Must build before transfer.\n"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+msgid "Falling Edge"
+msgstr ""
+
+#: ../ProjectController.py:1098
+msgid "Fatal : cannot get builder.\n"
+msgstr ""
+
+#: ../Beremiz.py:160
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:167
+#, python-format
+msgid "Field %s hasn't a valid value!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:169
+#, python-format
+msgid "Fields %s haven't a valid value!"
+msgstr ""
+
+#: ../controls/FolderTree.py:221
+#, python-format
+msgid "File '%s' already exists!"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+msgid "Find"
+msgstr ""
+
+#: ../IDEFrame.py:379
+msgid "Find Next"
+msgstr ""
+
+#: ../IDEFrame.py:381
+msgid "Find Previous"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:90
+msgid "Find position"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:58
+msgid "Find:"
+msgstr ""
+
+#: ../editors/Viewer.py:1633
+msgid "Force value"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:176
+msgid "Forcing Variable Value"
+msgstr ""
+
+#: ../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:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
+msgid "Form isn't complete. Name must be filled!"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:235
+msgid "Form isn't complete. Valid block type must be selected!"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:75
+msgid "Forward"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+msgid "Function"
+msgstr ""
+
+#: ../IDEFrame.py:354
+msgid "Function &Block"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
+msgid "Function Block"
+msgstr ""
+
+#: ../controls/VariablePanel.py:868
+msgid "Function Block Types"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Function Blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:290
+msgid "Function Blocks can't be used in Functions!"
+msgstr ""
+
+#: ../PLCControler.py:1907
+#, python-format
+msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Functions"
+msgstr ""
+
+#: ../PLCOpenEditor.py:88
+msgid "Generate Program"
+msgstr ""
+
+#: ../ProjectController.py:722
+msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Global"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+msgid "Go to current value"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:189
+msgid "Graphics"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Greater than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:76
+msgid "Greater than or equal to"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:135
+msgid "Height:"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:89
+msgid "Home Directory:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:165
+msgid "Horizontal:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:47
+msgid "Hours:"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "IL"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:91
+msgid "IP"
+msgstr ""
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+msgid "IP is not valid!"
+msgstr ""
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
+msgid "Import SVG"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
+msgid "InOut"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:300
+#, python-brace-format
+msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:306
+#, python-format
+msgid "Incompatible size of data between \"%s\" and \"BOOL\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:310
+#, python-brace-format
+msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Indicator"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:734
+msgid "Initial"
+msgstr ""
+
+#: ../editors/Viewer.py:650
+msgid "Initial Step"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
+msgid "Initial Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
+msgid "Initial Value:"
+msgstr ""
+
+#: ../svgui/svgui.py:56
+msgid "Inkscape"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
+msgid "Inline"
+msgstr ""
+
+#: ../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:99
+msgid "Inputs:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:87
+msgid "Insertion (into)"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1948
+#, python-format
+msgid "Instance with id %d doesn't exist!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:279
+msgid "Instances:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:88
+msgid "Interface"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Interrupt"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Interval"
+msgstr ""
+
+#: ../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:407
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
+#, python-format
+msgid "Invalid value \"%s\" for variable grid element"
+msgstr ""
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
+#, python-format
+msgid "Invalid value \"%s\" for viewer block"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:211
+#, python-brace-format
+msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:124
+msgid ""
+"Invalid value!\n"
+"You must fill a numeric value."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+msgid "Jump"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "LD"
+msgstr ""
+
+#: ../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:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
+msgid "Language"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:206
+msgid "Language (optional):"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
+msgid "Language:"
+msgstr ""
+
+#: ../ProjectController.py:1779
+msgid "Latest build already matches current target. Transfering anyway...\n"
+msgstr ""
+
+#: ../Beremiz_service.py:281
+msgid "Launch WX GUI inspector"
+msgstr ""
+
+#: ../Beremiz_service.py:280
+msgid "Launch a live Python shell"
+msgstr ""
+
+#: ../editors/Viewer.py:580
+msgid "Left"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:64
+msgid "Left PowerRail"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Length of string"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:78
+msgid "Less than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:79
+msgid "Less than or equal to"
+msgstr ""
+
+#: ../IDEFrame.py:652
+msgid "Library"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:145
+msgid "License"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:73
+msgid "Limitation"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:209
+msgid "Linking :\n"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+msgid "Local"
+msgstr ""
+
+#: ../canfestival/canfestival.py:359
+msgid "Local entries"
+msgstr ""
+
+#: ../ProjectController.py:1685
+msgid "Local service discovery failed!\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:62
+msgid "Location"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:79
+msgid "Locations available:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:25
+msgid "Logarithm to base 10"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:102
+#, python-format
+msgid "MDNS resolution failure for '%s'\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
+msgid "Map Variable"
+msgstr ""
+
+#: ../features.py:31
+msgid "Map located variables over CANopen"
+msgstr ""
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
+msgid "Master"
+msgstr ""
+
+#: ../ConfigTreeNode.py:544
+#, python-brace-format
+msgid "Max count ({a1}) reached for this confnode of type {a2} "
+msgstr ""
+
+#: ../plcopen/iec_std.csv:71
+msgid "Maximum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:246
+msgid "Maximum:"
+msgstr ""
+
+#: ../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:617
+msgid "Menu ToolBar"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:51
+msgid "Microseconds:"
+msgstr ""
+
+#: ../editors/Viewer.py:585
+msgid "Middle"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:50
+msgid "Milliseconds:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:72
+msgid "Minimum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:233
+msgid "Minimum:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:48
+msgid "Minutes:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:231
+msgid "Miscellaneous"
+msgstr ""
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
+msgid "Modifier:"
+msgstr ""
+
+#: ../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:146
+msgid "Move action down"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:145
+msgid "Move action up"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:46
+msgid "Move down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:367
+msgid "Move element down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:366
+msgid "Move element up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:286
+msgid "Move instance down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:285
+msgid "Move instance up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:255
+msgid "Move task down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:254
+msgid "Move task up"
+msgstr ""
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+msgid "Move the view"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:45
+msgid "Move up"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+msgid "Move variable down"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+msgid "Move variable up"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:74
+msgid "Multiplexer (select 1 of N)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:34
+msgid "Multiplication"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:87
+msgid "My Computer:"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:89
+msgid "NAME"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
+msgid "Name"
+msgstr ""
+
+#: ../Beremiz_service.py:342
+msgid "Name must not be null!"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
+msgid "Name:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:24
+msgid "Natural logarithm"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+msgid "Negated"
+msgstr ""
+
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
+#: ../Beremiz_service.py:580
+msgid "Nevow/Athena import failed :"
+msgstr ""
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
+msgid "New"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:43
+msgid "New item"
+msgstr ""
+
+#: ../editors/Viewer.py:553
+msgid "No Modifier"
+msgstr ""
+
+#: ../ProjectController.py:1808
+msgid "No PLC to transfer (did build succeed ?)\n"
+msgstr ""
+
+#: ../PLCGenerator.py:1678
+#, python-format
+msgid "No body defined in \"%s\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#, python-brace-format
+msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCOpenEditor.py:331
+msgid ""
+"No documentation available.\n"
+"Coming soon."
+msgstr ""
+
+#: ../PLCGenerator.py:841
+#, python-format
+msgid "No informations found for \"%s\" block"
+msgstr ""
+
+#: ../PLCGenerator.py:1232
+#, python-brace-format
+msgid ""
+"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
+"broken"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:175
+msgid "No search results available."
+msgstr ""
+
+#: ../svgui/svgui.py:142
+#, python-format
+msgid "No such SVG file: %s\n"
+msgstr ""
+
+#: ../canfestival/config_utils.py:682
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
+msgstr ""
+
+#: ../canfestival/config_utils.py:387
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
+msgid "No valid value selected!"
+msgstr ""
+
+#: ../PLCGenerator.py:1676
+#, python-format
+msgid "No variable defined in \"%s\" POU"
+msgstr ""
+
+#: ../canfestival/config_utils.py:379
+#, python-brace-format
+msgid "Non existing node ID : {a1} (variable {a2})"
+msgstr ""
+
+#: ../controls/VariablePanel.py:79
+msgid "Non-Retain"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78
+msgid "Normal"
+msgstr ""
+
+#: ../canfestival/config_utils.py:426
+#, python-brace-format
+msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:80
+msgid "Not equal to"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:91
+msgid "Number of sequences:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Numerical"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:736
+msgid "OnChange"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:88
+msgid "Only Elements"
+msgstr ""
+
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
+msgid "Open"
+msgstr ""
+
+#: ../svgui/svgui.py:151
+msgid "Open Inkscape"
+msgstr ""
+
+#: ../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:1879
+msgid "Open a file explorer to manage project files"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
+msgid "Open wxGlade"
+msgstr ""
+
+#: ../controls/VariablePanel.py:64
+msgid "Option"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+msgid "Options"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:109
+msgid "Organization (optional):"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
+msgid "Other Profile"
+msgstr ""
+
+#: ../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:67 ../canfestival/NetworkEditor.py:91
+msgid "PDO Receive"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
+msgid "PDO Transmit"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:174
+msgid "PLC :\n"
+msgstr ""
+
+#: ../BeremizIDE.py:383
+msgid "PLC Log"
+msgstr ""
+
+#: ../ProjectController.py:1082
+msgid "PLC code generation failed !\n"
+msgstr ""
+
+#: ../Beremiz_service.py:305
+msgid "PLC is empty or already started."
+msgstr ""
+
+#: ../Beremiz_service.py:312
+msgid "PLC is not started."
+msgstr ""
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
+#, python-brace-format
+msgid ""
+"PLC syntax error at line {a1}:\n"
+"{a2}"
+msgstr ""
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
+msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
+msgstr ""
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
+msgid "PLCOpenEditor"
+msgstr ""
+
+#: ../PLCOpenEditor.py:339
+msgid ""
+"PLCOpenEditor is part of Beremiz project.\n"
+"\n"
+"Beremiz is an "
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:92
+msgid "PORT"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:109
+msgid "POU Name"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:66
+msgid "POU Name:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:111
+msgid "POU Type"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:73
+msgid "POU Type:"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:52
+#, python-format
+msgid "PYRO connecting to URI : %s\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:68
+#, python-format
+msgid "PYRO using certificates in '%s' \n"
+msgstr ""
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
+msgid "Page Setup"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:124
+msgid "Page Size (optional):"
+msgstr ""
+
+#: ../IDEFrame.py:2640
+#, python-format
+msgid "Page: %d"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:134
+msgid "Parent instance"
+msgstr ""
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+msgid "Paste"
+msgstr ""
+
+#: ../IDEFrame.py:1899
+msgid "Paste POU"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:60
+msgid "Pattern to search:"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:75
+msgid "Pin number:"
+msgstr ""
+
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
+msgid "Please choose a target"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Please enter a block name"
+msgstr ""
+
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+msgid "Please enter comment text"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
+msgid "Please enter step name"
+msgstr ""
+
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+msgid "Please enter text"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:177
+#, python-format
+msgid "Please enter value for a \"%s\" variable:"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be 0 <= port <= 65535!"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be an integer!"
+msgstr ""
+
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+msgid "Power Rail"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:52
+msgid "Power Rail Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
+msgid "Preview"
+msgstr ""
+
+#: ../dialogs/BlockPreviewDialog.py:59
+msgid "Preview:"
+msgstr ""
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
+msgid "Print"
+msgstr ""
+
+#: ../IDEFrame.py:1110
+msgid "Print preview"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Priority"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:91
+msgid "Priority:"
+msgstr ""
+
+#: ../runtime/PLCObject.py:518
+#, python-format
+msgid "Problem starting PLC : error %d"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:63
+msgid "Product Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:90
+msgid "Product Name (required):"
+msgstr ""
+
+#: ../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 "Project Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:88
+msgid "Project Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:89
+msgid "Project Version (optional):"
+msgstr ""
+
+#: ../PLCControler.py:2717
+msgid ""
+"Project file syntax error:\n"
+"\n"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
+msgid "Project properties"
+msgstr ""
+
+#: ../ConfigTreeNode.py:571
+#, python-brace-format
+msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:101
+msgid "Propagate Name"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Properties"
+msgstr ""
+
+#: ../Beremiz_service.py:427
+msgid "Publishing service on local network"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:126
+#, python-format
+msgid "Pyro exception: %s\n"
+msgstr ""
+
+#: ../Beremiz_service.py:420
+msgid "Pyro port :"
+msgstr ""
+
+#: ../py_ext/PythonEditor.py:84
+msgid "Python code"
+msgstr ""
+
+#: ../features.py:34
+msgid "Python file"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Qualifier"
+msgstr ""
+
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+msgid "Quit"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+msgid "Range:"
+msgstr ""
+
+#: ../ProjectController.py:1872
+msgid "Raw IEC code"
+msgstr ""
+
+#: ../BeremizIDE.py:1083
+#, python-format
+msgid "Really delete node '%s'?"
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
+msgid "Redo"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:76
+msgid "Reference"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+msgid "Refresh"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:70
+msgid "Regular expression"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:99
+msgid "Regular expressions"
+msgstr ""
+
+#: ../editors/Viewer.py:1636
+msgid "Release value"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:37
+msgid "Remainder (modulo)"
+msgstr ""
+
+#: ../BeremizIDE.py:1084
+#, python-format
+msgid "Remove %s node"
+msgstr ""
+
+#: ../IDEFrame.py:2445
+msgid "Remove Datatype"
+msgstr ""
+
+#: ../IDEFrame.py:2450
+msgid "Remove Pou"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:144
+msgid "Remove action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:365
+msgid "Remove element"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:66
+msgid "Remove file from left folder"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:284
+msgid "Remove instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:111
+msgid "Remove slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:253
+msgid "Remove task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+msgid "Remove variable"
+msgstr ""
+
+#: ../IDEFrame.py:1979
+msgid "Rename"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:187
+msgid "Replace File"
+msgstr ""
+
+#: ../editors/Viewer.py:598
+msgid "Replace Wire by connections"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:89
+msgid "Replacement (within)"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Reset"
+msgstr ""
+
+#: ../editors/Viewer.py:681
+msgid "Reset Execution Order"
+msgstr ""
+
+#: ../IDEFrame.py:453
+msgid "Reset Perspective"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:103
+msgid "Reset search result"
+msgstr ""
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+msgid "Resources"
+msgstr ""
+
+#: ../controls/VariablePanel.py:77
+msgid "Retain"
+msgstr ""
+
+#: ../controls/VariablePanel.py:455
+msgid "Return Type:"
+msgstr ""
+
+#: ../editors/Viewer.py:582
+msgid "Right"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:65
+msgid "Right PowerRail"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+msgid "Rising Edge"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:65
+msgid "Rotate left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:64
+msgid "Rotate right"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:17
+msgid "Rounding up/down"
+msgstr ""
+
+#: ../ProjectController.py:1828
+msgid "Run"
+msgstr ""
+
+#: ../ProjectController.py:1127
+msgid "Runtime IO extensions C code generation failed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1136
+msgid "Runtime library extensions C code generation failed !\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
+msgid "SDO Client"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
+msgid "SDO Server"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "SFC"
+msgstr ""
+
+#: ../PLCGenerator.py:1433
+#, python-brace-format
+msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
+msgstr ""
+
+#: ../PLCGenerator.py:780
+#, python-format
+msgid "SFC transition in POU \"%s\" must be connected."
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "ST"
+msgstr ""
+
+#: ../PLCOpenEditor.py:308
+msgid "ST files (*.st)|*.st|All files|*.*"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "SVG files (*.svg)|*.svg|All files|*.*"
+msgstr ""
+
+#: ../features.py:36
+msgid "SVGUI"
+msgstr ""
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
+msgid "Save"
+msgstr ""
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
+msgid "Save As..."
+msgstr ""
+
+#: ../BeremizIDE.py:249
+msgid "Save as"
+msgstr ""
+
+#: ../ProjectController.py:530
+msgid "Save path is the same as path of a project! \n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:73
+msgid "Scope"
+msgstr ""
+
+#: ../IDEFrame.py:644
+msgid "Search"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
+msgid "Search in Project"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:49
+msgid "Seconds:"
+msgstr ""
+
+#: ../IDEFrame.py:390
+msgid "Select All"
+msgstr ""
+
+#: ../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:1293
+msgid "Select an editor:"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:292
+msgid "Select an instance"
+msgstr ""
+
+#: ../IDEFrame.py:628
+msgid "Select an object"
+msgstr ""
+
+#: ../ProjectController.py:537
+msgid "Selected directory already contains another project. Overwrite? \n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Selection"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:65
+msgid "Selection Divergence"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:135
+msgid "Service Discovery"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:104
+msgid "Services available:"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Set"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Shift left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:63
+msgid "Shift right"
+msgstr ""
+
+#: ../ProjectController.py:1863
+msgid "Show IEC code generated by PLCGenerator"
+msgstr ""
+
+#: ../canfestival/canfestival.py:407
+msgid "Show Master"
+msgstr ""
+
+#: ../canfestival/canfestival.py:408
+msgid "Show Master generated by config_utils"
+msgstr ""
+
+#: ../ProjectController.py:1862
+msgid "Show code"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:67
+msgid "Simultaneous Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:27
+msgid "Sine"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Single"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:130
+msgid "Source didn't change, no build.\n"
+msgstr ""
+
+#: ../PLCGenerator.py:404
+#, python-brace-format
+msgid ""
+"Source signal has to be defined for single task '{a1}' in resource "
+"'{a2}.{a3}'."
+msgstr ""
+
+#: ../plcopen/iec_std.csv:23
+msgid "Square root (base 2)"
+msgstr ""
+
+#: ../plcopen/definitions.py:50
+msgid "Standard function blocks"
+msgstr ""
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+msgid "Start PLC"
+msgstr ""
+
+#: ../ProjectController.py:1074
+#, python-format
+msgid "Start build in %s\n"
+msgstr ""
+
+#: ../ProjectController.py:1397
+msgid "Started"
+msgstr ""
+
+#: ../ProjectController.py:1633
+msgid "Starting PLC\n"
+msgstr ""
+
+#: ../BeremizIDE.py:393
+msgid "Status ToolBar"
+msgstr ""
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+msgid "Step"
+msgstr ""
+
+#: ../ProjectController.py:1835
+msgid "Stop"
+msgstr ""
+
+#: ../Beremiz_service.py:272
+msgid "Stop PLC"
+msgstr ""
+
+#: ../ProjectController.py:1836
+msgid "Stop Running PLC"
+msgstr ""
+
+#: ../ProjectController.py:1398
+msgid "Stopped"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Structure"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Subrange"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:35
+msgid "Subtraction"
+msgstr ""
+
+#: ../ProjectController.py:1113
+msgid "Successfully built.\n"
+msgstr ""
+
+#: ../IDEFrame.py:449
+msgid "Switch perspective"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
+msgid "Syntax error in regular expression of pattern to search!"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:90
+msgid "TYPE"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:29
+msgid "Tangent"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:97
+msgid "Task"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:248
+msgid "Tasks:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Temp"
+msgstr ""
+
+#: ../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"
+"\n"
+"This is the main community support channel.\n"
+"For posting it is required to be subscribed to the mailing list.\n"
+"\n"
+"You can subscribe to the list here:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:186
+#, python-format
+msgid ""
+"The file '%s' already exist.\n"
+"Do you want to replace it?"
+msgstr ""
+
+#: ../editors/LDViewer.py:893
+msgid "The group of block must be coherent!"
+msgstr ""
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+msgid "There are changes, do you want to save?"
+msgstr ""
+
+#: ../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:1133
+msgid ""
+"There was a problem printing.\n"
+"Perhaps your current printer is not set correctly?"
+msgstr ""
+
+#: ../editors/LDViewer.py:902
+msgid "This option isn't available yet!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#, python-format
+msgid "Tick: %d"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40
+msgid "Time"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
+msgid "Time addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:86
+msgid "Time concatenation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
+msgid "Time division"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
+msgid "Time multiplication"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
+msgid "Time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
+msgid "Time-of-day addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
+#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
+msgid "Time-of-day subtraction"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:188
+msgid "Toggle value"
+msgstr ""
+
+#: ../editors/Viewer.py:584
+msgid "Top"
+msgstr ""
+
+#: ../ProjectController.py:1848
+msgid "Transfer"
+msgstr ""
+
+#: ../ProjectController.py:1849
+msgid "Transfer PLC"
+msgstr ""
+
+#: ../ProjectController.py:1802
+msgid "Transfer completed successfully.\n"
+msgstr ""
+
+#: ../ProjectController.py:1805
+msgid "Transfer failed\n"
+msgstr ""
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
+msgid "Transition"
+msgstr ""
+
+#: ../PLCGenerator.py:1564
+#, python-format
+msgid ""
+"Transition \"%s\" body must contain an output variable or coil referring to "
+"its name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:91
+msgid "Transition Name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:60
+msgid "Transition Name:"
+msgstr ""
+
+#: ../PLCGenerator.py:1657
+#, python-brace-format
+msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:1646
+#, python-brace-format
+msgid ""
+"Transition with content \"{a1}\" not connected to a previous step in "
+"\"{a2}\" POU"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1526
+#, python-format
+msgid "Transition with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Transitions"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:127
+msgid "Translated by"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Triggering"
+msgstr ""
+
+#: ../Beremiz_service.py:490
+msgid "Twisted unavailable."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
+msgid "Type"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:54
+msgid "Type and derivated"
+msgstr ""
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#, python-format
+msgid "Type conflict for location \"%s\""
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Type conversion"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:170
+msgid "Type infos:"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:55
+msgid "Type strict"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:43
+#, python-format
+msgid "Unable to get Xenomai's %s \n"
+msgstr ""
+
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#, python-brace-format
+msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:261
+#, python-format
+msgid "Undefined pou type \"%s\""
+msgstr ""
+
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
+msgid "Undo"
+msgstr ""
+
+#: ../ProjectController.py:442
+msgid "Unknown"
+msgstr ""
+
+#: ../editors/Viewer.py:437
+#, python-format
+msgid "Unknown variable \"%s\" for this POU!"
+msgstr ""
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
+msgid "Unnamed"
+msgstr ""
+
+#: ../PLCControler.py:263
+#, python-format
+msgid "Unnamed%d"
+msgstr ""
+
+#: ../controls/VariablePanel.py:308
+#, python-format
+msgid "Unrecognized data size \"%s\""
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+msgid "User Data Types"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
+msgid "User Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "User-defined POUs"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:267
+msgid "Values:"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
+msgid "Variable"
+msgstr ""
+
+#: ../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:68
+msgid "Variable Properties"
+msgstr ""
+
+#: ../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:439 ../editors/TextViewer.py:388
+msgid "Variable don't belong to this POU!"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:92
+msgid "Variable:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "Variables"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:166
+msgid "Vertical:"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:140
+msgid "WAMP connection timeout"
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:158
+#, python-format
+msgid "WAMP connection to '%s' failed.\n"
+msgstr ""
+
+#: ../Beremiz_service.py:595
+msgid "WAMP import failed :"
+msgstr ""
+
+#: ../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 ""
+
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+msgid "Warning"
+msgstr ""
+
+#: ../ProjectController.py:726
+msgid "Warnings in ST/IL/SFC code generator :\n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:82
+msgid "Whole Project"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:134
+msgid "Width:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:94
+msgid "Wrap search"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:126
+msgid "Written by"
+msgstr ""
+
+#: ../features.py:35
+msgid "WxGlade GUI"
+msgstr ""
+
+#: ../svgui/svgui.py:150
+msgid ""
+"You don't have write permissions.\n"
+"Open Inkscape anyway ?"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
+msgid ""
+"You don't have write permissions.\n"
+"Open wxGlade anyway ?"
+msgstr ""
+
+#: ../ProjectController.py:390
+msgid ""
+"You must have permission to work on the project\n"
+"Work on a project copy ?"
+msgstr ""
+
+#: ../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:677
+msgid "You must select the wire where a contact should be added!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
+msgid "You must type a name!"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:209
+msgid "You must type a value!"
+msgstr ""
+
+#: ../IDEFrame.py:440
+msgid "Zoom"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "days"
+msgstr ""
+
+#: ../PLCOpenEditor.py:317
+#, python-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../util/ProcessLogger.py:178
+#, python-brace-format
+msgid "exited with status {a1} (pid {a2})\n"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "function"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "functionBlock"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "hours"
+msgstr ""
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
+msgid "milliseconds"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "minutes"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "program"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "seconds"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:84
+msgid "string from the middle"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:82
+msgid "string left of"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:83
+msgid "string right of"
+msgstr ""
+
+#: ../Beremiz.py:167
+msgid "update info unavailable."
+msgstr ""
+
+#: ../PLCOpenEditor.py:315
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#: ../PLCControler.py:576
+#, python-brace-format
+msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
+msgstr ""
+
+#: ../ConfigTreeNode.py:58
+#, python-brace-format
+msgid ""
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
+"{a3}"
+msgstr ""
+
+#: Extra XSD strings
+msgid "CanFestivalSlaveNode"
+msgstr ""
+
+msgid "CAN_Device"
+msgstr ""
+
+msgid "CAN_Baudrate"
+msgstr ""
+
+msgid "NodeId"
+msgstr ""
+
+msgid "Sync_Align"
+msgstr ""
+
+msgid "Sync_Align_Ratio"
+msgstr ""
+
+msgid "CanFestivalNode"
+msgstr ""
+
+msgid "Sync_TPDOs"
+msgstr ""
+
+msgid "CanFestivalInstance"
+msgstr ""
+
+msgid "CAN_Driver"
+msgstr ""
+
+msgid "Generic"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Xenomai"
+msgstr ""
+
+msgid "XenoConfig"
+msgstr ""
+
+msgid "Compiler"
+msgstr ""
+
+msgid "CFLAGS"
+msgstr ""
+
+msgid "Linker"
+msgstr ""
+
+msgid "LDFLAGS"
+msgstr ""
+
+msgid "Linux"
+msgstr ""
+
+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 ""
+
+msgid "IEC_Channel"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "BeremizRoot"
+msgstr ""
+
+msgid "TargetType"
+msgstr ""
+
+msgid "Libraries"
+msgstr ""
+
+msgid "URI_location"
+msgstr ""
+
+msgid "Disable_Extensions"
+msgstr ""
+
+msgid "%(codefile_name)s"
+msgstr ""
+
+msgid "variables"
+msgstr ""
+
+msgid "variable"
+msgstr ""
+
+msgid "name"
+msgstr ""
+
+msgid "type"
+msgstr ""
+
+msgid "class"
+msgstr ""
+
+msgid "initial"
+msgstr ""
+
+msgid "desc"
+msgstr ""
+
+msgid "onchange"
+msgstr ""
+
+msgid "opts"
+msgstr ""
+
+#: Extra TC6 documentation strings
+msgid "0 - current time, 1 - load time from PDT"
+msgstr ""
+
+msgid "Preset datetime"
+msgstr ""
+
+msgid "Copy of IN"
+msgstr ""
+
+msgid "Datetime, current or relative to PDT"
+msgstr ""
+
+msgid ""
+"The real time clock has many uses including time stamping, setting dates and"
+" times of day in batch reports, in alarm messages and so on."
+msgstr ""
+
+msgid "1 = integrate, 0 = hold"
+msgstr ""
+
+msgid "Overriding reset"
+msgstr ""
+
+msgid "Input variable"
+msgstr ""
+
+msgid "Initial value"
+msgstr ""
+
+msgid "Sampling period"
+msgstr ""
+
+msgid "NOT R1"
+msgstr ""
+
+msgid "Integrated output"
+msgstr ""
+
+msgid ""
+"The integral function block integrates the value of input XIN over time."
+msgstr ""
+
+msgid "0 = reset"
+msgstr ""
+
+msgid "Input to be differentiated"
+msgstr ""
+
+msgid "Differentiated output"
+msgstr ""
+
+msgid ""
+"The derivative function block produces an output XOUT proportional to the "
+"rate of change of the input XIN."
+msgstr ""
+
+msgid "0 - manual , 1 - automatic"
+msgstr ""
+
+msgid "Process variable"
+msgstr ""
+
+msgid "Set point"
+msgstr ""
+
+msgid "Manual output adjustment - Typically from transfer station"
+msgstr ""
+
+msgid "Proportionality constant"
+msgstr ""
+
+msgid "Reset time"
+msgstr ""
+
+msgid "Derivative time constant"
+msgstr ""
+
+msgid "PV - SP"
+msgstr ""
+
+msgid "FB for integral term"
+msgstr ""
+
+msgid "FB for derivative term"
+msgstr ""
+
+msgid ""
+"The PID (proportional, Integral, Derivative) function block provides the "
+"classical three term controller for closed loop control."
+msgstr ""
+
+msgid "0 - track X0, 1 - ramp to/track X1"
+msgstr ""
+
+msgid "Ramp duration"
+msgstr ""
+
+msgid "BUSY = 1 during ramping period"
+msgstr ""
+
+msgid "Elapsed time of ramp"
+msgstr ""
+
+msgid "The RAMP function block is modelled on example given in the standard."
+msgstr ""
+
+msgid ""
+"The hysteresis function block provides a hysteresis boolean output driven by"
+" the difference of two floating point (REAL) inputs XIN1 and XIN2."
+msgstr ""
+
+msgid "The SR bistable is a latch where the Set dominates."
+msgstr ""
+
+msgid "The RS bistable is a latch where the Reset dominates."
+msgstr ""
+
+msgid ""
+"The semaphore provides a mechanism to allow software elements mutually "
+"exclusive access to certain resources."
+msgstr ""
+
+msgid "The output produces a single pulse when a rising edge is detected."
+msgstr ""
+
+msgid "The output produces a single pulse when a falling edge is detected."
+msgstr ""
+
+msgid ""
+"The up-counter can be used to signal when a count has reached a maximum "
+"value."
+msgstr ""
+
+msgid ""
+"The down-counter can be used to signal when a count has reached zero, on "
+"counting down from a preset value."
+msgstr ""
+
+msgid ""
+"The up-down counter has two inputs CU and CD. It can be used to both count "
+"up on one input and down on the other."
+msgstr ""
+
+msgid "first input parameter"
+msgstr ""
+
+msgid "second input parameter"
+msgstr ""
+
+msgid "first output parameter"
+msgstr ""
+
+msgid "second output parameter"
+msgstr ""
+
+msgid "internal state: 0-reset, 1-counting, 2-set"
+msgstr ""
+
+msgid ""
+"The pulse timer can be used to generate output pulses of a given time "
+"duration."
+msgstr ""
+
+msgid ""
+"The on-delay timer can be used to delay setting an output true, for fixed "
+"period after an input becomes true."
+msgstr ""
+
+msgid ""
+"The off-delay timer can be used to delay setting an output false, for fixed "
+"period after input goes false."
+msgstr ""
--- a/i18n/Beremiz_pt_BR.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_pt_BR.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the Beremiz package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
@@ -8,9 +8,9 @@
msgstr ""
"Project-Id-Version: Beremiz\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-03-09 15:28+0300\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Thiago Alves <thiagoralves@gmail.com>, 2017\n"
+"Last-Translator: Rodrigo Rolle <ro_pita@hotmail.com>, 2018\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/beremiz/teams/75746/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,7 +18,7 @@
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: ../PLCOpenEditor.py:408 ../Beremiz.py:1191
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -43,581 +43,586 @@
"\n"
"Traceback:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr "Externo"
-#: ../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:99 ../dialogs/ProjectDialog.py:66
-#: ../dialogs/PouActionDialog.py:91 ../dialogs/PouDialog.py:113
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
#, python-format
msgid " and %s"
msgstr "e %s"
-#: ../ProjectController.py:1110
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr "falha na geração !\n"
-#: ../plcopen/plcopen.py:881
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "Data Type \"%s\" não existe !!!"
-#: ../plcopen/plcopen.py:899
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "POU \"%s\" já existe !!!"
-#: ../plcopen/plcopen.py:920
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "POU \"%s\" não existe !!!"
-#: ../editors/Viewer.py:246
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
-msgstr "\"%s\" não pode ser usado para si mesmo!"
-
-#: ../IDEFrame.py:1651 ../IDEFrame.py:1670
+msgstr "\"%s\" não pode usar a si mesmo!"
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "configuração \"%s\" já existe"
-#: ../plcopen/plcopen.py:467
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
-msgstr ""
-
-#: ../IDEFrame.py:1601
+msgstr "Configuração \"%s\" já existe !!!"
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "Configuração \"%s\" não existe !!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:110 ../dialogs/BlockPreviewDialog.py:219
-#: ../dialogs/PouActionDialog.py:102 ../editors/Viewer.py:262
-#: ../editors/Viewer.py:330 ../editors/Viewer.py:354 ../editors/Viewer.py:374
-#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301
-#: ../controls/VariablePanel.py:396
+msgstr "Data Type \"%s\" já existe!"
+
+#: ../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 ""
-
-#: ../Beremiz.py:994
+msgstr "Elemento \"%s\" para este POU já existe!"
+
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:106
-#: ../dialogs/BlockPreviewDialog.py:207 ../dialogs/PouNameDialog.py:50
-#: ../dialogs/PouActionDialog.py:98 ../dialogs/PouDialog.py:120
-#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484
-#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:584
-#: ../editors/CodeFileEditor.py:770 ../controls/VariablePanel.py:763
-#: ../IDEFrame.py:1592
+msgstr "A pasta \"%s\" não é um projeto Beremiz válido\n"
+
+#: ../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:2412
+msgstr "\"%s\" é uma palavra-chave (keyword) e não pode ser usado!"
+
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
-msgstr ""
-
-#: ../PLCOpenEditor.py:339 ../PLCOpenEditor.py:381
+msgstr "\"%s\" é um valor inválido!"
+
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:104
-#: ../dialogs/BlockPreviewDialog.py:203 ../dialogs/PouNameDialog.py:48
-#: ../dialogs/PouActionDialog.py:96 ../dialogs/PouDialog.py:118
-#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482
-#: ../editors/DataTypeEditor.py:579 ../editors/CodeFileEditor.py:768
-#: ../controls/VariablePanel.py:761 ../IDEFrame.py:1590
+msgstr "\"%s\" não é uma pasta válida!"
+
+#: ../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 ""
-
-#: ../IDEFrame.py:2395
+msgstr "\"%s\" não é um identifier válido!"
+
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
-msgstr ""
-
-#: ../dialogs/BlockPreviewDialog.py:211 ../dialogs/PouDialog.py:122
-#: ../editors/Viewer.py:260 ../editors/Viewer.py:315 ../editors/Viewer.py:345
-#: ../editors/Viewer.py:367 ../editors/TextViewer.py:270
-#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350
-#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338
-#: ../IDEFrame.py:1610
+msgstr "\"%s\" está sendo usado por um ou mais POUs. Você deseja continuar?"
+
+#: ../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:58
+msgstr "POU \"%s\" já existe!"
+
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:550
+msgstr "Passo \"%s\" já existe!"
+
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:745
+msgstr "Valor \"%s\" já definido!"
+
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
#, python-format
msgid "\"%s\" value isn't a valid array dimension!"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:752
+msgstr "\"%s\" não é um valor válido para dimensão de vetores!"
+
+#: ../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:1101
+"\"%s\" não é um valor válido para dimensão de vetores!\n"
+"O valor correto deve ser maior do que o valor da esquerda."
+
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
-msgstr ""
-
-#: ../editors/Viewer.py:250
+msgstr "Função \"{a1}\" cancelada em POU \"{a2}\": Nenhuma entrada conectada"
+
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
-msgstr ""
-
-#: ../plcopen/plcopen.py:491
+msgstr "\"{a1}\" já é usado por \"{a2}\"!"
+
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
-msgstr ""
-
-#: ../plcopen/plcopen.py:509
+msgstr "Recurso \"{a1}\" já existe em configuração \"{a2}\" !!!"
+
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+msgstr "Recurso \"{a1}\" não existe em configuração \"{a2}\" !!!"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+msgstr "%03gms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570
+msgstr "%dd"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
#, python-format
msgid "%dh"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+msgstr "%dh"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
#, python-format
msgid "%dm"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+msgstr "%dm"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
#, python-format
msgid "%dms"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+msgstr "%dms"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
#, python-format
msgid "%ds"
-msgstr ""
-
-#: ../PLCControler.py:1531
+msgstr "%ds"
+
+#: ../PLCControler.py:1114
#, python-format
msgid "%s Data Types"
-msgstr ""
-
-#: ../PLCControler.py:1514
+msgstr "%s Data Types"
+
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+msgstr "%s POUs"
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1645 ../plcopen/plcopen.py:1652
-#: ../plcopen/plcopen.py:1664 ../plcopen/plcopen.py:1672
-#: ../plcopen/plcopen.py:1682
+msgstr "%s Perfil"
+
+#: ../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:1700 ../plcopen/plcopen.py:1707
-#: ../plcopen/plcopen.py:1714
+msgstr "%s não possui instâncias!"
+
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
#, python-format
msgid "%s body don't have text!"
-msgstr ""
-
-#: ../IDEFrame.py:386
+msgstr "%s não possui texto!"
+
+#: ../IDEFrame.py:388
msgid "&Add Element"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121
-#: ../dialogs/AboutDialog.py:158
+msgstr "&Adicionar Elemento"
+
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
msgid "&Close"
-msgstr ""
+msgstr "&Fechar"
+
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr "&Configuração"
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr "&Data Type"
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr "&Deletar"
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr "&Exibir"
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr "&Editar"
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr "&Arquivo"
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr "&Função"
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr "&Ajuda"
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr "&Licença"
#: ../IDEFrame.py:356
-msgid "&Configuration"
-msgstr ""
-
-#: ../IDEFrame.py:345
-msgid "&Data Type"
-msgstr ""
-
-#: ../IDEFrame.py:390
-msgid "&Delete"
-msgstr ""
-
-#: ../IDEFrame.py:337
-msgid "&Display"
-msgstr ""
-
-#: ../IDEFrame.py:336
-msgid "&Edit"
-msgstr ""
-
-#: ../IDEFrame.py:335
-msgid "&File"
-msgstr ""
-
-#: ../IDEFrame.py:347
-msgid "&Function"
-msgstr ""
-
-#: ../IDEFrame.py:338
-msgid "&Help"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:72
-msgid "&License"
-msgstr ""
-
-#: ../IDEFrame.py:351
msgid "&Program"
-msgstr ""
-
-#: ../PLCOpenEditor.py:125
+msgstr "&Programa"
+
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
-msgstr ""
-
-#: ../Beremiz.py:324
+msgstr "&Propriedades"
+
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
-msgstr ""
-
-#: ../IDEFrame.py:353
+msgstr "&Projetos Recentes"
+
+#: ../IDEFrame.py:358
msgid "&Resource"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:239
+msgstr "&Recursos"
+
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:241
+msgstr "'{a1}' - {a2} correspondência no projeto"
+
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:90
+msgstr "'{a1}' - {a2} correspondências no projeto"
+
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:291
+msgstr "'{a1}' está localizado em {a2}\n"
+
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
-msgstr ""
-
-#: ../PLCOpenEditor.py:396 ../PLCOpenEditor.py:398 ../PLCOpenEditor.py:399
-msgid ", "
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/PouActionDialog.py:93
-#: ../dialogs/PouDialog.py:115
+msgstr "(%d correspondências)"
+
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
#, python-format
msgid ", %s"
-msgstr ""
-
-#: ../PLCOpenEditor.py:394
-msgid ". "
-msgstr ""
-
-#: ../controls/LogViewer.py:279
+msgstr ", %s"
+
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
msgid "1d"
-msgstr ""
-
-#: ../controls/LogViewer.py:280
+msgstr "1d"
+
+#: ../controls/LogViewer.py:288
msgid "1h"
-msgstr ""
-
-#: ../controls/LogViewer.py:281
+msgstr "1h"
+
+#: ../controls/LogViewer.py:289
msgid "1m"
-msgstr ""
-
-#: ../controls/LogViewer.py:282
+msgstr "1m"
+
+#: ../controls/LogViewer.py:290
msgid "1s"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:124 ../IDEFrame.py:1613 ../IDEFrame.py:1659
-#: ../IDEFrame.py:1678
+msgstr "1s"
+
+#: ../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:54 ../dialogs/PouTransitionDialog.py:108
-#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:100
-#: ../controls/VariablePanel.py:765 ../IDEFrame.py:1627 ../IDEFrame.py:1640
+"Um POU já tem um elemento chamado \"%s\". Isto pode causar um conflito. "
+"Deseja continuar?"
+
+#: ../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 ""
+msgstr "Já existe POU chamado \"%s\"!"
#: ../ConfigTreeNode.py:424
#, python-brace-format
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:216
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:451
+msgstr "Uma localização deve ser selecionada!"
+
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:767
-#: ../IDEFrame.py:1629 ../IDEFrame.py:1642
+msgstr "Já existe uma tarefa com o mesmo nome!"
+
+#: ../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:774
+msgstr "Já existe uma variável com nome \"%s\" neste POU!"
+
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:158 ../Beremiz.py:381
+msgstr "Já existe uma variável com o nome \"%s\"!"
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
-msgstr ""
+msgstr "Sobre"
#: ../plcopen/iec_std.csv:22
msgid "Absolute number"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:72 ../dialogs/ActionBlockDialog.py:42
+msgstr "Número absoluto"
+
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
-msgstr ""
-
-#: ../editors/Viewer.py:555 ../editors/Viewer.py:2356
+msgstr "Ação"
+
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
-msgstr ""
-
-#: ../dialogs/PouActionDialog.py:81
+msgstr "Bloco de Ação"
+
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
-msgstr ""
-
-#: ../dialogs/PouActionDialog.py:49
+msgstr "Nome de Ação"
+
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1359
+msgstr "Nome de Ação:"
+
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
-msgstr ""
-
-#: ../PLCControler.py:96
+msgstr "Não existe ação com o nome \"%s\"!"
+
+#: ../plcopen/types_enums.py:76
msgid "Actions"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:133
+msgstr "Ações"
+
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
-msgstr ""
-
-#: ../editors/Viewer.py:1110
+msgstr "Ações:"
+
+#: ../editors/Viewer.py:473
msgid "Active"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101
-#: ../editors/Viewer.py:588 ../Beremiz.py:1060
+msgstr "Ativo"
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
msgid "Add"
-msgstr ""
-
-#: ../IDEFrame.py:1889 ../IDEFrame.py:1924
+msgstr "Adicionar"
+
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
-msgstr ""
-
-#: ../features.py:32
+msgstr "Adicionar ação"
+
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr ""
-#: ../IDEFrame.py:1872
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
-msgstr ""
-
-#: ../IDEFrame.py:1852
+msgstr "Adicionar Configuração"
+
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr ""
-#: ../editors/Viewer.py:513
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:116
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
-msgstr ""
-
-#: ../IDEFrame.py:1860
+msgstr "Adicionar IP"
+
+#: ../IDEFrame.py:1895
msgid "Add POU"
-msgstr ""
-
-#: ../features.py:33
+msgstr "Adicionar POU"
+
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr ""
-#: ../IDEFrame.py:1900 ../IDEFrame.py:1950
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
-msgstr ""
-
-#: ../IDEFrame.py:1878 ../IDEFrame.py:1921
+msgstr "Adicionar Recurso"
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
-msgstr ""
-
-#: ../editors/Viewer.py:500
+msgstr "Adicionar Transição"
+
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
-msgstr ""
-
-#: ../editors/SFCViewer.py:433
+msgstr "Adicionar Segmento de Fio"
+
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
-msgstr ""
-
-#: ../editors/Viewer.py:2717 ../editors/SFCViewer.py:770
+msgstr "Adicionar um novo passo inicial"
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
-msgstr ""
-
-#: ../editors/SFCViewer.py:455
+msgstr "Adicionar um novo salto"
+
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
-msgstr ""
-
-#: ../features.py:34
+msgstr "Adicionar um novo passo"
+
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:137
+msgstr "Adicionar uma GUI simples baseada em WxGlade"
+
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:352
+msgstr "Adicionar ação"
+
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:268
+msgstr "Adicionar elemento"
+
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:103
+msgstr "Adicionar instância"
+
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:239
+msgstr "Adicionar escravo"
+
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+msgstr "Adicionar tarefa"
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
-msgstr ""
+msgstr "Adicionar variável"
#: ../plcopen/iec_std.csv:33
msgid "Addition"
-msgstr ""
-
-#: ../plcopen/definitions.py:47
+msgstr "Adição"
+
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
-msgstr ""
-
-#: ../editors/Viewer.py:571
+msgstr "Blocos de função adicionais"
+
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
-msgstr ""
-
-#: ../editors/Viewer.py:1648
+msgstr "Ajustar Tamanho do Bloco"
+
+#: ../editors/Viewer.py:1720
msgid "Alignment"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:39
-#: ../dialogs/BrowseLocationsDialog.py:47
-#: ../dialogs/BrowseLocationsDialog.py:140
-#: ../dialogs/BrowseLocationsDialog.py:143 ../controls/LogViewer.py:298
-#: ../controls/VariablePanel.py:70
+msgstr "Alinhamento"
+
+#: ../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 ""
-
-#: ../editors/FileManagementPanel.py:35
+msgstr "Todos"
+
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
-msgstr ""
-
-#: ../ProjectController.py:1644
+msgstr "Todos os arquivos (*.*)|*.*|arquivos CSV (*.csv)|*.csv"
+
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:594
+msgstr "Já conectado. Por favor desconecte\n"
+
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:486
+msgstr "Um elemento chamado \"%s\" já existe nesta estrutura!"
+
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:96
+msgstr "Já existe uma instância com o mesmo nome!"
+
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr ""
#: ../plcopen/iec_std.csv:31
msgid "Arc cosine"
-msgstr ""
+msgstr "Arco cosseno"
#: ../plcopen/iec_std.csv:30
msgid "Arc sine"
-msgstr ""
+msgstr "Arco seno"
#: ../plcopen/iec_std.csv:32
msgid "Arc tangent"
-msgstr ""
+msgstr "Arco tangente"
#: ../plcopen/iec_std.csv:33
msgid "Arithmetic"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:635
-#: ../controls/VariablePanel.py:841
+msgstr "Aritmética"
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
msgid "Array"
msgstr ""
@@ -625,47 +630,39 @@
msgid "Assignment"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:217
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:99
+msgstr "Pelo menos uma variável ou expressão deve ser selecionada!"
+
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:96
+msgstr "Autor"
+
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:79
+msgstr "Nome do Autor (opcional):"
+
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr ""
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr ""
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr ""
-
-#: ../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 ""
-#: ../dialogs/ArrayTypeDialog.py:55 ../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 ""
-#: ../editors/DataTypeEditor.py:625 ../controls/VariablePanel.py:799
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr ""
-#: ../Beremiz.py:553
+#: ../BeremizIDE.py:483
msgid "Beremiz"
-msgstr ""
+msgstr "Beremiz"
#: ../plcopen/iec_std.csv:70
msgid "Binary selection (1 of 2)"
@@ -695,120 +692,120 @@
msgid "Bitwise inverting"
msgstr ""
-#: ../editors/Viewer.py:525 ../editors/Viewer.py:2369
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
-msgstr ""
-
-#: ../dialogs/FBDBlockDialog.py:59
+msgstr "Bloco"
+
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
-msgstr ""
-
-#: ../editors/TextViewer.py:262
+msgstr "Propriedades do Bloco"
+
+#: ../editors/TextViewer.py:260
msgid "Block name"
-msgstr ""
-
-#: ../editors/Viewer.py:491
+msgstr "Nome do Bloco"
+
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr ""
-#: ../ProjectController.py:1322
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:37
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr ""
-#: ../ProjectController.py:1790
+#: ../ProjectController.py:1815
msgid "Build"
msgstr ""
-#: ../ProjectController.py:1256
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr ""
-#: ../ProjectController.py:1791
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr ""
-#: ../ProjectController.py:1039
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr ""
-#: ../ProjectController.py:1036
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
-msgstr ""
-
-#: ../c_ext/CFileEditor.py:63
+msgstr "Construção em C falhou.\n"
+
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
-msgstr ""
-
-#: ../ProjectController.py:1114
+msgstr "Código C"
+
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
-msgstr ""
-
-#: ../targets/toolchain_makefile.py:122
+msgstr "Código em C gerado com sucesso.\n"
+
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:156
+msgstr "Compilação em C falhou!\n"
+
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
-msgstr ""
-
-#: ../features.py:32
+msgstr "Compilação em C de \"%s\" falhou.\n"
+
+#: ../features.py:33
msgid "C extension"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:71
+msgstr "Extensão em C"
+
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
msgstr ""
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:44
+msgstr "Rede CANOpen"
+
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
-msgstr ""
+msgstr "Escravo CANOpen"
#: ../features.py:31
msgid "CANopen support"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1584 ../plcopen/plcopen.py:1598
-#: ../plcopen/plcopen.py:1622 ../plcopen/plcopen.py:1638
+msgstr "Suporte CANOpen"
+
+#: ../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 ""
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
-msgstr ""
-
-#: ../PLCOpenEditor.py:334
+msgstr "Só é possível atribuir localização para variáveis locais ou globais."
+
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
-msgstr ""
-
-#: ../controls/VariablePanel.py:265
+msgstr "Não foi possível gerar programa para o arquivo \"%s\"!"
+
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr ""
-#: ../PLCOpenEditor.py:379
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr ""
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr ""
@@ -818,430 +815,444 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
-msgstr ""
-
-#: ../ProjectController.py:902
+msgstr "Impossível obter status do CLP - conexão falha.\n"
+
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr ""
-#: ../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 ""
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:88
+#: ../ProjectController.py:1761
+msgid "Cannot transfer while PLC is running. Stop it now?"
+msgstr ""
+"Não é possível transferir enquanto o CLP está em execução. Deseja pará-lo "
+"agora?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr ""
-#: ../editors/Viewer.py:486
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr ""
-#: ../Beremiz_service.py:266
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr ""
-#: ../Beremiz_service.py:265
+#: ../Beremiz_service.py:275
msgid "Change Name"
-msgstr ""
-
-#: ../IDEFrame.py:1942
+msgstr "Mudar Nome"
+
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr ""
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
-msgstr ""
-
-#: ../Beremiz_service.py:268
+msgstr "Mudar Número da Porta"
+
+#: ../Beremiz_service.py:278
msgid "Change working directory"
-msgstr ""
+msgstr "Mudar diretório de trabalho"
#: ../plcopen/iec_std.csv:81
msgid "Character string"
msgstr ""
-#: ../svgui/svgui.py:125
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
-msgstr ""
-
-#: ../ProjectController.py:501
+msgstr "Escolha um arquivo SVG"
+
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
-msgstr ""
-
-#: ../canfestival/canfestival.py:160 ../PLCOpenEditor.py:292
-#: ../PLCOpenEditor.py:324 ../PLCOpenEditor.py:373
+msgstr "Escolha um diretório para salvar o projeto"
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
msgid "Choose a file"
-msgstr ""
-
-#: ../Beremiz.py:931 ../Beremiz.py:966
+msgstr "Escolha um arquivo"
+
+#: ../BeremizIDE.py:900
msgid "Choose a project"
-msgstr ""
-
-#: ../dialogs/BrowseValuesLibraryDialog.py:42
+msgstr "Escolha um projeto"
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
-msgstr ""
-
-#: ../Beremiz_service.py:323
+msgstr "Escolha um valor para \"%s\":"
+
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
-msgstr ""
-
-#: ../ProjectController.py:408
+msgstr "Escolha um diretório de trabalho"
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Escolha um diretório vazio para o novo projeto"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
-
-#: ../ProjectController.py:375
+"O diretório escolhido não contém um programa. Não é um projeto válido!"
+
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+"O diretório escolhido não está vazio. Você não pode usá-lo para um novo "
+"projeto!"
+
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr ""
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:69
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr ""
-#: ../ProjectController.py:1794
+#: ../ProjectController.py:1821
msgid "Clean"
-msgstr ""
-
-#: ../controls/LogViewer.py:318
+msgstr "Limpar"
+
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
-msgstr ""
-
-#: ../ProjectController.py:1796
+msgstr "Limpar mensagens do log"
+
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr ""
-#: ../ProjectController.py:1253
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr ""
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
-msgstr ""
-
-#: ../editors/Viewer.py:582
+msgstr "Limpar Erros"
+
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:105 ../dialogs/FindInPouDialog.py:111
+msgstr "Limpar Ordem de Execução"
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
-msgstr ""
-
-#: ../PLCOpenEditor.py:199 ../Beremiz.py:693
+msgstr "Fechar"
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
-msgstr ""
-
-#: ../PLCOpenEditor.py:108 ../Beremiz.py:333 ../Beremiz.py:637
-#: ../IDEFrame.py:1009
+msgstr "Fechar Aplicação"
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
msgid "Close Project"
-msgstr ""
-
-#: ../PLCOpenEditor.py:106 ../Beremiz.py:331
+msgstr "Fechar Projeto"
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
-msgstr ""
-
-#: ../editors/Viewer.py:541 ../editors/Viewer.py:2377
+msgstr "Fechar Aba"
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
-msgstr ""
-
-#: ../editors/Viewer.py:561 ../editors/LDViewer.py:506
+msgstr "Bobina"
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:57
+msgstr "Comentário"
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
+msgid "Community support"
+msgstr "Suporte da Comunidade"
+
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:94
+msgstr "Nome da Companhia"
+
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:95
+msgstr "Nome da Companhia (obrigatório):"
+
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
-msgstr ""
+msgstr "URL da Companhia (opcional):"
#: ../plcopen/iec_std.csv:75
msgid "Comparison"
-msgstr ""
-
-#: ../ProjectController.py:693
+msgstr "Comparação"
+
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
-msgstr ""
+msgstr "Compilando programa IEC em código C...\n"
#: ../plcopen/iec_std.csv:85
msgid "Concatenation"
-msgstr ""
-
-#: ../editors/ConfTreeNodeEditor.py:229
+msgstr "Concatenação"
+
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr ""
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:39
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr ""
-#: ../editors/Viewer.py:307 ../editors/Viewer.py:337 ../editors/Viewer.py:359
-#: ../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 ""
-
-#: ../ProjectController.py:1809
+msgstr "Confirmar ou alterar nome de variável"
+
+#: ../ProjectController.py:1842
msgid "Connect"
-msgstr ""
-
-#: ../ProjectController.py:1810
+msgstr "Conectar"
+
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
-msgstr ""
-
-#: ../ProjectController.py:1313
+msgstr "Conectar ao CLP alvo"
+
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:76 ../editors/Viewer.py:527
-#: ../editors/Viewer.py:2370
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
msgid "Connection"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:52
+msgstr "Conexão"
+
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
-msgstr ""
-
-#: ../ProjectController.py:1668
+msgstr "Propriedades da Conexão"
+
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
-msgstr ""
-
-#: ../ProjectController.py:1693
+msgstr "Conexão Cancelada!\n"
+
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111
+msgstr "Conexão falha para \"%s\"!\n"
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
msgid "Connection lost!\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:102
+msgstr "Conexão perdida!\n"
+
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:64 ../editors/Viewer.py:1605
+msgstr "Conexão para '\"%s\"' falhou.\n"
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:65
+msgstr "Conector"
+
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
-msgstr ""
-
-#: ../Beremiz.py:448
+msgstr "Conectores:"
+
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr ""
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
-msgstr ""
-
-#: ../editors/Viewer.py:537 ../editors/Viewer.py:2373
+msgstr "Constante"
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:197
+msgstr "Contato"
+
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1606
+msgstr "Descrição do conteúdo (opcional):"
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
-msgstr ""
+msgstr "Continuação"
#: ../plcopen/iec_std.csv:18
msgid "Conversion from BCD"
-msgstr ""
+msgstr "Conversão de BCD"
#: ../plcopen/iec_std.csv:19
msgid "Conversion to BCD"
-msgstr ""
+msgstr "Conversão para BCD"
#: ../plcopen/iec_std.csv:21
msgid "Conversion to date"
-msgstr ""
+msgstr "Conversão para data"
#: ../plcopen/iec_std.csv:20
msgid "Conversion to time-of-day"
-msgstr ""
-
-#: ../editors/Viewer.py:597 ../controls/LogViewer.py:693 ../IDEFrame.py:370
-#: ../IDEFrame.py:425
+msgstr "Conversão para hora-do-dia"
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
msgid "Copy"
-msgstr ""
-
-#: ../IDEFrame.py:1929
+msgstr "Copiar"
+
+#: ../IDEFrame.py:1964
msgid "Copy POU"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:65
+msgstr "Copiar POU"
+
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr ""
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr ""
#: ../plcopen/iec_std.csv:28
msgid "Cosine"
-msgstr ""
-
-#: ../ConfigTreeNode.py:656
+msgstr "Cosseno"
+
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
"{a3}\n"
msgstr ""
-#: ../py_ext/PythonFileCTNMixin.py:77
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr ""
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
#, python-brace-format
msgid ""
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
msgstr ""
-#: ../PLCControler.py:946
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr ""
-#: ../ProjectController.py:1610
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
-msgstr ""
-
-#: ../ProjectController.py:1618
+msgstr "Não foi possível iniciar o CLP!\n"
+
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
-msgstr ""
-
-#: ../ProjectController.py:1582
-msgid "Couldn't stop debugger.\n"
-msgstr ""
-
-#: ../svgui/svgui.py:47
+msgstr "Não foi possível parar o CLP!\n"
+
+#: ../svgui/svgui.py:57
msgid "Create HMI"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:45
+msgstr "Criar IHM"
+
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
-msgstr ""
-
-#: ../dialogs/PouActionDialog.py:38
+msgstr "Criar um novo POU"
+
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
-msgstr ""
-
-#: ../IDEFrame.py:159
+msgstr "Criar uma nova ação"
+
+#: ../IDEFrame.py:166
msgid "Create a new action block"
-msgstr ""
-
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+msgstr "Criar um novo bloco de ação"
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
-msgstr ""
-
-#: ../IDEFrame.py:132
+msgstr "Criar um novo bloco"
+
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr ""
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
-msgstr ""
-
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+msgstr "Criar uma nova bobina"
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
-msgstr ""
-
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+msgstr "Criar um novo comentário"
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
-msgstr ""
-
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+msgstr "Criar uma nova conexão"
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
-msgstr ""
-
-#: ../IDEFrame.py:162
+msgstr "Criar um novo contato"
+
+#: ../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:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr ""
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr ""
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr ""
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr ""
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:47 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
-msgstr ""
-
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+msgstr "Criar uma nova transição"
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:113
+msgstr "Criar uma nova variável"
+
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
-msgstr ""
-
-#: ../Beremiz_service.py:432
+msgstr "Créditos"
+
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr ""
-#: ../editors/Viewer.py:596 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr ""
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr ""
@@ -1253,19 +1264,19 @@
msgid "DEPRECATED"
msgstr ""
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr ""
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:35
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr ""
-#: ../PLCControler.py:96
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr ""
@@ -1286,66 +1297,58 @@
msgid "Date subtraction"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:43
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr ""
-#: ../ProjectController.py:1715
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr ""
-#: ../editors/Viewer.py:1127 ../editors/Viewer.py:3664
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr ""
-#: ../ProjectController.py:1371
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr ""
-#: ../ProjectController.py:1369
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr ""
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr ""
-#: ../ProjectController.py:1551
-msgid "Debugger disabled\n"
-msgstr ""
-
-#: ../ProjectController.py:1712
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr ""
-#: ../ProjectController.py:1584
-msgid "Debugger stopped.\n"
-msgstr ""
-
-#: ../editors/Viewer.py:572 ../Beremiz.py:1064 ../IDEFrame.py:1958
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr ""
-#: ../editors/Viewer.py:514
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr ""
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr ""
-#: ../editors/Viewer.py:501
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr ""
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr ""
@@ -1353,253 +1356,264 @@
msgid "Deletion (within)"
msgstr ""
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr ""
-#: ../controls/VariablePanel.py:432
+#: ../editors/CodeFileEditor.py:735
+msgid "Description"
+msgstr "Descrição"
+
+#: ../controls/VariablePanel.py:463
msgid "Description:"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:61 ../editors/DataTypeEditor.py:321
+msgstr "Descrição:"
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:68
+msgstr "Dimensões:"
+
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:90
+msgstr "Direção"
+
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Direção:"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
-msgstr ""
-
-#: ../ProjectController.py:1818
+msgstr "Diretamente"
+
+#: ../ProjectController.py:1855
msgid "Disconnect"
-msgstr ""
-
-#: ../ProjectController.py:1820
+msgstr "Desconectar"
+
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
-msgstr ""
-
-#: ../ProjectController.py:1323
+msgstr "Desconecte do CLP"
+
+#: ../ProjectController.py:1401
msgid "Disconnected"
-msgstr ""
-
-#: ../editors/Viewer.py:556 ../editors/Viewer.py:2365
+msgstr "Desconectado"
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr ""
#: ../plcopen/iec_std.csv:36
msgid "Division"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:152
+msgstr "Divisão"
+
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "Realmente deseja excluir o arquivo '%s'?"
+
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
-msgstr ""
-
-#: ../PLCOpenEditor.py:328
+msgstr "Documentaçã"
+
+#: ../PLCOpenEditor.py:312
msgid "Done"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:38
+msgstr "Feito"
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
-msgstr ""
-
-#: ../canfestival/canfestival.py:163
+msgstr "Duração"
+
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr ""
-#: ../editors/Viewer.py:570
+#: ../editors/Viewer.py:668
msgid "Edit Block"
+msgstr "Editar Bloco"
+
+#: ../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:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:50
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:36
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../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:2586 ../editors/Viewer.py:3015
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:66
+msgstr "Editar comentário"
+
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:39
+msgstr "Editar arquivo"
+
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
-msgstr ""
-
-#: ../editors/Viewer.py:2974
+msgstr "Editar item"
+
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr ""
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr ""
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:51
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
-msgstr ""
-
-#: ../IDEFrame.py:611
+msgstr "Editar transição"
+
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr ""
-#: ../ProjectController.py:1216
+#: ../ProjectController.py:1294
msgid "Editor selection"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:348
+msgstr "Seleção de editor"
+
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
-msgstr ""
-
-#: ../ProjectController.py:1321
+msgstr "Elementos:"
+
+#: ../ProjectController.py:1399
msgid "Empty"
-msgstr ""
-
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr ""
-
-#: ../Beremiz_service.py:331
+msgstr "Vazio"
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Dimensão vazia não é permitida."
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
-msgstr ""
-
-#: ../Beremiz_service.py:316
+msgstr "Digite um nome"
+
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
-msgstr ""
-
-#: ../Beremiz_service.py:307
+msgstr "Digite um número de porta"
+
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Digite o IP da interface para conectar"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
-msgstr ""
+msgstr "Enumerado"
#: ../plcopen/iec_std.csv:77
msgid "Equal to"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:179
-#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60
-#: ../dialogs/DurationEditorDialog.py:121
-#: ../dialogs/DurationEditorDialog.py:163
-#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:236
-#: ../dialogs/ProjectDialog.py:71 ../dialogs/ArrayTypeDialog.py:97
-#: ../dialogs/ArrayTypeDialog.py:103 ../dialogs/PouNameDialog.py:54
-#: ../dialogs/BrowseLocationsDialog.py:216
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
-#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:134
-#: ../PLCOpenEditor.py:335 ../PLCOpenEditor.py:340 ../PLCOpenEditor.py:420
-#: ../PLCOpenEditor.py:430 ../editors/ResourceEditor.py:436
-#: ../editors/Viewer.py:423 ../editors/LDViewer.py:666
-#: ../editors/LDViewer.py:882 ../editors/LDViewer.py:886
-#: ../editors/DataTypeEditor.py:550 ../editors/DataTypeEditor.py:555
-#: ../editors/DataTypeEditor.py:579 ../editors/DataTypeEditor.py:584
-#: ../editors/DataTypeEditor.py:594 ../editors/DataTypeEditor.py:745
-#: ../editors/DataTypeEditor.py:752 ../editors/TextViewer.py:389
-#: ../editors/CodeFileEditor.py:783 ../ProjectController.py:343
-#: ../ProjectController.py:471 ../ProjectController.py:478
-#: ../controls/FolderTree.py:217
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231
-#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:784
-#: ../Beremiz.py:1203 ../IDEFrame.py:1003 ../IDEFrame.py:1613
-#: ../IDEFrame.py:1654 ../IDEFrame.py:1659 ../IDEFrame.py:1673
-#: ../IDEFrame.py:1678 ../Beremiz_service.py:211
+msgstr "Igual a"
+
+#: ../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 ""
-
-#: ../ProjectController.py:748
+msgstr "Erro"
+
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
msgstr ""
-#: ../ProjectController.py:740
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
-msgstr ""
-
-#: ../ProjectController.py:671
+msgstr "Erro: compilador IEC para C retornou %d\n"
+
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
"%s\n"
msgstr ""
-
-#: ../ConfigTreeNode.py:216
+"Erro no gerador de código ST/IL/SFC: \n"
+"%s\n"
+
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:168
+msgstr "Erro ao salvar \"%s\" \n"
+
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:369
+msgstr "Erro: falha na exportação de escravo.\n"
+
+#: ../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:364
+msgstr "Erro: nenhum mestre gerado\n"
+
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr ""
-#: ../ProjectController.py:1687
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
-msgstr ""
-
-#: ../dialogs/FBDBlockDialog.py:117
+msgstr "Exceção enquanto conectando a %s!\n"
+
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:79 ../dialogs/FBDBlockDialog.py:105
+msgstr "Controle de Execução:"
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
-msgstr ""
-
-#: ../features.py:35
+msgstr "Ordem de Execução:"
+
+#: ../features.py:36
msgid "Experimental web based HMI"
-msgstr ""
+msgstr "IHM experimental baseada em web"
#: ../plcopen/iec_std.csv:38
msgid "Exponent"
@@ -1607,1419 +1621,1470 @@
#: ../plcopen/iec_std.csv:26
msgid "Exponentiation"
-msgstr ""
-
-#: ../canfestival/canfestival.py:174
+msgstr "Exponenciação"
+
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+msgstr "Exportar escravo CANopen para arquivo EDS"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr ""
-#: ../canfestival/canfestival.py:173
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:89
+msgstr "Exportar escravo"
+
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
+msgstr "Expressão:"
+
+#: ../controls/VariablePanel.py:90
msgid "External"
-msgstr ""
-
-#: ../ProjectController.py:761
+msgstr "Externo"
+
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:31
-#: ../dialogs/PouDialog.py:36 ../controls/ProjectPropertiesPanel.py:143
+msgstr "Extraindo Variáveis Alocadas...\n"
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "FBD"
-msgstr ""
-
-#: ../ProjectController.py:1750
+msgstr "FBD"
+
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:462
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
-msgstr ""
-
-#: ../ProjectController.py:1029
+msgstr "Borda de descida"
+
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr ""
-#: ../Beremiz.py:118
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:160
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:162
+msgstr "Campo %s não tem valor válido!"
+
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
-msgstr ""
-
-#: ../controls/FolderTree.py:216
+msgstr "Campos %s não possuem valor válido!"
+
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:100 ../dialogs/FindInPouDialog.py:36
-#: ../dialogs/FindInPouDialog.py:106 ../IDEFrame.py:375
+msgstr "Arquivo '%s' já existe!"
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
msgid "Find"
-msgstr ""
-
-#: ../IDEFrame.py:377
+msgstr "Localizar"
+
+#: ../IDEFrame.py:379
msgid "Find Next"
-msgstr ""
-
-#: ../IDEFrame.py:379
+msgstr "Localizar Próximo"
+
+#: ../IDEFrame.py:381
msgid "Find Previous"
-msgstr ""
+msgstr "Localizar Anterior"
#: ../plcopen/iec_std.csv:90
msgid "Find position"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:57
+msgstr "Localizar posiçã"
+
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr ""
-
-#: ../editors/Viewer.py:1564
+msgstr "Localizar:"
+
+#: ../editors/Viewer.py:1633
msgid "Force value"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:162
+msgstr "Forçar valor"
+
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:179 ../dialogs/PouTransitionDialog.py:102
-#: ../dialogs/ProjectDialog.py:70 ../dialogs/PouActionDialog.py:94
-#: ../dialogs/PouDialog.py:116
+msgstr "Forçando valor de variável"
+
+#: ../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:144 ../dialogs/FBDBlockDialog.py:232
-#: ../dialogs/ConnectionDialog.py:160
+msgstr "O formulário não está completo. %s deve ser preenchido!"
+
+#: ../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:228
+msgstr "O formulário não está completo. O nome deve ser preenchido!"
+
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:74
+"O formulário não está completo. Deve ser selecionado um tipo de bloco "
+"válido."
+
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:36 ../IDEFrame.py:1745
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
-msgstr ""
-
-#: ../IDEFrame.py:349
+msgstr "Função"
+
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1744
-#: ../IDEFrame.py:1937
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr ""
-#: ../controls/VariablePanel.py:837
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr ""
-#: ../PLCControler.py:95
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr ""
-#: ../editors/Viewer.py:248
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr ""
-#: ../PLCControler.py:2337
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr ""
-#: ../PLCControler.py:95
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr ""
-#: ../PLCOpenEditor.py:115
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
-msgstr ""
-
-#: ../ProjectController.py:662
+msgstr "Gerar Programa"
+
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:73
+msgstr "Gerando código do SoftPLC IEC-61131 ST/IL/SFC...\n"
+
+#: ../controls/VariablePanel.py:91
msgid "Global"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+msgstr "Global"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
msgid "Go to current value"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:173
+msgstr "Ir para valor atua"
+
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr ""
#: ../plcopen/iec_std.csv:75
msgid "Greater than"
-msgstr ""
+msgstr "Maior que"
#: ../plcopen/iec_std.csv:76
msgid "Greater than or equal to"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:134
+msgstr "Maior que ou igual a"
+
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr ""
-#: ../runtime/NevowServer.py:181
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:85
+msgstr "Altura:"
+
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:150
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:44
+msgstr "Horizontal:"
+
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
-msgstr ""
-
-#: ../dialogs/PouActionDialog.py:31 ../dialogs/PouDialog.py:36
+msgstr "Horas:"
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "IL"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:94
+msgstr "IL"
+
+#: ../dialogs/DiscoveryDialog.py:91
msgid "IP"
-msgstr ""
-
-#: ../Beremiz_service.py:308 ../Beremiz_service.py:309
+msgstr "IP"
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
msgid "IP is not valid!"
-msgstr ""
-
-#: ../svgui/svgui.py:42 ../svgui/svgui.py:43
+msgstr "IP inválido!"
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:38 ../editors/Viewer.py:1591
-#: ../controls/VariablePanel.py:71
+msgstr "Importar SVG"
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
msgid "InOut"
msgstr ""
-#: ../editors/Viewer.py:1110
+#: ../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 ""
-
-#: ../controls/VariablePanel.py:276
+msgstr "Inativo"
+
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../controls/VariablePanel.py:282
+msgstr "Tipos de dados incompatíveis entre \"{a1}\" e \"{a2}\""
+
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
-msgstr ""
-
-#: ../controls/VariablePanel.py:286
+msgstr "Tipo de dado incompatível entre \"1%s\" e \"BOOL\""
+
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:38
+msgstr "Tamanho de dado incompatível entre \"{a1}\" e \"{a2}\""
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
-msgstr ""
-
-#: ../editors/Viewer.py:552
+msgstr "Indicador"
+
+#: ../editors/CodeFileEditor.py:734
+msgid "Initial"
+msgstr "Inicial"
+
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr ""
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216
-#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310
+msgstr "Valor Inicial"
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
msgid "Initial Value:"
-msgstr ""
-
-#: ../svgui/svgui.py:46
+msgstr "Valor Inicial:"
+
+#: ../svgui/svgui.py:56
msgid "Inkscape"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:75 ../dialogs/ActionBlockDialog.py:42
+msgstr "Inkscape"
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
msgid "Inline"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:70 ../dialogs/FBDVariableDialog.py:37
-#: ../dialogs/BrowseLocationsDialog.py:40 ../editors/Viewer.py:289
-#: ../editors/Viewer.py:1589 ../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 ""
-
-#: ../dialogs/FBDBlockDialog.py:93
+msgstr "Entrada"
+
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
-msgstr ""
+msgstr "Entradas:"
#: ../plcopen/iec_std.csv:87
msgid "Insertion (into)"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1691
+msgstr "Inserção (em)"
+
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:264
+msgstr "Instância com ID %d não existe!"
+
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:70
+msgstr "Instâncias:"
+
+#: ../controls/VariablePanel.py:88
msgid "Interface"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:72
+msgstr "Interface"
+
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Interromper"
+
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
-msgstr ""
-
-#: ../PLCControler.py:2325
+msgstr "Intervalo"
+
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+"URL inválido!\n"
+"Por favor entre com um endereço URL correto."
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
-msgstr ""
-
-#: ../canfestival/config_utils.py:381
+msgstr "Elemento(s) do PLCOpen inválido(s)!"
+
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr ""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "Tipo inválido \"{a1}\"-> {a2} != {a3} para localização \"{a4}\""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166
+msgstr "Tipo inválido \"{a1}\"-> {a2} != {a3} para localização \"{a4}\""
+
+#: ../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 ""
-
-#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258
+msgstr "Valor inválido \"%s\" para variável de depuração"
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
#, python-format
msgid "Invalid value \"%s\" for variable grid element"
msgstr ""
-#: ../editors/Viewer.py:233 ../editors/Viewer.py:236
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
#, python-format
msgid "Invalid value \"%s\" for viewer block"
msgstr ""
-#: ../dialogs/ForceVariableDialog.py:177
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:121
+msgstr "Valor inválido \"{a1}\" para variável \"{a2}\""
+
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
msgstr ""
-
-#: ../editors/Viewer.py:557 ../editors/Viewer.py:2354
+"Valor inválido.\n"
+"Você deve inserir um valor numérico."
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr "A conexão é segura?"
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:31
-#: ../dialogs/PouDialog.py:36 ../controls/ProjectPropertiesPanel.py:143
+msgstr "Salto"
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "LD"
-msgstr ""
-
-#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231
+msgstr "LD"
+
+#: ../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:83
-#: ../dialogs/PouDialog.py:104
+#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
msgid "Language"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:186
+msgstr "Idioma"
+
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:65 ../dialogs/PouActionDialog.py:56
-#: ../dialogs/PouDialog.py:73
+msgstr "Idioma (opcional):"
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
msgid "Language:"
-msgstr ""
-
-#: ../ProjectController.py:1756
+msgstr "Idioma:"
+
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
-
-#: ../Beremiz_service.py:271
+"Última construção já idêntica com o alvo atual. Transferindo mesmo "
+"assim...\n"
+
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
-msgstr ""
-
-#: ../Beremiz_service.py:270
+msgstr "Iniciar Inspetor WX GUI "
+
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr ""
-#: ../editors/Viewer.py:485
+#: ../editors/Viewer.py:580
msgid "Left"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:62
+msgstr "Esquerdo"
+
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr ""
#: ../plcopen/iec_std.csv:81
msgid "Length of string"
-msgstr ""
+msgstr "Comprimento da \"string\""
#: ../plcopen/iec_std.csv:78
msgid "Less than"
-msgstr ""
+msgstr "Menos que"
#: ../plcopen/iec_std.csv:79
msgid "Less than or equal to"
-msgstr ""
-
-#: ../IDEFrame.py:631
+msgstr "Menor que ou igual a"
+
+#: ../IDEFrame.py:652
msgid "Library"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:151
+msgstr "Biblioteca"
+
+#: ../dialogs/AboutDialog.py:145
msgid "License"
-msgstr ""
+msgstr "Licença"
#: ../plcopen/iec_std.csv:73
msgid "Limitation"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:166
+msgstr "Limitação"
+
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:111 ../controls/VariablePanel.py:72
+msgstr "Linkando:\n"
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
-msgstr ""
-
-#: ../canfestival/canfestival.py:346
+msgstr "Local"
+
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr ""
-#: ../ProjectController.py:1662
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53
+msgstr "Falha na descoberta de serviço local!\n"
+
+#: ../controls/VariablePanel.py:62
msgid "Location"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:72
+msgstr "Localização"
+
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
-msgstr ""
+msgstr "Localizações disponíveis:"
#: ../plcopen/iec_std.csv:25
msgid "Logarithm to base 10"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:94
+msgstr "Logaritmo para base 10"
+
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
-msgstr ""
+msgstr "Mapear Variável"
#: ../features.py:31
msgid "Map located variables over CANopen"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:106
+msgstr "Mapear variáveis alocadas por CANopen"
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr "Mapear variáveis alocadas por Modbus"
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
-msgstr ""
-
-#: ../ConfigTreeNode.py:539
+msgstr "Mestre"
+
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr ""
#: ../plcopen/iec_std.csv:71
msgid "Maximum"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:239
+msgstr "Máximo"
+
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:289
-#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+msgstr "Máximo:"
+
+#: ../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:599
+msgstr "Memória"
+
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:48
+msgstr "Barra de ferramentas Menu"
+
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
-msgstr ""
-
-#: ../editors/Viewer.py:490
+msgstr "Microssegundos:"
+
+#: ../editors/Viewer.py:585
msgid "Middle"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:47
+msgstr "Meio"
+
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
-msgstr ""
+msgstr "Milissegundos:"
#: ../plcopen/iec_std.csv:72
msgid "Minimum"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:226
+msgstr "Mínimo"
+
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:45
+msgstr "Mínimo:"
+
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:210
+msgstr "Minutos:"
+
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:63
+msgstr "Miscelânea"
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr "Suporte Modbus"
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
-msgstr ""
-
-#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230
+msgstr "Modificador:"
+
+#: ../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:140
+"Mais de um conector encontrado correspondente a continuação \"{a1}\" no POU "
+"\"{a2}\""
+
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:139
+msgstr "Mover ação para baixo"
+
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:43
+msgstr "Mover ação para cima"
+
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:355
+msgstr "Mover para baixo"
+
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:354
+msgstr "Mover elemento para baixo"
+
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:271
+msgstr "Mover elemento para cima"
+
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:270
+msgstr "Mover instância para baixo"
+
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:242
+msgstr "Mover instância para cima"
+
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr ""
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr ""
-#: ../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 ""
-
-#: ../controls/CustomEditableListBox.py:42
+msgstr "Mover a visualização"
+
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+msgstr "Mover para cima"
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+msgstr "Mover variável para baixo"
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
-msgstr ""
+msgstr "Mover variável para cima"
#: ../plcopen/iec_std.csv:74
msgid "Multiplexer (select 1 of N)"
-msgstr ""
+msgstr "Multiplexador (selecione 1 de N)"
#: ../plcopen/iec_std.csv:34
msgid "Multiplication"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:83
+msgstr "Multiplicação"
+
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:92
+msgstr "Meu Computador:"
+
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+msgstr "NOME"
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
msgid "Name"
-msgstr ""
-
-#: ../Beremiz_service.py:332
+msgstr "Nome"
+
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:56 ../dialogs/FBDBlockDialog.py:83
-#: ../dialogs/ConnectionDialog.py:75
+msgstr "Nome deve ser não-nulo!"
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
msgid "Name:"
-msgstr ""
+msgstr "Nome:"
#: ../plcopen/iec_std.csv:24
msgid "Natural logarithm"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:460
+msgstr "Logaritmo natural"
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
-msgstr ""
-
-#: ../Beremiz_service.py:578
+msgstr "Negado"
+
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
-msgstr ""
-
-#: ../Beremiz_service.py:554
+msgstr "Falha no serviço Nevow Web."
+
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
-msgstr ""
-
-#: ../PLCOpenEditor.py:102 ../PLCOpenEditor.py:144 ../Beremiz.py:321
-#: ../Beremiz.py:356
+msgstr "Falha na importação Nevow/Athena:"
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
msgid "New"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:40
+msgstr "Novo"
+
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
-msgstr ""
-
-#: ../editors/Viewer.py:459
+msgstr "Novo item"
+
+#: ../editors/Viewer.py:553
msgid "No Modifier"
-msgstr ""
-
-#: ../ProjectController.py:1784
+msgstr "Sem Modificador"
+
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
-msgstr ""
-
-#: ../PLCGenerator.py:1631
+msgstr "Sem CLP para transferir (a construção foi bem-sucedida?)\n"
+
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr ""
-#: ../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 ""
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
msgstr ""
-
-#: ../PLCGenerator.py:829
+"Sem documentação disponível.\n"
+"Em breve."
+
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
-msgstr ""
-
-#: ../PLCGenerator.py:1194
+msgstr "Nenhuma informação encontrada para o bloco \"%s\" "
+
+#: ../PLCGenerator.py:1232
#, python-brace-format
msgid ""
"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
"broken"
msgstr ""
-
-#: ../controls/SearchResultPanel.py:169
+"Nenhuma variável de saída {a1} encontrada no bloco {a2} no POU {a3}. Conexão"
+" deve estar interrompida"
+
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
-msgstr ""
-
-#: ../svgui/svgui.py:131
+msgstr "Sem resultados de busca disponíveis."
+
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
-msgstr ""
-
-#: ../canfestival/config_utils.py:639
+msgstr "Nenhum arquivo SVG: %s\n"
+
+#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
msgstr ""
-#: ../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 ""
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
-msgstr ""
-
-#: ../PLCGenerator.py:1629
+msgstr "Nenhum valor válido selecionado!"
+
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
-msgstr ""
-
-#: ../canfestival/config_utils.py:355
+msgstr "Nenhuma variável definida no POU \"%s\""
+
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
-msgstr ""
-
-#: ../controls/VariablePanel.py:64
+msgstr "ID de nó inexistente: {a1} (variável {a2})"
+
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:75
+msgstr "Não-Reter"
+
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
-msgstr ""
-
-#: ../canfestival/config_utils.py:389
+msgstr "Normal"
+
+#: ../canfestival/config_utils.py:426
#, python-brace-format
msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
msgstr ""
#: ../plcopen/iec_std.csv:80
msgid "Not equal to"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:89
+msgstr "Não igual a"
+
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
-msgstr ""
+msgstr "Número de sequências:"
#: ../plcopen/iec_std.csv:22
msgid "Numerical"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:86
+msgstr "Numérico"
+
+#: ../editors/CodeFileEditor.py:736
+msgid "OnChange"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr ""
-#: ../PLCOpenEditor.py:104 ../PLCOpenEditor.py:145 ../Beremiz.py:323
-#: ../Beremiz.py:357
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
msgid "Open"
-msgstr ""
-
-#: ../svgui/svgui.py:140
+msgstr "Abrir"
+
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
-msgstr ""
-
-#: ../version.py:66
+msgstr "Abrir Inkscape"
+
+#: ../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:1836
+"Framework Open Source para automação, IDE implementada IEC 61131 com um "
+"conjunto constantemente crescente de extensões e ambiente flexível para CLP."
+
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:138
+msgstr "Abrir um explorador de arquivos para gerenciar arquivos de projeto"
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+msgstr "Abrir wxGlade"
+
+#: ../controls/VariablePanel.py:64
msgid "Option"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:83
+msgstr "Opção"
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:97
+msgstr "Opções"
+
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+msgstr "Organização (opcional):"
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:39
-#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:289
-#: ../editors/Viewer.py:1590 ../editors/TextViewer.py:307
-#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+msgstr "Outro Perfil"
+
+#: ../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:63 ../canfestival/NetworkEditor.py:84
+msgstr "Saída"
+
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+msgstr "PDO Receber"
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:131
+msgstr "PDO Transmitir"
+
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
-msgstr ""
-
-#: ../Beremiz.py:453
+msgstr "CLP:\n"
+
+#: ../BeremizIDE.py:383
msgid "PLC Log"
-msgstr ""
-
-#: ../ProjectController.py:1013
+msgstr "Log do CLP:"
+
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
-msgstr ""
-
-#: ../Beremiz_service.py:295
+msgstr "Falha na geração de código do CLP!\n"
+
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
-msgstr ""
-
-#: ../Beremiz_service.py:302
+msgstr "O CLP está vazio ou já iniciado."
+
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
-msgstr ""
-
-#: ../PLCOpenEditor.py:196 ../PLCOpenEditor.py:309
+msgstr "O CLP não está iniciado."
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
"{a2}"
msgstr ""
-
-#: ../PLCOpenEditor.py:292 ../PLCOpenEditor.py:373
+"Erro de sintaxe no CLP na linha {a1}:\n"
+"{a2}"
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
-msgstr ""
-
-#: ../PLCOpenEditor.py:152 ../PLCOpenEditor.py:209
+msgstr "Arquivos PLCOpen (*.xml)|*.xml|Todos os arquivos|*.*"
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
msgid "PLCOpenEditor"
-msgstr ""
-
-#: ../PLCOpenEditor.py:355
+msgstr "PLCOpenEditor"
+
+#: ../PLCOpenEditor.py:339
msgid ""
"PLCOpenEditor is part of Beremiz project.\n"
"\n"
"Beremiz is an "
msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:95
+"O PLCOpen Editor é parte do projeto Beremiz.\n"
+"\n"
+"Beremiz é um"
+
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:100
+msgstr "PORTA"
+
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:58
+msgstr "Nome do POU"
+
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:102
+msgstr "Nome do POU:"
+
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:65
+msgstr "Tipo do POU"
+
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:45
+msgstr "Tipo do POU:"
+
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:61
+msgstr "PYRO conectando à URI : %s\n"
+
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
-msgstr ""
-
-#: ../PLCOpenEditor.py:118 ../Beremiz.py:336
+msgstr "PYRO utilizando certificados em '%s' \n"
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:110
+msgstr "Configurar Página"
+
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
-msgstr ""
-
-#: ../IDEFrame.py:2598
+msgstr "Tamanho da Página (opcional):"
+
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:124
+msgstr "Página: %d"
+
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr ""
-#: ../editors/Viewer.py:598 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
-msgstr ""
-
-#: ../IDEFrame.py:1864
+msgstr "Colar"
+
+#: ../IDEFrame.py:1899
msgid "Paste POU"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:56
+msgstr "Colar POU"
+
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:73
+msgstr "Padrão para pesquisar:"
+
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr ""
-#: ../editors/Viewer.py:2717 ../editors/Viewer.py:2974
-#: ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
msgid "Please choose a target"
-msgstr ""
-
-#: ../editors/TextViewer.py:262
+msgstr "Por favor escolha um alvo"
+
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
-msgstr ""
-
-#: ../editors/Viewer.py:2587 ../editors/Viewer.py:3016
+msgstr "Por favor insira um nome para o bloco"
+
+#: ../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:799
+msgstr "Por favor insira texto de comentário"
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr ""
-#: ../Beremiz_service.py:194
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:163
+msgstr "Por favor insira o texto"
+
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
-msgstr ""
-
-#: ../Beremiz_service.py:317
+msgstr "Por favor insira um valor para a variável \"%s\":"
+
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
-msgstr ""
-
-#: ../Beremiz_service.py:317
+msgstr "Número da porta deve ser 0 <= porta <= 65535!"
+
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
-msgstr ""
-
-#: ../editors/Viewer.py:536 ../editors/Viewer.py:2378
+msgstr "Número da porta deve ser um inteiro!"
+
+#: ../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 ""
-#: ../PLCOpenEditor.py:120 ../Beremiz.py:338
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
-msgstr ""
-
-#: ../dialogs/BlockPreviewDialog.py:57
+msgstr "Previsualização"
+
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
-msgstr ""
-
-#: ../PLCOpenEditor.py:122 ../PLCOpenEditor.py:148 ../Beremiz.py:340
-#: ../Beremiz.py:360
+msgstr "Previsualização:"
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
msgid "Print"
-msgstr ""
-
-#: ../IDEFrame.py:1075
+msgstr "Imprimir"
+
+#: ../IDEFrame.py:1110
msgid "Print preview"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Visualizar impressão"
+
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:89
+msgstr "Prioridade"
+
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
-msgstr ""
-
-#: ../runtime/PLCObject.py:370
+msgstr "Prioridade:"
+
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:55
+msgstr "Problema ao inicializar o CLP: erro \"%d\""
+
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:80
+msgstr "Nome do Produto"
+
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:82
+msgstr "Nome do Produto (obrigatório):"
+
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:56
+msgstr "Lançamento do Produto (opcional):"
+
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:81
+msgstr "Versão do Produto"
+
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1743
-#: ../IDEFrame.py:1940
+msgstr "Versão do produto (obrigatório):"
+
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
-msgstr ""
-
-#: ../PLCOpenEditor.py:337
+msgstr "Programa"
+
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
-msgstr ""
-
-#: ../PLCControler.py:96
+msgstr "O programa foi gerado com sucesso!"
+
+#: ../plcopen/types_enums.py:76
msgid "Programs"
-msgstr ""
-
-#: ../editors/Viewer.py:242
+msgstr "Programas"
+
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:84 ../IDEFrame.py:584
+msgstr "Programas não podem ser usados por outros POUs!"
+
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:173
+msgstr "Projeto"
+
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
-msgstr ""
-
-#: ../ProjectController.py:1835
+msgstr "Projeto '%s':"
+
+#: ../ProjectController.py:1878
msgid "Project Files"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:54
+msgstr "Arquivos de Projeto"
+
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:78
+msgstr "Nome do Projeto"
+
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:79
+msgstr "Nome do Projeto (obrigatório):"
+
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
-msgstr ""
-
-#: ../PLCControler.py:3158
+msgstr "Versão do Produto (opcional):"
+
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
msgstr ""
-
-#: ../dialogs/ProjectDialog.py:32 ../editors/ProjectNodeEditor.py:37
+"Erro de sintaxe no arquivo do projeto:\n"
+"\n"
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
-msgstr ""
-
-#: ../ConfigTreeNode.py:566
+msgstr "Propriedades do projeto"
+
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:94
+"Layout da árvore de projeto não compatível com confnode.xml {a1}!={a2}"
+
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr ""
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:77
msgid "Properties"
-msgstr ""
-
-#: ../Beremiz_service.py:440
+msgstr "Propriedades"
+
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:118
+msgstr "Publicando serviço na rede local"
+
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
-msgstr ""
-
-#: ../Beremiz_service.py:427
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:426
+msgstr "Exceção do Pyro: %s \n"
+
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
-msgstr ""
-
-#: ../py_ext/PythonEditor.py:81
+msgstr "Porta do Pyro:"
+
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
-msgstr ""
-
-#: ../features.py:33
+msgstr "Código Python"
+
+#: ../features.py:34
msgid "Python file"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:38
+msgstr "Arquivo Python"
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr ""
-#: ../PLCOpenEditor.py:128 ../Beremiz.py:343 ../Beremiz_service.py:273
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+msgstr "Fechar"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
-msgstr ""
-
-#: ../ProjectController.py:1831
+msgstr "Faixa:"
+
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr ""
-#: ../Beremiz.py:1143
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
-msgstr ""
-
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+msgstr "Deseja realmente excluir o nó '%s'?"
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:74
+msgstr "Refazer"
+
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:106 ../IDEFrame.py:432
+msgstr "Referência"
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:66
+msgstr "Atualizar"
+
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:98
+msgstr "Expressão regular"
+
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
-msgstr ""
-
-#: ../editors/Viewer.py:1567
+msgstr "Expressões regulares"
+
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr ""
#: ../plcopen/iec_std.csv:37
msgid "Remainder (modulo)"
-msgstr ""
-
-#: ../Beremiz.py:1144
+msgstr "Resto (módulo)"
+
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
-msgstr ""
-
-#: ../IDEFrame.py:2404
+msgstr "Remover nó %s"
+
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr ""
-#: ../IDEFrame.py:2409
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:138
+msgstr "Remover POU"
+
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:353
+msgstr "Remover ação"
+
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:63
+msgstr "Remover elemento"
+
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr ""
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:104
+msgstr "Remover instância"
+
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:240
+msgstr "Remover escravo"
+
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+msgstr "Remover tarefa"
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
-msgstr ""
-
-#: ../IDEFrame.py:1944
+msgstr "Remover variável"
+
+#: ../IDEFrame.py:1979
msgid "Rename"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:181
+msgstr "Renomear"
+
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
-msgstr ""
-
-#: ../editors/Viewer.py:502
+msgstr "Substituir arquivo"
+
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
-msgstr ""
+msgstr "Substituir Fio por conexões"
#: ../plcopen/iec_std.csv:89
msgid "Replacement (within)"
msgstr ""
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
-msgstr ""
-
-#: ../editors/Viewer.py:583
+msgstr "Reiniciar"
+
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
-msgstr ""
-
-#: ../IDEFrame.py:451
+msgstr "Reiniciar Ordem de Execução"
+
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr ""
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr ""
-#: ../PLCControler.py:97 ../Beremiz.py:1075
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
-msgstr ""
-
-#: ../controls/VariablePanel.py:62
+msgstr "Recursos"
+
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr ""
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr ""
-#: ../editors/Viewer.py:487
+#: ../editors/Viewer.py:582
msgid "Right"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:63
+msgstr "Direita"
+
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr ""
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:461
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
-msgstr ""
+msgstr "Borda de Subida"
#: ../plcopen/iec_std.csv:65
msgid "Rotate left"
-msgstr ""
+msgstr "Girar para a esquerda"
#: ../plcopen/iec_std.csv:64
msgid "Rotate right"
-msgstr ""
+msgstr "Girar para a direita"
#: ../plcopen/iec_std.csv:17
msgid "Rounding up/down"
msgstr ""
-#: ../ProjectController.py:1799
+#: ../ProjectController.py:1828
msgid "Run"
-msgstr ""
-
-#: ../ProjectController.py:1058
+msgstr "Rodar"
+
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr ""
-#: ../ProjectController.py:1067
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr ""
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+msgstr "Cliente SDO"
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:36 ../controls/ProjectPropertiesPanel.py:143
+msgstr "Servidor SDO"
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "SFC"
-msgstr ""
-
-#: ../PLCGenerator.py:1392
+msgstr "SFC"
+
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr ""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:31
-#: ../dialogs/PouDialog.py:36
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
msgid "ST"
-msgstr ""
-
-#: ../PLCOpenEditor.py:324
+msgstr "ST"
+
+#: ../PLCOpenEditor.py:308
msgid "ST files (*.st)|*.st|All files|*.*"
msgstr ""
-#: ../svgui/svgui.py:125
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr ""
-#: ../features.py:35
+#: ../features.py:36
msgid "SVGUI"
-msgstr ""
-
-#: ../PLCOpenEditor.py:111 ../PLCOpenEditor.py:146 ../Beremiz.py:327
-#: ../Beremiz.py:358
+msgstr "SVGUI"
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
msgid "Save"
-msgstr ""
-
-#: ../PLCOpenEditor.py:113 ../PLCOpenEditor.py:147 ../Beremiz.py:359
+msgstr "Salvar"
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
-msgstr ""
-
-#: ../Beremiz.py:329
+msgstr "Salvar Como..."
+
+#: ../BeremizIDE.py:249
msgid "Save as"
-msgstr ""
-
-#: ../ProjectController.py:470
+msgstr "Salvar como"
+
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr ""
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:44 ../IDEFrame.py:382
-#: ../IDEFrame.py:428
+msgstr "Buscar"
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
msgid "Search in Project"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:46
+msgstr "Buscar no Projeto"
+
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
-msgstr ""
-
-#: ../IDEFrame.py:388
+msgstr "Segundos:"
+
+#: ../IDEFrame.py:390
msgid "Select All"
-msgstr ""
-
-#: ../editors/Viewer.py:288 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+msgstr "Selecionar Tudo"
+
+#: ../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:1216
+msgstr "Selecionar uma classe de variáveis:"
+
+#: ../ProjectController.py:1293
msgid "Select an editor:"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:276
+msgstr "Selecionar um editor:"
+
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
-msgstr ""
-
-#: ../IDEFrame.py:607
+msgstr "Selecionar uma instância"
+
+#: ../IDEFrame.py:628
msgid "Select an object"
-msgstr ""
-
-#: ../ProjectController.py:477
+msgstr "Selecionar um objeto"
+
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
-msgstr ""
+msgstr "A pasta selecionada já contém outro projeto. Sobrescrever?\n"
#: ../plcopen/iec_std.csv:70
msgid "Selection"
+msgstr "Seleção"
+
+#: ../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:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:85
+msgstr "Descoberta de Serviços"
+
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:76
+msgstr "Serviços disponíveis:"
+
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr ""
#: ../plcopen/iec_std.csv:62
msgid "Shift left"
-msgstr ""
+msgstr "Deslocar para a esquerda"
#: ../plcopen/iec_std.csv:63
msgid "Shift right"
-msgstr ""
-
-#: ../ProjectController.py:1825
+msgstr "Deslocar para a direita"
+
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
-msgstr ""
-
-#: ../canfestival/canfestival.py:387
+msgstr "Mostrar código IEC gerado pelo PLCGenerator"
+
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
-msgstr ""
-
-#: ../canfestival/canfestival.py:388
+msgstr "Mostrar Mestre"
+
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr ""
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1862
msgid "Show code"
+msgstr "Mostrar Código"
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
msgstr ""
#: ../dialogs/SFCDivergenceDialog.py:67
-msgid "Simultaneous Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Simultaneous Divergence"
msgstr ""
#: ../plcopen/iec_std.csv:27
msgid "Sine"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Seno"
+
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr ""
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr ""
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3028,255 +3093,279 @@
#: ../plcopen/iec_std.csv:23
msgid "Square root (base 2)"
-msgstr ""
-
-#: ../plcopen/definitions.py:46
+msgstr "Raiz quadrada (base 2)"
+
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
-msgstr ""
-
-#: ../ProjectController.py:1801 ../Beremiz_service.py:261
+msgstr "Blocos de função padrão"
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
-msgstr ""
-
-#: ../ProjectController.py:1005
+msgstr "Iniciar CLP"
+
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
-msgstr ""
-
-#: ../ProjectController.py:1319
+msgstr "Iniciar construção em %s\n"
+
+#: ../ProjectController.py:1397
msgid "Started"
-msgstr ""
-
-#: ../ProjectController.py:1607
+msgstr "Iniciado"
+
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
-msgstr ""
-
-#: ../Beremiz.py:463
+msgstr "Iniciando CLP\n"
+
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
-msgstr ""
-
-#: ../editors/Viewer.py:553 ../editors/Viewer.py:2353
+msgstr "Barra de Status"
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr ""
-#: ../ProjectController.py:1804
+#: ../ProjectController.py:1835
msgid "Stop"
-msgstr ""
-
-#: ../Beremiz_service.py:262
+msgstr "Parar"
+
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
-msgstr ""
-
-#: ../ProjectController.py:1806
+msgstr "Parar PLC"
+
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
-msgstr ""
-
-#: ../ProjectController.py:1320
+msgstr "Parar Execução do CLP"
+
+#: ../ProjectController.py:1398
msgid "Stopped"
-msgstr ""
-
-#: ../ProjectController.py:1579
-msgid "Stopping debugger...\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Parado"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
+msgstr "Estrutura"
+
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr ""
#: ../plcopen/iec_std.csv:35
msgid "Subtraction"
-msgstr ""
-
-#: ../ProjectController.py:1044
+msgstr "Subtração"
+
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
-msgstr ""
-
-#: ../IDEFrame.py:447
+msgstr "Construído com sucesso.\n"
+
+#: ../IDEFrame.py:449
msgid "Switch perspective"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:172
+msgstr "Alterar perspectiva"
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
msgid "Syntax error in regular expression of pattern to search!"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr ""
#: ../plcopen/iec_std.csv:29
msgid "Tangent"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:83
+msgstr "Tangente"
+
+#: ../editors/ResourceEditor.py:97
msgid "Task"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:235
+msgstr "Tarefa"
+
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:73
+msgstr "Tarefas:"
+
+#: ../controls/VariablePanel.py:91
msgid "Temp"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:180
+msgstr "Temporário"
+
+#: ../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"
+"\n"
+"This is the main community support channel.\n"
+"For posting it is required to be subscribed to the mailing list.\n"
+"\n"
+"You can subscribe to the list here:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+msgstr ""
+"O melhor lugar para enviar perguntas sobre o Beremiz/PLCOpen Editor\n"
+"é a lista de e=mails do projeto: beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"Este é o canal de suporte principal da comunidade.\n"
+"Para enviar é necessário estar inscrito na lista de e-mail.\n"
+"\n"
+"Você pode se inscrever na lista aqui: https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+
+#: ../editors/FileManagementPanel.py:186
#, python-format
msgid ""
"The file '%s' already exist.\n"
"Do you want to replace it?"
msgstr ""
-
-#: ../editors/LDViewer.py:882
+"O arquivo '%s' já existe.\n"
+"Deseja substituí-lo?"
+
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
-msgstr ""
-
-#: ../Beremiz.py:640 ../IDEFrame.py:1011
+msgstr "O grupo do bloco deve ser coerente!"
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
-msgstr ""
-
-#: ../IDEFrame.py:1654 ../IDEFrame.py:1673
+msgstr "Há mudanças, deseja salvá-la?"
+
+#: ../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:1098
+"Há um POU com o nome \"%s\". Isto pode causar um conflito. Deseja continuar?"
+
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
msgstr ""
-
-#: ../editors/LDViewer.py:891
+"Houve um problema na impressão.\n"
+"A impressora está configurada corretamente?"
+
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+msgstr "Esta opção ainda não está disponível!"
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr ""
#: ../plcopen/iec_std.csv:40
msgid "Time"
-msgstr ""
+msgstr "Tempo"
#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
msgid "Time addition"
-msgstr ""
+msgstr "Adição de tempo"
#: ../plcopen/iec_std.csv:86
msgid "Time concatenation"
-msgstr ""
+msgstr "Concatenação de tempo"
#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
msgid "Time division"
-msgstr ""
+msgstr "Divisão de tempo"
#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
msgid "Time multiplication"
-msgstr ""
+msgstr "Multiplicação de tempo"
#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
msgid "Time subtraction"
-msgstr ""
+msgstr "Subtração de tempo"
#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
msgid "Time-of-day addition"
-msgstr ""
+msgstr "Adição de hora-do-dia"
#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
msgid "Time-of-day subtraction"
-msgstr ""
-
-#: ../editors/Viewer.py:489
+msgstr "Subtração de hora-do-dia"
+
+#: ../dialogs/ForceVariableDialog.py:188
+msgid "Toggle value"
+msgstr "Inverter valor"
+
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr ""
-#: ../ProjectController.py:1813
+#: ../ProjectController.py:1848
msgid "Transfer"
-msgstr ""
-
-#: ../ProjectController.py:1815
+msgstr "Transferir"
+
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
-msgstr ""
-
-#: ../ProjectController.py:1779
+msgstr "Transferir CLP"
+
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
-msgstr ""
-
-#: ../ProjectController.py:1781
+msgstr "Transferência completada com sucesso.\n"
+
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
-msgstr ""
-
-#: ../editors/Viewer.py:554 ../editors/Viewer.py:2355
-#: ../editors/Viewer.py:2382
+msgstr "Falha na transferência.\n"
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
msgid "Transition"
-msgstr ""
-
-#: ../PLCGenerator.py:1518
+msgstr "Transição"
+
+#: ../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:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr ""
-#: ../plcopen/plcopen.py:1318
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr ""
-#: ../PLCControler.py:96
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr ""
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
+msgstr "Traduzido por"
+
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr ""
-#: ../Beremiz_service.py:476
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:38 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../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 ""
-#: ../dialogs/BrowseLocationsDialog.py:48
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr ""
-#: ../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 ""
@@ -3285,271 +3374,323 @@
msgid "Type conversion"
msgstr ""
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr ""
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:57
-#: ../dialogs/LDPowerRailDialog.py:56 ../dialogs/BrowseLocationsDialog.py:99
-#: ../dialogs/FBDBlockDialog.py:65 ../dialogs/ConnectionDialog.py:58
+#: ../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:462 ../canfestival/config_utils.py:476
+#: ../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:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr ""
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr ""
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
-msgstr ""
-
-#: ../ProjectController.py:382
+msgstr "Desfazer"
+
+#: ../ProjectController.py:442
msgid "Unknown"
-msgstr ""
-
-#: ../editors/Viewer.py:393
+msgstr "Desconhecido"
+
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
-msgstr ""
-
-#: ../ProjectController.py:379 ../ProjectController.py:380
+msgstr "Variável desconhecida \"%s\" para este POU!"
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
-msgstr ""
-
-#: ../PLCControler.py:636
+msgstr "Sem nome"
+
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
-msgstr ""
-
-#: ../controls/VariablePanel.py:284
+msgstr "Sem nome %d"
+
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:632 ../controls/VariablePanel.py:810
+msgstr "Tamanho de dado não reconhecido \"%s\""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr ""
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr ""
-#: ../PLCControler.py:95
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:38
+msgstr "POUs definidos pelo usuário"
+
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:259
+msgstr "Valor"
+
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:42 ../editors/Viewer.py:526
-#: ../editors/Viewer.py:2385
+msgstr "Valores:"
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
msgid "Variable"
-msgstr ""
-
-#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360
-#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343
-#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329
+msgstr "Variável"
+
+#: ../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:63
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
-msgstr ""
-
-#: ../editors/Viewer.py:288 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+msgstr "Propriedades da variável"
+
+#: ../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:395 ../editors/TextViewer.py:387
+msgstr "Classe da variável"
+
+#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388
msgid "Variable don't belong to this POU!"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:89
+msgstr "Variável não pertence a este POU!"
+
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
+msgstr "Variável:"
+
+#: ../controls/VariablePanel.py:90
msgid "Variables"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:151
+msgstr "Variáveis"
+
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr ""
-#: ../Beremiz_service.py:586
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr "Falha na conexão com cliente WAMP (%s) ... tentando novamente... "
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr "Perda de conexão com cliente WAMP (%s)... tentando novamente..."
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr "ID WAMP:"
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr "Cliente WAMP conectando a:"
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr "Conexão com cliente WAMP não estabelecida!"
+
+#: ../Beremiz_service.py:625
msgid "WAMP client startup failed. "
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:91
+msgstr "Falha na inicialização de cliente WAMP."
+
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr "Configuração WAMP incompleta."
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr "Configuração WAMP está faltando."
+
+#: ../connectors/WAMP/__init__.py:99
#, python-format
msgid "WAMP connecting to URL : %s\n"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:131
+msgstr "WAMP conectando a URL: %s\n"
+
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:150
+msgstr "Timeout da conexão WAMP"
+
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
-msgstr ""
-
-#: ../Beremiz_service.py:562
+msgstr "Falha na conexão WAMP para '%s'.\n"
+
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:35
+msgstr "Falha na importação WAMP :"
+
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr "Erro de carregamento WAMP:"
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:44
msgid "WXGLADE GUI"
msgstr ""
-#: ../dialogs/PouDialog.py:128 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr ""
-#: ../ProjectController.py:666
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:119
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:93
+msgstr "Largura:"
+
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr ""
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
-msgstr ""
-
-#: ../features.py:34
+msgstr "Escrito por"
+
+#: ../features.py:35
msgid "WxGlade GUI"
-msgstr ""
-
-#: ../svgui/svgui.py:139
+msgstr "GUI WxGlade"
+
+#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:137
+"Você não possui permissão de escrita.\n"
+"Abrir mesmo assim?"
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
msgstr ""
-
-#: ../ProjectController.py:342
+"Você não tem permissão de escrita.\n"
+"Abrir WxGlade mesmo assim?"
+
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
msgstr ""
-
-#: ../editors/LDViewer.py:886
+"É necessária permissão para trabalhar no projeto.\n"
+"Trabalhar numa cópia do projeto?"
+
+#: ../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:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:175
+msgstr "Você deve digitar um nome!"
+
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
-msgstr ""
-
-#: ../IDEFrame.py:438
+msgstr "Você deve digitar um valor!"
+
+#: ../IDEFrame.py:440
msgid "Zoom"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:151
+msgstr "Zoom"
+
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
-msgstr ""
-
-#: ../PLCOpenEditor.py:333
+msgstr "dias"
+
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
-msgstr ""
-
-#: ../util/ProcessLogger.py:169
+msgstr "erro: %s\n"
+
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr ""
-#: ../PLCOpenEditor.py:396 ../PLCOpenEditor.py:398
-msgid "file : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:31
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr ""
-#: ../PLCOpenEditor.py:399
-msgid "function : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:31
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:151
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
-msgstr ""
-
-#: ../PLCOpenEditor.py:399
-msgid "line : "
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:153
+msgstr "horas"
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "instalação do matiec não encontrada\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:152
+msgstr "milissegundos"
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:31
+msgstr "minutos"
+
+#: ../dialogs/PouDialog.py:36
msgid "program"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:152
+msgstr "programa"
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
-msgstr ""
+msgstr "segundos"
#: ../plcopen/iec_std.csv:84
msgid "string from the middle"
@@ -3563,24 +3704,24 @@
msgid "string right of"
msgstr ""
-#: ../Beremiz.py:126
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr ""
-#: ../PLCOpenEditor.py:331
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr ""
-#: ../PLCControler.py:970
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr ""
-#: ../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 ""
@@ -3628,7 +3769,7 @@
msgstr ""
msgid "Compiler"
-msgstr ""
+msgstr "Compilador"
msgid "CFLAGS"
msgstr ""
@@ -3639,13 +3780,76 @@
msgid "LDFLAGS"
msgstr ""
-msgid "PLC"
-msgstr ""
-
msgid "Linux"
-msgstr ""
+msgstr "Linux"
msgid "Win32"
+msgstr "Win32"
+
+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 "Paridade"
+
+msgid "Stop_Bits"
+msgstr ""
+
+msgid "ModbusRTUslave"
+msgstr ""
+
+msgid "ModbusRoot"
+msgstr ""
+
+msgid "MaxRemoteTCPclients"
msgstr ""
msgid "BaseParams"
@@ -3664,7 +3868,7 @@
msgstr ""
msgid "Libraries"
-msgstr ""
+msgstr "Bibliotecas"
msgid "URI_location"
msgstr ""
@@ -3676,22 +3880,22 @@
msgstr ""
msgid "variables"
-msgstr ""
+msgstr "variáveis"
msgid "variable"
-msgstr ""
+msgstr "variável"
msgid "name"
-msgstr ""
+msgstr "nome"
msgid "type"
-msgstr ""
+msgstr "tipo"
msgid "class"
-msgstr ""
+msgstr "classe"
msgid "initial"
-msgstr ""
+msgstr "inicia"
msgid "desc"
msgstr ""
@@ -3760,7 +3964,7 @@
msgstr ""
msgid "0 - manual , 1 - automatic"
-msgstr ""
+msgstr "0 - manual, 1 - automático"
msgid "Process variable"
msgstr ""
@@ -3822,7 +4026,7 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
+"exclusive access to certain resources."
msgstr ""
msgid "The output produces a single pulse when a rising edge is detected."
--- a/i18n/Beremiz_pt_PT.po Thu Nov 22 23:39:54 2018 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3916 +0,0 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
-#
-# Translators:
-# Pedro Coimbra <pcoimbra310@gmail.com>, 2017
-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"
-"Last-Translator: Pedro Coimbra <pcoimbra310@gmail.com>, 2017\n"
-"Language-Team: Portuguese (https://www.transifex.com/beremiz/teams/75746/pt/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: pt\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
-#, python-format
-msgid ""
-"\n"
-"An unhandled exception (bug) occured. Bug report saved at :\n"
-"(%s)\n"
-"\n"
-"Please be kind enough to send this file to:\n"
-"beremiz-devel@lists.sourceforge.net\n"
-"\n"
-"You should now restart program.\n"
-"\n"
-"Traceback:\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
-msgid " External"
-msgstr "Externo"
-
-#: ../controls/VariablePanel.py:71
-msgid " InOut"
-msgstr "EntradaSaída"
-
-#: ../controls/VariablePanel.py:71
-msgid " Input"
-msgstr "Entrada"
-
-#: ../controls/VariablePanel.py:72
-msgid " Local"
-msgstr "Local"
-
-#: ../controls/VariablePanel.py:71
-msgid " Output"
-msgstr "Saída"
-
-#: ../controls/VariablePanel.py:73
-msgid " Temp"
-msgstr "Temp"
-
-#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69
-#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114
-#, python-format
-msgid " and %s"
-msgstr "e %s"
-
-#: ../ProjectController.py:1151
-msgid " generation failed !\n"
-msgstr "geração falhada !\n"
-
-#: ../plcopen/plcopen.py:886
-#, python-format
-msgid "\"%s\" Data Type doesn't exist !!!"
-msgstr "\" %s \" O tipo de dados não existe !!!"
-
-#: ../plcopen/plcopen.py:904
-#, python-format
-msgid "\"%s\" POU already exists !!!"
-msgstr "\" %s \" POU já existe !!!"
-
-#: ../plcopen/plcopen.py:925
-#, python-format
-msgid "\"%s\" POU doesn't exist !!!"
-msgstr "\" %s \" POU não existe !!!"
-
-#: ../editors/Viewer.py:247
-#, python-format
-msgid "\"%s\" can't use itself!"
-msgstr "\"%s\" não pode usar-se!"
-
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
-#, python-format
-msgid "\"%s\" config already exists!"
-msgstr "\"%s \" config já existe!"
-
-#: ../plcopen/plcopen.py:472
-#, python-format
-msgid "\"%s\" configuration already exists !!!"
-msgstr "\"%s\" configuração já existe !!!"
-
-#: ../IDEFrame.py:1605
-#, python-format
-msgid "\"%s\" data type already exists!"
-msgstr "\"%s\" o tipo de dados já existe!"
-
-#: ../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
-#, python-format
-msgid "\"%s\" element for this pou already exists!"
-msgstr "\"%s\" o elemento para esta pou já existe!"
-
-#: ../BeremizIDE.py:897
-#, python-format
-msgid "\"%s\" folder is not a valid Beremiz project\n"
-msgstr "\"%s\" o ficheiro não é um projecto Beremiz válido\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
-#, python-format
-msgid "\"%s\" is a keyword. It can't be used!"
-msgstr "\"%s\" é uma palavra-chave. Não pode ser usada!"
-
-#: ../plcopen/plcopen.py:2417
-#, python-format
-msgid "\"%s\" is an invalid value!"
-msgstr "\"%s\" é um valor inválido!"
-
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
-#, python-format
-msgid "\"%s\" is not a valid folder!"
-msgstr "\"%s\" não é um ficheiro válido!"
-
-#: ../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
-#, python-format
-msgid "\"%s\" is not a valid identifier!"
-msgstr "\"%s\" não é um identificador válido!"
-
-#: ../IDEFrame.py:2410
-#, python-format
-msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
-msgstr "\"%s\" é usáda por uma ou mais POUs. Deseja continuar?"
-
-#: ../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
-#, python-format
-msgid "\"%s\" pou already exists!"
-msgstr "\"%s\" pou já existe!"
-
-#: ../dialogs/SFCStepNameDialog.py:58
-#, python-format
-msgid "\"%s\" step already exists!"
-msgstr "\"%s\" o passo já existe!"
-
-#: ../editors/DataTypeEditor.py:550
-#, python-format
-msgid "\"%s\" value already defined!"
-msgstr "\"%s\" valor já defenido|"
-
-#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743
-#, python-format
-msgid "\"%s\" value isn't a valid array dimension!"
-msgstr "\"%s\" o valor não é uma dimensão de matriz válida!"
-
-#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750
-#, python-format
-msgid ""
-"\"%s\" value isn't a valid array dimension!\n"
-"Right value must be greater than left value."
-msgstr ""
-"\"%s\" o valor não é uma dimensão de matriz válida!\n"
-"O valor direito tem de ser maior do que o valor esquerdo."
-
-#: ../PLCGenerator.py:1101
-#, python-brace-format
-msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
-msgstr "\"{a1}\" função cancelada na POU \"{a2}\" : Sem entrada conectada"
-
-#: ../editors/Viewer.py:251
-#, python-brace-format
-msgid "\"{a1}\" is already used by \"{a2}\"!"
-msgstr "\"{a1}\" já está a ser usada por \"{a2}\"!"
-
-#: ../plcopen/plcopen.py:496
-#, python-brace-format
-msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
-msgstr "o recurso\"{a1}\" já existe na configuração\"{a2}\" !!!"
-
-#: ../plcopen/plcopen.py:514
-#, python-brace-format
-msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
-msgstr "o recurso\"{a1}\" não existe na configuração\"{a2}\" !!!"
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
-#, python-format
-msgid "%03gms"
-msgstr "%03gms"
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
-#, python-format
-msgid "%dd"
-msgstr "%dd"
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570
-#, python-format
-msgid "%dh"
-msgstr "%dh"
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
-#, python-format
-msgid "%dm"
-msgstr "%dm"
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
-#, python-format
-msgid "%dms"
-msgstr "%dms"
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
-#, python-format
-msgid "%ds"
-msgstr "%ds"
-
-#: ../PLCControler.py:1533
-#, python-format
-msgid "%s Data Types"
-msgstr "%s Tipo de dados"
-
-#: ../PLCControler.py:1516
-#, python-format
-msgid "%s POUs"
-msgstr "%s POUs"
-
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
-#, python-format
-msgid "%s Profile"
-msgstr "%s Perfil"
-
-#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657
-#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677
-#: ../plcopen/plcopen.py:1687
-#, python-format
-msgid "%s body don't have instances!"
-msgstr "%s o corpo não tem instâncias!"
-
-#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712
-#: ../plcopen/plcopen.py:1719
-#, python-format
-msgid "%s body don't have text!"
-msgstr "%s o corpo não tem texto!"
-
-#: ../IDEFrame.py:386
-msgid "&Add Element"
-msgstr "&Adicione elemento"
-
-#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121
-#: ../dialogs/AboutDialog.py:158
-msgid "&Close"
-msgstr "&Fechar"
-
-#: ../IDEFrame.py:356
-msgid "&Configuration"
-msgstr "&Configuração"
-
-#: ../IDEFrame.py:345
-msgid "&Data Type"
-msgstr "&Tipo de dados"
-
-#: ../IDEFrame.py:390
-msgid "&Delete"
-msgstr "&Apagar"
-
-#: ../IDEFrame.py:337
-msgid "&Display"
-msgstr "&Exibir"
-
-#: ../IDEFrame.py:336
-msgid "&Edit"
-msgstr "&Editar"
-
-#: ../IDEFrame.py:335
-msgid "&File"
-msgstr "&Ficheiro"
-
-#: ../IDEFrame.py:347
-msgid "&Function"
-msgstr "&Função"
-
-#: ../IDEFrame.py:338
-msgid "&Help"
-msgstr "&Ajuda"
-
-#: ../dialogs/AboutDialog.py:72
-msgid "&License"
-msgstr "&Licensa"
-
-#: ../IDEFrame.py:351
-msgid "&Program"
-msgstr "&Programa"
-
-#: ../PLCOpenEditor.py:127
-msgid "&Properties"
-msgstr "&Propriedades"
-
-#: ../BeremizIDE.py:219
-msgid "&Recent Projects"
-msgstr "&Projectos recentes"
-
-#: ../IDEFrame.py:353
-msgid "&Resource"
-msgstr "&Recurso"
-
-#: ../controls/SearchResultPanel.py:239
-#, python-brace-format
-msgid "'{a1}' - {a2} match in project"
-msgstr "'{a1}' - {a2} é idêntico no projecto"
-
-#: ../controls/SearchResultPanel.py:241
-#, python-brace-format
-msgid "'{a1}' - {a2} matches in project"
-msgstr "'{a1}' - {a2} são idênticos no projecto"
-
-#: ../connectors/PYRO/__init__.py:90
-#, python-brace-format
-msgid "'{a1}' is located at {a2}\n"
-msgstr "'{a1}' está localizado em {a2}\n"
-
-#: ../controls/SearchResultPanel.py:291
-#, python-format
-msgid "(%d matches)"
-msgstr "(%d corresponde)"
-
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409
-msgid ", "
-msgstr ","
-
-#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94
-#: ../dialogs/PouDialog.py:116
-#, python-format
-msgid ", %s"
-msgstr ", %s"
-
-#: ../PLCOpenEditor.py:404
-msgid ". "
-msgstr "."
-
-#: ../controls/LogViewer.py:279
-msgid "1d"
-msgstr "1d"
-
-#: ../controls/LogViewer.py:280
-msgid "1h"
-msgstr "1h"
-
-#: ../controls/LogViewer.py:281
-msgid "1m"
-msgstr "1m"
-
-#: ../controls/LogViewer.py:282
-msgid "1s"
-msgstr "1s"
-
-#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663
-#: ../IDEFrame.py:1682
-#, python-format
-msgid ""
-"A POU has an element named \"%s\". This could cause a conflict. Do you wish "
-"to continue?"
-msgstr ""
-"Uma POU contém um elemento chamado \"%s\" Isto pode causar um conflito. "
-"Deseja continuar?"
-
-#: ../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
-#, python-format
-msgid "A POU named \"%s\" already exists!"
-msgstr "Uma POU chmada \"%s\" já existe!"
-
-#: ../ConfigTreeNode.py:424
-#, python-brace-format
-msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
-msgstr "Um filho chamado \"{a1}\" ajá existe -> \"{a2}\"\n"
-
-#: ../dialogs/BrowseLocationsDialog.py:218
-msgid "A location must be selected!"
-msgstr "Uma localização tem de ser seleccionada!"
-
-#: ../editors/ResourceEditor.py:451
-msgid "A task with the same name already exists!"
-msgstr "Uma tarefa com o mesmo nome já existe!"
-
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777
-#: ../IDEFrame.py:1633 ../IDEFrame.py:1646
-#, python-format
-msgid "A variable with \"%s\" as name already exists in this pou!"
-msgstr "Uma variavel com o nome\"%s\" já existe nesta pou!"
-
-#: ../editors/CodeFileEditor.py:780
-#, python-format
-msgid "A variable with \"%s\" as name already exists!"
-msgstr "Uma variavel com o nome\"%s\" já existe!"
-
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
-msgid "About"
-msgstr "Sobre"
-
-#: ../plcopen/iec_std.csv:22
-msgid "Absolute number"
-msgstr "Numero absoluto"
-
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
-msgid "Action"
-msgstr "Acção"
-
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
-msgid "Action Block"
-msgstr "Bloco de acção"
-
-#: ../dialogs/PouActionDialog.py:82
-msgid "Action Name"
-msgstr "Nome da acção"
-
-#: ../dialogs/PouActionDialog.py:49
-msgid "Action Name:"
-msgstr "Nome da acção:"
-
-#: ../plcopen/plcopen.py:1364
-#, python-format
-msgid "Action with name %s doesn't exist!"
-msgstr "A acção com o nome \"%s\" não existe!"
-
-#: ../PLCControler.py:98
-msgid "Actions"
-msgstr "Acções"
-
-#: ../dialogs/ActionBlockDialog.py:133
-msgid "Actions:"
-msgstr "Acções:"
-
-#: ../editors/Viewer.py:431
-msgid "Active"
-msgstr "Activo"
-
-#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101
-#: ../BeremizIDE.py:965 ../editors/Viewer.py:647
-msgid "Add"
-msgstr "Adicionar"
-
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
-msgid "Add Action"
-msgstr "Adicionar acção"
-
-#: ../features.py:32
-msgid "Add C code accessing located variables synchronously"
-msgstr "Adicionar codigo C acessando variaveis localizadas sincronamente"
-
-#: ../IDEFrame.py:1876
-msgid "Add Configuration"
-msgstr "Adicionar Configuração"
-
-#: ../IDEFrame.py:1856
-msgid "Add DataType"
-msgstr "Adicionar um Tipo de Dados"
-
-#: ../editors/Viewer.py:572
-msgid "Add Divergence Branch"
-msgstr "Adicionar um Ramo de divergência"
-
-#: ../dialogs/DiscoveryDialog.py:117
-msgid "Add IP"
-msgstr "Adicionar IP"
-
-#: ../IDEFrame.py:1864
-msgid "Add POU"
-msgstr "Adicionao POU"
-
-#: ../features.py:33
-msgid "Add Python code executed asynchronously"
-msgstr "Adicionar codigo Python executado assincronamente"
-
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
-msgid "Add Resource"
-msgstr "Adicionar Recurso"
-
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
-msgid "Add Transition"
-msgstr "Adicionar Transição"
-
-#: ../editors/Viewer.py:559
-msgid "Add Wire Segment"
-msgstr "Adicionar seguemento de ligação"
-
-#: ../editors/SFCViewer.py:433
-msgid "Add a new initial step"
-msgstr "Adicionar um novo passo de inicio"
-
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
-msgid "Add a new jump"
-msgstr "Adicionar um novo salto"
-
-#: ../editors/SFCViewer.py:455
-msgid "Add a new step"
-msgstr "Adicionar um novo passo"
-
-#: ../features.py:34
-msgid "Add a simple WxGlade based GUI."
-msgstr "Adicionar um simples GUI baseado em WxGlade"
-
-#: ../dialogs/ActionBlockDialog.py:137
-msgid "Add action"
-msgstr "Adicionar acção"
-
-#: ../editors/DataTypeEditor.py:352
-msgid "Add element"
-msgstr "Adicionar elemento"
-
-#: ../editors/ResourceEditor.py:268
-msgid "Add instance"
-msgstr "Adicionar instância"
-
-#: ../canfestival/NetworkEditor.py:103
-msgid "Add slave"
-msgstr "Adicionar escravo"
-
-#: ../editors/ResourceEditor.py:239
-msgid "Add task"
-msgstr "Adicionar tarefa"
-
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
-msgid "Add variable"
-msgstr "Adicionar variável"
-
-#: ../plcopen/iec_std.csv:33
-msgid "Addition"
-msgstr "Adição"
-
-#: ../plcopen/definitions.py:49
-msgid "Additional function blocks"
-msgstr "Blocos de função adicionais"
-
-#: ../editors/Viewer.py:630
-msgid "Adjust Block Size"
-msgstr "Ajustar tamanho de bloco"
-
-#: ../editors/Viewer.py:1686
-msgid "Alignment"
-msgstr "Alinhamento"
-
-#: ../dialogs/BrowseLocationsDialog.py:40
-#: ../dialogs/BrowseLocationsDialog.py:48
-#: ../dialogs/BrowseLocationsDialog.py:141
-#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298
-#: ../controls/VariablePanel.py:70
-msgid "All"
-msgstr "Tudo"
-
-#: ../editors/FileManagementPanel.py:35
-msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
-msgstr "Todos os ficheiros (*.*)|*.*|CSV files (*.csv)|*.csv"
-
-#: ../ProjectController.py:1685
-msgid "Already connected. Please disconnect\n"
-msgstr "Já conectado. Por favor desconecte-se\n"
-
-#: ../editors/DataTypeEditor.py:591
-#, python-format
-msgid "An element named \"%s\" already exists in this structure!"
-msgstr "Um elemento chamado \"%s\" já existe nesta estrutura!"
-
-#: ../editors/ResourceEditor.py:486
-msgid "An instance with the same name already exists!"
-msgstr "Uma instância com o mesmo nome já existe!"
-
-#: ../dialogs/ConnectionDialog.py:100
-msgid "Apply name modification to all continuations with the same name"
-msgstr ""
-"Aplicar modificação de nome para todas as continuações com o mesmo nome"
-
-#: ../plcopen/iec_std.csv:31
-msgid "Arc cosine"
-msgstr "Arco coseno"
-
-#: ../plcopen/iec_std.csv:30
-msgid "Arc sine"
-msgstr "Arco seno"
-
-#: ../plcopen/iec_std.csv:32
-msgid "Arc tangent"
-msgstr "Arco tangente"
-
-#: ../plcopen/iec_std.csv:33
-msgid "Arithmetic"
-msgstr "Aritmético"
-
-#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633
-#: ../controls/VariablePanel.py:858
-msgid "Array"
-msgstr "Array"
-
-#: ../plcopen/iec_std.csv:39
-msgid "Assignment"
-msgstr "Atribuição"
-
-#: ../dialogs/FBDVariableDialog.py:222
-msgid "At least a variable or an expression must be selected!"
-msgstr "Pelo menos uma variável ou expressão tem de ser seleccionada!"
-
-#: ../controls/ProjectPropertiesPanel.py:100
-msgid "Author"
-msgstr "Autor"
-
-#: ../controls/ProjectPropertiesPanel.py:97
-msgid "Author Name (optional):"
-msgstr "Nome de Autor (opcional)"
-
-#: ../dialogs/FindInPouDialog.py:77
-msgid "Backward"
-msgstr "Para trás"
-
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Mau nome de domínio (circular) em"
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Mau nome de domínio em"
-
-#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630
-#, python-format
-msgid "Bad location size : %s"
-msgstr "Mau tamanho de posição %s"
-
-#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175
-#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297
-msgid "Base Type:"
-msgstr "Tipo base"
-
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
-msgid "Base Types"
-msgstr "Tipos base"
-
-#: ../BeremizIDE.py:455
-msgid "Beremiz"
-msgstr "Beremiz"
-
-#: ../plcopen/iec_std.csv:70
-msgid "Binary selection (1 of 2)"
-msgstr "Selecção binária (1 de 2)"
-
-#: ../plcopen/iec_std.csv:62
-msgid "Bit-shift"
-msgstr "Bit-shift"
-
-#: ../plcopen/iec_std.csv:66
-msgid "Bitwise"
-msgstr "Bitwise"
-
-#: ../plcopen/iec_std.csv:66
-msgid "Bitwise AND"
-msgstr "Bitwise AND"
-
-#: ../plcopen/iec_std.csv:67
-msgid "Bitwise OR"
-msgstr "Bitwise OR"
-
-#: ../plcopen/iec_std.csv:68
-msgid "Bitwise XOR"
-msgstr "Bitwise XOR"
-
-#: ../plcopen/iec_std.csv:69
-msgid "Bitwise inverting"
-msgstr "Bitwise inverting"
-
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
-msgid "Block"
-msgstr "Bloco"
-
-#: ../dialogs/FBDBlockDialog.py:60
-msgid "Block Properties"
-msgstr "Propriedades do bloco"
-
-#: ../editors/TextViewer.py:262
-msgid "Block name"
-msgstr "Nome do bloco "
-
-#: ../editors/Viewer.py:550
-msgid "Bottom"
-msgstr "Fundo"
-
-#: ../ProjectController.py:1363
-msgid "Broken"
-msgstr "Avariado"
-
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
-#, python-format
-msgid "Browse %s values library"
-msgstr "Explore a biblioteca de valores %s"
-
-#: ../dialogs/BrowseLocationsDialog.py:65
-msgid "Browse Locations"
-msgstr "Navegar nos endereços"
-
-#: ../ProjectController.py:1832
-msgid "Build"
-msgstr "Compilar"
-
-#: ../ProjectController.py:1297
-msgid "Build directory already clean\n"
-msgstr "Directório de compilação já está limpo\n"
-
-#: ../ProjectController.py:1833
-msgid "Build project into build folder"
-msgstr "Compilar projecto no ficheiro de compilação"
-
-#: ../ProjectController.py:1080
-msgid "C Build crashed !\n"
-msgstr "A compilação C quebrou !\n"
-
-#: ../ProjectController.py:1077
-msgid "C Build failed.\n"
-msgstr "A compilação C falhou.\n"
-
-#: ../c_ext/CFileEditor.py:63
-msgid "C code"
-msgstr "Codigo C"
-
-#: ../ProjectController.py:1155
-msgid "C code generated successfully.\n"
-msgstr "Codigo C gerado com sucesso.\n"
-
-#: ../targets/toolchain_makefile.py:122
-msgid "C compilation failed.\n"
-msgstr "A compilação C falhou.\n"
-
-#: ../targets/toolchain_gcc.py:192
-#, python-format
-msgid "C compilation of %s failed.\n"
-msgstr "A compilação C de %s falhou.\n"
-
-#: ../features.py:32
-msgid "C extension"
-msgstr "Extensão C"
-
-#: ../dialogs/AboutDialog.py:71
-msgid "C&redits"
-msgstr "C&redits"
-
-#: ../canfestival/NetworkEditor.py:52
-msgid "CANOpen network"
-msgstr "Rede CANOpen"
-
-#: ../canfestival/SlaveEditor.py:44
-msgid "CANOpen slave"
-msgstr "Escravo CANOpen"
-
-#: ../features.py:31
-msgid "CANopen support"
-msgstr "Suporte CANOpen"
-
-#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603
-#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643
-msgid "Can only generate execution order on FBD networks!"
-msgstr "Só pode gerar ordens de execução em redes FBD!"
-
-#: ../controls/VariablePanel.py:267
-msgid "Can only give a location to local or global variables"
-msgstr "Só pode gerar um endereço para variáveis locais ou globais"
-
-#: ../PLCOpenEditor.py:344
-#, python-format
-msgid "Can't generate program to file %s!"
-msgstr "Não é possivel gerar um programa no ficheiro %s !"
-
-#: ../controls/VariablePanel.py:265
-msgid "Can't give a location to a function block instance"
-msgstr ""
-"Não é possivel gerar um endereço para uma instância de bloco de função"
-
-#: ../PLCOpenEditor.py:389
-#, python-format
-msgid "Can't save project to file %s!"
-msgstr "Não é possivel salvar o projecto no ficheiro %s !"
-
-#: ../controls/VariablePanel.py:313
-msgid "Can't set an initial value to a function block instance"
-msgstr ""
-"Não é possivel atribuir um valor inicial a uma instância de bloco de função"
-
-#: ../ConfigTreeNode.py:529
-#, python-brace-format
-msgid "Cannot create child {a1} of type {a2} "
-msgstr "Não é possivel criar um elemento filho {a1} do tipo {a2} "
-
-#: ../ConfigTreeNode.py:454
-#, python-format
-msgid "Cannot find lower free IEC channel than %d\n"
-msgstr "Nâo é possivel encontrar um canal IEC livre inferior a %d\n"
-
-#: ../connectors/PYRO/__init__.py:131
-msgid "Cannot get PLC status - connection failed.\n"
-msgstr "Não é possivel obter o estado do PLC - falha de conexão.\n"
-
-#: ../ProjectController.py:943
-msgid "Cannot open/parse VARIABLES.csv!\n"
-msgstr "Não é possível abrir / analisar VARIÁVEIS.csv!\n"
-
-#: ../canfestival/config_utils.py:374
-#, python-brace-format
-msgid ""
-"Cannot set bit offset for non bool '{a1}' variable "
-"(ID:{a2},Idx:{a3},sIdx:{a4}))"
-msgstr ""
-"Não é possível defenir o bit de offset para uma variavel não bool '{a1}' "
-"(ID:{a2},Idx:{a3},sIdx:{a4}))"
-
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
-msgid "Case sensitive"
-msgstr "Maiúsculas e minúsculas"
-
-#: ../editors/Viewer.py:545
-msgid "Center"
-msgstr "Centrar"
-
-#: ../Beremiz_service.py:268
-msgid "Change IP of interface to bind"
-msgstr "Alterar IP da interface a ligar"
-
-#: ../Beremiz_service.py:267
-msgid "Change Name"
-msgstr "Alterar nome"
-
-#: ../IDEFrame.py:1946
-msgid "Change POU Type To"
-msgstr "Alterar tipo de Pou para"
-
-#: ../Beremiz_service.py:269
-msgid "Change Port Number"
-msgstr "Alterar numero de porto"
-
-#: ../Beremiz_service.py:270
-msgid "Change working directory"
-msgstr "Alterar directoria de trabalho"
-
-#: ../plcopen/iec_std.csv:81
-msgid "Character string"
-msgstr "Cadeia de caracteres"
-
-#: ../svgui/svgui.py:128
-msgid "Choose a SVG file"
-msgstr "Escolha um ficheiro SVG"
-
-#: ../ProjectController.py:542
-msgid "Choose a directory to save project"
-msgstr "Escolha um directório para salvar projecto"
-
-#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302
-#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383
-msgid "Choose a file"
-msgstr "Escolha um ficheiro"
-
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
-msgid "Choose a project"
-msgstr "Escolha um projecto"
-
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
-#, python-format
-msgid "Choose a value for %s:"
-msgstr "Escalha um valor para %s :"
-
-#: ../Beremiz_service.py:325
-msgid "Choose a working directory "
-msgstr "Escolha um directório de trabalho"
-
-#: ../ProjectController.py:449
-msgid "Chosen folder doesn't contain a program. It's not a valid project!"
-msgstr "A pasta escolhida não contém um programa. Não é um projecto válido!"
-
-#: ../ProjectController.py:416
-msgid "Chosen folder isn't empty. You can't use it for a new project!"
-msgstr ""
-"A pasta escolhida não está vazia. Não pode ser usada para um novo projecto!"
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
-msgid "Class"
-msgstr "Classe"
-
-#: ../controls/VariablePanel.py:441
-msgid "Class Filter:"
-msgstr "Filtro de Classe:"
-
-#: ../dialogs/FBDVariableDialog.py:70
-msgid "Class:"
-msgstr "Classe:"
-
-#: ../ProjectController.py:1836
-msgid "Clean"
-msgstr "Limpar"
-
-#: ../controls/LogViewer.py:318
-msgid "Clean log messages"
-msgstr "Limpar menssagens log"
-
-#: ../ProjectController.py:1838
-msgid "Clean project build folder"
-msgstr "Limpar a pasta de compilação do projeto"
-
-#: ../ProjectController.py:1294
-msgid "Cleaning the build directory\n"
-msgstr "Limpar o directório de compilação\n"
-
-#: ../IDEFrame.py:435
-msgid "Clear Errors"
-msgstr "limpar erros"
-
-#: ../editors/Viewer.py:641
-msgid "Clear Execution Order"
-msgstr "limpar ordem de execução"
-
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
-msgid "Close"
-msgstr "Fechar"
-
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
-msgid "Close Application"
-msgstr "Fechar aplicação"
-
-#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110
-#: ../IDEFrame.py:1013
-msgid "Close Project"
-msgstr "Fechar projecto"
-
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
-msgid "Close Tab"
-msgstr "Fechar aba"
-
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
-msgid "Coil"
-msgstr "Bobine"
-
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
-msgid "Comment"
-msgstr "Comentário"
-
-#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161
-#: ../PLCOpenEditor.py:164
-msgid "Community support"
-msgstr "Suporte da comunidade"
-
-#: ../dialogs/ProjectDialog.py:60
-msgid "Company Name"
-msgstr "Nome da Empresa"
-
-#: ../controls/ProjectPropertiesPanel.py:95
-msgid "Company Name (required):"
-msgstr "Nome da Empresa (obrigatório):"
-
-#: ../controls/ProjectPropertiesPanel.py:96
-msgid "Company URL (optional):"
-msgstr "URL da Empresa (opcional):"
-
-#: ../plcopen/iec_std.csv:75
-msgid "Comparison"
-msgstr "Comparação"
-
-#: ../ProjectController.py:734
-msgid "Compiling IEC Program into C code...\n"
-msgstr "A compilar programa ICE para codigo C...\n"
-
-#: ../plcopen/iec_std.csv:85
-msgid "Concatenation"
-msgstr "Concatenação"
-
-#: ../editors/ConfTreeNodeEditor.py:230
-msgid "Config"
-msgstr "Config"
-
-#: ../editors/ProjectNodeEditor.py:36
-msgid "Config variables"
-msgstr "Config variáveis"
-
-#: ../dialogs/SearchInProjectDialog.py:40
-msgid "Configuration"
-msgstr "Configuração"
-
-#: ../PLCControler.py:99
-msgid "Configurations"
-msgstr "Configurações"
-
-#: ../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
-msgid "Confirm or change variable name"
-msgstr "Confirme ou altere o nome da variável"
-
-#: ../ProjectController.py:1851
-msgid "Connect"
-msgstr "Conectar"
-
-#: ../ProjectController.py:1852
-msgid "Connect to the target PLC"
-msgstr "Conectar ao PLC alvo"
-
-#: ../ProjectController.py:1354
-#, python-format
-msgid "Connected to URI: %s"
-msgstr "Conectar ao URI: %s"
-
-#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586
-#: ../editors/Viewer.py:2408
-msgid "Connection"
-msgstr "Conexão"
-
-#: ../dialogs/ConnectionDialog.py:53
-msgid "Connection Properties"
-msgstr "Propriedades da conexão"
-
-#: ../ProjectController.py:1709
-msgid "Connection canceled!\n"
-msgstr "Conexão cancelada!\n"
-
-#: ../ProjectController.py:1734
-#, python-format
-msgid "Connection failed to %s!\n"
-msgstr "Falha na conexão a %s !\n"
-
-#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111
-msgid "Connection lost!\n"
-msgstr "Conexão perdida!\n"
-
-#: ../connectors/PYRO/__init__.py:102
-#, python-format
-msgid "Connection to '%s' failed.\n"
-msgstr "A conexão com %s falhou.\n"
-
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
-msgid "Connector"
-msgstr "Conector"
-
-#: ../dialogs/SFCStepDialog.py:66
-msgid "Connectors:"
-msgstr "Conectores:"
-
-#: ../BeremizIDE.py:350
-msgid "Console"
-msgstr "Consola"
-
-#: ../controls/VariablePanel.py:60
-msgid "Constant"
-msgstr "Constante"
-
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
-msgid "Contact"
-msgstr "Contacto"
-
-#: ../controls/ProjectPropertiesPanel.py:198
-msgid "Content Description (optional):"
-msgstr "descrição de conteúdo (opcional):"
-
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
-msgid "Continuation"
-msgstr "Continuação"
-
-#: ../plcopen/iec_std.csv:18
-msgid "Conversion from BCD"
-msgstr "Conversão de BCD"
-
-#: ../plcopen/iec_std.csv:19
-msgid "Conversion to BCD"
-msgstr "Conversão para BCD"
-
-#: ../plcopen/iec_std.csv:21
-msgid "Conversion to date"
-msgstr "Conversão para data"
-
-#: ../plcopen/iec_std.csv:20
-msgid "Conversion to time-of-day"
-msgstr "Conversão para hora-do-dia"
-
-#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370
-#: ../IDEFrame.py:425
-msgid "Copy"
-msgstr "Copiar"
-
-#: ../IDEFrame.py:1933
-msgid "Copy POU"
-msgstr "Copiar POU"
-
-#: ../editors/FileManagementPanel.py:65
-msgid "Copy file from left folder to right"
-msgstr "Copiar o arquivo da pasta esquerda para a direita"
-
-#: ../editors/FileManagementPanel.py:64
-msgid "Copy file from right folder to left"
-msgstr "Copiar o arquivo da pasta direita para a esquerda"
-
-#: ../plcopen/iec_std.csv:28
-msgid "Cosine"
-msgstr "Coseno"
-
-#: ../ConfigTreeNode.py:656
-#, python-brace-format
-msgid ""
-"Could not add child \"{a1}\", type {a2} :\n"
-"{a3}\n"
-msgstr ""
-"Não foi possível adicionar elemento filho \"{a1}\", tipo {a2}:\n"
-" {a3} \n"
-
-#: ../py_ext/PythonFileCTNMixin.py:78
-#, python-format
-msgid "Couldn't import old %s file."
-msgstr "Não foi possivél importar o ficheiro antigo %s."
-
-#: ../ConfigTreeNode.py:626
-#, python-brace-format
-msgid ""
-"Couldn't load confnode base parameters {a1} :\n"
-" {a2}"
-msgstr ""
-"Não foi possível carregar parâmetros base de confnode {a1} : \n"
-" {a2}"
-
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
-#, python-brace-format
-msgid ""
-"Couldn't load confnode parameters {a1} :\n"
-" {a2}"
-msgstr ""
-"Não foi possível carregar parâmetros de confnode {a1} : \n"
-" {a2}"
-
-#: ../PLCControler.py:948
-msgid "Couldn't paste non-POU object."
-msgstr "Não foi possível colar o objeto não-POU."
-
-#: ../ProjectController.py:1651
-msgid "Couldn't start PLC !\n"
-msgstr "Não foi possível iniciar o PLC!\n"
-
-#: ../ProjectController.py:1659
-msgid "Couldn't stop PLC !\n"
-msgstr "Não foi possível parar o PLC!\n"
-
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Não foi possível parar o depurador.\n"
-
-#: ../svgui/svgui.py:49
-msgid "Create HMI"
-msgstr "Criar HMI"
-
-#: ../dialogs/PouDialog.py:46
-msgid "Create a new POU"
-msgstr "Criar uma nova POU"
-
-#: ../dialogs/PouActionDialog.py:38
-msgid "Create a new action"
-msgstr "Criar uma nova acção"
-
-#: ../IDEFrame.py:159
-msgid "Create a new action block"
-msgstr "Criar um novo bloco de ação"
-
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
-msgid "Create a new block"
-msgstr "Criar um novo bloco"
-
-#: ../IDEFrame.py:132
-msgid "Create a new branch"
-msgstr "Criar uma nova ramificação"
-
-#: ../IDEFrame.py:126
-msgid "Create a new coil"
-msgstr "Criar uma nova bobine"
-
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
-msgid "Create a new comment"
-msgstr "Criar um novo comentário"
-
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
-msgid "Create a new connection"
-msgstr "Criar uma nova conexão"
-
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
-msgid "Create a new contact"
-msgstr "Criar um novo contacto"
-
-#: ../IDEFrame.py:162
-msgid "Create a new divergence"
-msgstr "Criar uma nova divergência"
-
-#: ../dialogs/SFCDivergenceDialog.py:53
-msgid "Create a new divergence or convergence"
-msgstr "Criar uma nova divergência ou convergência"
-
-#: ../IDEFrame.py:150
-msgid "Create a new initial step"
-msgstr "Criar um novo passo inicial"
-
-#: ../IDEFrame.py:165
-msgid "Create a new jump"
-msgstr "Criar um novo salto"
-
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
-msgid "Create a new power rail"
-msgstr "Criar um novo trilho de energia"
-
-#: ../IDEFrame.py:123
-msgid "Create a new rung"
-msgstr "Criar uma nova rung"
-
-#: ../IDEFrame.py:153
-msgid "Create a new step"
-msgstr "Criar um novo passo"
-
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
-msgid "Create a new transition"
-msgstr "Criar uma nova transição"
-
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
-msgid "Create a new variable"
-msgstr "Criar uma nova variável"
-
-#: ../dialogs/AboutDialog.py:113
-msgid "Credits"
-msgstr "Creditos"
-
-#: ../Beremiz_service.py:434
-msgid "Current working directory :"
-msgstr "Directoria de trabalho actual"
-
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
-msgid "Cut"
-msgstr "Cortar"
-
-#: ../editors/ResourceEditor.py:72
-msgid "Cyclic"
-msgstr "Cíclico"
-
-#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
-#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
-#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
-#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
-#: ../plcopen/iec_std.csv:60
-msgid "DEPRECATED"
-msgstr "Descontinuada"
-
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
-msgid "DS-301 Profile"
-msgstr "Perfile DS-301"
-
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
-msgid "DS-302 Profile"
-msgstr "Perfile DS-302"
-
-#: ../dialogs/SearchInProjectDialog.py:36
-msgid "Data Type"
-msgstr "Tipo de dado"
-
-#: ../PLCControler.py:98
-msgid "Data Types"
-msgstr "Tipo de dados"
-
-#: ../plcopen/iec_std.csv:16
-msgid "Data type conversion"
-msgstr "Converção de tipo de dados"
-
-#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
-msgid "Date addition"
-msgstr "Adição de data"
-
-#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
-#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
-msgid "Date and time subtraction"
-msgstr "Subtração de data e hora"
-
-#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
-msgid "Date subtraction"
-msgstr "Subtração de data"
-
-#: ../dialogs/DurationEditorDialog.py:44
-msgid "Days:"
-msgstr "Dias:"
-
-#: ../ProjectController.py:1756
-msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
-msgstr ""
-"Depuração não corresponde ao PLC - parar / transferir / iniciar para "
-"reativar\n"
-
-#: ../controls/PouInstanceVariablesPanel.py:134
-msgid "Debug instance"
-msgstr "Depurar a instância"
-
-#: ../editors/Viewer.py:448
-#, python-format
-msgid "Debug: %s"
-msgstr "depuração %s"
-
-#: ../ProjectController.py:1412
-#, python-format
-msgid "Debug: Unknown variable '%s'\n"
-msgstr "Depuração: Variável desconhecida '%s '\n"
-
-#: ../ProjectController.py:1410
-#, python-format
-msgid "Debug: Unsupported type to debug '%s'\n"
-msgstr "Depuração: Tipo não suportado para depurar ' %s '\n"
-
-#: ../IDEFrame.py:639
-msgid "Debugger"
-msgstr "Depurador"
-
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Depurador desabilitado\n"
-
-#: ../ProjectController.py:1753
-msgid "Debugger ready\n"
-msgstr "Depurador pronto\n"
-
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Depurador parado\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
-msgid "Delete"
-msgstr "Eliminar"
-
-#: ../editors/Viewer.py:573
-msgid "Delete Divergence Branch"
-msgstr "Eliminar ramificação de divergência"
-
-#: ../editors/FileManagementPanel.py:153
-msgid "Delete File"
-msgstr "Eliminar ficheiro"
-
-#: ../editors/Viewer.py:560
-msgid "Delete Wire Segment"
-msgstr "Eliminar seguemento de fio"
-
-#: ../controls/CustomEditableListBox.py:41
-msgid "Delete item"
-msgstr "Eliminar item"
-
-#: ../plcopen/iec_std.csv:88
-msgid "Deletion (within)"
-msgstr "Eliminação (dentro)"
-
-#: ../editors/DataTypeEditor.py:153
-msgid "Derivation Type:"
-msgstr "Tipo de Derivação:"
-
-#: ../editors/CodeFileEditor.py:739
-msgid "Description"
-msgstr "Descrição"
-
-#: ../controls/VariablePanel.py:432
-msgid "Description:"
-msgstr "Descrição:"
-
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
-msgid "Dimensions:"
-msgstr "Dimensões:"
-
-#: ../dialogs/FindInPouDialog.py:66
-msgid "Direction"
-msgstr "Direcção"
-
-#: ../dialogs/BrowseLocationsDialog.py:91
-msgid "Direction:"
-msgstr "Direcção:"
-
-#: ../editors/DataTypeEditor.py:54
-msgid "Directly"
-msgstr "Diretamente"
-
-#: ../ProjectController.py:1860
-msgid "Disconnect"
-msgstr ""
-
-#: ../ProjectController.py:1862
-msgid "Disconnect from PLC"
-msgstr ""
-
-#: ../ProjectController.py:1364
-msgid "Disconnected"
-msgstr ""
-
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
-msgid "Divergence"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:36
-msgid "Division"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:152
-#, python-format
-msgid "Do you really want to delete the file '%s'?"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
-msgid "Documentation"
-msgstr ""
-
-#: ../PLCOpenEditor.py:338
-msgid "Done"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
-msgid "Duration"
-msgstr ""
-
-#: ../canfestival/canfestival.py:165
-msgid "EDS files (*.eds)|*.eds|All files|*.*"
-msgstr ""
-
-#: ../editors/Viewer.py:629
-msgid "Edit Block"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:56
-msgid "Edit Coil Values"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:54
-msgid "Edit Contact Values"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:59
-msgid "Edit Duration"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:51
-msgid "Edit Step"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:38
-msgid "Edit a WxWidgets GUI with WXGlade"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:121
-msgid "Edit action block properties"
-msgstr ""
-
-#: ../dialogs/ArrayTypeDialog.py:44
-msgid "Edit array type properties"
-msgstr ""
-
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
-msgid "Edit comment"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:66
-msgid "Edit file"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:39
-msgid "Edit item"
-msgstr ""
-
-#: ../editors/Viewer.py:3014
-msgid "Edit jump target"
-msgstr ""
-
-#: ../ProjectController.py:1874
-msgid "Edit raw IEC code added to code generated by PLCGenerator"
-msgstr ""
-
-#: ../editors/SFCViewer.py:799
-msgid "Edit step name"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:52
-msgid "Edit transition"
-msgstr ""
-
-#: ../IDEFrame.py:611
-msgid "Editor ToolBar"
-msgstr ""
-
-#: ../ProjectController.py:1257
-msgid "Editor selection"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:348
-msgid "Elements :"
-msgstr ""
-
-#: ../ProjectController.py:1362
-msgid "Empty"
-msgstr ""
-
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr ""
-
-#: ../Beremiz_service.py:333
-msgid "Enter a name "
-msgstr ""
-
-#: ../Beremiz_service.py:318
-msgid "Enter a port number "
-msgstr ""
-
-#: ../Beremiz_service.py:309
-msgid "Enter the IP of the interface to bind"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
-msgid "Enumerated"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:77
-msgid "Equal to"
-msgstr ""
-
-#: ../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
-msgid "Error"
-msgstr ""
-
-#: ../ProjectController.py:789
-msgid ""
-"Error : At least one configuration and one resource must be declared in PLC "
-"!\n"
-msgstr ""
-
-#: ../ProjectController.py:781
-#, python-format
-msgid "Error : IEC to C compiler returned %d\n"
-msgstr ""
-
-#: ../ProjectController.py:712
-#, python-format
-msgid ""
-"Error in ST/IL/SFC code generator :\n"
-"%s\n"
-msgstr ""
-
-#: ../ConfigTreeNode.py:216
-#, python-format
-msgid "Error while saving \"%s\"\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:170
-msgid "Error: Export slave failed\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:371
-msgid "Error: No Master generated\n"
-msgstr ""
-
-#: ../canfestival/canfestival.py:366
-msgid "Error: No PLC built\n"
-msgstr ""
-
-#: ../ProjectController.py:1728
-#, python-format
-msgid "Exception while connecting %s!\n"
-msgstr ""
-
-#: ../dialogs/FBDBlockDialog.py:120
-msgid "Execution Control:"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
-msgid "Execution Order:"
-msgstr ""
-
-#: ../features.py:35
-msgid "Experimental web based HMI"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:38
-msgid "Exponent"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:26
-msgid "Exponentiation"
-msgstr ""
-
-#: ../canfestival/canfestival.py:176
-msgid "Export CanOpen slave to EDS file"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
-msgid "Export graph values to clipboard"
-msgstr ""
-
-#: ../canfestival/canfestival.py:175
-msgid "Export slave"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:90
-msgid "Expression:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
-msgid "External"
-msgstr ""
-
-#: ../ProjectController.py:802
-msgid "Extracting Located Variables...\n"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
-msgid "FBD"
-msgstr ""
-
-#: ../ProjectController.py:1791
-msgid "Failed : Must build before transfer.\n"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
-msgid "Falling Edge"
-msgstr ""
-
-#: ../ProjectController.py:1070
-msgid "Fatal : cannot get builder.\n"
-msgstr ""
-
-#: ../Beremiz.py:156
-#, python-format
-msgid "Fetching %s"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:164
-#, python-format
-msgid "Field %s hasn't a valid value!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:166
-#, python-format
-msgid "Fields %s haven't a valid value!"
-msgstr ""
-
-#: ../controls/FolderTree.py:216
-#, python-format
-msgid "File '%s' already exists!"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37
-#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375
-msgid "Find"
-msgstr ""
-
-#: ../IDEFrame.py:377
-msgid "Find Next"
-msgstr ""
-
-#: ../IDEFrame.py:379
-msgid "Find Previous"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:90
-msgid "Find position"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:55
-msgid "Find:"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr ""
-
-#: ../editors/Viewer.py:1600
-msgid "Force value"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:162
-msgid "Forcing Variable Value"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97
-#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95
-#: ../dialogs/PouDialog.py:117
-#, python-format
-msgid "Form isn't complete. %s must be filled!"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236
-#: ../dialogs/ConnectionDialog.py:163
-msgid "Form isn't complete. Name must be filled!"
-msgstr ""
-
-#: ../dialogs/FBDBlockDialog.py:232
-msgid "Form isn't complete. Valid block type must be selected!"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:72
-msgid "Forward"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
-msgid "Function"
-msgstr ""
-
-#: ../IDEFrame.py:349
-msgid "Function &Block"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
-msgid "Function Block"
-msgstr ""
-
-#: ../controls/VariablePanel.py:854
-msgid "Function Block Types"
-msgstr ""
-
-#: ../PLCControler.py:97
-msgid "Function Blocks"
-msgstr ""
-
-#: ../editors/Viewer.py:249
-msgid "Function Blocks can't be used in Functions!"
-msgstr ""
-
-#: ../PLCControler.py:2343
-#, python-format
-msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
-msgstr ""
-
-#: ../PLCControler.py:97
-msgid "Functions"
-msgstr ""
-
-#: ../PLCOpenEditor.py:117
-msgid "Generate Program"
-msgstr ""
-
-#: ../ProjectController.py:703
-msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:73
-msgid "Global"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
-msgid "Go to current value"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:174
-msgid "Graphics"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:75
-msgid "Greater than"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:76
-msgid "Greater than or equal to"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:135
-msgid "Grid Resolution:"
-msgstr ""
-
-#: ../runtime/NevowServer.py:182
-msgid "HTTP interface port :"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:121
-msgid "Height:"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:85
-msgid "Home Directory:"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:151
-msgid "Horizontal:"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:45
-msgid "Hours:"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
-msgid "IL"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:94
-msgid "IP"
-msgstr ""
-
-#: ../Beremiz_service.py:310 ../Beremiz_service.py:311
-msgid "IP is not valid!"
-msgstr ""
-
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
-msgid "Import SVG"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629
-#: ../controls/VariablePanel.py:71
-msgid "InOut"
-msgstr ""
-
-#: ../editors/Viewer.py:431
-msgid "Inactive"
-msgstr ""
-
-#: ../controls/VariablePanel.py:276
-#, python-brace-format
-msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../controls/VariablePanel.py:282
-#, python-format
-msgid "Incompatible size of data between \"%s\" and \"BOOL\""
-msgstr ""
-
-#: ../controls/VariablePanel.py:286
-#, python-brace-format
-msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
-msgid "Indicator"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:739
-msgid "Initial"
-msgstr ""
-
-#: ../editors/Viewer.py:611
-msgid "Initial Step"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
-msgid "Initial Value"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216
-#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310
-msgid "Initial Value:"
-msgstr ""
-
-#: ../svgui/svgui.py:48
-msgid "Inkscape"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43
-msgid "Inline"
-msgstr ""
-
-#: ../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
-msgid "Input"
-msgstr ""
-
-#: ../dialogs/FBDBlockDialog.py:96
-msgid "Inputs:"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:87
-msgid "Insertion (into)"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1696
-#, python-format
-msgid "Instance with id %d doesn't exist!"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:264
-msgid "Instances:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:70
-msgid "Interface"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:72
-msgid "Interrupt"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
-msgid "Interval"
-msgstr ""
-
-#: ../PLCControler.py:2331
-msgid "Invalid plcopen element(s)!!!"
-msgstr ""
-
-#: ../canfestival/config_utils.py:381
-#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr ""
-
-#: ../canfestival/config_utils.py:645
-#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166
-#, python-format
-msgid "Invalid value \"%s\" for debug variable"
-msgstr ""
-
-#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258
-#, python-format
-msgid "Invalid value \"%s\" for variable grid element"
-msgstr ""
-
-#: ../editors/Viewer.py:234 ../editors/Viewer.py:237
-#, python-format
-msgid "Invalid value \"%s\" for viewer block"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:195
-#, python-brace-format
-msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:121
-msgid ""
-"Invalid value!\n"
-"You must fill a numeric value."
-msgstr ""
-
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
-msgid "Jump"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
-msgid "LD"
-msgstr ""
-
-#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231
-#, python-format
-msgid "Ladder element with id %d is on more than one rung."
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84
-#: ../dialogs/PouDialog.py:105
-msgid "Language"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:187
-msgid "Language (optional):"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56
-#: ../dialogs/PouDialog.py:73
-msgid "Language:"
-msgstr ""
-
-#: ../ProjectController.py:1797
-msgid "Latest build already matches current target. Transfering anyway...\n"
-msgstr ""
-
-#: ../Beremiz_service.py:273
-msgid "Launch WX GUI inspector"
-msgstr ""
-
-#: ../Beremiz_service.py:272
-msgid "Launch a live Python shell"
-msgstr ""
-
-#: ../editors/Viewer.py:544
-msgid "Left"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:63
-msgid "Left PowerRail"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:81
-msgid "Length of string"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:78
-msgid "Less than"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:79
-msgid "Less than or equal to"
-msgstr ""
-
-#: ../IDEFrame.py:631
-msgid "Library"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:151
-msgid "License"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:73
-msgid "Limitation"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:202
-msgid "Linking :\n"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
-msgid "Local"
-msgstr ""
-
-#: ../canfestival/canfestival.py:348
-msgid "Local entries"
-msgstr ""
-
-#: ../ProjectController.py:1703
-msgid "Local service discovery failed!\n"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53
-msgid "Location"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:72
-msgid "Locations available:"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:25
-msgid "Logarithm to base 10"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:94
-#, python-format
-msgid "MDNS resolution failure for '%s'\n"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
-msgid "Map Variable"
-msgstr ""
-
-#: ../features.py:31
-msgid "Map located variables over CANopen"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:106
-msgid "Master"
-msgstr ""
-
-#: ../ConfigTreeNode.py:539
-#, python-brace-format
-msgid "Max count ({a1}) reached for this confnode of type {a2} "
-msgstr ""
-
-#: ../plcopen/iec_std.csv:71
-msgid "Maximum"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:239
-msgid "Maximum:"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290
-#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
-msgid "Memory"
-msgstr ""
-
-#: ../IDEFrame.py:599
-msgid "Menu ToolBar"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:49
-msgid "Microseconds:"
-msgstr ""
-
-#: ../editors/Viewer.py:549
-msgid "Middle"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:48
-msgid "Milliseconds:"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:72
-msgid "Minimum"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:226
-msgid "Minimum:"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:46
-msgid "Minutes:"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:211
-msgid "Miscellaneous"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:63
-msgid "Modifier:"
-msgstr ""
-
-#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230
-#, python-brace-format
-msgid ""
-"More than one connector found corresponding to \"{a1}\" continuation in "
-"\"{a2}\" POU"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:140
-msgid "Move action down"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:139
-msgid "Move action up"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:43
-msgid "Move down"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:355
-msgid "Move element down"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:354
-msgid "Move element up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:271
-msgid "Move instance down"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:270
-msgid "Move instance up"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:242
-msgid "Move task down"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:241
-msgid "Move task up"
-msgstr ""
-
-#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185
-msgid "Move the view"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:42
-msgid "Move up"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
-msgid "Move variable down"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
-msgid "Move variable up"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:74
-msgid "Multiplexer (select 1 of N)"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:34
-msgid "Multiplication"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:83
-msgid "My Computer:"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:92
-msgid "NAME"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
-msgid "Name"
-msgstr ""
-
-#: ../Beremiz_service.py:334
-msgid "Name must not be null!"
-msgstr ""
-
-#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86
-#: ../dialogs/ConnectionDialog.py:76
-msgid "Name:"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:24
-msgid "Natural logarithm"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
-msgid "Negated"
-msgstr ""
-
-#: ../Beremiz_service.py:580
-msgid "Nevow Web service failed. "
-msgstr ""
-
-#: ../Beremiz_service.py:556
-msgid "Nevow/Athena import failed :"
-msgstr ""
-
-#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104
-#: ../PLCOpenEditor.py:146
-msgid "New"
-msgstr ""
-
-#: ../controls/CustomEditableListBox.py:40
-msgid "New item"
-msgstr ""
-
-#: ../editors/Viewer.py:518
-msgid "No Modifier"
-msgstr ""
-
-#: ../ProjectController.py:1826
-msgid "No PLC to transfer (did build succeed ?)\n"
-msgstr ""
-
-#: ../PLCGenerator.py:1631
-#, python-format
-msgid "No body defined in \"%s\" POU"
-msgstr ""
-
-#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241
-#, python-brace-format
-msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
-msgstr ""
-
-#: ../PLCOpenEditor.py:357
-msgid ""
-"No documentation available.\n"
-"Coming soon."
-msgstr ""
-
-#: ../PLCGenerator.py:829
-#, python-format
-msgid "No informations found for \"%s\" block"
-msgstr ""
-
-#: ../PLCGenerator.py:1194
-#, python-brace-format
-msgid ""
-"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
-"broken"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:169
-msgid "No search results available."
-msgstr ""
-
-#: ../svgui/svgui.py:134
-#, python-format
-msgid "No such SVG file: %s\n"
-msgstr ""
-
-#: ../canfestival/config_utils.py:639
-#, python-brace-format
-msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
-msgstr ""
-
-#: ../canfestival/config_utils.py:362
-#, python-brace-format
-msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
-msgstr ""
-
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
-msgid "No valid value selected!"
-msgstr ""
-
-#: ../PLCGenerator.py:1629
-#, python-format
-msgid "No variable defined in \"%s\" POU"
-msgstr ""
-
-#: ../canfestival/config_utils.py:355
-#, python-brace-format
-msgid "Non existing node ID : {a1} (variable {a2})"
-msgstr ""
-
-#: ../controls/VariablePanel.py:64
-msgid "Non-Retain"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:75
-msgid "Normal"
-msgstr ""
-
-#: ../canfestival/config_utils.py:389
-#, python-brace-format
-msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:80
-msgid "Not equal to"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:89
-msgid "Number of sequences:"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:22
-msgid "Numerical"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:739
-msgid "OnChange"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:84
-msgid "Only Elements"
-msgstr ""
-
-#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106
-#: ../PLCOpenEditor.py:147
-msgid "Open"
-msgstr ""
-
-#: ../svgui/svgui.py:143
-msgid "Open Inkscape"
-msgstr ""
-
-#: ../version.py:77
-msgid ""
-"Open Source framework for automation, implemented IEC 61131 IDE with "
-"constantly growing set of extensions and flexible PLC runtime."
-msgstr ""
-
-#: ../ProjectController.py:1878
-msgid "Open a file explorer to manage project files"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:155
-msgid "Open wxGlade"
-msgstr ""
-
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
-msgid "Option"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
-msgid "Options"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:98
-msgid "Organization (optional):"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
-msgid "Other Profile"
-msgstr ""
-
-#: ../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
-msgid "Output"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
-msgid "PDO Receive"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
-msgid "PDO Transmit"
-msgstr ""
-
-#: ../targets/toolchain_gcc.py:167
-msgid "PLC :\n"
-msgstr ""
-
-#: ../BeremizIDE.py:355
-msgid "PLC Log"
-msgstr ""
-
-#: ../ProjectController.py:1054
-msgid "PLC code generation failed !\n"
-msgstr ""
-
-#: ../Beremiz_service.py:297
-msgid "PLC is empty or already started."
-msgstr ""
-
-#: ../Beremiz_service.py:304
-msgid "PLC is not started."
-msgstr ""
-
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
-#, python-brace-format
-msgid ""
-"PLC syntax error at line {a1}:\n"
-"{a2}"
-msgstr ""
-
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
-msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
-msgstr ""
-
-#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219
-msgid "PLCOpenEditor"
-msgstr ""
-
-#: ../PLCOpenEditor.py:365
-msgid ""
-"PLCOpenEditor is part of Beremiz project.\n"
-"\n"
-"Beremiz is an "
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:95
-msgid "PORT"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:101
-msgid "POU Name"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:58
-msgid "POU Name:"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:103
-msgid "POU Type"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:65
-msgid "POU Type:"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:45
-#, python-format
-msgid "PYRO connecting to URI : %s\n"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:61
-#, python-format
-msgid "PYRO using certificates in '%s' \n"
-msgstr ""
-
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
-msgid "Page Setup"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:111
-msgid "Page Size (optional):"
-msgstr ""
-
-#: ../IDEFrame.py:2613
-#, python-format
-msgid "Page: %d"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:124
-msgid "Parent instance"
-msgstr ""
-
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
-msgid "Paste"
-msgstr ""
-
-#: ../IDEFrame.py:1868
-msgid "Paste POU"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:56
-msgid "Pattern to search:"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:74
-msgid "Pin number:"
-msgstr ""
-
-#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014
-#: ../editors/SFCViewer.py:770
-msgid "Please choose a target"
-msgstr ""
-
-#: ../editors/TextViewer.py:262
-msgid "Please enter a block name"
-msgstr ""
-
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
-msgid "Please enter comment text"
-msgstr ""
-
-#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455
-#: ../editors/SFCViewer.py:799
-msgid "Please enter step name"
-msgstr ""
-
-#: ../Beremiz_service.py:196
-msgid "Please enter text"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:163
-#, python-format
-msgid "Please enter value for a \"%s\" variable:"
-msgstr ""
-
-#: ../Beremiz_service.py:319
-msgid "Port number must be 0 <= port <= 65535!"
-msgstr ""
-
-#: ../Beremiz_service.py:319
-msgid "Port number must be an integer!"
-msgstr ""
-
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
-msgid "Power Rail"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:51
-msgid "Power Rail Properties"
-msgstr ""
-
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
-msgid "Preview"
-msgstr ""
-
-#: ../dialogs/BlockPreviewDialog.py:57
-msgid "Preview:"
-msgstr ""
-
-#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124
-#: ../PLCOpenEditor.py:150
-msgid "Print"
-msgstr ""
-
-#: ../IDEFrame.py:1079
-msgid "Print preview"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
-msgid "Priority"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:90
-msgid "Priority:"
-msgstr ""
-
-#: ../runtime/PLCObject.py:369
-#, python-format
-msgid "Problem starting PLC : error %d"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:58
-msgid "Product Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:81
-msgid "Product Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:83
-msgid "Product Release (optional):"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:59
-msgid "Product Version"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:82
-msgid "Product Version (required):"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
-msgid "Program"
-msgstr ""
-
-#: ../PLCOpenEditor.py:347
-msgid "Program was successfully generated!"
-msgstr ""
-
-#: ../PLCControler.py:98
-msgid "Programs"
-msgstr ""
-
-#: ../editors/Viewer.py:243
-msgid "Programs can't be used by other POUs!"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
-msgid "Project"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:173
-#, python-format
-msgid "Project '%s':"
-msgstr ""
-
-#: ../ProjectController.py:1877
-msgid "Project Files"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:57
-msgid "Project Name"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:79
-msgid "Project Name (required):"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:80
-msgid "Project Version (optional):"
-msgstr ""
-
-#: ../PLCControler.py:3164
-msgid ""
-"Project file syntax error:\n"
-"\n"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
-msgid "Project properties"
-msgstr ""
-
-#: ../ConfigTreeNode.py:566
-#, python-brace-format
-msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
-msgstr ""
-
-#: ../dialogs/ConnectionDialog.py:98
-msgid "Propagate Name"
-msgstr ""
-
-#: ../PLCControler.py:99
-msgid "Properties"
-msgstr ""
-
-#: ../Beremiz_service.py:442
-msgid "Publishing service on local network"
-msgstr ""
-
-#: ../connectors/PYRO/__init__.py:118
-#, python-format
-msgid "Pyro exception: %s\n"
-msgstr ""
-
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:428
-msgid "Pyro port :"
-msgstr ""
-
-#: ../py_ext/PythonEditor.py:81
-msgid "Python code"
-msgstr ""
-
-#: ../features.py:33
-msgid "Python file"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
-msgid "Qualifier"
-msgstr ""
-
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
-msgid "Quit"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
-msgid "Range:"
-msgstr ""
-
-#: ../ProjectController.py:1873
-msgid "Raw IEC code"
-msgstr ""
-
-#: ../BeremizIDE.py:1047
-#, python-format
-msgid "Really delete node '%s'?"
-msgstr ""
-
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
-msgid "Redo"
-msgstr ""
-
-#: ../dialogs/SFCTransitionDialog.py:75
-msgid "Reference"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432
-msgid "Refresh"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:66
-msgid "Regular expression"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:96
-msgid "Regular expressions"
-msgstr ""
-
-#: ../editors/Viewer.py:1603
-msgid "Release value"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:37
-msgid "Remainder (modulo)"
-msgstr ""
-
-#: ../BeremizIDE.py:1048
-#, python-format
-msgid "Remove %s node"
-msgstr ""
-
-#: ../IDEFrame.py:2419
-msgid "Remove Datatype"
-msgstr ""
-
-#: ../IDEFrame.py:2424
-msgid "Remove Pou"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:138
-msgid "Remove action"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:353
-msgid "Remove element"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:63
-msgid "Remove file from left folder"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:269
-msgid "Remove instance"
-msgstr ""
-
-#: ../canfestival/NetworkEditor.py:104
-msgid "Remove slave"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:240
-msgid "Remove task"
-msgstr ""
-
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
-msgid "Remove variable"
-msgstr ""
-
-#: ../IDEFrame.py:1948
-msgid "Rename"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:181
-msgid "Replace File"
-msgstr ""
-
-#: ../editors/Viewer.py:561
-msgid "Replace Wire by connections"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:89
-msgid "Replacement (within)"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:76
-msgid "Reset"
-msgstr ""
-
-#: ../editors/Viewer.py:642
-msgid "Reset Execution Order"
-msgstr ""
-
-#: ../IDEFrame.py:451
-msgid "Reset Perspective"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:105
-msgid "Reset search result"
-msgstr ""
-
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
-msgid "Resources"
-msgstr ""
-
-#: ../controls/VariablePanel.py:62
-msgid "Retain"
-msgstr ""
-
-#: ../controls/VariablePanel.py:424
-msgid "Return Type:"
-msgstr ""
-
-#: ../editors/Viewer.py:546
-msgid "Right"
-msgstr ""
-
-#: ../dialogs/LDPowerRailDialog.py:64
-msgid "Right PowerRail"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
-msgid "Rising Edge"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:65
-msgid "Rotate left"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:64
-msgid "Rotate right"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:17
-msgid "Rounding up/down"
-msgstr ""
-
-#: ../ProjectController.py:1841
-msgid "Run"
-msgstr ""
-
-#: ../ProjectController.py:1099
-msgid "Runtime IO extensions C code generation failed !\n"
-msgstr ""
-
-#: ../ProjectController.py:1108
-msgid "Runtime library extensions C code generation failed !\n"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
-msgid "SDO Client"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
-msgid "SDO Server"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
-msgid "SFC"
-msgstr ""
-
-#: ../PLCGenerator.py:1392
-#, python-brace-format
-msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
-msgstr ""
-
-#: ../PLCGenerator.py:773
-#, python-format
-msgid "SFC transition in POU \"%s\" must be connected."
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
-msgid "ST"
-msgstr ""
-
-#: ../PLCOpenEditor.py:334
-msgid "ST files (*.st)|*.st|All files|*.*"
-msgstr ""
-
-#: ../svgui/svgui.py:128
-msgid "SVG files (*.svg)|*.svg|All files|*.*"
-msgstr ""
-
-#: ../features.py:35
-msgid "SVGUI"
-msgstr ""
-
-#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113
-#: ../PLCOpenEditor.py:148
-msgid "Save"
-msgstr ""
-
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
-msgid "Save As..."
-msgstr ""
-
-#: ../BeremizIDE.py:224
-msgid "Save as"
-msgstr ""
-
-#: ../ProjectController.py:511
-msgid "Save path is the same as path of a project! \n"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:69
-msgid "Scope"
-msgstr ""
-
-#: ../IDEFrame.py:623
-msgid "Search"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382
-#: ../IDEFrame.py:428
-msgid "Search in Project"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:47
-msgid "Seconds:"
-msgstr ""
-
-#: ../IDEFrame.py:388
-msgid "Select All"
-msgstr ""
-
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
-msgid "Select a variable class:"
-msgstr ""
-
-#: ../ProjectController.py:1257
-msgid "Select an editor:"
-msgstr ""
-
-#: ../controls/PouInstanceVariablesPanel.py:281
-msgid "Select an instance"
-msgstr ""
-
-#: ../IDEFrame.py:607
-msgid "Select an object"
-msgstr ""
-
-#: ../ProjectController.py:518
-msgid "Selected directory already contains another project. Overwrite? \n"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:70
-msgid "Selection"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:65
-msgid "Selection Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:64
-msgid "Selection Divergence"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:82
-msgid "Service Discovery"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:85
-msgid "Services available:"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:76
-msgid "Set"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:62
-msgid "Shift left"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:63
-msgid "Shift right"
-msgstr ""
-
-#: ../ProjectController.py:1867
-msgid "Show IEC code generated by PLCGenerator"
-msgstr ""
-
-#: ../canfestival/canfestival.py:389
-msgid "Show Master"
-msgstr ""
-
-#: ../canfestival/canfestival.py:390
-msgid "Show Master generated by config_utils"
-msgstr ""
-
-#: ../ProjectController.py:1865
-msgid "Show code"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:67
-msgid "Simultaneous Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:66
-msgid "Simultaneous Divergence"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:27
-msgid "Sine"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
-msgid "Single"
-msgstr ""
-
-#: ../targets/toolchain_makefile.py:126
-msgid "Source didn't change, no build.\n"
-msgstr ""
-
-#: ../PLCGenerator.py:397
-#, python-brace-format
-msgid ""
-"Source signal has to be defined for single task '{a1}' in resource "
-"'{a2}.{a3}'."
-msgstr ""
-
-#: ../plcopen/iec_std.csv:23
-msgid "Square root (base 2)"
-msgstr ""
-
-#: ../plcopen/definitions.py:48
-msgid "Standard function blocks"
-msgstr ""
-
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
-msgid "Start PLC"
-msgstr ""
-
-#: ../ProjectController.py:1046
-#, python-format
-msgid "Start build in %s\n"
-msgstr ""
-
-#: ../ProjectController.py:1360
-msgid "Started"
-msgstr ""
-
-#: ../ProjectController.py:1648
-msgid "Starting PLC\n"
-msgstr ""
-
-#: ../BeremizIDE.py:365
-msgid "Status ToolBar"
-msgstr ""
-
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
-msgid "Step"
-msgstr ""
-
-#: ../ProjectController.py:1846
-msgid "Stop"
-msgstr ""
-
-#: ../Beremiz_service.py:264
-msgid "Stop PLC"
-msgstr ""
-
-#: ../ProjectController.py:1848
-msgid "Stop Running PLC"
-msgstr ""
-
-#: ../ProjectController.py:1361
-msgid "Stopped"
-msgstr ""
-
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
-msgid "Structure"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:54
-msgid "Subrange"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:35
-msgid "Subtraction"
-msgstr ""
-
-#: ../ProjectController.py:1085
-msgid "Successfully built.\n"
-msgstr ""
-
-#: ../IDEFrame.py:447
-msgid "Switch perspective"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115
-msgid "Syntax error in regular expression of pattern to search!"
-msgstr ""
-
-#: ../dialogs/DiscoveryDialog.py:93
-msgid "TYPE"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:29
-msgid "Tangent"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:83
-msgid "Task"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:235
-msgid "Tasks:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:73
-msgid "Temp"
-msgstr ""
-
-#: ../version.py:30
-msgid ""
-"The best place to ask questions about Beremiz/PLCOpenEditor\n"
-"is project's mailing list: beremiz-devel@lists.sourceforge.net\n"
-"\n"
-"This is the main community support channel.\n"
-"For posting it is required to be subscribed to the mailing list.\n"
-"\n"
-"You can subscribe to the list here:\n"
-"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
-msgstr ""
-
-#: ../editors/FileManagementPanel.py:180
-#, python-format
-msgid ""
-"The file '%s' already exist.\n"
-"Do you want to replace it?"
-msgstr ""
-
-#: ../editors/LDViewer.py:882
-msgid "The group of block must be coherent!"
-msgstr ""
-
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
-msgid "There are changes, do you want to save?"
-msgstr ""
-
-#: ../IDEFrame.py:1658 ../IDEFrame.py:1677
-#, python-format
-msgid ""
-"There is a POU named \"%s\". This could cause a conflict. Do you wish to "
-"continue?"
-msgstr ""
-
-#: ../IDEFrame.py:1102
-msgid ""
-"There was a problem printing.\n"
-"Perhaps your current printer is not set correctly?"
-msgstr ""
-
-#: ../editors/LDViewer.py:891
-msgid "This option isn't available yet!"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
-#, python-format
-msgid "Tick: %d"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:40
-msgid "Time"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
-msgid "Time addition"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:86
-msgid "Time concatenation"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
-msgid "Time division"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
-msgid "Time multiplication"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
-msgid "Time subtraction"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
-msgid "Time-of-day addition"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
-#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
-msgid "Time-of-day subtraction"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:172
-msgid "Toggle value"
-msgstr ""
-
-#: ../editors/Viewer.py:548
-msgid "Top"
-msgstr ""
-
-#: ../ProjectController.py:1855
-msgid "Transfer"
-msgstr ""
-
-#: ../ProjectController.py:1857
-msgid "Transfer PLC"
-msgstr ""
-
-#: ../ProjectController.py:1820
-msgid "Transfer completed successfully.\n"
-msgstr ""
-
-#: ../ProjectController.py:1823
-msgid "Transfer failed\n"
-msgstr ""
-
-#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393
-#: ../editors/Viewer.py:2420
-msgid "Transition"
-msgstr ""
-
-#: ../PLCGenerator.py:1518
-#, python-format
-msgid ""
-"Transition \"%s\" body must contain an output variable or coil referring to "
-"its name"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:84
-msgid "Transition Name"
-msgstr ""
-
-#: ../dialogs/PouTransitionDialog.py:53
-msgid "Transition Name:"
-msgstr ""
-
-#: ../PLCGenerator.py:1609
-#, python-brace-format
-msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
-msgstr ""
-
-#: ../PLCGenerator.py:1598
-#, python-brace-format
-msgid ""
-"Transition with content \"{a1}\" not connected to a previous step in "
-"\"{a2}\" POU"
-msgstr ""
-
-#: ../plcopen/plcopen.py:1323
-#, python-format
-msgid "Transition with name %s doesn't exist!"
-msgstr ""
-
-#: ../PLCControler.py:98
-msgid "Transitions"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:131
-msgid "Translated by"
-msgstr ""
-
-#: ../editors/ResourceEditor.py:68
-msgid "Triggering"
-msgstr ""
-
-#: ../Beremiz_service.py:478
-msgid "Twisted unavailable."
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
-msgid "Type"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:49
-msgid "Type and derivated"
-msgstr ""
-
-#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624
-#, python-format
-msgid "Type conflict for location \"%s\""
-msgstr ""
-
-#: ../plcopen/iec_std.csv:16
-msgid "Type conversion"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:162
-msgid "Type infos:"
-msgstr ""
-
-#: ../dialogs/BrowseLocationsDialog.py:50
-msgid "Type strict"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58
-#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100
-#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59
-msgid "Type:"
-msgstr ""
-
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
-#, python-format
-msgid "Unable to define PDO mapping for node %02x"
-msgstr ""
-
-#: ../targets/Xenomai/__init__.py:39
-#, python-format
-msgid "Unable to get Xenomai's %s \n"
-msgstr ""
-
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
-#, python-brace-format
-msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
-msgstr ""
-
-#: ../PLCGenerator.py:254
-#, python-format
-msgid "Undefined pou type \"%s\""
-msgstr ""
-
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
-msgid "Undo"
-msgstr ""
-
-#: ../ProjectController.py:423
-msgid "Unknown"
-msgstr ""
-
-#: ../editors/Viewer.py:394
-#, python-format
-msgid "Unknown variable \"%s\" for this POU!"
-msgstr ""
-
-#: ../ProjectController.py:420 ../ProjectController.py:421
-msgid "Unnamed"
-msgstr ""
-
-#: ../PLCControler.py:638
-#, python-format
-msgid "Unnamed%d"
-msgstr ""
-
-#: ../controls/VariablePanel.py:284
-#, python-format
-msgid "Unrecognized data size \"%s\""
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
-msgid "User Data Types"
-msgstr ""
-
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
-msgid "User Type"
-msgstr ""
-
-#: ../PLCControler.py:97
-msgid "User-defined POUs"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:39
-msgid "Value"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:259
-msgid "Values:"
-msgstr ""
-
-#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585
-#: ../editors/Viewer.py:2423
-msgid "Variable"
-msgstr ""
-
-#: ../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
-msgid "Variable Drop"
-msgstr ""
-
-#: ../dialogs/FBDVariableDialog.py:64
-msgid "Variable Properties"
-msgstr ""
-
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
-msgid "Variable class"
-msgstr ""
-
-#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387
-msgid "Variable don't belong to this POU!"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:89
-msgid "Variable:"
-msgstr ""
-
-#: ../controls/VariablePanel.py:72
-msgid "Variables"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:152
-msgid "Vertical:"
-msgstr ""
-
-#: ../Beremiz_service.py:588
-msgid "WAMP client startup failed. "
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:91
-#, python-format
-msgid "WAMP connecting to URL : %s\n"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:131
-msgid "WAMP connection timeout"
-msgstr ""
-
-#: ../connectors/WAMP/__init__.py:150
-#, python-format
-msgid "WAMP connection to '%s' failed.\n"
-msgstr ""
-
-#: ../Beremiz_service.py:564
-msgid "WAMP import failed :"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:37
-msgid "WXGLADE GUI"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
-msgid "Warning"
-msgstr ""
-
-#: ../ProjectController.py:707
-msgid "Warnings in ST/IL/SFC code generator :\n"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:78
-msgid "Whole Project"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:120
-msgid "Width:"
-msgstr ""
-
-#: ../dialogs/FindInPouDialog.py:91
-msgid "Wrap search"
-msgstr ""
-
-#: ../dialogs/AboutDialog.py:130
-msgid "Written by"
-msgstr ""
-
-#: ../features.py:34
-msgid "WxGlade GUI"
-msgstr ""
-
-#: ../svgui/svgui.py:142
-msgid ""
-"You don't have write permissions.\n"
-"Open Inkscape anyway ?"
-msgstr ""
-
-#: ../wxglade_hmi/wxglade_hmi.py:154
-msgid ""
-"You don't have write permissions.\n"
-"Open wxGlade anyway ?"
-msgstr ""
-
-#: ../ProjectController.py:371
-msgid ""
-"You must have permission to work on the project\n"
-"Work on a project copy ?"
-msgstr ""
-
-#: ../editors/LDViewer.py:886
-msgid ""
-"You must select the block or group of blocks around which a branch should be"
-" added!"
-msgstr ""
-
-#: ../editors/LDViewer.py:666
-msgid "You must select the wire where a contact should be added!"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
-msgid "You must type a name!"
-msgstr ""
-
-#: ../dialogs/ForceVariableDialog.py:193
-msgid "You must type a value!"
-msgstr ""
-
-#: ../IDEFrame.py:438
-msgid "Zoom"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:155
-msgid "days"
-msgstr ""
-
-#: ../PLCOpenEditor.py:343
-#, python-format
-msgid "error: %s\n"
-msgstr ""
-
-#: ../util/ProcessLogger.py:169
-#, python-brace-format
-msgid "exited with status {a1} (pid {a2})\n"
-msgstr ""
-
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
-msgid "function"
-msgstr ""
-
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
-msgid "functionBlock"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:155
-msgid "hours"
-msgstr ""
-
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:157
-msgid "milliseconds"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:156
-msgid "minutes"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:32
-msgid "program"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:156
-msgid "seconds"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:84
-msgid "string from the middle"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:82
-msgid "string left of"
-msgstr ""
-
-#: ../plcopen/iec_std.csv:83
-msgid "string right of"
-msgstr ""
-
-#: ../Beremiz.py:164
-msgid "update info unavailable."
-msgstr ""
-
-#: ../PLCOpenEditor.py:341
-#, python-format
-msgid "warning: %s\n"
-msgstr ""
-
-#: ../PLCControler.py:972
-#, python-brace-format
-msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
-msgstr ""
-
-#: ../ConfigTreeNode.py:56
-#, python-brace-format
-msgid ""
-"{a1} XML file doesn't follow XSD schema at line %{a2}:\n"
-"{a3}"
-msgstr ""
-
-#: Extra XSD strings
-msgid "CanFestivalSlaveNode"
-msgstr ""
-
-msgid "CAN_Device"
-msgstr ""
-
-msgid "CAN_Baudrate"
-msgstr ""
-
-msgid "NodeId"
-msgstr ""
-
-msgid "Sync_Align"
-msgstr ""
-
-msgid "Sync_Align_Ratio"
-msgstr ""
-
-msgid "CanFestivalNode"
-msgstr ""
-
-msgid "Sync_TPDOs"
-msgstr ""
-
-msgid "CanFestivalInstance"
-msgstr ""
-
-msgid "CAN_Driver"
-msgstr ""
-
-msgid "Generic"
-msgstr ""
-
-msgid "Command"
-msgstr ""
-
-msgid "Xenomai"
-msgstr ""
-
-msgid "XenoConfig"
-msgstr ""
-
-msgid "Compiler"
-msgstr ""
-
-msgid "CFLAGS"
-msgstr ""
-
-msgid "Linker"
-msgstr ""
-
-msgid "LDFLAGS"
-msgstr ""
-
-msgid "Linux"
-msgstr ""
-
-msgid "Win32"
-msgstr ""
-
-msgid "BaseParams"
-msgstr ""
-
-msgid "IEC_Channel"
-msgstr ""
-
-msgid "Enabled"
-msgstr ""
-
-msgid "BeremizRoot"
-msgstr ""
-
-msgid "TargetType"
-msgstr ""
-
-msgid "Libraries"
-msgstr ""
-
-msgid "URI_location"
-msgstr ""
-
-msgid "Disable_Extensions"
-msgstr ""
-
-msgid "%(codefile_name)s"
-msgstr ""
-
-msgid "variables"
-msgstr ""
-
-msgid "variable"
-msgstr ""
-
-msgid "name"
-msgstr ""
-
-msgid "type"
-msgstr ""
-
-msgid "class"
-msgstr ""
-
-msgid "initial"
-msgstr ""
-
-msgid "desc"
-msgstr ""
-
-msgid "onchange"
-msgstr ""
-
-msgid "opts"
-msgstr ""
-
-#: Extra TC6 documentation strings
-msgid "0 - current time, 1 - load time from PDT"
-msgstr ""
-
-msgid "Preset datetime"
-msgstr ""
-
-msgid "Copy of IN"
-msgstr ""
-
-msgid "Datetime, current or relative to PDT"
-msgstr ""
-
-msgid ""
-"The real time clock has many uses including time stamping, setting dates and"
-" times of day in batch reports, in alarm messages and so on."
-msgstr ""
-
-msgid "1 = integrate, 0 = hold"
-msgstr ""
-
-msgid "Overriding reset"
-msgstr ""
-
-msgid "Input variable"
-msgstr ""
-
-msgid "Initial value"
-msgstr ""
-
-msgid "Sampling period"
-msgstr ""
-
-msgid "NOT R1"
-msgstr ""
-
-msgid "Integrated output"
-msgstr ""
-
-msgid ""
-"The integral function block integrates the value of input XIN over time."
-msgstr ""
-
-msgid "0 = reset"
-msgstr ""
-
-msgid "Input to be differentiated"
-msgstr ""
-
-msgid "Differentiated output"
-msgstr ""
-
-msgid ""
-"The derivative function block produces an output XOUT proportional to the "
-"rate of change of the input XIN."
-msgstr ""
-
-msgid "0 - manual , 1 - automatic"
-msgstr ""
-
-msgid "Process variable"
-msgstr ""
-
-msgid "Set point"
-msgstr ""
-
-msgid "Manual output adjustment - Typically from transfer station"
-msgstr ""
-
-msgid "Proportionality constant"
-msgstr ""
-
-msgid "Reset time"
-msgstr ""
-
-msgid "Derivative time constant"
-msgstr ""
-
-msgid "PV - SP"
-msgstr ""
-
-msgid "FB for integral term"
-msgstr ""
-
-msgid "FB for derivative term"
-msgstr ""
-
-msgid ""
-"The PID (proportional, Integral, Derivative) function block provides the "
-"classical three term controller for closed loop control."
-msgstr ""
-
-msgid "0 - track X0, 1 - ramp to/track X1"
-msgstr ""
-
-msgid "Ramp duration"
-msgstr ""
-
-msgid "BUSY = 1 during ramping period"
-msgstr ""
-
-msgid "Elapsed time of ramp"
-msgstr ""
-
-msgid "The RAMP function block is modelled on example given in the standard."
-msgstr ""
-
-msgid ""
-"The hysteresis function block provides a hysteresis boolean output driven by"
-" the difference of two floating point (REAL) inputs XIN1 and XIN2."
-msgstr ""
-
-msgid "The SR bistable is a latch where the Set dominates."
-msgstr ""
-
-msgid "The RS bistable is a latch where the Reset dominates."
-msgstr ""
-
-msgid ""
-"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
-msgstr ""
-
-msgid "The output produces a single pulse when a rising edge is detected."
-msgstr ""
-
-msgid "The output produces a single pulse when a falling edge is detected."
-msgstr ""
-
-msgid ""
-"The up-counter can be used to signal when a count has reached a maximum "
-"value."
-msgstr ""
-
-msgid ""
-"The down-counter can be used to signal when a count has reached zero, on "
-"counting down from a preset value."
-msgstr ""
-
-msgid ""
-"The up-down counter has two inputs CU and CD. It can be used to both count "
-"up on one input and down on the other."
-msgstr ""
-
-msgid "first input parameter"
-msgstr ""
-
-msgid "second input parameter"
-msgstr ""
-
-msgid "first output parameter"
-msgstr ""
-
-msgid "second output parameter"
-msgstr ""
-
-msgid "internal state: 0-reset, 1-counting, 2-set"
-msgstr ""
-
-msgid ""
-"The pulse timer can be used to generate output pulses of a given time "
-"duration."
-msgstr ""
-
-msgid ""
-"The on-delay timer can be used to delay setting an output true, for fixed "
-"period after an input becomes true."
-msgstr ""
-
-msgid ""
-"The off-delay timer can be used to delay setting an output false, for fixed "
-"period after input goes false."
-msgstr ""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/Beremiz_ro_RO.po Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,4018 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Beremiz package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Beremiz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Emil Saracutu <emil_saracutu@yahoo.com>, 2018\n"
+"Language-Team: Romanian (Romania) (https://www.transifex.com/beremiz/teams/75746/ro_RO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro_RO\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#: ../util/ExceptionHandler.py:58
+#, python-format
+msgid ""
+"\n"
+"An unhandled exception (bug) occured. Bug report saved at :\n"
+"(%s)\n"
+"\n"
+"Please be kind enough to send this file to:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"You should now restart program.\n"
+"\n"
+"Traceback:\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid " External"
+msgstr "Extern"
+
+#: ../controls/VariablePanel.py:89
+msgid " InOut"
+msgstr ""
+
+#: ../controls/VariablePanel.py:89
+msgid " Input"
+msgstr "Intrare"
+
+#: ../controls/VariablePanel.py:90
+msgid " Local"
+msgstr "Local"
+
+#: ../controls/VariablePanel.py:89
+msgid " Output"
+msgstr "Ieșire"
+
+#: ../controls/VariablePanel.py:91
+msgid " Temp"
+msgstr "Temporar"
+
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#, python-format
+msgid " and %s"
+msgstr "și%s"
+
+#: ../ProjectController.py:1182
+msgid " generation failed !\n"
+msgstr "generare eșuată\n"
+
+#: ../plcopen/plcopen.py:1029
+#, python-format
+msgid "\"%s\" Data Type doesn't exist !!!"
+msgstr "\"%s\" Tipul de dată nu există !"
+
+#: ../plcopen/plcopen.py:1047
+#, python-format
+msgid "\"%s\" POU already exists !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1068
+#, python-format
+msgid "\"%s\" POU doesn't exist !!!"
+msgstr ""
+
+#: ../editors/Viewer.py:288
+#, python-format
+msgid "\"%s\" can't use itself!"
+msgstr ""
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#, python-format
+msgid "\"%s\" config already exists!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:531
+#, python-format
+msgid "\"%s\" configuration already exists !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr ""
+
+#: ../IDEFrame.py:1638
+#, python-format
+msgid "\"%s\" data type already exists!"
+msgstr ""
+
+#: ../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:928
+#, python-format
+msgid "\"%s\" folder is not a valid Beremiz project\n"
+msgstr ""
+
+#: ../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: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: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: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:62
+#, python-format
+msgid "\"%s\" step already exists!"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:566
+#, python-format
+msgid "\"%s\" value already defined!"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
+#, python-format
+msgid "\"%s\" value isn't a valid array dimension!"
+msgstr ""
+
+#: ../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:1133
+#, python-brace-format
+msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
+msgstr ""
+
+#: ../editors/Viewer.py:292
+#, python-brace-format
+msgid "\"{a1}\" is already used by \"{a2}\"!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:557
+#, python-brace-format
+msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:577
+#, python-brace-format
+msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#, python-format
+msgid "%03gms"
+msgstr ""
+
+#: ../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
+#, python-format
+msgid "%dms"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#, python-format
+msgid "%ds"
+msgstr ""
+
+#: ../PLCControler.py:1114
+#, python-format
+msgid "%s Data Types"
+msgstr ""
+
+#: ../PLCControler.py:1097
+#, python-format
+msgid "%s POUs"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
+#, python-format
+msgid "%s Profile"
+msgstr ""
+
+#: ../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:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
+#, python-format
+msgid "%s body don't have text!"
+msgstr ""
+
+#: ../IDEFrame.py:388
+msgid "&Add Element"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
+msgid "&Close"
+msgstr ""
+
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr ""
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr ""
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr ""
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr ""
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr ""
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr ""
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr ""
+
+#: ../IDEFrame.py:356
+msgid "&Program"
+msgstr ""
+
+#: ../PLCOpenEditor.py:98
+msgid "&Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:244
+msgid "&Recent Projects"
+msgstr ""
+
+#: ../IDEFrame.py:358
+msgid "&Resource"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:247
+#, python-brace-format
+msgid "'{a1}' - {a2} match in project"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:249
+#, python-brace-format
+msgid "'{a1}' - {a2} matches in project"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:98
+#, python-brace-format
+msgid "'{a1}' is located at {a2}\n"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:298
+#, python-format
+msgid "(%d matches)"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
+#, python-format
+msgid ", %s"
+msgstr ""
+
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
+msgid "1d"
+msgstr ""
+
+#: ../controls/LogViewer.py:288
+msgid "1h"
+msgstr ""
+
+#: ../controls/LogViewer.py:289
+msgid "1m"
+msgstr ""
+
+#: ../controls/LogViewer.py:290
+msgid "1s"
+msgstr ""
+
+#: ../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: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:424
+#, python-brace-format
+msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:229
+msgid "A location must be selected!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:485
+msgid "A task with the same name already exists!"
+msgstr ""
+
+#: ../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:778
+#, python-format
+msgid "A variable with \"%s\" as name already exists!"
+msgstr ""
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
+msgid "About"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Absolute number"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
+msgid "Action"
+msgstr ""
+
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+msgid "Action Block"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:89
+msgid "Action Name"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:56
+msgid "Action Name:"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1567
+#, python-format
+msgid "Action with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Actions"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:139
+msgid "Actions:"
+msgstr ""
+
+#: ../editors/Viewer.py:473
+msgid "Active"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+msgid "Add"
+msgstr ""
+
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+msgid "Add Action"
+msgstr ""
+
+#: ../features.py:33
+msgid "Add C code accessing located variables synchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1907
+msgid "Add Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:1887
+msgid "Add DataType"
+msgstr ""
+
+#: ../editors/Viewer.py:609
+msgid "Add Divergence Branch"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:121
+msgid "Add IP"
+msgstr ""
+
+#: ../IDEFrame.py:1895
+msgid "Add POU"
+msgstr ""
+
+#: ../features.py:34
+msgid "Add Python code executed asynchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+msgid "Add Resource"
+msgstr ""
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+msgid "Add Transition"
+msgstr ""
+
+#: ../editors/Viewer.py:596
+msgid "Add Wire Segment"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447
+msgid "Add a new initial step"
+msgstr ""
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+msgid "Add a new jump"
+msgstr ""
+
+#: ../editors/SFCViewer.py:469
+msgid "Add a new step"
+msgstr ""
+
+#: ../features.py:35
+msgid "Add a simple WxGlade based GUI."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:143
+msgid "Add action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:364
+msgid "Add element"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:283
+msgid "Add instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:110
+msgid "Add slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:252
+msgid "Add task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+msgid "Add variable"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Addition"
+msgstr ""
+
+#: ../plcopen/definitions.py:51
+msgid "Additional function blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:669
+msgid "Adjust Block Size"
+msgstr ""
+
+#: ../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:307
+#: ../controls/VariablePanel.py:88
+msgid "All"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:37
+msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
+msgstr ""
+
+#: ../ProjectController.py:1670
+msgid "Already connected. Please disconnect\n"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:607
+#, python-format
+msgid "An element named \"%s\" already exists in this structure!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:520
+msgid "An instance with the same name already exists!"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:103
+msgid "Apply name modification to all continuations with the same name"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:31
+msgid "Arc cosine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:30
+msgid "Arc sine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:32
+msgid "Arc tangent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Arithmetic"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
+msgid "Array"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:39
+msgid "Assignment"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:226
+msgid "At least a variable or an expression must be selected!"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:111
+msgid "Author"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:108
+msgid "Author Name (optional):"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:80
+msgid "Backward"
+msgstr ""
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
+#, python-format
+msgid "Bad location size : %s"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
+msgid "Base Type:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+msgid "Base Types"
+msgstr ""
+
+#: ../BeremizIDE.py:483
+msgid "Beremiz"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Binary selection (1 of 2)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Bit-shift"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise AND"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:67
+msgid "Bitwise OR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:68
+msgid "Bitwise XOR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:69
+msgid "Bitwise inverting"
+msgstr ""
+
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+msgid "Block"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:63
+msgid "Block Properties"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Block name"
+msgstr ""
+
+#: ../editors/Viewer.py:586
+msgid "Bottom"
+msgstr ""
+
+#: ../ProjectController.py:1400
+msgid "Broken"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
+#, python-format
+msgid "Browse %s values library"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:72
+msgid "Browse Locations"
+msgstr ""
+
+#: ../ProjectController.py:1815
+msgid "Build"
+msgstr ""
+
+#: ../ProjectController.py:1335
+msgid "Build directory already clean\n"
+msgstr ""
+
+#: ../ProjectController.py:1816
+msgid "Build project into build folder"
+msgstr ""
+
+#: ../ProjectController.py:1108
+msgid "C Build crashed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1105
+msgid "C Build failed.\n"
+msgstr ""
+
+#: ../c_ext/CFileEditor.py:66
+msgid "C code"
+msgstr ""
+
+#: ../ProjectController.py:1186
+msgid "C code generated successfully.\n"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:126
+msgid "C compilation failed.\n"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:199
+#, python-format
+msgid "C compilation of %s failed.\n"
+msgstr ""
+
+#: ../features.py:33
+msgid "C extension"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:69
+msgid "C&redits"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:58
+msgid "CANOpen network"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:48
+msgid "CANOpen slave"
+msgstr ""
+
+#: ../features.py:31
+msgid "CANopen support"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:291
+msgid "Can only give a location to local or global variables"
+msgstr ""
+
+#: ../PLCOpenEditor.py:318
+#, python-format
+msgid "Can't generate program to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:289
+msgid "Can't give a location to a function block instance"
+msgstr ""
+
+#: ../PLCOpenEditor.py:363
+#, python-format
+msgid "Can't save project to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:339
+msgid "Can't set an initial value to a function block instance"
+msgstr ""
+
+#: ../ConfigTreeNode.py:532
+#, python-brace-format
+msgid "Cannot create child {a1} of type {a2} "
+msgstr ""
+
+#: ../ConfigTreeNode.py:454
+#, python-format
+msgid "Cannot find lower free IEC channel than %d\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:139
+msgid "Cannot get PLC status - connection failed.\n"
+msgstr ""
+
+#: ../ProjectController.py:967
+msgid "Cannot open/parse VARIABLES.csv!\n"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:581
+msgid "Center"
+msgstr ""
+
+#: ../Beremiz_service.py:276
+msgid "Change IP of interface to bind"
+msgstr ""
+
+#: ../Beremiz_service.py:275
+msgid "Change Name"
+msgstr ""
+
+#: ../IDEFrame.py:1977
+msgid "Change POU Type To"
+msgstr ""
+
+#: ../Beremiz_service.py:277
+msgid "Change Port Number"
+msgstr ""
+
+#: ../Beremiz_service.py:278
+msgid "Change working directory"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Character string"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "Choose a SVG file"
+msgstr ""
+
+#: ../ProjectController.py:561
+msgid "Choose a directory to save project"
+msgstr ""
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+msgid "Choose a file"
+msgstr ""
+
+#: ../BeremizIDE.py:900
+msgid "Choose a project"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
+#, python-format
+msgid "Choose a value for %s:"
+msgstr ""
+
+#: ../Beremiz_service.py:333
+msgid "Choose a working directory "
+msgstr ""
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
+msgid "Chosen folder doesn't contain a program. It's not a valid project!"
+msgstr ""
+
+#: ../ProjectController.py:435
+msgid "Chosen folder isn't empty. You can't use it for a new project!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:60
+msgid "Class"
+msgstr ""
+
+#: ../controls/VariablePanel.py:472
+msgid "Class Filter:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:74
+msgid "Class:"
+msgstr ""
+
+#: ../ProjectController.py:1821
+msgid "Clean"
+msgstr ""
+
+#: ../controls/LogViewer.py:327
+msgid "Clean log messages"
+msgstr ""
+
+#: ../ProjectController.py:1822
+msgid "Clean project build folder"
+msgstr ""
+
+#: ../ProjectController.py:1332
+msgid "Cleaning the build directory\n"
+msgstr ""
+
+#: ../IDEFrame.py:437
+msgid "Clear Errors"
+msgstr ""
+
+#: ../editors/Viewer.py:680
+msgid "Clear Execution Order"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+msgid "Close"
+msgstr ""
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+msgid "Close Application"
+msgstr ""
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
+msgid "Close Project"
+msgstr ""
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
+msgid "Close Tab"
+msgstr ""
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+msgid "Coil"
+msgstr ""
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+msgid "Comment"
+msgstr ""
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
+msgid "Community support"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:65
+msgid "Company Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:106
+msgid "Company Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:107
+msgid "Company URL (optional):"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Comparison"
+msgstr ""
+
+#: ../ProjectController.py:756
+msgid "Compiling IEC Program into C code...\n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:85
+msgid "Concatenation"
+msgstr ""
+
+#: ../editors/ConfTreeNodeEditor.py:241
+msgid "Config"
+msgstr ""
+
+#: ../editors/ProjectNodeEditor.py:39
+msgid "Config variables"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:43
+msgid "Configuration"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Configurations"
+msgstr ""
+
+#: ../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:1842
+msgid "Connect"
+msgstr ""
+
+#: ../ProjectController.py:1843
+msgid "Connect to the target PLC"
+msgstr ""
+
+#: ../ProjectController.py:1391
+#, python-format
+msgid "Connected to URI: %s"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
+msgid "Connection"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:55
+msgid "Connection Properties"
+msgstr ""
+
+#: ../ProjectController.py:1691
+msgid "Connection canceled!\n"
+msgstr ""
+
+#: ../ProjectController.py:1714
+#, python-format
+msgid "Connection failed to %s!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+msgid "Connection lost!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:110
+#, python-format
+msgid "Connection to '%s' failed.\n"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+msgid "Connector"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:68
+msgid "Connectors:"
+msgstr ""
+
+#: ../BeremizIDE.py:378
+msgid "Console"
+msgstr ""
+
+#: ../controls/VariablePanel.py:75
+msgid "Constant"
+msgstr ""
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+msgid "Contact"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:217
+msgid "Content Description (optional):"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+msgid "Continuation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:18
+msgid "Conversion from BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:19
+msgid "Conversion to BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:21
+msgid "Conversion to date"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:20
+msgid "Conversion to time-of-day"
+msgstr ""
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
+msgid "Copy"
+msgstr ""
+
+#: ../IDEFrame.py:1964
+msgid "Copy POU"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:68
+msgid "Copy file from left folder to right"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:67
+msgid "Copy file from right folder to left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:28
+msgid "Cosine"
+msgstr ""
+
+#: ../ConfigTreeNode.py:660
+#, python-brace-format
+msgid ""
+"Could not add child \"{a1}\", type {a2} :\n"
+"{a3}\n"
+msgstr ""
+
+#: ../py_ext/PythonFileCTNMixin.py:81
+#, python-format
+msgid "Couldn't import old %s file."
+msgstr ""
+
+#: ../ConfigTreeNode.py:630
+#, python-brace-format
+msgid ""
+"Couldn't load confnode base parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
+#, python-brace-format
+msgid ""
+"Couldn't load confnode parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../PLCControler.py:552
+msgid "Couldn't paste non-POU object."
+msgstr ""
+
+#: ../ProjectController.py:1636
+msgid "Couldn't start PLC !\n"
+msgstr ""
+
+#: ../ProjectController.py:1644
+msgid "Couldn't stop PLC !\n"
+msgstr ""
+
+#: ../svgui/svgui.py:57
+msgid "Create HMI"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:54
+msgid "Create a new POU"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:45
+msgid "Create a new action"
+msgstr ""
+
+#: ../IDEFrame.py:166
+msgid "Create a new action block"
+msgstr ""
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+msgid "Create a new block"
+msgstr ""
+
+#: ../IDEFrame.py:139
+msgid "Create a new branch"
+msgstr ""
+
+#: ../IDEFrame.py:133
+msgid "Create a new coil"
+msgstr ""
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+msgid "Create a new comment"
+msgstr ""
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+msgid "Create a new connection"
+msgstr ""
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
+msgid "Create a new contact"
+msgstr ""
+
+#: ../IDEFrame.py:169
+msgid "Create a new divergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:54
+msgid "Create a new divergence or convergence"
+msgstr ""
+
+#: ../IDEFrame.py:157
+msgid "Create a new initial step"
+msgstr ""
+
+#: ../IDEFrame.py:172
+msgid "Create a new jump"
+msgstr ""
+
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
+msgid "Create a new power rail"
+msgstr ""
+
+#: ../IDEFrame.py:130
+msgid "Create a new rung"
+msgstr ""
+
+#: ../IDEFrame.py:160
+msgid "Create a new step"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+msgid "Create a new transition"
+msgstr ""
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+msgid "Create a new variable"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:109
+msgid "Credits"
+msgstr ""
+
+#: ../Beremiz_service.py:424
+msgid "Current working directory :"
+msgstr ""
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+msgid "Cut"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Cyclic"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
+#: ../plcopen/iec_std.csv:60
+msgid "DEPRECATED"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
+msgid "DS-301 Profile"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
+msgid "DS-302 Profile"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:39
+msgid "Data Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Data Types"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Data type conversion"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
+msgid "Date addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
+#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
+msgid "Date and time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
+msgid "Date subtraction"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:46
+msgid "Days:"
+msgstr ""
+
+#: ../ProjectController.py:1729
+msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:144
+msgid "Debug instance"
+msgstr ""
+
+#: ../editors/Viewer.py:490
+#, python-format
+msgid "Debug: %s"
+msgstr ""
+
+#: ../ProjectController.py:1471
+#, python-format
+msgid "Debug: Unknown variable '%s'\n"
+msgstr ""
+
+#: ../ProjectController.py:1469
+#, python-format
+msgid "Debug: Unsupported type to debug '%s'\n"
+msgstr ""
+
+#: ../IDEFrame.py:660
+msgid "Debugger"
+msgstr ""
+
+#: ../ProjectController.py:1726
+msgid "Debugger ready\n"
+msgstr ""
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+msgid "Delete"
+msgstr ""
+
+#: ../editors/Viewer.py:610
+msgid "Delete Divergence Branch"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:157
+msgid "Delete File"
+msgstr ""
+
+#: ../editors/Viewer.py:597
+msgid "Delete Wire Segment"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:44
+msgid "Delete item"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:88
+msgid "Deletion (within)"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:161
+msgid "Derivation Type:"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:735
+msgid "Description"
+msgstr ""
+
+#: ../controls/VariablePanel.py:463
+msgid "Description:"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
+msgid "Dimensions:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:69
+msgid "Direction"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:102
+msgid "Direction:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Directly"
+msgstr ""
+
+#: ../ProjectController.py:1855
+msgid "Disconnect"
+msgstr ""
+
+#: ../ProjectController.py:1856
+msgid "Disconnect from PLC"
+msgstr ""
+
+#: ../ProjectController.py:1401
+msgid "Disconnected"
+msgstr ""
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+msgid "Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:36
+msgid "Division"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:156
+#, python-format
+msgid "Do you really want to delete the file '%s'?"
+msgstr ""
+
+#: ../controls/VariablePanel.py:65
+msgid "Documentation"
+msgstr ""
+
+#: ../PLCOpenEditor.py:312
+msgid "Done"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Duration"
+msgstr ""
+
+#: ../canfestival/canfestival.py:174
+msgid "EDS files (*.eds)|*.eds|All files|*.*"
+msgstr ""
+
+#: ../editors/Viewer.py:668
+msgid "Edit Block"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:56
+msgid "Edit Contact Values"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:62
+msgid "Edit Duration"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:53
+msgid "Edit Step"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:45
+msgid "Edit a WxWidgets GUI with WXGlade"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:127
+msgid "Edit action block properties"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:47
+msgid "Edit array type properties"
+msgstr ""
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+msgid "Edit comment"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:69
+msgid "Edit file"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:42
+msgid "Edit item"
+msgstr ""
+
+#: ../editors/Viewer.py:3059
+msgid "Edit jump target"
+msgstr ""
+
+#: ../ProjectController.py:1873
+msgid "Edit raw IEC code added to code generated by PLCGenerator"
+msgstr ""
+
+#: ../editors/SFCViewer.py:815
+msgid "Edit step name"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:53
+msgid "Edit transition"
+msgstr ""
+
+#: ../IDEFrame.py:632
+msgid "Editor ToolBar"
+msgstr ""
+
+#: ../ProjectController.py:1294
+msgid "Editor selection"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:360
+msgid "Elements :"
+msgstr ""
+
+#: ../ProjectController.py:1399
+msgid "Empty"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
+msgid "Enter a name "
+msgstr ""
+
+#: ../Beremiz_service.py:326
+msgid "Enter a port number "
+msgstr ""
+
+#: ../Beremiz_service.py:317
+msgid "Enter the IP of the interface to bind"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Enumerated"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:77
+msgid "Equal to"
+msgstr ""
+
+#: ../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 ""
+
+#: ../ProjectController.py:811
+msgid ""
+"Error : At least one configuration and one resource must be declared in PLC "
+"!\n"
+msgstr ""
+
+#: ../ProjectController.py:803
+#, python-format
+msgid "Error : IEC to C compiler returned %d\n"
+msgstr ""
+
+#: ../ProjectController.py:731
+#, python-format
+msgid ""
+"Error in ST/IL/SFC code generator :\n"
+"%s\n"
+msgstr ""
+
+#: ../ConfigTreeNode.py:219
+#, python-format
+msgid "Error while saving \"%s\"\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:179
+msgid "Error: Export slave failed\n"
+msgstr ""
+
+#: ../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:383
+msgid "Error: No PLC built\n"
+msgstr ""
+
+#: ../ProjectController.py:1708
+#, python-format
+msgid "Exception while connecting %s!\n"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:123
+msgid "Execution Control:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+msgid "Execution Order:"
+msgstr ""
+
+#: ../features.py:36
+msgid "Experimental web based HMI"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:38
+msgid "Exponent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:26
+msgid "Exponentiation"
+msgstr ""
+
+#: ../canfestival/canfestival.py:186
+msgid "Export CanOpen slave to EDS file"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+msgid "Export graph values to clipboard"
+msgstr ""
+
+#: ../canfestival/canfestival.py:185
+msgid "Export slave"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:94
+msgid "Expression:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "External"
+msgstr ""
+
+#: ../ProjectController.py:826
+msgid "Extracting Located Variables...\n"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "FBD"
+msgstr ""
+
+#: ../ProjectController.py:1773
+msgid "Failed : Must build before transfer.\n"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+msgid "Falling Edge"
+msgstr ""
+
+#: ../ProjectController.py:1098
+msgid "Fatal : cannot get builder.\n"
+msgstr ""
+
+#: ../Beremiz.py:160
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:167
+#, python-format
+msgid "Field %s hasn't a valid value!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:169
+#, python-format
+msgid "Fields %s haven't a valid value!"
+msgstr ""
+
+#: ../controls/FolderTree.py:221
+#, python-format
+msgid "File '%s' already exists!"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+msgid "Find"
+msgstr ""
+
+#: ../IDEFrame.py:379
+msgid "Find Next"
+msgstr ""
+
+#: ../IDEFrame.py:381
+msgid "Find Previous"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:90
+msgid "Find position"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:58
+msgid "Find:"
+msgstr ""
+
+#: ../editors/Viewer.py:1633
+msgid "Force value"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:176
+msgid "Forcing Variable Value"
+msgstr ""
+
+#: ../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:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
+msgid "Form isn't complete. Name must be filled!"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:235
+msgid "Form isn't complete. Valid block type must be selected!"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:75
+msgid "Forward"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+msgid "Function"
+msgstr ""
+
+#: ../IDEFrame.py:354
+msgid "Function &Block"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
+msgid "Function Block"
+msgstr ""
+
+#: ../controls/VariablePanel.py:868
+msgid "Function Block Types"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Function Blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:290
+msgid "Function Blocks can't be used in Functions!"
+msgstr ""
+
+#: ../PLCControler.py:1907
+#, python-format
+msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Functions"
+msgstr ""
+
+#: ../PLCOpenEditor.py:88
+msgid "Generate Program"
+msgstr ""
+
+#: ../ProjectController.py:722
+msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Global"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+msgid "Go to current value"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:189
+msgid "Graphics"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Greater than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:76
+msgid "Greater than or equal to"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:135
+msgid "Height:"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:89
+msgid "Home Directory:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:165
+msgid "Horizontal:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:47
+msgid "Hours:"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "IL"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:91
+msgid "IP"
+msgstr ""
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+msgid "IP is not valid!"
+msgstr ""
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
+msgid "Import SVG"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
+msgid "InOut"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:300
+#, python-brace-format
+msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:306
+#, python-format
+msgid "Incompatible size of data between \"%s\" and \"BOOL\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:310
+#, python-brace-format
+msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Indicator"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:734
+msgid "Initial"
+msgstr ""
+
+#: ../editors/Viewer.py:650
+msgid "Initial Step"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
+msgid "Initial Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
+msgid "Initial Value:"
+msgstr ""
+
+#: ../svgui/svgui.py:56
+msgid "Inkscape"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
+msgid "Inline"
+msgstr ""
+
+#: ../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:99
+msgid "Inputs:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:87
+msgid "Insertion (into)"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1948
+#, python-format
+msgid "Instance with id %d doesn't exist!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:279
+msgid "Instances:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:88
+msgid "Interface"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Interrupt"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Interval"
+msgstr ""
+
+#: ../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:407
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
+#, python-format
+msgid "Invalid value \"%s\" for variable grid element"
+msgstr ""
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
+#, python-format
+msgid "Invalid value \"%s\" for viewer block"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:211
+#, python-brace-format
+msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:124
+msgid ""
+"Invalid value!\n"
+"You must fill a numeric value."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+msgid "Jump"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "LD"
+msgstr ""
+
+#: ../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:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
+msgid "Language"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:206
+msgid "Language (optional):"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
+msgid "Language:"
+msgstr ""
+
+#: ../ProjectController.py:1779
+msgid "Latest build already matches current target. Transfering anyway...\n"
+msgstr ""
+
+#: ../Beremiz_service.py:281
+msgid "Launch WX GUI inspector"
+msgstr ""
+
+#: ../Beremiz_service.py:280
+msgid "Launch a live Python shell"
+msgstr ""
+
+#: ../editors/Viewer.py:580
+msgid "Left"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:64
+msgid "Left PowerRail"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Length of string"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:78
+msgid "Less than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:79
+msgid "Less than or equal to"
+msgstr ""
+
+#: ../IDEFrame.py:652
+msgid "Library"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:145
+msgid "License"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:73
+msgid "Limitation"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:209
+msgid "Linking :\n"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+msgid "Local"
+msgstr ""
+
+#: ../canfestival/canfestival.py:359
+msgid "Local entries"
+msgstr ""
+
+#: ../ProjectController.py:1685
+msgid "Local service discovery failed!\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:62
+msgid "Location"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:79
+msgid "Locations available:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:25
+msgid "Logarithm to base 10"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:102
+#, python-format
+msgid "MDNS resolution failure for '%s'\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
+msgid "Map Variable"
+msgstr ""
+
+#: ../features.py:31
+msgid "Map located variables over CANopen"
+msgstr ""
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
+msgid "Master"
+msgstr ""
+
+#: ../ConfigTreeNode.py:544
+#, python-brace-format
+msgid "Max count ({a1}) reached for this confnode of type {a2} "
+msgstr ""
+
+#: ../plcopen/iec_std.csv:71
+msgid "Maximum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:246
+msgid "Maximum:"
+msgstr ""
+
+#: ../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:617
+msgid "Menu ToolBar"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:51
+msgid "Microseconds:"
+msgstr ""
+
+#: ../editors/Viewer.py:585
+msgid "Middle"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:50
+msgid "Milliseconds:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:72
+msgid "Minimum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:233
+msgid "Minimum:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:48
+msgid "Minutes:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:231
+msgid "Miscellaneous"
+msgstr ""
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
+msgid "Modifier:"
+msgstr ""
+
+#: ../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:146
+msgid "Move action down"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:145
+msgid "Move action up"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:46
+msgid "Move down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:367
+msgid "Move element down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:366
+msgid "Move element up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:286
+msgid "Move instance down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:285
+msgid "Move instance up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:255
+msgid "Move task down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:254
+msgid "Move task up"
+msgstr ""
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+msgid "Move the view"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:45
+msgid "Move up"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+msgid "Move variable down"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+msgid "Move variable up"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:74
+msgid "Multiplexer (select 1 of N)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:34
+msgid "Multiplication"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:87
+msgid "My Computer:"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:89
+msgid "NAME"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
+msgid "Name"
+msgstr ""
+
+#: ../Beremiz_service.py:342
+msgid "Name must not be null!"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
+msgid "Name:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:24
+msgid "Natural logarithm"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+msgid "Negated"
+msgstr ""
+
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
+#: ../Beremiz_service.py:580
+msgid "Nevow/Athena import failed :"
+msgstr ""
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
+msgid "New"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:43
+msgid "New item"
+msgstr ""
+
+#: ../editors/Viewer.py:553
+msgid "No Modifier"
+msgstr ""
+
+#: ../ProjectController.py:1808
+msgid "No PLC to transfer (did build succeed ?)\n"
+msgstr ""
+
+#: ../PLCGenerator.py:1678
+#, python-format
+msgid "No body defined in \"%s\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#, python-brace-format
+msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCOpenEditor.py:331
+msgid ""
+"No documentation available.\n"
+"Coming soon."
+msgstr ""
+
+#: ../PLCGenerator.py:841
+#, python-format
+msgid "No informations found for \"%s\" block"
+msgstr ""
+
+#: ../PLCGenerator.py:1232
+#, python-brace-format
+msgid ""
+"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
+"broken"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:175
+msgid "No search results available."
+msgstr ""
+
+#: ../svgui/svgui.py:142
+#, python-format
+msgid "No such SVG file: %s\n"
+msgstr ""
+
+#: ../canfestival/config_utils.py:682
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
+msgstr ""
+
+#: ../canfestival/config_utils.py:387
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
+msgid "No valid value selected!"
+msgstr ""
+
+#: ../PLCGenerator.py:1676
+#, python-format
+msgid "No variable defined in \"%s\" POU"
+msgstr ""
+
+#: ../canfestival/config_utils.py:379
+#, python-brace-format
+msgid "Non existing node ID : {a1} (variable {a2})"
+msgstr ""
+
+#: ../controls/VariablePanel.py:79
+msgid "Non-Retain"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78
+msgid "Normal"
+msgstr ""
+
+#: ../canfestival/config_utils.py:426
+#, python-brace-format
+msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:80
+msgid "Not equal to"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:91
+msgid "Number of sequences:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Numerical"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:736
+msgid "OnChange"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:88
+msgid "Only Elements"
+msgstr ""
+
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
+msgid "Open"
+msgstr ""
+
+#: ../svgui/svgui.py:151
+msgid "Open Inkscape"
+msgstr ""
+
+#: ../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:1879
+msgid "Open a file explorer to manage project files"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
+msgid "Open wxGlade"
+msgstr ""
+
+#: ../controls/VariablePanel.py:64
+msgid "Option"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+msgid "Options"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:109
+msgid "Organization (optional):"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
+msgid "Other Profile"
+msgstr ""
+
+#: ../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:67 ../canfestival/NetworkEditor.py:91
+msgid "PDO Receive"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
+msgid "PDO Transmit"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:174
+msgid "PLC :\n"
+msgstr ""
+
+#: ../BeremizIDE.py:383
+msgid "PLC Log"
+msgstr ""
+
+#: ../ProjectController.py:1082
+msgid "PLC code generation failed !\n"
+msgstr ""
+
+#: ../Beremiz_service.py:305
+msgid "PLC is empty or already started."
+msgstr ""
+
+#: ../Beremiz_service.py:312
+msgid "PLC is not started."
+msgstr ""
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
+#, python-brace-format
+msgid ""
+"PLC syntax error at line {a1}:\n"
+"{a2}"
+msgstr ""
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
+msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
+msgstr ""
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
+msgid "PLCOpenEditor"
+msgstr ""
+
+#: ../PLCOpenEditor.py:339
+msgid ""
+"PLCOpenEditor is part of Beremiz project.\n"
+"\n"
+"Beremiz is an "
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:92
+msgid "PORT"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:109
+msgid "POU Name"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:66
+msgid "POU Name:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:111
+msgid "POU Type"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:73
+msgid "POU Type:"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:52
+#, python-format
+msgid "PYRO connecting to URI : %s\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:68
+#, python-format
+msgid "PYRO using certificates in '%s' \n"
+msgstr ""
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
+msgid "Page Setup"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:124
+msgid "Page Size (optional):"
+msgstr ""
+
+#: ../IDEFrame.py:2640
+#, python-format
+msgid "Page: %d"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:134
+msgid "Parent instance"
+msgstr ""
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+msgid "Paste"
+msgstr ""
+
+#: ../IDEFrame.py:1899
+msgid "Paste POU"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:60
+msgid "Pattern to search:"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:75
+msgid "Pin number:"
+msgstr ""
+
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
+msgid "Please choose a target"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Please enter a block name"
+msgstr ""
+
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+msgid "Please enter comment text"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
+msgid "Please enter step name"
+msgstr ""
+
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+msgid "Please enter text"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:177
+#, python-format
+msgid "Please enter value for a \"%s\" variable:"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be 0 <= port <= 65535!"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be an integer!"
+msgstr ""
+
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+msgid "Power Rail"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:52
+msgid "Power Rail Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
+msgid "Preview"
+msgstr ""
+
+#: ../dialogs/BlockPreviewDialog.py:59
+msgid "Preview:"
+msgstr ""
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
+msgid "Print"
+msgstr ""
+
+#: ../IDEFrame.py:1110
+msgid "Print preview"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Priority"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:91
+msgid "Priority:"
+msgstr ""
+
+#: ../runtime/PLCObject.py:518
+#, python-format
+msgid "Problem starting PLC : error %d"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:63
+msgid "Product Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:90
+msgid "Product Name (required):"
+msgstr ""
+
+#: ../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 "Project Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:88
+msgid "Project Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:89
+msgid "Project Version (optional):"
+msgstr ""
+
+#: ../PLCControler.py:2717
+msgid ""
+"Project file syntax error:\n"
+"\n"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
+msgid "Project properties"
+msgstr ""
+
+#: ../ConfigTreeNode.py:571
+#, python-brace-format
+msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:101
+msgid "Propagate Name"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Properties"
+msgstr ""
+
+#: ../Beremiz_service.py:427
+msgid "Publishing service on local network"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:126
+#, python-format
+msgid "Pyro exception: %s\n"
+msgstr ""
+
+#: ../Beremiz_service.py:420
+msgid "Pyro port :"
+msgstr ""
+
+#: ../py_ext/PythonEditor.py:84
+msgid "Python code"
+msgstr ""
+
+#: ../features.py:34
+msgid "Python file"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Qualifier"
+msgstr ""
+
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+msgid "Quit"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+msgid "Range:"
+msgstr ""
+
+#: ../ProjectController.py:1872
+msgid "Raw IEC code"
+msgstr ""
+
+#: ../BeremizIDE.py:1083
+#, python-format
+msgid "Really delete node '%s'?"
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
+msgid "Redo"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:76
+msgid "Reference"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+msgid "Refresh"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:70
+msgid "Regular expression"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:99
+msgid "Regular expressions"
+msgstr ""
+
+#: ../editors/Viewer.py:1636
+msgid "Release value"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:37
+msgid "Remainder (modulo)"
+msgstr ""
+
+#: ../BeremizIDE.py:1084
+#, python-format
+msgid "Remove %s node"
+msgstr ""
+
+#: ../IDEFrame.py:2445
+msgid "Remove Datatype"
+msgstr ""
+
+#: ../IDEFrame.py:2450
+msgid "Remove Pou"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:144
+msgid "Remove action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:365
+msgid "Remove element"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:66
+msgid "Remove file from left folder"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:284
+msgid "Remove instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:111
+msgid "Remove slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:253
+msgid "Remove task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+msgid "Remove variable"
+msgstr ""
+
+#: ../IDEFrame.py:1979
+msgid "Rename"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:187
+msgid "Replace File"
+msgstr ""
+
+#: ../editors/Viewer.py:598
+msgid "Replace Wire by connections"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:89
+msgid "Replacement (within)"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Reset"
+msgstr ""
+
+#: ../editors/Viewer.py:681
+msgid "Reset Execution Order"
+msgstr ""
+
+#: ../IDEFrame.py:453
+msgid "Reset Perspective"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:103
+msgid "Reset search result"
+msgstr ""
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+msgid "Resources"
+msgstr ""
+
+#: ../controls/VariablePanel.py:77
+msgid "Retain"
+msgstr ""
+
+#: ../controls/VariablePanel.py:455
+msgid "Return Type:"
+msgstr ""
+
+#: ../editors/Viewer.py:582
+msgid "Right"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:65
+msgid "Right PowerRail"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+msgid "Rising Edge"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:65
+msgid "Rotate left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:64
+msgid "Rotate right"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:17
+msgid "Rounding up/down"
+msgstr ""
+
+#: ../ProjectController.py:1828
+msgid "Run"
+msgstr ""
+
+#: ../ProjectController.py:1127
+msgid "Runtime IO extensions C code generation failed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1136
+msgid "Runtime library extensions C code generation failed !\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
+msgid "SDO Client"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
+msgid "SDO Server"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "SFC"
+msgstr ""
+
+#: ../PLCGenerator.py:1433
+#, python-brace-format
+msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
+msgstr ""
+
+#: ../PLCGenerator.py:780
+#, python-format
+msgid "SFC transition in POU \"%s\" must be connected."
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "ST"
+msgstr ""
+
+#: ../PLCOpenEditor.py:308
+msgid "ST files (*.st)|*.st|All files|*.*"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "SVG files (*.svg)|*.svg|All files|*.*"
+msgstr ""
+
+#: ../features.py:36
+msgid "SVGUI"
+msgstr ""
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
+msgid "Save"
+msgstr ""
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
+msgid "Save As..."
+msgstr ""
+
+#: ../BeremizIDE.py:249
+msgid "Save as"
+msgstr ""
+
+#: ../ProjectController.py:530
+msgid "Save path is the same as path of a project! \n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:73
+msgid "Scope"
+msgstr ""
+
+#: ../IDEFrame.py:644
+msgid "Search"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
+msgid "Search in Project"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:49
+msgid "Seconds:"
+msgstr ""
+
+#: ../IDEFrame.py:390
+msgid "Select All"
+msgstr ""
+
+#: ../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:1293
+msgid "Select an editor:"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:292
+msgid "Select an instance"
+msgstr ""
+
+#: ../IDEFrame.py:628
+msgid "Select an object"
+msgstr ""
+
+#: ../ProjectController.py:537
+msgid "Selected directory already contains another project. Overwrite? \n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Selection"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:65
+msgid "Selection Divergence"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:135
+msgid "Service Discovery"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:104
+msgid "Services available:"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Set"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Shift left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:63
+msgid "Shift right"
+msgstr ""
+
+#: ../ProjectController.py:1863
+msgid "Show IEC code generated by PLCGenerator"
+msgstr ""
+
+#: ../canfestival/canfestival.py:407
+msgid "Show Master"
+msgstr ""
+
+#: ../canfestival/canfestival.py:408
+msgid "Show Master generated by config_utils"
+msgstr ""
+
+#: ../ProjectController.py:1862
+msgid "Show code"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:67
+msgid "Simultaneous Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:27
+msgid "Sine"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Single"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:130
+msgid "Source didn't change, no build.\n"
+msgstr ""
+
+#: ../PLCGenerator.py:404
+#, python-brace-format
+msgid ""
+"Source signal has to be defined for single task '{a1}' in resource "
+"'{a2}.{a3}'."
+msgstr ""
+
+#: ../plcopen/iec_std.csv:23
+msgid "Square root (base 2)"
+msgstr ""
+
+#: ../plcopen/definitions.py:50
+msgid "Standard function blocks"
+msgstr ""
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+msgid "Start PLC"
+msgstr ""
+
+#: ../ProjectController.py:1074
+#, python-format
+msgid "Start build in %s\n"
+msgstr ""
+
+#: ../ProjectController.py:1397
+msgid "Started"
+msgstr ""
+
+#: ../ProjectController.py:1633
+msgid "Starting PLC\n"
+msgstr ""
+
+#: ../BeremizIDE.py:393
+msgid "Status ToolBar"
+msgstr ""
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+msgid "Step"
+msgstr ""
+
+#: ../ProjectController.py:1835
+msgid "Stop"
+msgstr ""
+
+#: ../Beremiz_service.py:272
+msgid "Stop PLC"
+msgstr ""
+
+#: ../ProjectController.py:1836
+msgid "Stop Running PLC"
+msgstr ""
+
+#: ../ProjectController.py:1398
+msgid "Stopped"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Structure"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Subrange"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:35
+msgid "Subtraction"
+msgstr ""
+
+#: ../ProjectController.py:1113
+msgid "Successfully built.\n"
+msgstr ""
+
+#: ../IDEFrame.py:449
+msgid "Switch perspective"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
+msgid "Syntax error in regular expression of pattern to search!"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:90
+msgid "TYPE"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:29
+msgid "Tangent"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:97
+msgid "Task"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:248
+msgid "Tasks:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Temp"
+msgstr ""
+
+#: ../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"
+"\n"
+"This is the main community support channel.\n"
+"For posting it is required to be subscribed to the mailing list.\n"
+"\n"
+"You can subscribe to the list here:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:186
+#, python-format
+msgid ""
+"The file '%s' already exist.\n"
+"Do you want to replace it?"
+msgstr ""
+
+#: ../editors/LDViewer.py:893
+msgid "The group of block must be coherent!"
+msgstr ""
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+msgid "There are changes, do you want to save?"
+msgstr ""
+
+#: ../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:1133
+msgid ""
+"There was a problem printing.\n"
+"Perhaps your current printer is not set correctly?"
+msgstr ""
+
+#: ../editors/LDViewer.py:902
+msgid "This option isn't available yet!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#, python-format
+msgid "Tick: %d"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40
+msgid "Time"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
+msgid "Time addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:86
+msgid "Time concatenation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
+msgid "Time division"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
+msgid "Time multiplication"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
+msgid "Time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
+msgid "Time-of-day addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
+#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
+msgid "Time-of-day subtraction"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:188
+msgid "Toggle value"
+msgstr ""
+
+#: ../editors/Viewer.py:584
+msgid "Top"
+msgstr ""
+
+#: ../ProjectController.py:1848
+msgid "Transfer"
+msgstr ""
+
+#: ../ProjectController.py:1849
+msgid "Transfer PLC"
+msgstr ""
+
+#: ../ProjectController.py:1802
+msgid "Transfer completed successfully.\n"
+msgstr ""
+
+#: ../ProjectController.py:1805
+msgid "Transfer failed\n"
+msgstr ""
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
+msgid "Transition"
+msgstr ""
+
+#: ../PLCGenerator.py:1564
+#, python-format
+msgid ""
+"Transition \"%s\" body must contain an output variable or coil referring to "
+"its name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:91
+msgid "Transition Name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:60
+msgid "Transition Name:"
+msgstr ""
+
+#: ../PLCGenerator.py:1657
+#, python-brace-format
+msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:1646
+#, python-brace-format
+msgid ""
+"Transition with content \"{a1}\" not connected to a previous step in "
+"\"{a2}\" POU"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1526
+#, python-format
+msgid "Transition with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Transitions"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:127
+msgid "Translated by"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Triggering"
+msgstr ""
+
+#: ../Beremiz_service.py:490
+msgid "Twisted unavailable."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
+msgid "Type"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:54
+msgid "Type and derivated"
+msgstr ""
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#, python-format
+msgid "Type conflict for location \"%s\""
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Type conversion"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:170
+msgid "Type infos:"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:55
+msgid "Type strict"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:43
+#, python-format
+msgid "Unable to get Xenomai's %s \n"
+msgstr ""
+
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#, python-brace-format
+msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:261
+#, python-format
+msgid "Undefined pou type \"%s\""
+msgstr ""
+
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
+msgid "Undo"
+msgstr ""
+
+#: ../ProjectController.py:442
+msgid "Unknown"
+msgstr ""
+
+#: ../editors/Viewer.py:437
+#, python-format
+msgid "Unknown variable \"%s\" for this POU!"
+msgstr ""
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
+msgid "Unnamed"
+msgstr ""
+
+#: ../PLCControler.py:263
+#, python-format
+msgid "Unnamed%d"
+msgstr ""
+
+#: ../controls/VariablePanel.py:308
+#, python-format
+msgid "Unrecognized data size \"%s\""
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+msgid "User Data Types"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
+msgid "User Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "User-defined POUs"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:267
+msgid "Values:"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
+msgid "Variable"
+msgstr ""
+
+#: ../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:68
+msgid "Variable Properties"
+msgstr ""
+
+#: ../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:439 ../editors/TextViewer.py:388
+msgid "Variable don't belong to this POU!"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:92
+msgid "Variable:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "Variables"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:166
+msgid "Vertical:"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:140
+msgid "WAMP connection timeout"
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:158
+#, python-format
+msgid "WAMP connection to '%s' failed.\n"
+msgstr ""
+
+#: ../Beremiz_service.py:595
+msgid "WAMP import failed :"
+msgstr ""
+
+#: ../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 ""
+
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+msgid "Warning"
+msgstr ""
+
+#: ../ProjectController.py:726
+msgid "Warnings in ST/IL/SFC code generator :\n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:82
+msgid "Whole Project"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:134
+msgid "Width:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:94
+msgid "Wrap search"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:126
+msgid "Written by"
+msgstr ""
+
+#: ../features.py:35
+msgid "WxGlade GUI"
+msgstr ""
+
+#: ../svgui/svgui.py:150
+msgid ""
+"You don't have write permissions.\n"
+"Open Inkscape anyway ?"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
+msgid ""
+"You don't have write permissions.\n"
+"Open wxGlade anyway ?"
+msgstr ""
+
+#: ../ProjectController.py:390
+msgid ""
+"You must have permission to work on the project\n"
+"Work on a project copy ?"
+msgstr ""
+
+#: ../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:677
+msgid "You must select the wire where a contact should be added!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
+msgid "You must type a name!"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:209
+msgid "You must type a value!"
+msgstr ""
+
+#: ../IDEFrame.py:440
+msgid "Zoom"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "days"
+msgstr ""
+
+#: ../PLCOpenEditor.py:317
+#, python-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../util/ProcessLogger.py:178
+#, python-brace-format
+msgid "exited with status {a1} (pid {a2})\n"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "function"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "functionBlock"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "hours"
+msgstr ""
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
+msgid "milliseconds"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "minutes"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "program"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "seconds"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:84
+msgid "string from the middle"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:82
+msgid "string left of"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:83
+msgid "string right of"
+msgstr ""
+
+#: ../Beremiz.py:167
+msgid "update info unavailable."
+msgstr ""
+
+#: ../PLCOpenEditor.py:315
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#: ../PLCControler.py:576
+#, python-brace-format
+msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
+msgstr ""
+
+#: ../ConfigTreeNode.py:58
+#, python-brace-format
+msgid ""
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
+"{a3}"
+msgstr ""
+
+#: Extra XSD strings
+msgid "CanFestivalSlaveNode"
+msgstr ""
+
+msgid "CAN_Device"
+msgstr ""
+
+msgid "CAN_Baudrate"
+msgstr ""
+
+msgid "NodeId"
+msgstr ""
+
+msgid "Sync_Align"
+msgstr ""
+
+msgid "Sync_Align_Ratio"
+msgstr ""
+
+msgid "CanFestivalNode"
+msgstr ""
+
+msgid "Sync_TPDOs"
+msgstr ""
+
+msgid "CanFestivalInstance"
+msgstr ""
+
+msgid "CAN_Driver"
+msgstr ""
+
+msgid "Generic"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Xenomai"
+msgstr ""
+
+msgid "XenoConfig"
+msgstr ""
+
+msgid "Compiler"
+msgstr ""
+
+msgid "CFLAGS"
+msgstr ""
+
+msgid "Linker"
+msgstr ""
+
+msgid "LDFLAGS"
+msgstr ""
+
+msgid "Linux"
+msgstr ""
+
+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 ""
+
+msgid "IEC_Channel"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "BeremizRoot"
+msgstr ""
+
+msgid "TargetType"
+msgstr ""
+
+msgid "Libraries"
+msgstr ""
+
+msgid "URI_location"
+msgstr ""
+
+msgid "Disable_Extensions"
+msgstr ""
+
+msgid "%(codefile_name)s"
+msgstr ""
+
+msgid "variables"
+msgstr ""
+
+msgid "variable"
+msgstr ""
+
+msgid "name"
+msgstr ""
+
+msgid "type"
+msgstr ""
+
+msgid "class"
+msgstr ""
+
+msgid "initial"
+msgstr ""
+
+msgid "desc"
+msgstr ""
+
+msgid "onchange"
+msgstr ""
+
+msgid "opts"
+msgstr ""
+
+#: Extra TC6 documentation strings
+msgid "0 - current time, 1 - load time from PDT"
+msgstr ""
+
+msgid "Preset datetime"
+msgstr ""
+
+msgid "Copy of IN"
+msgstr ""
+
+msgid "Datetime, current or relative to PDT"
+msgstr ""
+
+msgid ""
+"The real time clock has many uses including time stamping, setting dates and"
+" times of day in batch reports, in alarm messages and so on."
+msgstr ""
+
+msgid "1 = integrate, 0 = hold"
+msgstr ""
+
+msgid "Overriding reset"
+msgstr ""
+
+msgid "Input variable"
+msgstr ""
+
+msgid "Initial value"
+msgstr ""
+
+msgid "Sampling period"
+msgstr ""
+
+msgid "NOT R1"
+msgstr ""
+
+msgid "Integrated output"
+msgstr ""
+
+msgid ""
+"The integral function block integrates the value of input XIN over time."
+msgstr ""
+
+msgid "0 = reset"
+msgstr ""
+
+msgid "Input to be differentiated"
+msgstr ""
+
+msgid "Differentiated output"
+msgstr ""
+
+msgid ""
+"The derivative function block produces an output XOUT proportional to the "
+"rate of change of the input XIN."
+msgstr ""
+
+msgid "0 - manual , 1 - automatic"
+msgstr ""
+
+msgid "Process variable"
+msgstr ""
+
+msgid "Set point"
+msgstr ""
+
+msgid "Manual output adjustment - Typically from transfer station"
+msgstr ""
+
+msgid "Proportionality constant"
+msgstr ""
+
+msgid "Reset time"
+msgstr ""
+
+msgid "Derivative time constant"
+msgstr ""
+
+msgid "PV - SP"
+msgstr ""
+
+msgid "FB for integral term"
+msgstr ""
+
+msgid "FB for derivative term"
+msgstr ""
+
+msgid ""
+"The PID (proportional, Integral, Derivative) function block provides the "
+"classical three term controller for closed loop control."
+msgstr ""
+
+msgid "0 - track X0, 1 - ramp to/track X1"
+msgstr ""
+
+msgid "Ramp duration"
+msgstr ""
+
+msgid "BUSY = 1 during ramping period"
+msgstr ""
+
+msgid "Elapsed time of ramp"
+msgstr ""
+
+msgid "The RAMP function block is modelled on example given in the standard."
+msgstr ""
+
+msgid ""
+"The hysteresis function block provides a hysteresis boolean output driven by"
+" the difference of two floating point (REAL) inputs XIN1 and XIN2."
+msgstr ""
+
+msgid "The SR bistable is a latch where the Set dominates."
+msgstr ""
+
+msgid "The RS bistable is a latch where the Reset dominates."
+msgstr ""
+
+msgid ""
+"The semaphore provides a mechanism to allow software elements mutually "
+"exclusive access to certain resources."
+msgstr ""
+
+msgid "The output produces a single pulse when a rising edge is detected."
+msgstr ""
+
+msgid "The output produces a single pulse when a falling edge is detected."
+msgstr ""
+
+msgid ""
+"The up-counter can be used to signal when a count has reached a maximum "
+"value."
+msgstr ""
+
+msgid ""
+"The down-counter can be used to signal when a count has reached zero, on "
+"counting down from a preset value."
+msgstr ""
+
+msgid ""
+"The up-down counter has two inputs CU and CD. It can be used to both count "
+"up on one input and down on the other."
+msgstr ""
+
+msgid "first input parameter"
+msgstr ""
+
+msgid "second input parameter"
+msgstr ""
+
+msgid "first output parameter"
+msgstr ""
+
+msgid "second output parameter"
+msgstr ""
+
+msgid "internal state: 0-reset, 1-counting, 2-set"
+msgstr ""
+
+msgid ""
+"The pulse timer can be used to generate output pulses of a given time "
+"duration."
+msgstr ""
+
+msgid ""
+"The on-delay timer can be used to delay setting an output true, for fixed "
+"period after an input becomes true."
+msgstr ""
+
+msgid ""
+"The off-delay timer can be used to delay setting an output false, for fixed "
+"period after input goes false."
+msgstr ""
--- a/i18n/Beremiz_ru_RU.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_ru_RU.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,17 +1,16 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017
+#, fuzzy
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"
-"Last-Translator: Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: zx_alexis <zxalexis@gmail.com>, 2017\n"
"Language-Team: Russian (Russia) (https://www.transifex.com/beremiz/teams/75746/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,7 +18,7 @@
"Language: ru_RU\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -44,151 +43,156 @@
"\n"
"Traceback:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr " Внешний"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr " Вход/Выход"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr " Вход"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr " Локальный"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr " Выход"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr " Временный"
-#: ../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 "и %s"
-
-#: ../ProjectController.py:1151
+msgstr " и %s"
+
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr "неудачная генерация кода!\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "Тип данных \"%s\" не существует!!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "POU \"%s\" уже существует!!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "POU \"%s\" не найден!!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" не может использовать сам себя!!!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "Конфигурация \"%s\" уже существует!!!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "Конфигурация \"%s\" уже существует!!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "конфигурация \"%s\" не существует!!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "Тип данных \"%s\" уже существует!!!"
-#: ../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\" уже существует в этом POU!!!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "Директория \"%s\" не является проектом Beremiz\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\" является ключевым словом и не может быть использован!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" недопустимое значение!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" не является директорией!"
-#: ../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\" неверный идентификатор!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
-msgstr "\"%s\" используется более чем одним POU. Продолжить?"
-
-#: ../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
+msgstr "\"%s\" используется одним или более POU. Продолжить?"
+
+#: ../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 "POU \"%s\" уже существует!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "Шаг \"%s\" уже существует!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "\"%s\" значение уже задано!"
-#: ../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\" не является корректной размерностью для массива! "
-#: ../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"
@@ -197,200 +201,196 @@
"\"%s\" не является корректной размерностью массива! Правое значение должно "
"быть больше левого."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "Функция \"{a1}\" не используется в POU \"{a2}\": входы не подключены"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" уже используется \"{a2}\"!"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "Ресурс \"{a1}\" уже существует в конфигурации \"{a2}\"!!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "Ресурс \"{a1}\" отсутствует в конфигурации \"{a2}\"!!!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
#, python-format
msgid "%03gms"
msgstr "%03gмс"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
#, python-format
msgid "%dd"
msgstr "%dд"
-#: ../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 "%dч"
-#: ../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 "%dм"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
#, python-format
msgid "%dms"
msgstr "%dмс"
-#: ../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 "%dc"
-#: ../PLCControler.py:1533
+#: ../PLCControler.py:1114
#, python-format
msgid "%s Data Types"
msgstr "%s типы данных"
-#: ../PLCControler.py:1516
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
msgstr "%s POU"
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr "%s профиль"
-#: ../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 не содержит экземпляров!"
-#: ../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 не содержит никакой текст!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Добавить элемент"
-#: ../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 "&Закрыть"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&Конфигурация"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&Типы данных"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Удалить"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Вид"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Редактировать"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&Файл"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Функции"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Помощь"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&Лицензия"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Программы"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Свойства"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&Недавние проекты"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Ресурсы"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}'- {a2} совпадений в проекте"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} совпадений в проекте"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' находится {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d совпадений)"
-#: ../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 "- Выбирете тип URI -"
+
+#: ../controls/LogViewer.py:287
msgid "1d"
msgstr "1 день"
-#: ../controls/LogViewer.py:280
+#: ../controls/LogViewer.py:288
msgid "1h"
msgstr "1 час"
-#: ../controls/LogViewer.py:281
+#: ../controls/LogViewer.py:289
msgid "1m"
msgstr "1 мин"
-#: ../controls/LogViewer.py:282
+#: ../controls/LogViewer.py:290
msgid "1s"
msgstr "1 сек"
-#: ../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 "
@@ -399,9 +399,9 @@
"В POU присутствует элемент с именем \"%s\". Это может вызвать конфликт. "
"Хотите продолжить?"
-#: ../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 "POU с именем \"%s\" уже существует!"
@@ -411,26 +411,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "Дочерний элемент с именем \"{a1}\" уже существует -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "Необходимо выбрать размещение!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "Задача с таким именем уже существует!"
-#: ../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 "Переменная с именем \"%s\" уже существует в этом POU!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "Переменная с именем \"%s\" уже существует!"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "О программе"
@@ -438,125 +438,125 @@
msgid "Absolute number"
msgstr "Абсолютный номер"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Действие"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "Блок действия"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Имя действия"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Имя действия:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "Действие с именем %s не существует!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "Действия"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "Действия:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "Активный"
-#: ../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 "Добавить"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../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 "Добавить C-код с синхронным доступом к локальным переменным"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "Добавить конфигурацию"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "Добавить тип данных"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Добавить ветвление"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "Добавить IP адрес"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "Добавить POU"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "Добавить асинхронно вызываемый код на Python"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "Добавить ресурс"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "Добавить переход"
-#: ../editors/Viewer.py:559
+#: ../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:2757 ../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 "Добавить простой GUI на WxGlade "
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "Добавить действие"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "Добавить элемент"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "Добавить экземпляр"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Добавить слэйв"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "Добавить задачу"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "Добавить переменную"
@@ -564,44 +564,44 @@
msgid "Addition"
msgstr "Сложение"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "Дополнительные функциональные блоки"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "Скорректировать размер элемента"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "Выравнивание"
-#: ../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 "Все"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "Все файлы (*.*)|*.*|CSV files (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "Уже подключен. Пожалуйста, отключитесь сначала.\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "Поле с именем \"%s\" уже существует в данной структуре!"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "Экземпляр задачи с таким именем уже существует!"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr "Переименовать все цепи с тем же самым именем"
@@ -621,8 +621,8 @@
msgid "Arithmetic"
msgstr "Математика"
-#: ../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 "Массив"
@@ -630,45 +630,37 @@
msgid "Assignment"
msgstr "Присвоение"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "Переменная или выражение должно быть выбрано!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Автор"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Имя автора (опционально):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Назад"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Неправильное доменное имя (ответ) в "
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Неправильное доменное имя в"
-
-#: ../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 "Неправильный размер: %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 "Базовый тип:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "Базовые типы"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -700,85 +692,85 @@
msgid "Bitwise inverting"
msgstr "Битовое НЕ"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "Блок"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "Свойства блока"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "Имя блока"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "Низ"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr "Ошибка"
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr "Просмотр %s значений библиотеки"
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr "Просмотр доступных МЭК-адресов"
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "Сборка"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "Директория сборки уже пуста\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr "Сборка проекта в директории сборки"
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "Крэш во время сборки C-кода!\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "Ошибка сборки C-кода.\n"
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr "C код "
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr "C-код успешно сгенерирован.\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr "Ошибка компиляции.\n"
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr "Ошибка компиляции %s.\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "С-расширение"
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
msgstr "&Благодарности"
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
msgstr "Сеть CANOpen"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "CANOpen ведущий"
@@ -786,34 +778,34 @@
msgid "CANopen support"
msgstr "Поддержка CANOpen"
-#: ../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 "Можно сгенерировать порядок исполнения только для FBD!"
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr "Можно задать адреса только локальным или глобальным переменным"
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr "Нельзя сгенерировать программу в файл %s!"
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr "Нельзя задать размещение для экземпляра функционального блока"
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr "Нельзя сохранить проект в файл %s!"
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr "Нельзя задать исходное значение экземпляру функционального блока"
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr "Нельзя создать дочерний элемент {a1} типа {a2}"
@@ -823,15 +815,15 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "Не удалось найти свободный МЭК-канал с номером меньше, чем %d\n"
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "Невозможно получить состояние ПЛК - ошибка подключения.\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "Не удалось открыть/прочитать 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 "
@@ -840,31 +832,35 @@
"Невозможно установить битовое смещение для не булевой переменной '{a1}' "
"(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 "Передача запрещена во время работы ПЛК. Остановить?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr "Регистрозависимый"
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "Центр"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "Сменить IP-адрес интерфейса для привязки сокета"
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "Сменить имя"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "Сменить тип POU на"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "Сменить номер порта"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "Сменить рабочую директорию"
@@ -872,116 +868,120 @@
msgid "Character string"
msgstr "Строковые операции"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "Выберите SVG-файл"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "Выберите директорию, чтобы сохранить проект"
-#: ../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 "Выберите файл"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../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 "Выберите значение для %s:"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "Выберите рабочую директорию"
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Выберите пустой каталог для проекта"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr "Выбранная директория не содержит программы. Это некорректный проект!"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
"Выбранная директория не пуста и не может использоваться для нового проекта!"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "Класс"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "Фильтр класса:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "Класс:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "Очистить"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "Очистить лог"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "Очистить директорию сборки проекта"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "Очистка директории сборки\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "Очистить ошибки"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "Очистить порядок исполнения"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "Закрыть"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Закрыть приложение"
-#: ../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 "Закрыть проект"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "Закрыть вкладку"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "Катушка"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Комментарий"
-#: ../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 "Поддержка сообщества"
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "Имя компании"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "Компания (обязательно):"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "Сайт компании (опционально):"
@@ -989,7 +989,7 @@
msgid "Comparison"
msgstr "Сравнение"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "Компиляция МЭК-программы в C-код...\n"
@@ -997,93 +997,93 @@
msgid "Concatenation"
msgstr "Объединение"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "Конфигурация"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "Конфигурационные переменные"
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr "Конфигурация"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr "Конфигурации"
-#: ../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 "Подтвердить или поменять имя переменной"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "Подключиться"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "Подключиться к целевому ПЛК"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "Подключен к 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 "Подключение"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "Свойства подключения"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "Подключение отменено!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "Неудачное подключение к %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 "Подключение прервано!\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "Неудачное подключение к %s!\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "Коннектор"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "Коннекторы:"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "Консоль"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "Константа"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr "Контакт"
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "Описание содержимого (опционально):"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "Продолжение"
@@ -1103,20 +1103,20 @@
msgid "Conversion to time-of-day"
msgstr "Преобразование во время суток"
-#: ../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 "Копировать"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "Копировать POU"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "Скопировать файл с левой директории в правую"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "Скопировать файл с правой директории в левую"
@@ -1124,7 +1124,7 @@
msgid "Cosine"
msgstr "Косинус"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
@@ -1133,12 +1133,12 @@
"Невозможно добавить дочерний элемент \"{a1}\", тип {a2}:\n"
"{a3}\n"
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr "Невозможно импортировать старый файл %s."
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
@@ -1147,7 +1147,7 @@
"Невозможно загрузить базовые параметры confnode {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"
@@ -1156,111 +1156,107 @@
"Невозможно загрузить параметры confnode {a1}:\n"
" {a2}"
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Невозможно вставить не-POU."
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "Невозможно запустить ПЛК!\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "Невозможно остановить ПЛК!\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Невозможно остановить отладчик.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "Создать HMI"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "Создать новый POU"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "Создать новое действие"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "Создать новый блок действие"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "Создать новый блок"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "Создать новое ветвление"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "Создать новую катушку"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "Создать новый комментарий"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "Создать новое подключение"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "Создать новый контакт"
-#: ../IDEFrame.py:162
+#: ../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:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "Создать исходный шаг"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "Создать новый безусловный переход"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "Создать новую линию питания"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "Создать новую цепь"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "Создать новый шаг"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "Создать новый переход"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "Создать новую переменную"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "Благодарности"
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr "Текущая рабочая директория :"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "Вырезать"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "Циклический"
@@ -1272,19 +1268,19 @@
msgid "DEPRECATED"
msgstr "УСТАРЕЛО"
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
msgid "DS-301 Profile"
msgstr "Профиль DS-301"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "Профиль DS-302"
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr "Тип данных"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "Типы данных"
@@ -1305,68 +1301,60 @@
msgid "Date subtraction"
msgstr "Вычитание дат"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "Дни:"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
"Отлаживаемая программа не соответствует программе в ПЛК - "
"остановите/загрузите/запустите, чтобы разрешить отладку\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "Отладка экземпляра"
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr "Отладка: %s"
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr "Отладка: неизвестная переменная '%s'\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Отладка: неподдерживамый отладкой тип '%s'\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "Отладчик"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Отладчик запрещен\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "Отладчик готов\n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Отладчик остановлен.\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "Удалить"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "Удалить ветвь"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "Удалить файл"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "Удалить сегмент цепи"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "Удалить"
@@ -1374,47 +1362,47 @@
msgid "Deletion (within)"
msgstr "Удаление подстроки"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "Механизм создания типа:"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr "Описание"
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr "Описание:"
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "Размеры:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr "Направление"
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "Направление:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "Синоним"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "Отключиться"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "Отключиться от ПЛК"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "Отключено"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "Ветвление"
@@ -1422,121 +1410,121 @@
msgid "Division"
msgstr "Деление"
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr "Вы действительно хотите удалить этот файл '%s'?"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "Описание"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "Завершено"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Длительность"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "Файлы EDS (*.eds)|*.eds|All files|*.*"
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "Редактировать блок"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "Редактировать значение катушки"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "Редактировать значение контакта"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../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:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "Редактировать WxWidgets GUI с помощью WXGlade"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "Редактировать свойства блока действия"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "Редактировать свойства массива"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "Редактировать комментарий"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "Редактировать файл"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "Редактировать элемент"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "Редактирование безусловного перехода"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr ""
"Редактировать МЭК-код добавленный к коду сгенерированному PLCGenerator"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "Редактировать имя шага"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "Редактировать переход"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "Редактор панели инструментов"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "Редактор выделения"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "Элементы:"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "Нет программы"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Разрешить отмену и повтор операций"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Размер не должен быть нулевым"
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "Введите имя"
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "Введите номер порта"
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "Введите IP-адрес используемого интерфейса"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Перечисление"
@@ -1544,37 +1532,36 @@
msgid "Equal to"
msgstr "Равно"
-#: ../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 "Ошибка"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
@@ -1582,49 +1569,58 @@
"Ошибка: Как минимум одна конфигурация и один ресурс должны быть "
"задекларированы в ПЛК!\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Ошибка: компилятор МЭК в C вернул код ошибки %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
"%s\n"
msgstr "Ошибка в ST/IL/SFC кодогенераторе: %s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "Ошибка во время сохранения \"%s\"\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr "Ошибка: неудачный экспорт ведомого\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 ""
+"Ошибка: Modbus/IP сервера %{a1}.x и %{a2}.x используют один и тот же порт "
+"{a3}.\n"
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "Ошибка: мастер не сгенерирован\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "Ошибка: ПЛК не собран\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "Исключение во время подключения %s!\n"
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "Управление исполнением:"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "Порядок исполнения:"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "Экспериментальный WEB-HMI"
@@ -1636,77 +1632,77 @@
msgid "Exponentiation"
msgstr "Взятие экспоненты"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "Экспортировать CanOpen ведомое устройство в EDS файл"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr "Экспортировать график значений в буфер обмена"
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr "Экспортировать ведомое устройство"
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "Выражение:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "Внешний"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "Экспорт локальных переменных...\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 "Ошибка: необходима сборка перед передачей.\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "Спадающий фронт"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "Ошибка: невозможно получить сборщик.\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr "Проверка %s"
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr "Поле %s имеет неверное значение!"
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr "Поля %s имеют неверные значения!"
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr "Файл '%s' уже существует!"
-#: ../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 "Поиск"
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr "Поиск следующего"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr "Поиск предыдущего"
@@ -1714,93 +1710,90 @@
msgid "Find position"
msgstr "Поиск позиции"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr "Поиск:"
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "Принудительный перезапуск системы исполнения\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "Форсировать значение"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "Форсировать значение переменной"
-#: ../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 "Форма заполнена неполностью. %s должен быть заполнен!"
-
-#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236
-#: ../dialogs/ConnectionDialog.py:163
+msgstr "Форма заполнена не полностью. %s необходимо заполнить!"
+
+#: ../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:232
+msgstr "Форма заполнена не полностью. Имя должно быть заполнено!"
+
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
-msgstr "Форма заполнена неполностью. Должен быть выбран корректный тип блока!"
-
-#: ../dialogs/FindInPouDialog.py:72
+msgstr ""
+"Форма заполнена не полностью. Должен быть выбран корректный тип блока!"
+
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr "Вперед"
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "Функция"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "Функциональный &блок"
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr "Функциональный блок"
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr "Типы функциональных блоков"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr "Функциональные блоки"
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr "Функциональные блоки не могут использоваться в функциях!"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "Функциональный блок \"%s\" не может быть вставлен в функцию!!!"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "Функции"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr "Сгенерировать программу"
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "Генерация МЭК-61131 ST/IL/SFC кода ПЛК...\n"
-#: ../controls/VariablePanel.py:73
+#: ../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:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "Графика"
@@ -1812,110 +1805,116 @@
msgid "Greater than or equal to"
msgstr "Больше или равно"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "Шаг сетки:"
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr "Порт HTTP-интерфейса :"
-#: ../controls/ProjectPropertiesPanel.py:121
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr "Высота:"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr "Домашняя директория:"
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "Горизонтальный:"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr "Часы:"
-#: ../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-адрес"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "Импорт 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 "Вход/Выход"
-#: ../editors/Viewer.py:431
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr ""
+"Входная/Выходная переменная {a1} в блоке {a2} в POU {a3} должна быть "
+"подключена."
+
+#: ../editors/Viewer.py:473
msgid "Inactive"
msgstr "Неактивный"
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr "\"{a1}\" и \"{a2}\" имеют несовместимые типы данных"
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "Несовместимый размер данных \"%s\" с типом \"BOOL\""
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr "\"{a1}\" и \"{a2}\" имеют несовместимый размер данных"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "Индикатор"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr "Исходное значение"
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr "Исходный шаг"
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "Исходное значение"
-#: ../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 "Исходное значение:"
-#: ../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 "Непосредственно"
-#: ../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 "Вход"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "Входы:"
@@ -1923,64 +1922,72 @@
msgid "Insertion (into)"
msgstr "Вставка подстроки"
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "Экземпляр с id %d не существует!"
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr "Экземпляры:"
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr "Интерфейс"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr "Прерывание"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr "Интервал"
-#: ../PLCControler.py:2331
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+"Неверный URL!\n"
+"Пожалуйста, введите корректный URL."
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "Некорректный PlcOpen элемент(ы)!!!"
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr "Неправильный тип \"{a1}\"-> {a2} != {a3} для \"{a4}\""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "Неверный тип \"{a1}\"-> {a2} != {a3} в функции \"{a4}\""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "Неправильный тип \"{a1}\"-> {a2} != {a3} для \"{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 "Неверное значение \"%s\" для отлаживаемой переменной"
-#: ../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 "Неверное значение \"%s\" для значения размещения переменной"
-#: ../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 "Неверное значение \"%s\" для вставки в редактор"
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr "Неверное значение \"{a1}\" для переменной \"{a2}\"!"
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1988,53 +1995,57 @@
"Неверное значение!\n"
"Необходимо ввести числовое значение."
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr "Безопасное подключение?"
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "Безусловный переход"
-#: ../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 "Элемент лестничной диаграммы с id %d более чем на одной ступени."
-#: ../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 "Язык"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "Язык (опционально):"
-#: ../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 "Язык:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
"Загружаемая программа совпадает с текущий программой в целевом ПЛК. Загрузка"
" продолжена...\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "Запустить WX GUI Inspector"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "Запустить консоль Python"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "Слева"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "Левая шина питания"
@@ -2050,11 +2061,11 @@
msgid "Less than or equal to"
msgstr "Меньше либо равно"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "Библиотеки"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "Лицензия"
@@ -2062,27 +2073,27 @@
msgid "Limitation"
msgstr "Ограничение"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr "Линковка:\n"
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "Локальный"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "Локальные записи"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr "Локальный сервис не найден!\n"
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "Адрес"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr "Доступные адреса:"
@@ -2090,12 +2101,12 @@
msgid "Logarithm to base 10"
msgstr "Десятичный логарифм"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "MDNS разрешение неудачно для '%s'\n"
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "Отображение переменной"
@@ -2103,11 +2114,15 @@
msgid "Map located variables over CANopen"
msgstr "Отображение переменных по CANopen"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr "Отображение переменных по Modbus"
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr "Ведущий"
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr ""
@@ -2117,29 +2132,29 @@
msgid "Maximum"
msgstr "Максимум"
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr "Максимум:"
-#: ../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 "Память"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr "Меню"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "Микросекунды:"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "Посередине"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "Миллисекунды:"
@@ -2147,23 +2162,27 @@
msgid "Minimum"
msgstr "Минимум"
-#: ../editors/DataTypeEditor.py:226
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
msgstr "Минимум:"
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
msgstr "Минуты:"
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "Прочее"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr "Поддержка Modbus"
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "Модификатор:"
-#: ../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 "
@@ -2172,55 +2191,55 @@
"Более одного коннектора соответствуют продолжению цепи \"{a1}\" в POU "
"\"{a2}\""
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "Переместить действие ниже"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "Переместить действие выше"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "Переместить ниже"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "Переместить элемент ниже"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "Переместить элементы выше"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "Переместить экземпляр ниже"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "Переместить экземпляр выше"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "Переместить задачу ниже"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "Переместить задачу выше"
-#: ../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 "Переместить отображение"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "Переместить выше"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "Переместить переменную ниже"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "Переместить переменную выше"
@@ -2232,26 +2251,26 @@
msgid "Multiplication"
msgstr "Умножение"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "Мой компьютер:"
-#: ../dialogs/DiscoveryDialog.py:92
+#: ../dialogs/DiscoveryDialog.py:89
msgid "NAME"
msgstr "Имя"
-#: ../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 "Имя"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "Имя не может быть 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 "Имя:"
@@ -2259,46 +2278,46 @@
msgid "Natural logarithm"
msgstr "Натуральный логарифм"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "Инверсия"
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
msgstr "Ошибка Web сервиса Nevow. "
-#: ../Beremiz_service.py:556
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
msgstr "Ошибка импорта Nevow/Athena :"
-#: ../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 "Новый"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "Новый элемент"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "Нет модификатора"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "Нет ПЛК для передачи (была сборка успешна?)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "Нет тела для POU \"%s\""
-#: ../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 "Не найден коннектор, соответствующий продолжению цепи \"{a1}\" в POU \"{a2}\""
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2306,60 +2325,60 @@
"Документация отсутствует.\n"
"В разработке."
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr "Не найдена информация по блоку \"%s\""
-#: ../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 "Выходная переменная {a1} не найдена в блоке {a2} в POU {a3}."
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "Ничего не найдено."
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "Нет такого SVG файла: %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 "Нет индекса/подиндекса ({a1},{a2}) (переменная {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 "Нет индекса/подиндекса ({a1},{a2}) в ID: {a3} (переменная {a4})"
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "Не выбрано допустимое значение!"
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "Переменная не определена в POU \"%s\""
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr "Несуществующий ID узла: {a1} (переменная {a2})"
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr "Не-Retain"
-#: ../dialogs/LDElementDialog.py:75
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
msgstr "Обычный"
-#: ../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 ""
@@ -2369,7 +2388,7 @@
msgid "Not equal to"
msgstr "Не равно"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Число ветвей:"
@@ -2377,24 +2396,24 @@
msgid "Numerical"
msgstr "Математические функции"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr "При изменении"
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "Только элементы"
-#: ../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 "Открыть"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "Открыть 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."
@@ -2403,67 +2422,67 @@
"из среды разработки программ по стандарту МЭК 61131 с постоянно "
"расширяющимся набором плагинов и гибкой системой исполнения для ПЛК."
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr "Открыть файловый менеджер для просмотра файлов проекта"
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "Открыть wxGlade"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr "Квалификатор"
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr "Настройки"
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "Организация (опционально):"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "Другой профиль"
-#: ../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 "Выход"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO приема"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "PDO передачи"
-#: ../targets/toolchain_gcc.py:167
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr "ПЛК:\n"
-#: ../BeremizIDE.py:355
+#: ../BeremizIDE.py:383
msgid "PLC Log"
msgstr "Лог ПЛК"
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr "Неудачная генерация кода!\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "В ПЛК нет программы или он уже запущен."
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "ПЛК незапущен."
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
@@ -2472,15 +2491,15 @@
"Синтаксическая ошибка в строке {a1}:\n"
"{a2}"
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "PLCOpen файлы (*.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"
@@ -2490,205 +2509,205 @@
"\n"
"Beremiz — "
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr "Порт"
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "Имя POU"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "Имя POU:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "Тип POU"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "Тип POU:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr "PYRO подключение к URI: %s\n"
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr "PYRO использует сертификаты в '%s'\n"
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "Настройки страницы"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "Размер страницы (опционально):"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "Страница: %d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr "Родительский экземпляр"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "Вставить"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "Вставить POU"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "Шаблон поиска:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "Номер пина:"
-#: ../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 "Выберите цель перехода"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr "Введите имя блока"
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../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:799
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr "Введите имя шага"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "Введите текст"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "Введите значение для переменной \"%s\":"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "Номер порта должен быть в диапазоне от 0 до 65535!"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "Номер порта должен быть целым числом!"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr "Шина питания"
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "Свойства шины питания"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "Просмотр"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "Просмотр:"
-#: ../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 "Печать"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "Предварительный просмотр"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "Приоритет"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "Приоритет:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "Проблема запуска ПЛК: ошибка %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "Имя продукта"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "Имя продукта (обязательно):"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "Релиз продукта (опционально):"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr "Версия продукта"
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "Версия продукта (обязательно):"
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr "Программа"
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr "Программа успешно сгенерирована!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "Программы"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr "Программы не могут использоваться другими POU!"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "Проект"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr "Проект '%s':"
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr "Файлы проекта"
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr "Имя проекта"
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "Имя проекта (обязательно):"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "Версия проекта (опционально):"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2696,90 +2715,90 @@
"Синтаксическая ошибка в файле проекта:\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "Свойства проекта"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr "Дерево проекта не соответствует confnode.xml {a1}!={a2} "
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr "Для всей цепи"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "Свойства"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr "Сервис доступен в локальной сети"
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr "Исключение Pyro: %s\n"
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr "URI для Pyro :"
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr "Порт Pyro :"
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr "Код на python"
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr "Python файл"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr "Спецификатор"
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr "Выход"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "Диапазон:"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr "МЭК-код"
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr "Действительно удалить элемент '%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 "Повторить"
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
msgid "Reference"
msgstr "Ссылка"
-#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr "Обновить"
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "Регулярное выражение"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr "Регулярные выражения"
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr "Освободить значение"
@@ -2787,56 +2806,56 @@
msgid "Remainder (modulo)"
msgstr "Остаток от деления (modulo)"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr "Удалить %s элемент"
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr "Удалить тип данных"
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr "Удалить POU"
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr "Удалить действие"
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr "Удалить элемент"
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr "Удалить файл из левой директории"
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr "Удалить экземпляр"
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "Удалить ведомое устройство"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr "Удалить задачу"
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr "Удалить переменную"
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "Переименовать"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr "Заменить файл"
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr "Заменить цепь подключениями"
@@ -2844,43 +2863,43 @@
msgid "Replacement (within)"
msgstr "Замена подстроки"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr "Сброс"
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr "Сбросить порядок исполнения"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr "Сбросить представление"
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr "Сбросить результаты поиска"
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "Ресурсы"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "Retain"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "Возвращаемый тип:"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "Право"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "Правая шина питания"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "Нарастающий фронт"
@@ -2896,116 +2915,116 @@
msgid "Rounding up/down"
msgstr "Округление вверх/вниз"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "Старт"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr "Ошибка генерации C-кода для расширений ввода-вывода!\n"
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr "Ошибка генерации C-кода для библиотеки расширений системы исполнения!\n"
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr "SDO клиент"
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr "SDO сервер"
-#: ../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 ""
"Безусловный переход в POU \"{a1}\" ссылается на несуществующий SFC шаг "
"\"{a2}\""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr "SFC переход в POU \"%s\" должен быть подключен."
-#: ../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 файлы (*.st)|*.st|Все файлы|*.*"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "SVG файлы (*.svg)|*.svg|Все файлы|*.*"
-#: ../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 "Сохранить"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "Сохранить как..."
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "Сохранить как"
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr "Выбранный путь совпадает с путём проекта!\n"
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "Область действия"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "Поиск"
-#: ../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 "Поиск в проекте"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "Секунды:"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "Выделить все"
-#: ../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 "Выберите класс переменной:"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "Выберите редактор:"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "Выберите экземпляр"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "Выберите объект"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr "Выбранная директория уже содержит другой проект. Перезаписать?\n"
@@ -3013,23 +3032,23 @@
msgid "Selection"
msgstr "Выбор"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "Альтернативное объединение"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "Альтернативное ветвление"
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "Поиск сервиса"
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "Доступные сервисы:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "Установить"
@@ -3041,27 +3060,27 @@
msgid "Shift right"
msgstr "Сдвиг вправо"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "Показать код, сгенерированный PLCGenerator"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "Показать ведущего"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "Показать ведущий узел сгенерированный config_utils"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "Показать код"
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
msgid "Simultaneous Convergence"
msgstr "Параллельное объединение"
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
msgid "Simultaneous Divergence"
msgstr "Параллельное ветвление"
@@ -3069,15 +3088,15 @@
msgid "Sine"
msgstr "Синус"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "Источник"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "Исходные файлы не изменились, сборка не нужна.\n"
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3089,60 +3108,56 @@
msgid "Square root (base 2)"
msgstr "Квадратный корень"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "Стандартные функциональные блоки"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "Запустить ПЛК"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "Сборка запущена в %s\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "Работа"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "ПЛК запускается\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "Панель статуса"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "Шаг"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "Стоп"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "Остановить ПЛК"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "Остановить запущенный ПЛК"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "Стоп"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Остановка отладчика...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "Структура"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "Поддиапазон"
@@ -3150,19 +3165,19 @@
msgid "Subtraction"
msgstr "Вычитание"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "Сборка прошла успешно.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr "Сменить представление"
-#: ../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 "Синтаксическая ошибка в регулярном выражении шаблона поиска!"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "Тип"
@@ -3170,19 +3185,19 @@
msgid "Tangent"
msgstr "Тангенс"
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr "Задача"
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr "Задачи:"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr "Временный"
-#: ../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"
@@ -3204,7 +3219,7 @@
"Вы можете подписаться на список рассылки здесь:\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"
@@ -3213,15 +3228,15 @@
"Файл '%s' уже существует.\n"
"Вы хотите заменить его?"
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "Группа блоков должна быть связанной!"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "Хотите сохранить изменения?"
-#: ../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 "
@@ -3230,7 +3245,7 @@
"Существует POU с именем \"%s\". Это может вызвать конфликт. Хотите "
"продолжить?"
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3238,11 +3253,11 @@
"Произошла проблема во время печати.\n"
"Возможно, текущий принтер не настроен?"
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "Это опция еще не доступна!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr "Цикл: %d"
@@ -3280,36 +3295,36 @@
msgid "Time-of-day subtraction"
msgstr "Вычитание времени суток"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr "Переключить значение"
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "Верх"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "Передать"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "Передать ПЛК"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "Передача успешно завершена.\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "Ошибка передачи\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 "Переход"
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
@@ -3318,58 +3333,58 @@
"Тело перехода \"%s\" должно содержать выходную переменную или катушку, "
"ссылающуюся на его имя"
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "Имя перехода"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "Имя перехода:"
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr "Переход с содержимым \"{a1}\" не подключен к следующему шагу в POU \"{a2}\""
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr "Переход с содержимым \"{a1}\" не подключен к предыдущему шагу в POU \"{a2}\""
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "Переход с именем %s отсутствует!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "Переходы"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr "Перевод"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "Запуск"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr "Модуль Twisted недоступен."
-#: ../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 "Тип"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr "Тип и его производные"
-#: ../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 "Конфликт типов для адреса \"%s\""
@@ -3378,179 +3393,233 @@
msgid "Type conversion"
msgstr "Преобразование типов"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr "Информация о типе:"
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr "Только данный тип"
-#: ../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 "Тип:"
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../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 "Тип URI:"
+
+#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515
#, python-format
msgid "Unable to define PDO mapping for node %02x"
msgstr "Невозможно определить отображение PDO для узла %02x"
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr "Невозможно получить Xenomai %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 "Неопределенный тип блока \"{a1}\" в POU \"{a2}\""
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "Неопределенный тип POU \"%s\""
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "Отмена"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "Неизвестно"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "Неизвестная переменная \"%s\" для этого 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 "Неопределенный размер данных \"%s\""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "Пользовательские типы данных"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "Пользовательский тип"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "Пользовательские POU"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "Значение"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "Значения:"
-#: ../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 "Переменная"
-#: ../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 "Перетаскивание переменной"
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "Свойства переменных"
-#: ../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 "Класс переменной"
-#: ../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 "Переменная не принадлежит этому POU!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "Переменная:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "Переменные"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "Вертикальный:"
-#: ../Beremiz_service.py:588
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr "Неудачное подключение WAMP (%s) .. повтор .."
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr "WAMP соединение потеряно (%s) .. переподключение .."
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr "WAMP ID:"
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr "WAMP клиент подключается к :"
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr "Не удалось выполнить WAMP подключение!"
+
+#: ../Beremiz_service.py:625
msgid "WAMP client startup failed. "
msgstr "Ошибка импорта WAMP. "
-#: ../connectors/WAMP/__init__.py:91
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr "Неполная конфигурация WAMP."
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr "Конфигурация WAMP отсутствует."
+
+#: ../connectors/WAMP/__init__.py:99
#, python-format
msgid "WAMP connecting to URL : %s\n"
msgstr "WAMP подключение к URI: %s\n"
-#: ../connectors/WAMP/__init__.py:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr "Тайм-аут WAMP подключения "
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr "Не удалось установить WAMP подключение к %s.\n"
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr "Ошибка импорта WAMP :"
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr "Ошибка загрузки WAMP:"
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr "Завершение сеанса WAMP"
+
+#: ../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:"
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "Предупреждение"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "Предупреждения в ST/IL/SFC коде генераторе:\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "Весь проект"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "Ширина:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr "Продолжить поиск сначала"
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Авторы"
-#: ../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 ?"
@@ -3558,7 +3627,7 @@
"У вас недостаточно прав для записи.\n"
"Открыть Inkscape все равно?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3566,7 +3635,7 @@
"У вас недостаточно прав для записи.\n"
"Открыть wxGlade все равно?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3574,80 +3643,72 @@
"Вы должны иметь права на запись, чтобы работать с проектом\n"
"Работать с копией проекта?"
-#: ../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 ""
"Выберите блок или группу блоков, вокруг которых нужно добавить ветвление!"
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr "Выберите провод, куда должен быть добавлен контакт!"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "Введите имя!"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "Введите значение!"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "Приближение"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr "дни"
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "ошибка: %s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr "завершился с кодом {a1} (pid {a2})\n"
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "файл:"
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr "функция"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "функция: "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "функциональный блок"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr "часы"
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "строка:"
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "Установка matiec не найдена\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr "милисекунды"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr "минуты"
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "программа"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr "секунды"
@@ -3663,28 +3724,26 @@
msgid "string right of"
msgstr "строка справа от "
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "информация об обновлениях недоступна."
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr "предупреждение: %s\n"
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr "{a1} \"{a2}\" не может быть вставлен как {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 файл не следует XSD-схеме в строке {a2}:\n"
-"{a3}"
+msgstr "{a1} Файл XML не соответствует XSD-схеме в строке {a2}:{a3}"
#: Extra XSD strings
msgid "CanFestivalSlaveNode"
@@ -3747,6 +3806,72 @@
msgid "Win32"
msgstr "Win32"
+msgid "ModbusRequest"
+msgstr "Запрос Modbus"
+
+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 "Modbus/TCP Master"
+
+msgid "Remote_IP_Address"
+msgstr "IP адрес"
+
+msgid "Remote_Port_Number"
+msgstr "TCP порт"
+
+msgid "Invocation_Rate_in_ms"
+msgstr "Период опроса, мс"
+
+msgid "ModbusServerNode"
+msgstr "Modbus/TCP Slave"
+
+msgid "Local_IP_Address"
+msgstr "IP адрес"
+
+msgid "Local_Port_Number"
+msgstr "TCP порт"
+
+msgid "ModbusRTUclient"
+msgstr "Modbus/RTU Master"
+
+msgid "Serial_Port"
+msgstr "Последовательный порт"
+
+msgid "Baud_Rate"
+msgstr "Скорость"
+
+msgid "Parity"
+msgstr "Чётность"
+
+msgid "Stop_Bits"
+msgstr "Стоп-биты"
+
+msgid "ModbusRTUslave"
+msgstr "Modbus/RTU Slave"
+
+msgid "ModbusRoot"
+msgstr "Modbus"
+
+msgid "MaxRemoteTCPclients"
+msgstr "Максимальное количество TCP клиентов"
+
msgid "BaseParams"
msgstr "Базовые параметры"
@@ -3931,10 +4056,10 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
-msgstr ""
-"Семафор предоставляет собой программный механизм синхронизации для "
-"обеспечения исключительного доступа к определенным ресурсам."
+"exclusive access to certain resources."
+msgstr ""
+"Семафоры обеспечивают механизм эксклюзивного использования ресурсов частями "
+"приложения"
msgid "The output produces a single pulse when a rising edge is detected."
msgstr ""
--- a/i18n/Beremiz_sl_SI.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_sl_SI.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,18 +1,16 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Janez Pregelj <janezpregelj@gmail.com>, 2017
-# Smarteh Smarteh <andraz.gregorcic@smarteh.si>, 2017
+#, fuzzy
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"
-"Last-Translator: Smarteh Smarteh <andraz.gregorcic@smarteh.si>, 2017\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2018\n"
"Language-Team: Slovenian (Slovenia) (https://www.transifex.com/beremiz/teams/75746/sl_SI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,7 +18,7 @@
"Language: sl_SI\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -45,151 +43,156 @@
"\n"
"Izvor:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr "Zunanji"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr "Vhod-Izhod"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr "Vhod"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr "Lokalni"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr "Izhod"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr "Začasni"
-#: ../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 " in %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr "ustvarjanje prekinjeno !\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "Podatkovni tip \"%s\" ne obstaja !!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "POU \"%s\" že obstaja !!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "POU \"%s\" ne obstaja!!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" ne morem uporabiti sebe!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "\"%s\" konfiguracija že obstaja !"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "\"%s\" konfiguracija že obstaja !!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "\"%s\" konfiguracija ne obstaja !!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "Podatkovni tip \"%s\" že obstaja!"
-#: ../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 "Element \"%s\" tega POU že obstaja!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "Mapa \"%s\" ni veljaven Beremiz projekt\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 "Beseda \"%s\" je rezervirana beseda in se ne more uporabit!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\" je neveljavna vrednost!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" ni veljavna mapa!"
-#: ../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\" ni veljavena označba!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr "\"%s\" je uporabljen v ene ali več POU. Želiš nadaljevati?"
-#: ../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 "POU \"%s\" že obstaja!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "Korak \"%s\" že obstaja!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "Vrednost \"%s\" je že definirana!"
-#: ../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\" vrednost ni veljavna dimenzija tabele!"
-#: ../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"
@@ -198,200 +201,196 @@
"\"%s\" vrednost ni veljavna dimenzija tabele!\n"
"Desna vrednost mora biti večja od leve vrednosti."
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "Funkcija \"{a1}\" je bila preklicana v POU \"{a2}\": Nobeden vhod ni povezan"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" je že uporabljen v \"{a2}\"!"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "Vir \"{a1}\" že obstaja v konfiguraciji \"{a2}\" !!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "Vir \"{a1}\" ne obstaja v konfiguraciji \"{a2}\" !!!"
-#: ../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 "Podatkovni tipi %s "
-#: ../PLCControler.py:1516
+#: ../PLCControler.py:1097
#, python-format
msgid "%s POUs"
msgstr "%s POU-ji"
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
#, python-format
msgid "%s Profile"
msgstr "%s profil"
-#: ../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 "Telo %s nima Primerkov!"
-#: ../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 telo nima besedila!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&Dodaj 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 "&Zapri"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "%Konfiguracija"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&Podatkovni tip"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&Pobriši"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&Prikaži"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&Uredi"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&Datoteka"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&Funkcija"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&Pomoč"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&Licenca"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&Program"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&Lastnosti"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&Nedavni Projekti"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&Vir"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}' - {a2} ujema v Projektu"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} ujema v Projektu"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' je najden v {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d ujemanj)"
-#: ../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 ""
+
+#: ../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 "
@@ -400,9 +399,9 @@
"POU že ima element poimenovan \"%s\". To lahko povzroči težave. Ali želiš "
"nadaljevati?"
-#: ../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 "POU z imenom \"%s\" že obstaja!"
@@ -412,26 +411,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "Otrok z imenom \"{a1}\" že obstaja -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "Lokacija mora biti izbrana!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "Opravilo z enakim imenom že obstaja!"
-#: ../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 "Spremenljivka z imenom \"%s\" že obstaja v tem POU!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "Spremenljivka z imenom \"%s\" že obstaja!"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "O programu"
@@ -439,125 +438,125 @@
msgid "Absolute number"
msgstr "Absolutna številka"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Akcija"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "Akcijski blok"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "Ime Akcije"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "Ime Akcije:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "Akcija z imenom %s ne obstaja!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "Akcije"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "Akcije:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "Aktiven"
-#: ../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 "Dodaj"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
msgid "Add Action"
msgstr "Dodaj Akcijo"
-#: ../features.py:32
+#: ../features.py:33
msgid "Add C code accessing located variables synchronously"
msgstr "Dodaj C programsko kodo z sočasnim dostopom do lokalnih spremenljivk"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "Dodaj Konfiguracijo"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "Dodaj Podatkovni tip"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "Dodaj Razhajališče"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "Dodaj IP"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "Dodaj POU"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "Dodaj Python programsko koda, ki se izvaja asinhrono"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "Dodaj Vir"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "Dodaj Prehod"
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
msgid "Add Wire Segment"
msgstr "Dodaj odsek žice"
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
msgid "Add a new initial step"
msgstr "Dodaj začetni skok"
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr "Dodaj nov skok"
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
msgid "Add a new step"
msgstr "Dodaj nov korak"
-#: ../features.py:34
+#: ../features.py:35
msgid "Add a simple WxGlade based GUI."
msgstr "Dodaj enostaven WxGlade GUI."
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "Dodaj Akcijo"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "Dodaj ELEMENT"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "Dodaj Primerek"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Dodaj podrejeno napravo"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "Dodaj Opravilo"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "Dodaj spremenljivko!"
@@ -565,44 +564,44 @@
msgid "Addition"
msgstr "Dodajanje"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "Dodatni funkcijski bloki"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "Nastavi velikost bloka"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "Poravnava"
-#: ../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 "Vse"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "Vse datoteke (*.*)|*.*|CSV datoteke (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "Že povezan. Prosim najprej prekini\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "Element z imenom \"%s\" že obstaja v tej strukturi!"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "Primerek z enakim imenom že obstaja"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr "Uveljavi spremembo imena za vse nadaljnje objekte z enakim imenom"
@@ -622,8 +621,8 @@
msgid "Arithmetic"
msgstr "Aritmetičen"
-#: ../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 "Tabela"
@@ -631,45 +630,37 @@
msgid "Assignment"
msgstr "Prireditev"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "Vsaj ena spremenljivka ali logični izraz mora biti izbran!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "Avtor"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "Avtorjevo ime (ni obvezno):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Nazaj"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Napačno domensko ime (krožno) na "
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Napačno domensko ime na "
-
-#: ../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 "Nepravilna velikost lokacije : %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 "Osnovni Tip:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "Osnovni Tipi"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -701,85 +692,85 @@
msgid "Bitwise inverting"
msgstr "Bitni invertiranje"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "Blok"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "Lastnosti bloka"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "Ime bloka"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "Spodaj"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr "Prekinjen"
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr "Razišči %s vrednosti v knjižnici"
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr "Razišči lokacije"
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "Gradnja"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "Projektna mapa - gradnje je že bila očiščena\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr "Gradnja projekta v mapo projekta - gradnje"
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "Gradnja C programske kode ni uspela !\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "Gradnja C programske kode neuspešna.\n"
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr "C programska koda"
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr "C programska koda uspešno ustvarjena.\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr "Generiranje C programske kode ni uspelo.\n"
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr "Generiranje C programske kode %s ni uspelo.\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "C razširitev"
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
msgid "C&redits"
msgstr "Zasluge C&"
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
msgid "CANOpen network"
msgstr "CANOpen mreža"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "CANOpen podrejena naprava"
@@ -787,34 +778,34 @@
msgid "CANopen support"
msgstr "CANopen podpora"
-#: ../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 "Lahko ustvarim vrstni red izvajanja le za FBD stavke!"
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr "Lokacijo lahko določiš le lokalni ali globalni spremenljivki."
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr "Ne morem ustvariti programa v datoteko %s!"
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr "Ne morem dodeliti lokacije Primerku funkcijskega bloka"
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr "Ne morem shraniti projekt v datoteko %s!"
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr "Ne morem dodeliti začetne vrednosti Primerku funkcijskega bloka"
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr "Ne morem ustvariti otroka {a1} tipa {a2} "
@@ -824,15 +815,15 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "Ne morem najti nižjega IEC kanala kot je %d\n"
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "Ne morem pridobiti status krmilnika - povezava prekinjena.\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "Ne morem odpreti/razvozlati 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 "
@@ -841,31 +832,35 @@
"Ne morem nastaviti bit offset za nebitno '{a1}' spremenljivko "
"(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 ""
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr "Razlikovanje velikih in malih črk"
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "Sredinsko"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "Spremeni IP vmesnika za povezavo"
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "Spremeni ime"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "Spremeni tip POU v"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "Spremeni številko vrat"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "Spremeni delovno mapo"
@@ -873,115 +868,119 @@
msgid "Character string"
msgstr "Niz znakov"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "Izberi SVG datoteko"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "Izberi mapo za shranjevanje projekta"
-#: ../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 "Izberi datoteko"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../BeremizIDE.py:900
msgid "Choose a project"
msgstr "Izberi projekt"
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
#, python-format
msgid "Choose a value for %s:"
msgstr "Izberi vrednost za %s:"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "Izberi delovno mapo"
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Izberi prazno mapo za nov projekt"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr "Izbrana mapa ne vsebuje programa. Ni veljaven projekt!"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr "Mapa ni prazna. Ne morem uporabiti za nov projekt!"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "Razred"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "Filter Razreda:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "Razred:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "Počisti"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "Počisti dnevniška sporočila"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "Počisti projektno mapo - gradnje"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "Čistim projektno mapo - gradnje\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "Počisti napake"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "Počisti vrstni red izvajanja"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "Zapri"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Zapri program"
-#: ../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 "Zapri projekt"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "Zapri zavihek"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "Tuljava"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Komentar"
-#: ../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 "Podpora skupnosti"
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "Ime podjetja"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "Ime podjetja (obvezno)"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "Spletn stran podjetja (ni obvezno):"
@@ -989,7 +988,7 @@
msgid "Comparison"
msgstr "Primerjava"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "Prevajam IEC program v C programsko kodo...\n"
@@ -997,93 +996,93 @@
msgid "Concatenation"
msgstr "Združevanje"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "Konfiguracija"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "Konfiguracijske spremenljivke"
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr "Konfiguracija"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr "Konfiguracije"
-#: ../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 "Potrdi ali spremeni ime spremenljivke"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "Poveži"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "Poveži na krmilnik"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "Povezan na 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 "Povezava"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "Lastnosti povezave"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "Povezava prekinjena!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "Povezava do %s prekinjena!\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 "Povezava prekinjena!\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "Povezava na %s' ni bila uspešna.\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "Konektor-vhod"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "Konektor-vhodi:"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "Konzola"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "Konstanta"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr "Kontakt"
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "Opis vsebine (ni obvezno):"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "Nadaljevanje"
@@ -1103,20 +1102,20 @@
msgid "Conversion to time-of-day"
msgstr "Pretvorba v čas-dneva"
-#: ../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 "Kopiraj"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "Kopiraj POU"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "Kopiraj datoteko iz leve mape v desno"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "Kopiraj datoteko iz desne mape v levo"
@@ -1124,7 +1123,7 @@
msgid "Cosine"
msgstr "Kosinus"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
@@ -1133,12 +1132,12 @@
"Ne morem dodati otroka \"{a1}\", tip {a2} :\n"
"{a3}\n"
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr "Ne morem uvoziti staro datoteko %s ."
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
@@ -1147,7 +1146,7 @@
"Ne morem naložiti confnode osnovne parametre {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"
@@ -1156,111 +1155,107 @@
"Ne moreme naložiti confnode parametre {a1} :\n"
" {a2}"
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Prilepim lahko samo objekte tipa POU."
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "Ne morem zagnati krmilnik !\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "Ne morem ustaviti krmilnika !\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Ne morem ustaviti razhroščevalnik.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "Kreiraj HMI"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "Ustvari nov POU"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "Ustvari novo Akcijo"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "Ustvari nov Akcijski blok"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "Ustvari nov blok"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "Ustvari nov skok"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "Ustvari novo tuljavo"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "Ustvari nov komentar"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "Ustvari novo povezavo"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "Ustvari nov kontakt"
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
msgid "Create a new divergence"
msgstr "Ustvari novo Razhajališče"
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
msgid "Create a new divergence or convergence"
msgstr "Ustvari novo Razhajališče ali Stekališče"
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "Ustvari nov začetni korak"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "Ustvari nov skok"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "Ustvari nov napajalni vodnik"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "Ustvari novo prečko"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "Ustvari nov Korak"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "Ustvari nov prehod"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "Ustvari novo spremenljivko"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "Zasluge"
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr "Trenutna delovna mapa :"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "Izreži"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "Cikličen"
@@ -1272,19 +1267,19 @@
msgid "DEPRECATED"
msgstr "OPUŠČENO"
-#: ../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 "Podatkovni tip"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "Podatkovni tipi"
@@ -1305,68 +1300,60 @@
msgid "Date subtraction"
msgstr "Odštevanje Datuma"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "Dnevi:"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
"Razhroščevalnik in krmilnik nimata enakega programa - Izvedi "
"Ustavi/Prenos/Zaženi za ponovno omogočanje razhroščevalnika\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "Razhroščevalnik Primerka"
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr "Razhroščevalnik: %s"
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr "Razhroščevalnik: Neznana spremenljivka '%s'\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Razhroščevalnik: Nepodprti podatkovni tip '%s'\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "Razhroščevalnik"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Razhroščevalnik onemogočen\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "Razhroščevalnik pripravljen\n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Razhroščevalnik ustavljen..\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "Izbriši"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "Izbriši Razhajališče"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "Izbriši datoteko"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "Pobriši odsek žice"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "Izbriši element"
@@ -1374,47 +1361,47 @@
msgid "Deletion (within)"
msgstr "Izbriši (znotraj)"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "Izpeljani podatkovni tip:"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr "Opis"
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr "Opis:"
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "Dimenzije:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr "Smer"
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "Smer:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "Direkten"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "Prekini"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "Prekini povezavo do krmilnika"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "Prekinjen"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "Razhajališče"
@@ -1422,120 +1409,120 @@
msgid "Division"
msgstr "Deljenje"
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr "Ali res želiš izbrisati datoteko '%s'?"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "Dokumentacija"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "Končano"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Čas trajanja"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "EDS datoteke (*.eds)|*.eds|Vse datoteke|*.*"
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "Uredi Blok"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "Uredi vrednost Tuljave"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "Uredi vrednost Kontakta"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Edit Duration"
msgstr "Uredi čas trajanja"
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
msgid "Edit Step"
msgstr "Uredi Korak"
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "Uredi WxWidgets GUI z WXGlade"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "Uredi lastnosti Akcijskega bloka"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "Uredi lastnosti tipa tabele"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "Uredi komentar"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "Uredi datoteko"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "Uredi element"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "Nastavi Skok na kateri Korak"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr "Urejanje čiste IEC programske kode je bilo dodano PLCGenerator-ju"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "Uredi ime koroka"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "Uredi ime prehoda"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "Urejevalnik orodne vrrstice"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "Izbira urejevalnika"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "Elementi :"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "Prazen"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Omogoči Razveljavi/Ponovi"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Prazna dimenzija ni dovoljena."
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "Vstavi ime"
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "Vnesi števiko vrat"
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "Vnesi IP vmesnika za povezavo"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Naštevni"
@@ -1543,49 +1530,48 @@
msgid "Equal to"
msgstr "Enak"
-#: ../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 "Napaka"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
msgstr ""
"Napaka: V krmilniku mora biti definirana vsaj ena Konfiguracija in Vir!\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Napaka: Prevajalnik IEC v C programsko kodo je vrnil napako %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1594,37 +1580,44 @@
"Napaka v ST/IL/SFC ustvarjalniku programske kode :\n"
"%s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "Napaka pri shranjevanju \"%s\"\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr "Napaka: Izvoz podrejene naprave ni uspešen\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 ""
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "Napaka: Ni bil ustvarjena nadrejena naprava\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "Napaka: Program za krmilnik ni bil generiran\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "Izjemna napaka pri povezovanju na %s!\n"
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "Nadzor izvajanja:"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "Vrstni red izvajanja:"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "Preizkusni spletni HMI"
@@ -1636,77 +1629,77 @@
msgid "Exponentiation"
msgstr "Potenciranje"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "Izvoz CanOpen podrejene naprave v EDS datoteko"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr "Izvozi vrednosti grafa v Odlagališče"
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr "Izvozi podrejeno napravo"
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "Logičen izraz:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "Zunanji"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "Povzemam locirane spremenjljivke...\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 "Nauspešno: Potrebno zfraditi programsko kodo pred prenosom.\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "Negativna fronta"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "Usodna napaka: ne morem najti programa za izgradnjo.\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr "Prejemam %s"
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr "Polje %s nima veljavne vrednosti!"
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr "Polja %s nimajo veljavne vrednosti!"
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr "Datoteka '%s' že obstaja!"
-#: ../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 "Išči"
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr "Išči naslednjega"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr "Išči prejšnjega"
@@ -1714,93 +1707,89 @@
msgid "Find position"
msgstr "Išči pozicijo"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr "Išči:"
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "Ponovno naloži izvajanje kode\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "Vsili vrednost"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "Vsili vrednost spremenljivke"
-#: ../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 "Obrazec ni dokončan! . %s mora biti vpisano!"
-#: ../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 "Obrazec ni dokončan! Ime mora biti vpisano!"
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr "Obrazec ni dokončan! Izbran mora biti veljaven Tip bloka!"
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr "Naprej"
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "Funkcija"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "Funkcijski &Blok"
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr "Funkcijski blok"
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr "Tipi funkcijskih blokov"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr "Funkcijski bloki"
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr "Funkcijski blok ne more biti uporabljen v funkcijah"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "Funkcijski blok \"%s\" ne more biti prilepljen v Funkcijo!!!"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "Funkcije"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr "Ustvari Program"
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "Generiram SoftPLC IEC-61131 ST/IL/SFC programsko kodo...\n"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Global"
msgstr "Globalen"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
msgid "Go to current value"
msgstr "Pojdi na trenutno vrednost"
-#: ../controls/ProjectPropertiesPanel.py:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "Grafika"
@@ -1812,110 +1801,114 @@
msgid "Greater than or equal to"
msgstr "Večji kot ali enak"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "Resolucija mreže:"
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr "HTTP vmesnik - številka vrat :"
-#: ../controls/ProjectPropertiesPanel.py:121
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr "Višina:"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr "Domači direktorij:"
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "Horizontalno:"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr "Ure:"
-#: ../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 naslov ni veljaven!"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "Uvoz 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 "Vhod-Izhod"
-#: ../editors/Viewer.py:431
+#: ../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 "Neaktiven"
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr "Podatkovna tipa \"{a1}\" in \"{a2}\" sta med seboj nezdružljiva"
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "Neprimerljiva velikost podatkov med \"%s\" and \"BOOL\""
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr "Neprimerljiva velikost podatkov med \"{a1}\" in \"{a2}\""
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "Indikator"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr "Začetni"
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr "Začetni korak"
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "Začetna vrednost"
-#: ../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 "Začetna vrednost:"
-#: ../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 "Vstavljen"
-#: ../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 "Vhod"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "Vhodi:"
@@ -1923,64 +1916,70 @@
msgid "Insertion (into)"
msgstr "Vstavljanje ( v ) "
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "Primerek z oznako %d ne obstaja!"
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr "Primerki:"
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr "Vmesnik"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr "Prekinitev"
-#: ../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 ""
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "Neveljavni plcopen element(-i)!!!"
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr "Neveljavni Tip \"{a1}\"-> {a2} != {a3} za lokacijo \"{a4}\""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "Neveljavni Tip \"{a1}\"-> {a2} != {a3} za lokacijo \"{a4}\""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "Neveljavni Tip \"{a1}\"-> {a2} != {a3} za lokacijo \"{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 "Neveljavna vrednost \"%s\" za razhroščevalno spremenljivko"
-#: ../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 "Neveljavna vrednost \"%s\" za element liste spremenljivk"
-#: ../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 "Neveljavna vrednost \"%s\" za pogled bloka"
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr "Neveljavna vrednost \"{a1}\" za spremenljivko \"{a2}\" !"
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1988,53 +1987,57 @@
"Neveljavna vrednost!\n"
"Vnesti moraš numerično vrednost."
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "Skok"
-#: ../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 "Lestvični element z oznako %d je uporabljen več kot v eni prečki."
-#: ../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 "Jezik"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "Jezik (ni obvezno):"
-#: ../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 "Jezik:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
"Zadnji gradnja projekta že ustreza izbranemu krmilniku. Izvajam ponovno "
"prenašanje...\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "Odpri WX GUI nadzor izvajanja"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "Odpri Python lupino"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "Levo"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "Levi napajalni vodnik"
@@ -2050,11 +2053,11 @@
msgid "Less than or equal to"
msgstr "Manj kot ali enak"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "Knjižnica"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "Licenca"
@@ -2062,27 +2065,27 @@
msgid "Limitation"
msgstr "Omejitve"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr "Povezovanje :\n"
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "Lokalni"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "Lokalni vpisi"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr "Pregled lokalnih storitev ni uspelo!\n"
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "Lokacija"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr "Razpoložljive lokacije:"
@@ -2090,12 +2093,12 @@
msgid "Logarithm to base 10"
msgstr "Logaritem osnova 10"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "Napaka MDNS razpoznave za '%s'\n"
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "Preslikava spremenljivke"
@@ -2103,11 +2106,15 @@
msgid "Map located variables over CANopen"
msgstr "Preslikaj najdeno spremenljivko na CANopen"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr "Nadrejena naprava"
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr "Maksimalno število ({a1}) doseženo za confnode tipa {a2} "
@@ -2116,29 +2123,29 @@
msgid "Maximum"
msgstr "Maksimum"
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr "Maksimum"
-#: ../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 "Spomin"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr "Meni orodna vrstica"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "Mikrosekunde:"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "Sredina"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "Milisekunde:"
@@ -2146,23 +2153,27 @@
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 "Minute:"
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "Razno"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "Modifikator:"
-#: ../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 "
@@ -2171,55 +2182,55 @@
"Najden več kot en Konektor-vhod, ki ustreza \"{a1}\" Konektor-izhodu v "
"\"{a2}\" POU"
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "Premakni Akcijo navzdol"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "Premakni Akcijo navzgor"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "Premakni navzdol"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "Premakni element navzdol"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "Premakni element navzgor"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "Premakni Primerek navzdol"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "Premakni Primerek navzgor"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "Premakni Opravilo navzdol"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "Premakni Opravilo navzgor"
-#: ../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 "Premakni pogled"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "Premakni navzgor"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "Premakni spremenljivko navzdol"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "Premakni spremenljivko navzgor"
@@ -2231,26 +2242,26 @@
msgid "Multiplication"
msgstr "Množenje"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "Moj računalnik:"
-#: ../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 "Ime"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "Ime ne sme biti prazno!"
-#: ../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 "Ime:"
@@ -2258,48 +2269,48 @@
msgid "Natural logarithm"
msgstr "Naravni logaritem"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "Negiran"
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
msgstr "Storitev Nevow Web ni uspešna. "
-#: ../Beremiz_service.py:556
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
msgstr "Uvoz Nevow/Athena ni uspešen :"
-#: ../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 "Nov"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "Nov element"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "Ni modifikator"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "Ni programa za prenos na krmilnik (je bila gradnja projekta uspešna?)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "Ni definirana vsebina POU \"%s\""
-#: ../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 ""
"Ni bil najden Konektor-vhod, ki ustreza \"{a1}\" Konektor-izhodu \"{a2}\" "
"POU"
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2307,12 +2318,12 @@
"Dokumentacija ni na voljo.\n"
"Pride kmalu."
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr "Ni informacij za \"%s\" blok"
-#: ../PLCGenerator.py:1194
+#: ../PLCGenerator.py:1232
#, python-brace-format
msgid ""
"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
@@ -2321,50 +2332,50 @@
"Nisem našel izhodne spremenljivke {a1} v bloku {a2} znotraj POU {a3}. "
"Povezava mora biti prekinjena"
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "Ni rezultata iskanja."
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "Ni take SVG datoteke: %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 "Ni take kombinacije index/subindex ({a1},{a2}) (spremenljivka {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 ""
"Ni takege kombinacije index/subindex ({a1},{a2}) in ID : {a3} (spremenljivka"
" {a4})"
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "Izbrana napačna vrednost!"
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "Ni definiranih spremenljivk v POU \"%s\""
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr "Ne obstaja element z oznako : {a1} (spremenljivka {a2})"
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr "Ne-obdrži v spominu"
-#: ../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 ""
@@ -2374,7 +2385,7 @@
msgid "Not equal to"
msgstr "Ni enako "
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Število sekvenc:"
@@ -2382,24 +2393,24 @@
msgid "Numerical"
msgstr "Numeričen"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr "Na spremembo"
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "Samo Elementi"
-#: ../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 "Odpri"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "Odpri 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."
@@ -2407,67 +2418,67 @@
"Odprtokodno ogrodje za avtomatizacijo, povzeto po standardu IEC 61131 z "
"nepretrgano rastjo razširitev na prilagodljivo izvajalno kodo za krmilnike."
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr "Odpri Urejevalnik datotek za upravljanje z projektnimi datotekami"
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "Odpri wxGlade"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr "Nastavitev"
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr "Nastavitve"
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "Organizacija (ni obvezno):"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "Drugi Profil"
-#: ../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 "Izhod"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO Sprejem"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "PDO oddaja"
-#: ../targets/toolchain_gcc.py:167
+#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr "Krmilnik :\n"
-#: ../BeremizIDE.py:355
+#: ../BeremizIDE.py:383
msgid "PLC Log"
msgstr "Dnevnik krmilnika"
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr "Ustvarjanje kode krmilnika neuspešno !\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "Krmilnik je prazen ali že deluje."
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "Krmilnik ni zagnan."
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
@@ -2476,15 +2487,15 @@
"Krmilniška sintaktična napaka v vrstici {a1}:\n"
"{a2}"
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "PLCOpen datoteke (*.xml)|*.xml|Vse datoteke|*.*"
-#: ../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"
@@ -2494,205 +2505,205 @@
"\n"
"Beremiz je "
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr "VRATA"
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "Ime POU"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "Ime POU:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "Tip POU"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "Tip POU:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr "PYRO povezuje na URI : %s\n"
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr "PYRO uporablja certifikate v '%s' \n"
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "Nastavitev strani"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "Velikost strani (ni obvezno):"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "Stran: %d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr "Starš Primerka"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "Prilepi"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "Prilepi POU"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "Vzorec za iskanje:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "Številka prečke:"
-#: ../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 "Prosim izberi ciljni krmilnik"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr "Prosim vnesi ime bloka"
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
msgid "Please enter comment text"
msgstr "Prosim vnesi komentar"
-#: ../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 "Prosim vnesi ime koraka"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "Prosim vnesi besedilo"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "Prosim vnesi vrednost za spremenljivko \"%s\" :"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "Številka vrat mora biti med 0 <= številka vrat <= 65535!"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "Številka vrat mora biti celoštevilčna!"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr "Napajalni vodnik"
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "Lastnosti napajalnega vodnika"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "Predogled"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "Predogled:"
-#: ../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 "Natisni"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "Predogled tiskanja"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "Prioriteta"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "Prioriteta:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "Napaka pri zagonu krmilnika: %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "Ime Produkta"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "Ime Produkta (obvezno)"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "Izdaja Produkta (ni obvezno):"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr "Verzija Produkta"
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "Verzija produkta (obvezno)"
-#: ../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 je bil uspešno ustvarjen!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "Programi"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr "Programi ne morejo biti uporabljeni v drugih POU!"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "Projekt"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr "Projekt '%s':"
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr "Projektne datoteke"
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr "Ime projekta"
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "Ime projekta (obvezno):"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "Verzija projekta (ni obvezno):"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2700,90 +2711,90 @@
"Sintaktična napaka v imenu Projektne datoteke:\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "Lastnosti Projekta"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr "Drevesna struktura Projekta ne ustreza confnode.xml {a1}!={a2} "
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr "Razmnoži ime"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "Lastnosti"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr "Objava storitve na lokalnem omrežju"
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr "Pyro izjema: %s\n"
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr "Pyro objekten uri :"
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr "Pyro številka vrat :"
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr "Python programska koda"
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr "Python datoteka"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr "Kvalifikator"
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr "Izhod"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "Obseg:"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr "IEC programska koda"
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr "Ali želiš izbrisati element '%s'?"
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
msgid "Redo"
msgstr "Ponovi"
-#: ../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 "Osveži"
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "Regularni izraz"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr "Regularni izrazi"
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr "Prenehaj vsiljevati vrednost"
@@ -2791,56 +2802,56 @@
msgid "Remainder (modulo)"
msgstr "Ostanek (modulo)"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr "Odstrani element %s"
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr "Odstrani Podatkovni tip"
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr "Odstrani POU"
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr "Odstrani Akcijo"
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr "Odstrani element"
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr "Odstrani datoteko iz leve mape"
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr "Odstrani Primerek"
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "Odstrani podrejeno napravo"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr "Odstrani Opravilo"
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr "Odstrani spremenljivko"
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "Preimenuj"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr "Zamenjaj datoteko"
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr "Zamenjaj žico z Konektorjema."
@@ -2848,43 +2859,43 @@
msgid "Replacement (within)"
msgstr "Zamenjaj (znotraj)"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr "Nastavi na 0"
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr "Ponastavi vrstni red izvajanja"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr "Ponastavi pogled"
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr "Počisti rezultate iskanja"
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "Viri"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "Obdrži v spominu"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "Tip rezultata:"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "Desno"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "Desni napajalni vodnik"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "Pozitivna fronta"
@@ -2900,114 +2911,114 @@
msgid "Rounding up/down"
msgstr "Zaokroževanje navzgor/navzdol"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "Delovanje"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr "Neuspešno generiranje C programske kode za I/O knjižnice!\n"
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr "Neuspešno generiranje C programske kode za izvajalne knjižnice!\n"
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr "SDO Odjemalec"
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr "SDO Strežnik"
-#: ../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 skok v POU \"{a1}\" se sklicuje na neobstoječi SFC skok \"{a2}\""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr "SFC prehod v POU \"%s\" mora biti povezan."
-#: ../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 datoteke (*.st)|*.st|Vse datoteke|*.*"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "SVG datoteke (*.svg)|*.svg|Vse datoteke|*.*"
-#: ../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 "Shrani"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "Shrani kot..."
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "Shrani kot"
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr "Pot za shranjevanje je enaka kot pot za shranjevanje projekta!! \n"
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "Obseg iskanja"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "Išči"
-#: ../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 "Išči v projektu"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "Sekunde:"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "Izberi vse"
-#: ../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 "Izberi Razred spremenljivke"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "Izberi urejevalnik:"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "Izberi Primerek"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "Izberi Objekt"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr "Izbrana mapa že vsebuje drugi Projekt. Prepišem? \n"
@@ -3015,23 +3026,23 @@
msgid "Selection"
msgstr "Izbira"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "Izbira Stekališče"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "Izbira Razhajališče"
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "Pregled storitev na voljo:"
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "Storitve na voljo:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "Nastavi na 1"
@@ -3043,27 +3054,27 @@
msgid "Shift right"
msgstr "Pomakni v desno"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "Prikaži IEC kodo, ki jo je ustvaril PLCGenerator"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "Prikaži nadrejeno napravo"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "Prikaži nadrejeno napravo, izdelano z config_utils"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "Prikaži programsko kodo"
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
msgid "Simultaneous Convergence"
msgstr "Simultano Steklališče"
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
msgid "Simultaneous Divergence"
msgstr "Simultano Razhajališče"
@@ -3071,15 +3082,15 @@
msgid "Sine"
msgstr "Sinus"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "Posamičen"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "Izvorna koda se ni spremenila, ne bo nove gradnje projekta.\n"
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3092,60 +3103,56 @@
msgid "Square root (base 2)"
msgstr "Kvadratni koren (base 2)"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "Standardni funkcijski bloki"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "Zaženi krmilnik"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "Začni izvajati gradnjo projekta v %s\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "Zagnan"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "Krmilnik se zaganja\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "Statusna vrstica"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "Korak"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "Ustavi"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "Ustavi krmilnik"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "Ustavi delujoč krmilnik"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "Ustavljen"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Ustavljam razhroščevalnik...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "Struktura"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "Intervalni"
@@ -3153,19 +3160,19 @@
msgid "Subtraction"
msgstr "Odštevanje"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "Uspešno izgrajeno.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr "Zamenjaj pogled"
-#: ../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 "Sintaktična napaka v izrazu vzorca za iskanje!"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "TYPE"
@@ -3173,19 +3180,19 @@
msgid "Tangent"
msgstr "Tangens"
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr "Opravilo"
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr "Opravila:"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr "Začasno"
-#: ../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"
@@ -3205,7 +3212,7 @@
"Naročilo na poštni seznam skleneš na naslovu:\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"
@@ -3214,15 +3221,15 @@
"Datoteka '%s' že obstaja.\n"
"Ali jo želiš zamenjati?"
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "Skupina blokov mora biti skladna!"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "Narejene so bile spremembe, želiš shraniti?"
-#: ../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 "
@@ -3231,17 +3238,17 @@
"POU z imenom \"%s\" že obstaja. To lahko povzroči težave. Ali želiš "
"nadaljevati?"
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
msgstr "Težava z tiskanjem. Mogoče vaš tiskalnik ni nastavljen pravilno?"
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "Ta opcija še ni na voljo!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr "Tik-tak: %d"
@@ -3279,36 +3286,36 @@
msgid "Time-of-day subtraction"
msgstr "Odštevanje dejanskega časa"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr "Spremeni vrednost"
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "Zgoraj"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "Prenesi"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "Prenesi na krmilnik"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "Uspešno zaključen prenos.\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "Prenos ni uspešen\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 "Prehod"
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
@@ -3317,58 +3324,58 @@
"Telo Prehoda \"%s\" mora vsebovati izhodno spremenljivko ali Tuljavo, "
"referencirano po njenem imenu"
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "Ime prehoda"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "Ime prehoda:"
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr "Prehod z vsebino \"{a1}\" ni povezan z naslednjim Korakom v POU \"{a2}\""
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
#, python-brace-format
msgid ""
"Transition with content \"{a1}\" not connected to a previous step in "
"\"{a2}\" POU"
msgstr "Prehod z vsebino \"{a1}\" ni povezan z prejšnjim Korakom v POU \"{a2}\""
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "Prehod z imenom %s ne obstaja!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "Prehodi"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr "Prevedel"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "Proženje"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr "Twisted programski paket ni na voljo."
-#: ../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 "Tip"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr "Enak tip in izpeljanke"
-#: ../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 "Neustrezen Tip za lokacijo \"%s\""
@@ -3377,179 +3384,233 @@
msgid "Type conversion"
msgstr "Sprememba podatkovnega tipa"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr "Detajlne informacije o podatkovnem tipu:"
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr "Enak Tip"
-#: ../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 "Tip:"
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../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 "Nisem uspel ustvariti PDO preslikave za elemnent %02x"
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr "Nisem uspel dobiti 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 "Nedefiniran tip bloka \"{a1}\" v POU \"{a2}\""
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "Nedefiniran tip POU \"%s\""
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "Razveljavi"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "Neznano"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "Neznana spremenljivka \"%s\" za ta POU!"
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr "Neimenovan"
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "Neimenovan%d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "Nerazpoznavna velikost podatkovnega tipa \"%s\""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "Uporabniški Podatkovni tipi"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "Uporabniški podatkovni tip"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "Uporabniški POU-ji"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "Vrednost"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "Vrednosti:"
-#: ../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 "Spremenljivka"
-#: ../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 "Spusti spremenljivko"
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "Lastnosti spremenljivke"
-#: ../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 "Spremenljivka Razreda"
-#: ../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 "Spremenljivka ne pripadata temu POU!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "Spremenljivka:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "Spremenljivke"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "Vertikalno:"
-#: ../Beremiz_service.py:588
+#: ../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 "WAMP podrejena naprava - napaka v zagonu. "
-#: ../connectors/WAMP/__init__.py:91
+#: ../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 "WAMP povezuje na URL : %s\n"
-#: ../connectors/WAMP/__init__.py:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr "WAMP potekel čas za vzpostavitev"
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr "WAMP povezava na '%s' ni bila uspešna.\n"
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr "WAMP uvoz - napaka :"
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../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 "WXGLADE GUI"
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "Opozorila"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "Opozorila v ST/IL/SFC ustvarjalniku programske kode :\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "Celoten projekt"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "Širina:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr "Iskanje po celotnem dokumentu"
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Napisal"
-#: ../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 ?"
@@ -3557,7 +3618,7 @@
"Nimaš dovoljenja za pisanje.\n"
"Vseeno odprem Inkscape ?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3565,7 +3626,7 @@
"Nimaš dovoljenja za pisanje.\n"
"Vseeno odprem wxGlade ?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3573,79 +3634,71 @@
"Potrebuješ pravice dostopa za delo na Projektu\n"
"Nadaljuj delo na kopiji Projekta ?"
-#: ../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 "Moraš izbrati blok ali skupino blokov, kjer želiš dodati Skok!"
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr "Moraš izbrati Žico, na katero želiš dodati Kontakt!"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "Prosim vnesi ime!"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "Prosim vnesi vrednost!"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "Povečaj"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr "dnevi"
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "napaka: %s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr "končal z statusom {a1} (pid {a2})\n"
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "datoteka : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr "funkcija"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "funkcija : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "Funkcijski blok"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr "ure"
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "vrstica :"
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "Inštalacija matiec ni najdena\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr "milisekunde"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr "minute"
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "program"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr "sekunde"
@@ -3661,27 +3714,27 @@
msgid "string right of"
msgstr "Desna stran niza od"
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "ni posodobljenih informacij."
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr "opozorilo: %s\n"
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr "{a1} \"{a2}\" ne more biti prilepljeno kot {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 datoteka ni zgrajena po XSD shemi v vrstici %{a2}:\n"
+"{a1} XML datoteka ni zgrajena po XSD shemi v vrstici {a2}:\n"
"{a3}"
#: Extra XSD strings
@@ -3745,6 +3798,72 @@
msgid "Win32"
msgstr "Win32"
+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 "BaseParams"
@@ -3931,7 +4050,7 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
+"exclusive access to certain resources."
msgstr ""
"Funkcijski blok Semafor omogoča izvedbo mehanizma, kjer je dovoljen dostop "
"do posameznega vira samo enemu programskemu elementu naenkrat."
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/Beremiz_tr_TR.po Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,4027 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Beremiz package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: Beremiz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Ibrahim KILICARSLAN <ibrahimhalilkilicarslan@outlook.com>, 2018\n"
+"Language-Team: Turkish (Turkey) (https://www.transifex.com/beremiz/teams/75746/tr_TR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr_TR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../util/ExceptionHandler.py:58
+#, python-format
+msgid ""
+"\n"
+"An unhandled exception (bug) occured. Bug report saved at :\n"
+"(%s)\n"
+"\n"
+"Please be kind enough to send this file to:\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"You should now restart program.\n"
+"\n"
+"Traceback:\n"
+msgstr ""
+"\n"
+"Beklenmeyen özel bir durum(hata) oluştu. Hata raporu kaydedildi:\n"
+"(%s)\n"
+"Bu raporu bize göndererek düzeltmemize yardımcı olun.\n"
+"beremiz-devel@lists.sourceforge.net\n"
+"\n"
+"Çalışmaya devam etmek için programı yeniden başlatmanız gerekmektedir.\n"
+"\n"
+"Döndürülen hata:\n"
+
+#: ../controls/VariablePanel.py:90
+msgid " External"
+msgstr "Harici"
+
+#: ../controls/VariablePanel.py:89
+msgid " InOut"
+msgstr "Giriş-Çıkış"
+
+#: ../controls/VariablePanel.py:89
+msgid " Input"
+msgstr "Giriş"
+
+#: ../controls/VariablePanel.py:90
+msgid " Local"
+msgstr "Yerel"
+
+#: ../controls/VariablePanel.py:89
+msgid " Output"
+msgstr "Çıkış"
+
+#: ../controls/VariablePanel.py:91
+msgid " Temp"
+msgstr "Geçici"
+
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#, python-format
+msgid " and %s"
+msgstr "ve %s"
+
+#: ../ProjectController.py:1182
+msgid " generation failed !\n"
+msgstr "Derleme başarısız oldu !\n"
+
+#: ../plcopen/plcopen.py:1029
+#, python-format
+msgid "\"%s\" Data Type doesn't exist !!!"
+msgstr "\"%s\" Veri türü mevcut değil !!!"
+
+#: ../plcopen/plcopen.py:1047
+#, python-format
+msgid "\"%s\" POU already exists !!!"
+msgstr "\"%s\" isminde bir program zaten var !!!"
+
+#: ../plcopen/plcopen.py:1068
+#, python-format
+msgid "\"%s\" POU doesn't exist !!!"
+msgstr "\"%s\" isminde bir program bulunamadı !!!"
+
+#: ../editors/Viewer.py:288
+#, python-format
+msgid "\"%s\" can't use itself!"
+msgstr "\"%s\" kullanamazsın!"
+
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#, python-format
+msgid "\"%s\" config already exists!"
+msgstr "\"%s\" adında bir konfigürasyon zaten mevcut!"
+
+#: ../plcopen/plcopen.py:531
+#, python-format
+msgid "\"%s\" configuration already exists !!!"
+msgstr "\"%s\" adında bir konfigürasyon zaten mevcut !!!"
+
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "\"%s\" adında bir konfigürasyon bulunamadı !!!"
+
+#: ../IDEFrame.py:1638
+#, python-format
+msgid "\"%s\" data type already exists!"
+msgstr "\"%s\" adında veri türü zaten mevcut!"
+
+#: ../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\" öğe bu program için zaten kullanılmış!"
+
+#: ../BeremizIDE.py:928
+#, python-format
+msgid "\"%s\" folder is not a valid Beremiz project\n"
+msgstr "\"%s\" bu klasör geçerli bir Beremiz projesi değil\n"
+
+#: ../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\" bu bir anahtar kelimedir. Kullanamazsınız!"
+
+#: ../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: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: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: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:62
+#, python-format
+msgid "\"%s\" step already exists!"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:566
+#, python-format
+msgid "\"%s\" value already defined!"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
+#, python-format
+msgid "\"%s\" value isn't a valid array dimension!"
+msgstr ""
+
+#: ../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:1133
+#, python-brace-format
+msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
+msgstr ""
+
+#: ../editors/Viewer.py:292
+#, python-brace-format
+msgid "\"{a1}\" is already used by \"{a2}\"!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:557
+#, python-brace-format
+msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:577
+#, python-brace-format
+msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#, python-format
+msgid "%03gms"
+msgstr ""
+
+#: ../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
+#, python-format
+msgid "%dms"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#, python-format
+msgid "%ds"
+msgstr ""
+
+#: ../PLCControler.py:1114
+#, python-format
+msgid "%s Data Types"
+msgstr ""
+
+#: ../PLCControler.py:1097
+#, python-format
+msgid "%s POUs"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
+#, python-format
+msgid "%s Profile"
+msgstr ""
+
+#: ../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:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
+#, python-format
+msgid "%s body don't have text!"
+msgstr ""
+
+#: ../IDEFrame.py:388
+msgid "&Add Element"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
+msgid "&Close"
+msgstr ""
+
+#: ../IDEFrame.py:361
+msgid "&Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:350
+msgid "&Data Type"
+msgstr ""
+
+#: ../IDEFrame.py:392
+msgid "&Delete"
+msgstr ""
+
+#: ../IDEFrame.py:342
+msgid "&Display"
+msgstr ""
+
+#: ../IDEFrame.py:341
+msgid "&Edit"
+msgstr ""
+
+#: ../IDEFrame.py:340
+msgid "&File"
+msgstr ""
+
+#: ../IDEFrame.py:352
+msgid "&Function"
+msgstr ""
+
+#: ../IDEFrame.py:343
+msgid "&Help"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:70
+msgid "&License"
+msgstr ""
+
+#: ../IDEFrame.py:356
+msgid "&Program"
+msgstr ""
+
+#: ../PLCOpenEditor.py:98
+msgid "&Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:244
+msgid "&Recent Projects"
+msgstr ""
+
+#: ../IDEFrame.py:358
+msgid "&Resource"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:247
+#, python-brace-format
+msgid "'{a1}' - {a2} match in project"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:249
+#, python-brace-format
+msgid "'{a1}' - {a2} matches in project"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:98
+#, python-brace-format
+msgid "'{a1}' is located at {a2}\n"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:298
+#, python-format
+msgid "(%d matches)"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
+#, python-format
+msgid ", %s"
+msgstr ""
+
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
+msgid "1d"
+msgstr ""
+
+#: ../controls/LogViewer.py:288
+msgid "1h"
+msgstr ""
+
+#: ../controls/LogViewer.py:289
+msgid "1m"
+msgstr ""
+
+#: ../controls/LogViewer.py:290
+msgid "1s"
+msgstr ""
+
+#: ../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: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:424
+#, python-brace-format
+msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:229
+msgid "A location must be selected!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:485
+msgid "A task with the same name already exists!"
+msgstr ""
+
+#: ../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:778
+#, python-format
+msgid "A variable with \"%s\" as name already exists!"
+msgstr ""
+
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
+msgid "About"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Absolute number"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
+msgid "Action"
+msgstr ""
+
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+msgid "Action Block"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:89
+msgid "Action Name"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:56
+msgid "Action Name:"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1567
+#, python-format
+msgid "Action with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Actions"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:139
+msgid "Actions:"
+msgstr ""
+
+#: ../editors/Viewer.py:473
+msgid "Active"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+msgid "Add"
+msgstr ""
+
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+msgid "Add Action"
+msgstr ""
+
+#: ../features.py:33
+msgid "Add C code accessing located variables synchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1907
+msgid "Add Configuration"
+msgstr ""
+
+#: ../IDEFrame.py:1887
+msgid "Add DataType"
+msgstr ""
+
+#: ../editors/Viewer.py:609
+msgid "Add Divergence Branch"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:121
+msgid "Add IP"
+msgstr ""
+
+#: ../IDEFrame.py:1895
+msgid "Add POU"
+msgstr ""
+
+#: ../features.py:34
+msgid "Add Python code executed asynchronously"
+msgstr ""
+
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+msgid "Add Resource"
+msgstr ""
+
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+msgid "Add Transition"
+msgstr ""
+
+#: ../editors/Viewer.py:596
+msgid "Add Wire Segment"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447
+msgid "Add a new initial step"
+msgstr ""
+
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+msgid "Add a new jump"
+msgstr ""
+
+#: ../editors/SFCViewer.py:469
+msgid "Add a new step"
+msgstr ""
+
+#: ../features.py:35
+msgid "Add a simple WxGlade based GUI."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:143
+msgid "Add action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:364
+msgid "Add element"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:283
+msgid "Add instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:110
+msgid "Add slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:252
+msgid "Add task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+msgid "Add variable"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Addition"
+msgstr ""
+
+#: ../plcopen/definitions.py:51
+msgid "Additional function blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:669
+msgid "Adjust Block Size"
+msgstr ""
+
+#: ../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:307
+#: ../controls/VariablePanel.py:88
+msgid "All"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:37
+msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
+msgstr ""
+
+#: ../ProjectController.py:1670
+msgid "Already connected. Please disconnect\n"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:607
+#, python-format
+msgid "An element named \"%s\" already exists in this structure!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:520
+msgid "An instance with the same name already exists!"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:103
+msgid "Apply name modification to all continuations with the same name"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:31
+msgid "Arc cosine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:30
+msgid "Arc sine"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:32
+msgid "Arc tangent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:33
+msgid "Arithmetic"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
+msgid "Array"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:39
+msgid "Assignment"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:226
+msgid "At least a variable or an expression must be selected!"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:111
+msgid "Author"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:108
+msgid "Author Name (optional):"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:80
+msgid "Backward"
+msgstr ""
+
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
+#, python-format
+msgid "Bad location size : %s"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
+msgid "Base Type:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+msgid "Base Types"
+msgstr ""
+
+#: ../BeremizIDE.py:483
+msgid "Beremiz"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Binary selection (1 of 2)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Bit-shift"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:66
+msgid "Bitwise AND"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:67
+msgid "Bitwise OR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:68
+msgid "Bitwise XOR"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:69
+msgid "Bitwise inverting"
+msgstr ""
+
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+msgid "Block"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:63
+msgid "Block Properties"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Block name"
+msgstr ""
+
+#: ../editors/Viewer.py:586
+msgid "Bottom"
+msgstr ""
+
+#: ../ProjectController.py:1400
+msgid "Broken"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
+#, python-format
+msgid "Browse %s values library"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:72
+msgid "Browse Locations"
+msgstr ""
+
+#: ../ProjectController.py:1815
+msgid "Build"
+msgstr ""
+
+#: ../ProjectController.py:1335
+msgid "Build directory already clean\n"
+msgstr ""
+
+#: ../ProjectController.py:1816
+msgid "Build project into build folder"
+msgstr ""
+
+#: ../ProjectController.py:1108
+msgid "C Build crashed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1105
+msgid "C Build failed.\n"
+msgstr ""
+
+#: ../c_ext/CFileEditor.py:66
+msgid "C code"
+msgstr ""
+
+#: ../ProjectController.py:1186
+msgid "C code generated successfully.\n"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:126
+msgid "C compilation failed.\n"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:199
+#, python-format
+msgid "C compilation of %s failed.\n"
+msgstr ""
+
+#: ../features.py:33
+msgid "C extension"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:69
+msgid "C&redits"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:58
+msgid "CANOpen network"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:48
+msgid "CANOpen slave"
+msgstr ""
+
+#: ../features.py:31
+msgid "CANopen support"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:291
+msgid "Can only give a location to local or global variables"
+msgstr ""
+
+#: ../PLCOpenEditor.py:318
+#, python-format
+msgid "Can't generate program to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:289
+msgid "Can't give a location to a function block instance"
+msgstr ""
+
+#: ../PLCOpenEditor.py:363
+#, python-format
+msgid "Can't save project to file %s!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:339
+msgid "Can't set an initial value to a function block instance"
+msgstr ""
+
+#: ../ConfigTreeNode.py:532
+#, python-brace-format
+msgid "Cannot create child {a1} of type {a2} "
+msgstr ""
+
+#: ../ConfigTreeNode.py:454
+#, python-format
+msgid "Cannot find lower free IEC channel than %d\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:139
+msgid "Cannot get PLC status - connection failed.\n"
+msgstr ""
+
+#: ../ProjectController.py:967
+msgid "Cannot open/parse VARIABLES.csv!\n"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:581
+msgid "Center"
+msgstr ""
+
+#: ../Beremiz_service.py:276
+msgid "Change IP of interface to bind"
+msgstr ""
+
+#: ../Beremiz_service.py:275
+msgid "Change Name"
+msgstr ""
+
+#: ../IDEFrame.py:1977
+msgid "Change POU Type To"
+msgstr ""
+
+#: ../Beremiz_service.py:277
+msgid "Change Port Number"
+msgstr ""
+
+#: ../Beremiz_service.py:278
+msgid "Change working directory"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Character string"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "Choose a SVG file"
+msgstr ""
+
+#: ../ProjectController.py:561
+msgid "Choose a directory to save project"
+msgstr ""
+
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+msgid "Choose a file"
+msgstr ""
+
+#: ../BeremizIDE.py:900
+msgid "Choose a project"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
+#, python-format
+msgid "Choose a value for %s:"
+msgstr ""
+
+#: ../Beremiz_service.py:333
+msgid "Choose a working directory "
+msgstr ""
+
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr ""
+
+#: ../ProjectController.py:468
+msgid "Chosen folder doesn't contain a program. It's not a valid project!"
+msgstr ""
+
+#: ../ProjectController.py:435
+msgid "Chosen folder isn't empty. You can't use it for a new project!"
+msgstr ""
+
+#: ../controls/VariablePanel.py:60
+msgid "Class"
+msgstr ""
+
+#: ../controls/VariablePanel.py:472
+msgid "Class Filter:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:74
+msgid "Class:"
+msgstr ""
+
+#: ../ProjectController.py:1821
+msgid "Clean"
+msgstr ""
+
+#: ../controls/LogViewer.py:327
+msgid "Clean log messages"
+msgstr ""
+
+#: ../ProjectController.py:1822
+msgid "Clean project build folder"
+msgstr ""
+
+#: ../ProjectController.py:1332
+msgid "Cleaning the build directory\n"
+msgstr ""
+
+#: ../IDEFrame.py:437
+msgid "Clear Errors"
+msgstr ""
+
+#: ../editors/Viewer.py:680
+msgid "Clear Execution Order"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+msgid "Close"
+msgstr ""
+
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+msgid "Close Application"
+msgstr ""
+
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
+msgid "Close Project"
+msgstr ""
+
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
+msgid "Close Tab"
+msgstr ""
+
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+msgid "Coil"
+msgstr ""
+
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+msgid "Comment"
+msgstr ""
+
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
+msgid "Community support"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:65
+msgid "Company Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:106
+msgid "Company Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:107
+msgid "Company URL (optional):"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Comparison"
+msgstr ""
+
+#: ../ProjectController.py:756
+msgid "Compiling IEC Program into C code...\n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:85
+msgid "Concatenation"
+msgstr ""
+
+#: ../editors/ConfTreeNodeEditor.py:241
+msgid "Config"
+msgstr ""
+
+#: ../editors/ProjectNodeEditor.py:39
+msgid "Config variables"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:43
+msgid "Configuration"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Configurations"
+msgstr ""
+
+#: ../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:1842
+msgid "Connect"
+msgstr ""
+
+#: ../ProjectController.py:1843
+msgid "Connect to the target PLC"
+msgstr ""
+
+#: ../ProjectController.py:1391
+#, python-format
+msgid "Connected to URI: %s"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
+msgid "Connection"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:55
+msgid "Connection Properties"
+msgstr ""
+
+#: ../ProjectController.py:1691
+msgid "Connection canceled!\n"
+msgstr ""
+
+#: ../ProjectController.py:1714
+#, python-format
+msgid "Connection failed to %s!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+msgid "Connection lost!\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:110
+#, python-format
+msgid "Connection to '%s' failed.\n"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+msgid "Connector"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:68
+msgid "Connectors:"
+msgstr ""
+
+#: ../BeremizIDE.py:378
+msgid "Console"
+msgstr ""
+
+#: ../controls/VariablePanel.py:75
+msgid "Constant"
+msgstr ""
+
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+msgid "Contact"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:217
+msgid "Content Description (optional):"
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+msgid "Continuation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:18
+msgid "Conversion from BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:19
+msgid "Conversion to BCD"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:21
+msgid "Conversion to date"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:20
+msgid "Conversion to time-of-day"
+msgstr ""
+
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
+msgid "Copy"
+msgstr ""
+
+#: ../IDEFrame.py:1964
+msgid "Copy POU"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:68
+msgid "Copy file from left folder to right"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:67
+msgid "Copy file from right folder to left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:28
+msgid "Cosine"
+msgstr ""
+
+#: ../ConfigTreeNode.py:660
+#, python-brace-format
+msgid ""
+"Could not add child \"{a1}\", type {a2} :\n"
+"{a3}\n"
+msgstr ""
+
+#: ../py_ext/PythonFileCTNMixin.py:81
+#, python-format
+msgid "Couldn't import old %s file."
+msgstr ""
+
+#: ../ConfigTreeNode.py:630
+#, python-brace-format
+msgid ""
+"Couldn't load confnode base parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
+#, python-brace-format
+msgid ""
+"Couldn't load confnode parameters {a1} :\n"
+" {a2}"
+msgstr ""
+
+#: ../PLCControler.py:552
+msgid "Couldn't paste non-POU object."
+msgstr ""
+
+#: ../ProjectController.py:1636
+msgid "Couldn't start PLC !\n"
+msgstr ""
+
+#: ../ProjectController.py:1644
+msgid "Couldn't stop PLC !\n"
+msgstr ""
+
+#: ../svgui/svgui.py:57
+msgid "Create HMI"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:54
+msgid "Create a new POU"
+msgstr ""
+
+#: ../dialogs/PouActionDialog.py:45
+msgid "Create a new action"
+msgstr ""
+
+#: ../IDEFrame.py:166
+msgid "Create a new action block"
+msgstr ""
+
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+msgid "Create a new block"
+msgstr ""
+
+#: ../IDEFrame.py:139
+msgid "Create a new branch"
+msgstr ""
+
+#: ../IDEFrame.py:133
+msgid "Create a new coil"
+msgstr ""
+
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+msgid "Create a new comment"
+msgstr ""
+
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+msgid "Create a new connection"
+msgstr ""
+
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
+msgid "Create a new contact"
+msgstr ""
+
+#: ../IDEFrame.py:169
+msgid "Create a new divergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:54
+msgid "Create a new divergence or convergence"
+msgstr ""
+
+#: ../IDEFrame.py:157
+msgid "Create a new initial step"
+msgstr ""
+
+#: ../IDEFrame.py:172
+msgid "Create a new jump"
+msgstr ""
+
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
+msgid "Create a new power rail"
+msgstr ""
+
+#: ../IDEFrame.py:130
+msgid "Create a new rung"
+msgstr ""
+
+#: ../IDEFrame.py:160
+msgid "Create a new step"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+msgid "Create a new transition"
+msgstr ""
+
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+msgid "Create a new variable"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:109
+msgid "Credits"
+msgstr ""
+
+#: ../Beremiz_service.py:424
+msgid "Current working directory :"
+msgstr ""
+
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+msgid "Cut"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Cyclic"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:44
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:50
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:54
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:58
+#: ../plcopen/iec_std.csv:60
+msgid "DEPRECATED"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
+msgid "DS-301 Profile"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
+msgid "DS-302 Profile"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:39
+msgid "Data Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Data Types"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Data type conversion"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:44 ../plcopen/iec_std.csv:45
+msgid "Date addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:56 ../plcopen/iec_std.csv:57
+#: ../plcopen/iec_std.csv:58 ../plcopen/iec_std.csv:59
+msgid "Date and time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:50 ../plcopen/iec_std.csv:51
+msgid "Date subtraction"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:46
+msgid "Days:"
+msgstr ""
+
+#: ../ProjectController.py:1729
+msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:144
+msgid "Debug instance"
+msgstr ""
+
+#: ../editors/Viewer.py:490
+#, python-format
+msgid "Debug: %s"
+msgstr ""
+
+#: ../ProjectController.py:1471
+#, python-format
+msgid "Debug: Unknown variable '%s'\n"
+msgstr ""
+
+#: ../ProjectController.py:1469
+#, python-format
+msgid "Debug: Unsupported type to debug '%s'\n"
+msgstr ""
+
+#: ../IDEFrame.py:660
+msgid "Debugger"
+msgstr ""
+
+#: ../ProjectController.py:1726
+msgid "Debugger ready\n"
+msgstr ""
+
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+msgid "Delete"
+msgstr ""
+
+#: ../editors/Viewer.py:610
+msgid "Delete Divergence Branch"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:157
+msgid "Delete File"
+msgstr ""
+
+#: ../editors/Viewer.py:597
+msgid "Delete Wire Segment"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:44
+msgid "Delete item"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:88
+msgid "Deletion (within)"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:161
+msgid "Derivation Type:"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:735
+msgid "Description"
+msgstr ""
+
+#: ../controls/VariablePanel.py:463
+msgid "Description:"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
+msgid "Dimensions:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:69
+msgid "Direction"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:102
+msgid "Direction:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Directly"
+msgstr ""
+
+#: ../ProjectController.py:1855
+msgid "Disconnect"
+msgstr ""
+
+#: ../ProjectController.py:1856
+msgid "Disconnect from PLC"
+msgstr ""
+
+#: ../ProjectController.py:1401
+msgid "Disconnected"
+msgstr ""
+
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+msgid "Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:36
+msgid "Division"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:156
+#, python-format
+msgid "Do you really want to delete the file '%s'?"
+msgstr ""
+
+#: ../controls/VariablePanel.py:65
+msgid "Documentation"
+msgstr ""
+
+#: ../PLCOpenEditor.py:312
+msgid "Done"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Duration"
+msgstr ""
+
+#: ../canfestival/canfestival.py:174
+msgid "EDS files (*.eds)|*.eds|All files|*.*"
+msgstr ""
+
+#: ../editors/Viewer.py:668
+msgid "Edit Block"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:56
+msgid "Edit Contact Values"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:62
+msgid "Edit Duration"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:53
+msgid "Edit Step"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:45
+msgid "Edit a WxWidgets GUI with WXGlade"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:127
+msgid "Edit action block properties"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:47
+msgid "Edit array type properties"
+msgstr ""
+
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+msgid "Edit comment"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:69
+msgid "Edit file"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:42
+msgid "Edit item"
+msgstr ""
+
+#: ../editors/Viewer.py:3059
+msgid "Edit jump target"
+msgstr ""
+
+#: ../ProjectController.py:1873
+msgid "Edit raw IEC code added to code generated by PLCGenerator"
+msgstr ""
+
+#: ../editors/SFCViewer.py:815
+msgid "Edit step name"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:53
+msgid "Edit transition"
+msgstr ""
+
+#: ../IDEFrame.py:632
+msgid "Editor ToolBar"
+msgstr ""
+
+#: ../ProjectController.py:1294
+msgid "Editor selection"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:360
+msgid "Elements :"
+msgstr ""
+
+#: ../ProjectController.py:1399
+msgid "Empty"
+msgstr ""
+
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr ""
+
+#: ../Beremiz_service.py:341
+msgid "Enter a name "
+msgstr ""
+
+#: ../Beremiz_service.py:326
+msgid "Enter a port number "
+msgstr ""
+
+#: ../Beremiz_service.py:317
+msgid "Enter the IP of the interface to bind"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Enumerated"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:77
+msgid "Equal to"
+msgstr ""
+
+#: ../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 ""
+
+#: ../ProjectController.py:811
+msgid ""
+"Error : At least one configuration and one resource must be declared in PLC "
+"!\n"
+msgstr ""
+
+#: ../ProjectController.py:803
+#, python-format
+msgid "Error : IEC to C compiler returned %d\n"
+msgstr ""
+
+#: ../ProjectController.py:731
+#, python-format
+msgid ""
+"Error in ST/IL/SFC code generator :\n"
+"%s\n"
+msgstr ""
+
+#: ../ConfigTreeNode.py:219
+#, python-format
+msgid "Error while saving \"%s\"\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:179
+msgid "Error: Export slave failed\n"
+msgstr ""
+
+#: ../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:383
+msgid "Error: No PLC built\n"
+msgstr ""
+
+#: ../ProjectController.py:1708
+#, python-format
+msgid "Exception while connecting %s!\n"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:123
+msgid "Execution Control:"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+msgid "Execution Order:"
+msgstr ""
+
+#: ../features.py:36
+msgid "Experimental web based HMI"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:38
+msgid "Exponent"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:26
+msgid "Exponentiation"
+msgstr ""
+
+#: ../canfestival/canfestival.py:186
+msgid "Export CanOpen slave to EDS file"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+msgid "Export graph values to clipboard"
+msgstr ""
+
+#: ../canfestival/canfestival.py:185
+msgid "Export slave"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:94
+msgid "Expression:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "External"
+msgstr ""
+
+#: ../ProjectController.py:826
+msgid "Extracting Located Variables...\n"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "FBD"
+msgstr ""
+
+#: ../ProjectController.py:1773
+msgid "Failed : Must build before transfer.\n"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+msgid "Falling Edge"
+msgstr ""
+
+#: ../ProjectController.py:1098
+msgid "Fatal : cannot get builder.\n"
+msgstr ""
+
+#: ../Beremiz.py:160
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:167
+#, python-format
+msgid "Field %s hasn't a valid value!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:169
+#, python-format
+msgid "Fields %s haven't a valid value!"
+msgstr ""
+
+#: ../controls/FolderTree.py:221
+#, python-format
+msgid "File '%s' already exists!"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+msgid "Find"
+msgstr ""
+
+#: ../IDEFrame.py:379
+msgid "Find Next"
+msgstr ""
+
+#: ../IDEFrame.py:381
+msgid "Find Previous"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:90
+msgid "Find position"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:58
+msgid "Find:"
+msgstr ""
+
+#: ../editors/Viewer.py:1633
+msgid "Force value"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:176
+msgid "Forcing Variable Value"
+msgstr ""
+
+#: ../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:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
+msgid "Form isn't complete. Name must be filled!"
+msgstr ""
+
+#: ../dialogs/FBDBlockDialog.py:235
+msgid "Form isn't complete. Valid block type must be selected!"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:75
+msgid "Forward"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+msgid "Function"
+msgstr ""
+
+#: ../IDEFrame.py:354
+msgid "Function &Block"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
+msgid "Function Block"
+msgstr ""
+
+#: ../controls/VariablePanel.py:868
+msgid "Function Block Types"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Function Blocks"
+msgstr ""
+
+#: ../editors/Viewer.py:290
+msgid "Function Blocks can't be used in Functions!"
+msgstr ""
+
+#: ../PLCControler.py:1907
+#, python-format
+msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "Functions"
+msgstr ""
+
+#: ../PLCOpenEditor.py:88
+msgid "Generate Program"
+msgstr ""
+
+#: ../ProjectController.py:722
+msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Global"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+msgid "Go to current value"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:189
+msgid "Graphics"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:75
+msgid "Greater than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:76
+msgid "Greater than or equal to"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:149
+msgid "Grid Resolution:"
+msgstr ""
+
+#: ../runtime/NevowServer.py:192
+msgid "HTTP interface port :"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:135
+msgid "Height:"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:89
+msgid "Home Directory:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:165
+msgid "Horizontal:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:47
+msgid "Hours:"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "IL"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:91
+msgid "IP"
+msgstr ""
+
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+msgid "IP is not valid!"
+msgstr ""
+
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
+msgid "Import SVG"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
+msgid "InOut"
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:300
+#, python-brace-format
+msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:306
+#, python-format
+msgid "Incompatible size of data between \"%s\" and \"BOOL\""
+msgstr ""
+
+#: ../controls/VariablePanel.py:310
+#, python-brace-format
+msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Indicator"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:734
+msgid "Initial"
+msgstr ""
+
+#: ../editors/Viewer.py:650
+msgid "Initial Step"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
+msgid "Initial Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
+msgid "Initial Value:"
+msgstr ""
+
+#: ../svgui/svgui.py:56
+msgid "Inkscape"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
+msgid "Inline"
+msgstr ""
+
+#: ../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:99
+msgid "Inputs:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:87
+msgid "Insertion (into)"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1948
+#, python-format
+msgid "Instance with id %d doesn't exist!"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:279
+msgid "Instances:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:88
+msgid "Interface"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:81
+msgid "Interrupt"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Interval"
+msgstr ""
+
+#: ../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:407
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../canfestival/config_utils.py:689
+#, python-brace-format
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr ""
+
+#: ../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 ""
+
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
+#, python-format
+msgid "Invalid value \"%s\" for variable grid element"
+msgstr ""
+
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
+#, python-format
+msgid "Invalid value \"%s\" for viewer block"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:211
+#, python-brace-format
+msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:124
+msgid ""
+"Invalid value!\n"
+"You must fill a numeric value."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+msgid "Jump"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "LD"
+msgstr ""
+
+#: ../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:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
+msgid "Language"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:206
+msgid "Language (optional):"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
+msgid "Language:"
+msgstr ""
+
+#: ../ProjectController.py:1779
+msgid "Latest build already matches current target. Transfering anyway...\n"
+msgstr ""
+
+#: ../Beremiz_service.py:281
+msgid "Launch WX GUI inspector"
+msgstr ""
+
+#: ../Beremiz_service.py:280
+msgid "Launch a live Python shell"
+msgstr ""
+
+#: ../editors/Viewer.py:580
+msgid "Left"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:64
+msgid "Left PowerRail"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:81
+msgid "Length of string"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:78
+msgid "Less than"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:79
+msgid "Less than or equal to"
+msgstr ""
+
+#: ../IDEFrame.py:652
+msgid "Library"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:145
+msgid "License"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:73
+msgid "Limitation"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:209
+msgid "Linking :\n"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+msgid "Local"
+msgstr ""
+
+#: ../canfestival/canfestival.py:359
+msgid "Local entries"
+msgstr ""
+
+#: ../ProjectController.py:1685
+msgid "Local service discovery failed!\n"
+msgstr ""
+
+#: ../controls/VariablePanel.py:62
+msgid "Location"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:79
+msgid "Locations available:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:25
+msgid "Logarithm to base 10"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:102
+#, python-format
+msgid "MDNS resolution failure for '%s'\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
+msgid "Map Variable"
+msgstr ""
+
+#: ../features.py:31
+msgid "Map located variables over CANopen"
+msgstr ""
+
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:113
+msgid "Master"
+msgstr ""
+
+#: ../ConfigTreeNode.py:544
+#, python-brace-format
+msgid "Max count ({a1}) reached for this confnode of type {a2} "
+msgstr ""
+
+#: ../plcopen/iec_std.csv:71
+msgid "Maximum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:246
+msgid "Maximum:"
+msgstr ""
+
+#: ../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:617
+msgid "Menu ToolBar"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:51
+msgid "Microseconds:"
+msgstr ""
+
+#: ../editors/Viewer.py:585
+msgid "Middle"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:50
+msgid "Milliseconds:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:72
+msgid "Minimum"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:233
+msgid "Minimum:"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:48
+msgid "Minutes:"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:231
+msgid "Miscellaneous"
+msgstr ""
+
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
+msgid "Modifier:"
+msgstr ""
+
+#: ../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:146
+msgid "Move action down"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:145
+msgid "Move action up"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:46
+msgid "Move down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:367
+msgid "Move element down"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:366
+msgid "Move element up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:286
+msgid "Move instance down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:285
+msgid "Move instance up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:255
+msgid "Move task down"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:254
+msgid "Move task up"
+msgstr ""
+
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+msgid "Move the view"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:45
+msgid "Move up"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+msgid "Move variable down"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+msgid "Move variable up"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:74
+msgid "Multiplexer (select 1 of N)"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:34
+msgid "Multiplication"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:87
+msgid "My Computer:"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:89
+msgid "NAME"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
+msgid "Name"
+msgstr ""
+
+#: ../Beremiz_service.py:342
+msgid "Name must not be null!"
+msgstr ""
+
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
+msgid "Name:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:24
+msgid "Natural logarithm"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+msgid "Negated"
+msgstr ""
+
+#: ../Beremiz_service.py:610
+msgid "Nevow Web service failed. "
+msgstr ""
+
+#: ../Beremiz_service.py:580
+msgid "Nevow/Athena import failed :"
+msgstr ""
+
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
+msgid "New"
+msgstr ""
+
+#: ../controls/CustomEditableListBox.py:43
+msgid "New item"
+msgstr ""
+
+#: ../editors/Viewer.py:553
+msgid "No Modifier"
+msgstr ""
+
+#: ../ProjectController.py:1808
+msgid "No PLC to transfer (did build succeed ?)\n"
+msgstr ""
+
+#: ../PLCGenerator.py:1678
+#, python-format
+msgid "No body defined in \"%s\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#, python-brace-format
+msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCOpenEditor.py:331
+msgid ""
+"No documentation available.\n"
+"Coming soon."
+msgstr ""
+
+#: ../PLCGenerator.py:841
+#, python-format
+msgid "No informations found for \"%s\" block"
+msgstr ""
+
+#: ../PLCGenerator.py:1232
+#, python-brace-format
+msgid ""
+"No output {a1} variable found in block {a2} in POU {a3}. Connection must be "
+"broken"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:175
+msgid "No search results available."
+msgstr ""
+
+#: ../svgui/svgui.py:142
+#, python-format
+msgid "No such SVG file: %s\n"
+msgstr ""
+
+#: ../canfestival/config_utils.py:682
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
+msgstr ""
+
+#: ../canfestival/config_utils.py:387
+#, python-brace-format
+msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
+msgstr ""
+
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
+msgid "No valid value selected!"
+msgstr ""
+
+#: ../PLCGenerator.py:1676
+#, python-format
+msgid "No variable defined in \"%s\" POU"
+msgstr ""
+
+#: ../canfestival/config_utils.py:379
+#, python-brace-format
+msgid "Non existing node ID : {a1} (variable {a2})"
+msgstr ""
+
+#: ../controls/VariablePanel.py:79
+msgid "Non-Retain"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:78
+msgid "Normal"
+msgstr ""
+
+#: ../canfestival/config_utils.py:426
+#, python-brace-format
+msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:80
+msgid "Not equal to"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:91
+msgid "Number of sequences:"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:22
+msgid "Numerical"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:736
+msgid "OnChange"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:88
+msgid "Only Elements"
+msgstr ""
+
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
+msgid "Open"
+msgstr ""
+
+#: ../svgui/svgui.py:151
+msgid "Open Inkscape"
+msgstr ""
+
+#: ../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:1879
+msgid "Open a file explorer to manage project files"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:161
+msgid "Open wxGlade"
+msgstr ""
+
+#: ../controls/VariablePanel.py:64
+msgid "Option"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+msgid "Options"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:109
+msgid "Organization (optional):"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
+msgid "Other Profile"
+msgstr ""
+
+#: ../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:67 ../canfestival/NetworkEditor.py:91
+msgid "PDO Receive"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
+msgid "PDO Transmit"
+msgstr ""
+
+#: ../targets/toolchain_gcc.py:174
+msgid "PLC :\n"
+msgstr ""
+
+#: ../BeremizIDE.py:383
+msgid "PLC Log"
+msgstr ""
+
+#: ../ProjectController.py:1082
+msgid "PLC code generation failed !\n"
+msgstr ""
+
+#: ../Beremiz_service.py:305
+msgid "PLC is empty or already started."
+msgstr ""
+
+#: ../Beremiz_service.py:312
+msgid "PLC is not started."
+msgstr ""
+
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
+#, python-brace-format
+msgid ""
+"PLC syntax error at line {a1}:\n"
+"{a2}"
+msgstr ""
+
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
+msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
+msgstr ""
+
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
+msgid "PLCOpenEditor"
+msgstr ""
+
+#: ../PLCOpenEditor.py:339
+msgid ""
+"PLCOpenEditor is part of Beremiz project.\n"
+"\n"
+"Beremiz is an "
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:92
+msgid "PORT"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:109
+msgid "POU Name"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:66
+msgid "POU Name:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:111
+msgid "POU Type"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:73
+msgid "POU Type:"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:52
+#, python-format
+msgid "PYRO connecting to URI : %s\n"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:68
+#, python-format
+msgid "PYRO using certificates in '%s' \n"
+msgstr ""
+
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
+msgid "Page Setup"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:124
+msgid "Page Size (optional):"
+msgstr ""
+
+#: ../IDEFrame.py:2640
+#, python-format
+msgid "Page: %d"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:134
+msgid "Parent instance"
+msgstr ""
+
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+msgid "Paste"
+msgstr ""
+
+#: ../IDEFrame.py:1899
+msgid "Paste POU"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:60
+msgid "Pattern to search:"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:75
+msgid "Pin number:"
+msgstr ""
+
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
+msgid "Please choose a target"
+msgstr ""
+
+#: ../editors/TextViewer.py:260
+msgid "Please enter a block name"
+msgstr ""
+
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+msgid "Please enter comment text"
+msgstr ""
+
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
+msgid "Please enter step name"
+msgstr ""
+
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+msgid "Please enter text"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:177
+#, python-format
+msgid "Please enter value for a \"%s\" variable:"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be 0 <= port <= 65535!"
+msgstr ""
+
+#: ../Beremiz_service.py:327
+msgid "Port number must be an integer!"
+msgstr ""
+
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+msgid "Power Rail"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:52
+msgid "Power Rail Properties"
+msgstr ""
+
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
+msgid "Preview"
+msgstr ""
+
+#: ../dialogs/BlockPreviewDialog.py:59
+msgid "Preview:"
+msgstr ""
+
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
+msgid "Print"
+msgstr ""
+
+#: ../IDEFrame.py:1110
+msgid "Print preview"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Priority"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:91
+msgid "Priority:"
+msgstr ""
+
+#: ../runtime/PLCObject.py:518
+#, python-format
+msgid "Problem starting PLC : error %d"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:63
+msgid "Product Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:90
+msgid "Product Name (required):"
+msgstr ""
+
+#: ../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 "Project Name"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:88
+msgid "Project Name (required):"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:89
+msgid "Project Version (optional):"
+msgstr ""
+
+#: ../PLCControler.py:2717
+msgid ""
+"Project file syntax error:\n"
+"\n"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
+msgid "Project properties"
+msgstr ""
+
+#: ../ConfigTreeNode.py:571
+#, python-brace-format
+msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
+msgstr ""
+
+#: ../dialogs/ConnectionDialog.py:101
+msgid "Propagate Name"
+msgstr ""
+
+#: ../plcopen/types_enums.py:77
+msgid "Properties"
+msgstr ""
+
+#: ../Beremiz_service.py:427
+msgid "Publishing service on local network"
+msgstr ""
+
+#: ../connectors/PYRO/__init__.py:126
+#, python-format
+msgid "Pyro exception: %s\n"
+msgstr ""
+
+#: ../Beremiz_service.py:420
+msgid "Pyro port :"
+msgstr ""
+
+#: ../py_ext/PythonEditor.py:84
+msgid "Python code"
+msgstr ""
+
+#: ../features.py:34
+msgid "Python file"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Qualifier"
+msgstr ""
+
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+msgid "Quit"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+msgid "Range:"
+msgstr ""
+
+#: ../ProjectController.py:1872
+msgid "Raw IEC code"
+msgstr ""
+
+#: ../BeremizIDE.py:1083
+#, python-format
+msgid "Really delete node '%s'?"
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
+msgid "Redo"
+msgstr ""
+
+#: ../dialogs/SFCTransitionDialog.py:76
+msgid "Reference"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+msgid "Refresh"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:70
+msgid "Regular expression"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:99
+msgid "Regular expressions"
+msgstr ""
+
+#: ../editors/Viewer.py:1636
+msgid "Release value"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:37
+msgid "Remainder (modulo)"
+msgstr ""
+
+#: ../BeremizIDE.py:1084
+#, python-format
+msgid "Remove %s node"
+msgstr ""
+
+#: ../IDEFrame.py:2445
+msgid "Remove Datatype"
+msgstr ""
+
+#: ../IDEFrame.py:2450
+msgid "Remove Pou"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:144
+msgid "Remove action"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:365
+msgid "Remove element"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:66
+msgid "Remove file from left folder"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:284
+msgid "Remove instance"
+msgstr ""
+
+#: ../canfestival/NetworkEditor.py:111
+msgid "Remove slave"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:253
+msgid "Remove task"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+msgid "Remove variable"
+msgstr ""
+
+#: ../IDEFrame.py:1979
+msgid "Rename"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:187
+msgid "Replace File"
+msgstr ""
+
+#: ../editors/Viewer.py:598
+msgid "Replace Wire by connections"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:89
+msgid "Replacement (within)"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Reset"
+msgstr ""
+
+#: ../editors/Viewer.py:681
+msgid "Reset Execution Order"
+msgstr ""
+
+#: ../IDEFrame.py:453
+msgid "Reset Perspective"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:103
+msgid "Reset search result"
+msgstr ""
+
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+msgid "Resources"
+msgstr ""
+
+#: ../controls/VariablePanel.py:77
+msgid "Retain"
+msgstr ""
+
+#: ../controls/VariablePanel.py:455
+msgid "Return Type:"
+msgstr ""
+
+#: ../editors/Viewer.py:582
+msgid "Right"
+msgstr ""
+
+#: ../dialogs/LDPowerRailDialog.py:65
+msgid "Right PowerRail"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+msgid "Rising Edge"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:65
+msgid "Rotate left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:64
+msgid "Rotate right"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:17
+msgid "Rounding up/down"
+msgstr ""
+
+#: ../ProjectController.py:1828
+msgid "Run"
+msgstr ""
+
+#: ../ProjectController.py:1127
+msgid "Runtime IO extensions C code generation failed !\n"
+msgstr ""
+
+#: ../ProjectController.py:1136
+msgid "Runtime library extensions C code generation failed !\n"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
+msgid "SDO Client"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
+msgid "SDO Server"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+msgid "SFC"
+msgstr ""
+
+#: ../PLCGenerator.py:1433
+#, python-brace-format
+msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
+msgstr ""
+
+#: ../PLCGenerator.py:780
+#, python-format
+msgid "SFC transition in POU \"%s\" must be connected."
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
+msgid "ST"
+msgstr ""
+
+#: ../PLCOpenEditor.py:308
+msgid "ST files (*.st)|*.st|All files|*.*"
+msgstr ""
+
+#: ../svgui/svgui.py:136
+msgid "SVG files (*.svg)|*.svg|All files|*.*"
+msgstr ""
+
+#: ../features.py:36
+msgid "SVGUI"
+msgstr ""
+
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
+msgid "Save"
+msgstr ""
+
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
+msgid "Save As..."
+msgstr ""
+
+#: ../BeremizIDE.py:249
+msgid "Save as"
+msgstr ""
+
+#: ../ProjectController.py:530
+msgid "Save path is the same as path of a project! \n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:73
+msgid "Scope"
+msgstr ""
+
+#: ../IDEFrame.py:644
+msgid "Search"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384
+#: ../IDEFrame.py:430
+msgid "Search in Project"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:49
+msgid "Seconds:"
+msgstr ""
+
+#: ../IDEFrame.py:390
+msgid "Select All"
+msgstr ""
+
+#: ../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:1293
+msgid "Select an editor:"
+msgstr ""
+
+#: ../controls/PouInstanceVariablesPanel.py:292
+msgid "Select an instance"
+msgstr ""
+
+#: ../IDEFrame.py:628
+msgid "Select an object"
+msgstr ""
+
+#: ../ProjectController.py:537
+msgid "Selected directory already contains another project. Overwrite? \n"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:70
+msgid "Selection"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:65
+msgid "Selection Divergence"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:135
+msgid "Service Discovery"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:104
+msgid "Services available:"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:79
+msgid "Set"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:62
+msgid "Shift left"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:63
+msgid "Shift right"
+msgstr ""
+
+#: ../ProjectController.py:1863
+msgid "Show IEC code generated by PLCGenerator"
+msgstr ""
+
+#: ../canfestival/canfestival.py:407
+msgid "Show Master"
+msgstr ""
+
+#: ../canfestival/canfestival.py:408
+msgid "Show Master generated by config_utils"
+msgstr ""
+
+#: ../ProjectController.py:1862
+msgid "Show code"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
+#: ../dialogs/SFCDivergenceDialog.py:67
+msgid "Simultaneous Divergence"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:27
+msgid "Sine"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Single"
+msgstr ""
+
+#: ../targets/toolchain_makefile.py:130
+msgid "Source didn't change, no build.\n"
+msgstr ""
+
+#: ../PLCGenerator.py:404
+#, python-brace-format
+msgid ""
+"Source signal has to be defined for single task '{a1}' in resource "
+"'{a2}.{a3}'."
+msgstr ""
+
+#: ../plcopen/iec_std.csv:23
+msgid "Square root (base 2)"
+msgstr ""
+
+#: ../plcopen/definitions.py:50
+msgid "Standard function blocks"
+msgstr ""
+
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+msgid "Start PLC"
+msgstr ""
+
+#: ../ProjectController.py:1074
+#, python-format
+msgid "Start build in %s\n"
+msgstr ""
+
+#: ../ProjectController.py:1397
+msgid "Started"
+msgstr ""
+
+#: ../ProjectController.py:1633
+msgid "Starting PLC\n"
+msgstr ""
+
+#: ../BeremizIDE.py:393
+msgid "Status ToolBar"
+msgstr ""
+
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+msgid "Step"
+msgstr ""
+
+#: ../ProjectController.py:1835
+msgid "Stop"
+msgstr ""
+
+#: ../Beremiz_service.py:272
+msgid "Stop PLC"
+msgstr ""
+
+#: ../ProjectController.py:1836
+msgid "Stop Running PLC"
+msgstr ""
+
+#: ../ProjectController.py:1398
+msgid "Stopped"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Structure"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:60
+msgid "Subrange"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:35
+msgid "Subtraction"
+msgstr ""
+
+#: ../ProjectController.py:1113
+msgid "Successfully built.\n"
+msgstr ""
+
+#: ../IDEFrame.py:449
+msgid "Switch perspective"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
+msgid "Syntax error in regular expression of pattern to search!"
+msgstr ""
+
+#: ../dialogs/DiscoveryDialog.py:90
+msgid "TYPE"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:29
+msgid "Tangent"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:97
+msgid "Task"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:248
+msgid "Tasks:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:91
+msgid "Temp"
+msgstr ""
+
+#: ../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"
+"\n"
+"This is the main community support channel.\n"
+"For posting it is required to be subscribed to the mailing list.\n"
+"\n"
+"You can subscribe to the list here:\n"
+"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:186
+#, python-format
+msgid ""
+"The file '%s' already exist.\n"
+"Do you want to replace it?"
+msgstr ""
+
+#: ../editors/LDViewer.py:893
+msgid "The group of block must be coherent!"
+msgstr ""
+
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+msgid "There are changes, do you want to save?"
+msgstr ""
+
+#: ../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:1133
+msgid ""
+"There was a problem printing.\n"
+"Perhaps your current printer is not set correctly?"
+msgstr ""
+
+#: ../editors/LDViewer.py:902
+msgid "This option isn't available yet!"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#, python-format
+msgid "Tick: %d"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40
+msgid "Time"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:40 ../plcopen/iec_std.csv:41
+msgid "Time addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:86
+msgid "Time concatenation"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:60 ../plcopen/iec_std.csv:61
+msgid "Time division"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:46 ../plcopen/iec_std.csv:47
+msgid "Time multiplication"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:48 ../plcopen/iec_std.csv:49
+msgid "Time subtraction"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:42 ../plcopen/iec_std.csv:43
+msgid "Time-of-day addition"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:52 ../plcopen/iec_std.csv:53
+#: ../plcopen/iec_std.csv:54 ../plcopen/iec_std.csv:55
+msgid "Time-of-day subtraction"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:188
+msgid "Toggle value"
+msgstr ""
+
+#: ../editors/Viewer.py:584
+msgid "Top"
+msgstr ""
+
+#: ../ProjectController.py:1848
+msgid "Transfer"
+msgstr ""
+
+#: ../ProjectController.py:1849
+msgid "Transfer PLC"
+msgstr ""
+
+#: ../ProjectController.py:1802
+msgid "Transfer completed successfully.\n"
+msgstr ""
+
+#: ../ProjectController.py:1805
+msgid "Transfer failed\n"
+msgstr ""
+
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426
+#: ../editors/Viewer.py:2453
+msgid "Transition"
+msgstr ""
+
+#: ../PLCGenerator.py:1564
+#, python-format
+msgid ""
+"Transition \"%s\" body must contain an output variable or coil referring to "
+"its name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:91
+msgid "Transition Name"
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:60
+msgid "Transition Name:"
+msgstr ""
+
+#: ../PLCGenerator.py:1657
+#, python-brace-format
+msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:1646
+#, python-brace-format
+msgid ""
+"Transition with content \"{a1}\" not connected to a previous step in "
+"\"{a2}\" POU"
+msgstr ""
+
+#: ../plcopen/plcopen.py:1526
+#, python-format
+msgid "Transition with name %s doesn't exist!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Transitions"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:127
+msgid "Translated by"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:76
+msgid "Triggering"
+msgstr ""
+
+#: ../Beremiz_service.py:490
+msgid "Twisted unavailable."
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
+msgid "Type"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:54
+msgid "Type and derivated"
+msgstr ""
+
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#, python-format
+msgid "Type conflict for location \"%s\""
+msgstr ""
+
+#: ../plcopen/iec_std.csv:16
+msgid "Type conversion"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:170
+msgid "Type infos:"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:55
+msgid "Type strict"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:43
+#, python-format
+msgid "Unable to get Xenomai's %s \n"
+msgstr ""
+
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#, python-brace-format
+msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
+msgstr ""
+
+#: ../PLCGenerator.py:261
+#, python-format
+msgid "Undefined pou type \"%s\""
+msgstr ""
+
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
+msgid "Undo"
+msgstr ""
+
+#: ../ProjectController.py:442
+msgid "Unknown"
+msgstr ""
+
+#: ../editors/Viewer.py:437
+#, python-format
+msgid "Unknown variable \"%s\" for this POU!"
+msgstr ""
+
+#: ../ProjectController.py:439 ../ProjectController.py:440
+msgid "Unnamed"
+msgstr ""
+
+#: ../PLCControler.py:263
+#, python-format
+msgid "Unnamed%d"
+msgstr ""
+
+#: ../controls/VariablePanel.py:308
+#, python-format
+msgid "Unrecognized data size \"%s\""
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+msgid "User Data Types"
+msgstr ""
+
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
+msgid "User Type"
+msgstr ""
+
+#: ../plcopen/types_enums.py:75
+msgid "User-defined POUs"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:42
+msgid "Value"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:267
+msgid "Values:"
+msgstr ""
+
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
+msgid "Variable"
+msgstr ""
+
+#: ../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:68
+msgid "Variable Properties"
+msgstr ""
+
+#: ../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:439 ../editors/TextViewer.py:388
+msgid "Variable don't belong to this POU!"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:92
+msgid "Variable:"
+msgstr ""
+
+#: ../controls/VariablePanel.py:90
+msgid "Variables"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:166
+msgid "Vertical:"
+msgstr ""
+
+#: ../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 ""
+
+#: ../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:140
+msgid "WAMP connection timeout"
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:158
+#, python-format
+msgid "WAMP connection to '%s' failed.\n"
+msgstr ""
+
+#: ../Beremiz_service.py:595
+msgid "WAMP import failed :"
+msgstr ""
+
+#: ../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 ""
+
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+msgid "Warning"
+msgstr ""
+
+#: ../ProjectController.py:726
+msgid "Warnings in ST/IL/SFC code generator :\n"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:82
+msgid "Whole Project"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:134
+msgid "Width:"
+msgstr ""
+
+#: ../dialogs/FindInPouDialog.py:94
+msgid "Wrap search"
+msgstr ""
+
+#: ../dialogs/AboutDialog.py:126
+msgid "Written by"
+msgstr ""
+
+#: ../features.py:35
+msgid "WxGlade GUI"
+msgstr ""
+
+#: ../svgui/svgui.py:150
+msgid ""
+"You don't have write permissions.\n"
+"Open Inkscape anyway ?"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:160
+msgid ""
+"You don't have write permissions.\n"
+"Open wxGlade anyway ?"
+msgstr ""
+
+#: ../ProjectController.py:390
+msgid ""
+"You must have permission to work on the project\n"
+"Work on a project copy ?"
+msgstr ""
+
+#: ../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:677
+msgid "You must select the wire where a contact should be added!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
+msgid "You must type a name!"
+msgstr ""
+
+#: ../dialogs/ForceVariableDialog.py:209
+msgid "You must type a value!"
+msgstr ""
+
+#: ../IDEFrame.py:440
+msgid "Zoom"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "days"
+msgstr ""
+
+#: ../PLCOpenEditor.py:317
+#, python-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../util/ProcessLogger.py:178
+#, python-brace-format
+msgid "exited with status {a1} (pid {a2})\n"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "function"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "functionBlock"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:158
+msgid "hours"
+msgstr ""
+
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:160
+msgid "milliseconds"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "minutes"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:36
+msgid "program"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
+msgid "seconds"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:84
+msgid "string from the middle"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:82
+msgid "string left of"
+msgstr ""
+
+#: ../plcopen/iec_std.csv:83
+msgid "string right of"
+msgstr ""
+
+#: ../Beremiz.py:167
+msgid "update info unavailable."
+msgstr ""
+
+#: ../PLCOpenEditor.py:315
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#: ../PLCControler.py:576
+#, python-brace-format
+msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
+msgstr ""
+
+#: ../ConfigTreeNode.py:58
+#, python-brace-format
+msgid ""
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
+"{a3}"
+msgstr ""
+
+#: Extra XSD strings
+msgid "CanFestivalSlaveNode"
+msgstr ""
+
+msgid "CAN_Device"
+msgstr ""
+
+msgid "CAN_Baudrate"
+msgstr ""
+
+msgid "NodeId"
+msgstr ""
+
+msgid "Sync_Align"
+msgstr ""
+
+msgid "Sync_Align_Ratio"
+msgstr ""
+
+msgid "CanFestivalNode"
+msgstr ""
+
+msgid "Sync_TPDOs"
+msgstr ""
+
+msgid "CanFestivalInstance"
+msgstr ""
+
+msgid "CAN_Driver"
+msgstr ""
+
+msgid "Generic"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Xenomai"
+msgstr ""
+
+msgid "XenoConfig"
+msgstr ""
+
+msgid "Compiler"
+msgstr ""
+
+msgid "CFLAGS"
+msgstr ""
+
+msgid "Linker"
+msgstr ""
+
+msgid "LDFLAGS"
+msgstr ""
+
+msgid "Linux"
+msgstr ""
+
+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 ""
+
+msgid "IEC_Channel"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "BeremizRoot"
+msgstr ""
+
+msgid "TargetType"
+msgstr ""
+
+msgid "Libraries"
+msgstr ""
+
+msgid "URI_location"
+msgstr ""
+
+msgid "Disable_Extensions"
+msgstr ""
+
+msgid "%(codefile_name)s"
+msgstr ""
+
+msgid "variables"
+msgstr ""
+
+msgid "variable"
+msgstr ""
+
+msgid "name"
+msgstr ""
+
+msgid "type"
+msgstr ""
+
+msgid "class"
+msgstr ""
+
+msgid "initial"
+msgstr ""
+
+msgid "desc"
+msgstr ""
+
+msgid "onchange"
+msgstr ""
+
+msgid "opts"
+msgstr ""
+
+#: Extra TC6 documentation strings
+msgid "0 - current time, 1 - load time from PDT"
+msgstr ""
+
+msgid "Preset datetime"
+msgstr ""
+
+msgid "Copy of IN"
+msgstr ""
+
+msgid "Datetime, current or relative to PDT"
+msgstr ""
+
+msgid ""
+"The real time clock has many uses including time stamping, setting dates and"
+" times of day in batch reports, in alarm messages and so on."
+msgstr ""
+
+msgid "1 = integrate, 0 = hold"
+msgstr ""
+
+msgid "Overriding reset"
+msgstr ""
+
+msgid "Input variable"
+msgstr ""
+
+msgid "Initial value"
+msgstr ""
+
+msgid "Sampling period"
+msgstr ""
+
+msgid "NOT R1"
+msgstr ""
+
+msgid "Integrated output"
+msgstr ""
+
+msgid ""
+"The integral function block integrates the value of input XIN over time."
+msgstr ""
+
+msgid "0 = reset"
+msgstr ""
+
+msgid "Input to be differentiated"
+msgstr ""
+
+msgid "Differentiated output"
+msgstr ""
+
+msgid ""
+"The derivative function block produces an output XOUT proportional to the "
+"rate of change of the input XIN."
+msgstr ""
+
+msgid "0 - manual , 1 - automatic"
+msgstr ""
+
+msgid "Process variable"
+msgstr ""
+
+msgid "Set point"
+msgstr ""
+
+msgid "Manual output adjustment - Typically from transfer station"
+msgstr ""
+
+msgid "Proportionality constant"
+msgstr ""
+
+msgid "Reset time"
+msgstr ""
+
+msgid "Derivative time constant"
+msgstr ""
+
+msgid "PV - SP"
+msgstr ""
+
+msgid "FB for integral term"
+msgstr ""
+
+msgid "FB for derivative term"
+msgstr ""
+
+msgid ""
+"The PID (proportional, Integral, Derivative) function block provides the "
+"classical three term controller for closed loop control."
+msgstr ""
+
+msgid "0 - track X0, 1 - ramp to/track X1"
+msgstr ""
+
+msgid "Ramp duration"
+msgstr ""
+
+msgid "BUSY = 1 during ramping period"
+msgstr ""
+
+msgid "Elapsed time of ramp"
+msgstr ""
+
+msgid "The RAMP function block is modelled on example given in the standard."
+msgstr ""
+
+msgid ""
+"The hysteresis function block provides a hysteresis boolean output driven by"
+" the difference of two floating point (REAL) inputs XIN1 and XIN2."
+msgstr ""
+
+msgid "The SR bistable is a latch where the Set dominates."
+msgstr ""
+
+msgid "The RS bistable is a latch where the Reset dominates."
+msgstr ""
+
+msgid ""
+"The semaphore provides a mechanism to allow software elements mutually "
+"exclusive access to certain resources."
+msgstr ""
+
+msgid "The output produces a single pulse when a rising edge is detected."
+msgstr ""
+
+msgid "The output produces a single pulse when a falling edge is detected."
+msgstr ""
+
+msgid ""
+"The up-counter can be used to signal when a count has reached a maximum "
+"value."
+msgstr ""
+
+msgid ""
+"The down-counter can be used to signal when a count has reached zero, on "
+"counting down from a preset value."
+msgstr ""
+
+msgid ""
+"The up-down counter has two inputs CU and CD. It can be used to both count "
+"up on one input and down on the other."
+msgstr ""
+
+msgid "first input parameter"
+msgstr ""
+
+msgid "second input parameter"
+msgstr ""
+
+msgid "first output parameter"
+msgstr ""
+
+msgid "second output parameter"
+msgstr ""
+
+msgid "internal state: 0-reset, 1-counting, 2-set"
+msgstr ""
+
+msgid ""
+"The pulse timer can be used to generate output pulses of a given time "
+"duration."
+msgstr ""
+
+msgid ""
+"The on-delay timer can be used to delay setting an output true, for fixed "
+"period after an input becomes true."
+msgstr ""
+
+msgid ""
+"The off-delay timer can be used to delay setting an output false, for fixed "
+"period after input goes false."
+msgstr ""
--- a/i18n/Beremiz_zh_CN.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Beremiz_zh_CN.po Fri Nov 23 00:33:04 2018 +0100
@@ -1,19 +1,16 @@
-# English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-# Translators:
-# Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017
-# frank guan <gpfrank@163.com>, 2017
-# Tango_Wu <wuyangtang@live.com>, 2017
+#, fuzzy
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"
-"Last-Translator: Tango_Wu <wuyangtang@live.com>, 2017\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: yiwei Yan <523136664@qq.com>, 2017\n"
"Language-Team: Chinese (China) (https://www.transifex.com/beremiz/teams/75746/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,7 +18,7 @@
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
#, python-format
msgid ""
"\n"
@@ -46,151 +43,156 @@
"\n"
"追溯:\n"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " External"
msgstr " 外部"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " InOut"
msgstr " 输入输出"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Input"
msgstr " 输入"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid " Local"
msgstr " 本地"
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
msgid " Output"
msgstr " 输出"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid " Temp"
msgstr "临时"
-#: ../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 "和 %s"
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
msgid " generation failed !\n"
msgstr "生成失败!\n"
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
#, python-format
msgid "\"%s\" Data Type doesn't exist !!!"
msgstr "\"%s\" 数据类型尚不存在!!!"
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
#, python-format
msgid "\"%s\" POU already exists !!!"
msgstr "\"%s\"POU已经存在!!!"
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
#, python-format
msgid "\"%s\" POU doesn't exist !!!"
msgstr "\"%s\" POU不存在!!!"
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
#, python-format
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" 不能自己使用!"
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
#, python-format
msgid "\"%s\" config already exists!"
msgstr "\"%s\" 配置已存在!"
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
#, python-format
msgid "\"%s\" configuration already exists !!!"
msgstr "\"%s\" 配置已存在!!!"
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "“ %s ” 配置不存在!!!"
+
+#: ../IDEFrame.py:1638
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "\"%s\" 数据类型已存在!"
-#: ../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\" 元素对于此POU已经存在!"
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr "\"%s\" 文件夹不是有效的Beremiz项目\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\" 是一个关键词。它不能被使用!"
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
#, python-format
msgid "\"%s\" is an invalid value!"
msgstr "\"%s\"不是有效值!"
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
#, python-format
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\"不是有效文件夹!"
-#: ../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\"不是有效标识符!"
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr "\"%s\"被一个或多个程序组织单元使用,你确定要继续吗? "
-#: ../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\"编程组织单元已经存在!"
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
#, python-format
msgid "\"%s\" step already exists!"
msgstr "\"%s\"步骤已经存在!"
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
#, python-format
msgid "\"%s\" value already defined!"
msgstr "\"%s\" 值已经被定义!"
-#: ../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\" 值不是有效数组维数!"
-#: ../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"
@@ -199,209 +201,205 @@
"\"%s\" 不是一个有效的数组维数值!\n"
"右边的数值必须大于左边的数值。"
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "\"{a1}\" 功能 被取消在 \"{a2}\" POU:没有输入被连接"
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
#, python-brace-format
msgid "\"{a1}\" is already used by \"{a2}\"!"
msgstr "\"{a1}\" 被用在了 \"{a2}\"!"
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
#, python-brace-format
msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" 资源已经存在于 \"{a2}\" 配置 !!!"
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
#, python-brace-format
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" 资源部存在于 \"{a2}\" 配置!!!"
-#: ../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 数据类型"
-#: ../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 未包含实例!"
-#: ../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 未包含文本!"
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
msgid "&Add Element"
msgstr "&增加元素"
-#: ../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 "&关闭"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
msgid "&Configuration"
msgstr "&配置"
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
msgid "&Data Type"
msgstr "&数据类型"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
msgid "&Delete"
msgstr "&删除"
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
msgid "&Display"
msgstr "&显示"
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
msgid "&Edit"
msgstr "&编辑"
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
msgid "&File"
msgstr "&文件"
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
msgid "&Function"
msgstr "&功能"
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
msgid "&Help"
msgstr "&帮助"
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
msgid "&License"
msgstr "&许可"
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
msgid "&Program"
msgstr "&程序"
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
msgid "&Properties"
msgstr "&属性"
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
msgid "&Recent Projects"
msgstr "&最近项目"
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
msgid "&Resource"
msgstr "&资源"
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
msgstr "'{a1}' - {a2} 在项目中匹配"
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
#, python-brace-format
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} 在项目中匹配"
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' 位于 {a2}\n"
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
#, python-format
msgid "(%d matches)"
msgstr "(%d 匹配)"
-#: ../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 "- 选择 URI 类型 -"
+
+#: ../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 "一个编程组织单元的成员被命名为\"%s\"。这可能会产生冲突。你希望继续吗?"
-#: ../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 "一个以\"%s\"命名的的编程组织单元已经存在!"
@@ -411,26 +409,26 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "一个子命名的 \"{a1}\" 已经存在 -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
msgid "A location must be selected!"
msgstr "一个定位必须被选择!"
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
msgid "A task with the same name already exists!"
msgstr "相同名称的任务已经存在!"
-#: ../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 "一个以\"%s\"命名的变量在这个编程组织单元中已经存在!"
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "一个变量以 \"%s\" 作为名字已经存在!"
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
msgid "About"
msgstr "关于"
@@ -438,125 +436,125 @@
msgid "Absolute number"
msgstr "绝对值"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "动作"
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
msgid "Action Block"
msgstr "动作控制功能块"
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
msgid "Action Name"
msgstr "动作名字"
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
msgid "Action Name:"
msgstr "动作名字:"
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
#, python-format
msgid "Action with name %s doesn't exist!"
msgstr "一个以\"%s\"命名的的行动不存在!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Actions"
msgstr "动作"
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
msgid "Actions:"
msgstr "动作:"
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
msgid "Active"
msgstr "活动"
-#: ../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 "添加"
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../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 "同步的增加C代码访问定位的变量"
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
msgid "Add Configuration"
msgstr "添加配置"
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
msgid "Add DataType"
msgstr "添加数据类型"
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
msgid "Add Divergence Branch"
msgstr "添加发散分支"
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "添加 IP"
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
msgid "Add POU"
msgstr "添加 POU"
-#: ../features.py:33
+#: ../features.py:34
msgid "Add Python code executed asynchronously"
msgstr "添加异步执行的Python代码"
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
msgid "Add Resource"
msgstr "添加源"
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
msgid "Add Transition"
msgstr "添加跃迁"
-#: ../editors/Viewer.py:559
+#: ../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:2757 ../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 "添加一个简单的基于 WxGlade的 GUI."
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
msgid "Add action"
msgstr "添加动作"
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
msgid "Add element"
msgstr "添加元素"
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
msgid "Add instance"
msgstr "添加实例"
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "添加从站"
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
msgid "Add task"
msgstr "添加任务"
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
msgid "Add variable"
msgstr "添加变量"
@@ -564,44 +562,44 @@
msgid "Addition"
msgstr "加法"
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
msgid "Additional function blocks"
msgstr "附加功能类型"
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
msgid "Adjust Block Size"
msgstr "调整块尺寸"
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
msgid "Alignment"
msgstr "对准"
-#: ../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 "所有"
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "所有文件 (*.*)|*.*|CSV 文件 (*.csv)|*.csv"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
msgid "Already connected. Please disconnect\n"
msgstr "已经连接。请断开连接\n"
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
#, python-format
msgid "An element named \"%s\" already exists in this structure!"
msgstr "一个以\"%s\"命名的元素已经在这个结构中存在!"
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
msgid "An instance with the same name already exists!"
msgstr "相同名称的实例已经存在!"
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr "应用名称修改到所有伴随相同名称的延续"
@@ -621,8 +619,8 @@
msgid "Arithmetic"
msgstr "运算"
-#: ../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 "阵列的"
@@ -630,45 +628,37 @@
msgid "Assignment"
msgstr "分配"
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
msgid "At least a variable or an expression must be selected!"
msgstr "至少选择一个变量或者表达式!"
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Author"
msgstr "作者"
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Author Name (optional):"
msgstr "作者姓名(选填):"
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "反向"
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "不好域名称(循环的)在"
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "不好的域名称在"
-
-#: ../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 "不好的位置大小:%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 "基类型:"
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
msgid "Base Types"
msgstr "基类型"
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
msgid "Beremiz"
msgstr "Beremiz"
@@ -700,85 +690,85 @@
msgid "Bitwise inverting"
msgstr "按位“反向”"
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
msgid "Block"
msgstr "块"
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
msgid "Block Properties"
msgstr "块属性"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Block name"
msgstr "块名称"
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
msgid "Bottom"
msgstr "底部"
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
msgid "Broken"
msgstr "损坏"
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
#, python-format
msgid "Browse %s values library"
msgstr "浏览 %s 值库"
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
msgid "Browse Locations"
msgstr "浏览定位"
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
msgid "Build"
msgstr "构建"
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
msgid "Build directory already clean\n"
msgstr "构建目录已经清除\n"
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
msgid "Build project into build folder"
msgstr "在构建文件夹中构建项目"
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
msgid "C Build crashed !\n"
msgstr "C构建损坏!\n"
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
msgid "C Build failed.\n"
msgstr "C构建失败。\n"
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
msgid "C code"
msgstr "C 代码"
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
msgid "C code generated successfully.\n"
msgstr "C代码生成成功。\n"
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
msgid "C compilation failed.\n"
msgstr "C编译失败。\n"
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
#, python-format
msgid "C compilation of %s failed.\n"
msgstr " %s 的C编译失败。\n"
-#: ../features.py:32
+#: ../features.py:33
msgid "C extension"
msgstr "C扩展"
-#: ../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 网络"
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
msgid "CANOpen slave"
msgstr "CANOpen 从站"
@@ -786,34 +776,34 @@
msgid "CANopen support"
msgstr "CANOpen 支持"
-#: ../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 "在功能块网络,只能生成执行命令!"
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
msgid "Can only give a location to local or global variables"
msgstr "只能影响本地或全局变量的位置"
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
#, python-format
msgid "Can't generate program to file %s!"
msgstr "这个编程生成文件失败 %s!"
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
msgid "Can't give a location to a function block instance"
msgstr "不能影响功能块实例的位置"
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
#, python-format
msgid "Can't save project to file %s!"
msgstr "这个项目保存为文件失败 %s!"
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
msgid "Can't set an initial value to a function block instance"
msgstr "不能设置一个初始值到一个功能块实例"
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
#, python-brace-format
msgid "Cannot create child {a1} of type {a2} "
msgstr "不能创建类型 {a2} 的子类型 {a1} "
@@ -823,46 +813,50 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "无法找到比 %d 更低的自由的IEC通道\n"
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
msgid "Cannot get PLC status - connection failed.\n"
msgstr "无法获取PLC的状态 - 连接失败。\n"
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "无法打开/解析 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 "不能设置位偏移对于非布尔 '{a1}' 变量 (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 "在PLC运行时,不能传输!现在停止运行吗?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
msgid "Case sensitive"
msgstr "区分大小写"
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
msgid "Center"
msgstr "中"
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
msgid "Change IP of interface to bind"
msgstr "更改界面的ip用以绑定"
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
msgid "Change Name"
msgstr "更改名字"
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
msgid "Change POU Type To"
msgstr "将POU类型转换为"
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
msgid "Change Port Number"
msgstr "更改端口号"
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
msgid "Change working directory"
msgstr "更改工作目录"
@@ -870,115 +864,119 @@
msgid "Character string"
msgstr "字符串"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "Choose a SVG file"
msgstr "选择一个SVG文件"
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
msgid "Choose a directory to save project"
msgstr "选择一个目录保存项目"
-#: ../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 "选择一个文件"
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../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 "这对 %s选择一个值:"
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
msgid "Choose a working directory "
msgstr "选择一个工作目录"
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "选择一个空白目录以保存项目"
+
+#: ../ProjectController.py:468
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr "被选中的文件夹未包含一个程序。它不是一个有效项目!"
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr "被选中的文件夹非空。你不能用它创建一个新项目!"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
msgid "Class"
msgstr "分类"
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
msgid "Class Filter:"
msgstr "类过滤器:"
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
msgid "Class:"
msgstr "分类:"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
msgid "Clean"
msgstr "清除"
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
msgid "Clean log messages"
msgstr "清楚记录信息"
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
msgid "Clean project build folder"
msgstr "清除项目构建目录"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
msgid "Cleaning the build directory\n"
msgstr "清除构建目录\n"
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
msgid "Clear Errors"
msgstr "清楚错误"
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
msgid "Clear Execution Order"
msgstr "清空执行命令"
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
msgid "Close"
msgstr "关闭"
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "关闭应用"
-#: ../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 "关闭项目"
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
msgid "Close Tab"
msgstr "关闭标签"
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
msgid "Coil"
msgstr "线圈"
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "注释"
-#: ../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 "社区支持"
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
msgid "Company Name"
msgstr "公司名称"
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
msgid "Company Name (required):"
msgstr "公司名字(必须):"
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
msgid "Company URL (optional):"
msgstr "公司网址(选填):"
@@ -986,7 +984,7 @@
msgid "Comparison"
msgstr "比较"
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
msgid "Compiling IEC Program into C code...\n"
msgstr "正在将IEC程序编译成C代码...\n"
@@ -994,93 +992,93 @@
msgid "Concatenation"
msgstr "级联"
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
msgid "Config"
msgstr "配置"
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
msgid "Config variables"
msgstr "配置变量"
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
msgid "Configuration"
msgstr "配置"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Configurations"
msgstr "配置"
-#: ../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 "确认或变更变量名称"
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
msgid "Connect"
msgstr "连接"
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
msgid "Connect to the target PLC"
msgstr "连接到PLC目标"
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
#, python-format
msgid "Connected to URI: %s"
msgstr "连接到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 "连接"
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
msgid "Connection Properties"
msgstr "连接属性"
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
msgid "Connection canceled!\n"
msgstr "取消连接!\n"
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
#, python-format
msgid "Connection failed to %s!\n"
msgstr "连接失败 %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 "失去连接!\n"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "连接到 '%s' 失败。\n"
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
msgid "Connector"
msgstr "连接"
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
msgid "Connectors:"
msgstr "连接:"
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
msgid "Console"
msgstr "控制台"
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
msgid "Constant"
msgstr "常量"
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
msgid "Contact"
msgstr "连接"
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
msgid "Content Description (optional):"
msgstr "内容描述(选填):"
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
msgid "Continuation"
msgstr "连续"
@@ -1100,20 +1098,20 @@
msgid "Conversion to time-of-day"
msgstr "转换为日期时间"
-#: ../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 "复制"
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
msgid "Copy POU"
msgstr "复制POU"
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
msgid "Copy file from left folder to right"
msgstr "从左侧文件夹中复制文件到右侧"
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from right folder to left"
msgstr "从右侧文件夹中复制文件到左侧"
@@ -1121,7 +1119,7 @@
msgid "Cosine"
msgstr "余弦"
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
#, python-brace-format
msgid ""
"Could not add child \"{a1}\", type {a2} :\n"
@@ -1130,12 +1128,12 @@
"不能增加子 \"{a1}\",类型 {a2} :\n"
"{a3}\n"
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
#, python-format
msgid "Couldn't import old %s file."
msgstr "不能导入旧 %s 文件。"
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
"Couldn't load confnode base parameters {a1} :\n"
@@ -1144,7 +1142,7 @@
"不能加载 confnode 基础参数 {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"
@@ -1153,111 +1151,107 @@
"不能加载 confnode 参数 {a1} :\n"
" {a2}"
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "不能粘贴 非-POU 目标。"
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
msgid "Couldn't start PLC !\n"
msgstr "无法开始PLC!\n"
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
msgid "Couldn't stop PLC !\n"
msgstr "无法停止PLC!\n"
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "不能停止调试器。\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
msgid "Create HMI"
msgstr "新建 HMI"
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
msgid "Create a new POU"
msgstr "新建一个POU"
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
msgid "Create a new action"
msgstr "新建一个动作"
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
msgid "Create a new action block"
msgstr "新建一个动作控制功能块"
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
msgid "Create a new block"
msgstr "新建一个块"
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
msgid "Create a new branch"
msgstr "新建一个支流"
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
msgid "Create a new coil"
msgstr "新建一个线圈"
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
msgid "Create a new comment"
msgstr "新建一个备注"
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
msgid "Create a new connection"
msgstr "新建一个连接"
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
msgid "Create a new contact"
msgstr "新建一个接触点"
-#: ../IDEFrame.py:162
+#: ../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:150
+#: ../IDEFrame.py:157
msgid "Create a new initial step"
msgstr "新建一个初始步骤"
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
msgid "Create a new jump"
msgstr "新建一个跳跃"
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
msgid "Create a new power rail"
msgstr "新建一个电源导轨"
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
msgid "Create a new rung"
msgstr "新建一个梯级"
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
msgid "Create a new step"
msgstr "新建一个步骤"
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
msgid "Create a new transition"
msgstr "新建一个跃迁"
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
msgid "Create a new variable"
msgstr "新建一个变量"
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "关于作者"
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
msgid "Current working directory :"
msgstr "当前工作目录:"
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
msgid "Cut"
msgstr "剪切"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Cyclic"
msgstr "循环"
@@ -1269,19 +1263,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 配置"
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
msgid "DS-302 Profile"
msgstr "DS-302 配置"
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
msgid "Data Type"
msgstr "数据类型"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Data Types"
msgstr "数据类型 "
@@ -1302,66 +1296,58 @@
msgid "Date subtraction"
msgstr "日期减法"
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
msgid "Days:"
msgstr "日:"
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr "调试部匹配PLC - 停止/传输/启动 来新启用\n"
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
msgid "Debug instance"
msgstr "调试实例"
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
#, python-format
msgid "Debug: %s"
msgstr "调试:%s"
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr "调试:未知变量 '%s'\n"
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "调试:不支持的类型进行调试 '%s'\n"
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
msgid "Debugger"
msgstr "调试器"
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "调试器禁用\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
msgid "Debugger ready\n"
msgstr "调试器准备好\n"
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "调试器停止。\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
msgid "Delete"
msgstr "删除"
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
msgid "Delete Divergence Branch"
msgstr "删除发散分支"
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
msgid "Delete File"
msgstr "删除文件"
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
msgid "Delete Wire Segment"
msgstr "删除布线段"
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
msgid "Delete item"
msgstr "删除项目"
@@ -1369,47 +1355,47 @@
msgid "Deletion (within)"
msgstr "删除"
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
msgid "Derivation Type:"
msgstr "推导类型:"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
msgid "Description"
msgstr "描述"
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
msgid "Description:"
msgstr "描述:"
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
msgid "Dimensions:"
msgstr "维数:"
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
msgid "Direction"
msgstr "方向"
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
msgid "Direction:"
msgstr "方向:"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Directly"
msgstr "直接的"
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
msgid "Disconnect"
msgstr "断开"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
msgid "Disconnect from PLC"
msgstr "从PLC断开"
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
msgid "Disconnected"
msgstr "已断开"
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
msgid "Divergence"
msgstr "偏差"
@@ -1417,120 +1403,120 @@
msgid "Division"
msgstr "除法"
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr "你真的想删除这个文件 '%s' ?"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
msgid "Documentation"
msgstr "文档"
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
msgid "Done"
msgstr "完成"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "时间"
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "EDS 文件 (*.eds)|*.eds|All files|*.*"
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
msgid "Edit Block"
msgstr "编辑块"
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
msgid "Edit Coil Values"
msgstr "编辑线圈值"
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
msgid "Edit Contact Values"
msgstr "编辑接触点值"
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../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:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
msgid "Edit a WxWidgets GUI with WXGlade"
msgstr "用 WXGlade 编辑一个 WxWidgets 用户图形界面"
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
msgid "Edit action block properties"
msgstr "编辑行动块属性"
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
msgid "Edit array type properties"
msgstr "编辑数组类型属性"
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
msgid "Edit comment"
msgstr "编辑注释"
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
msgid "Edit file"
msgstr "编辑文件"
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
msgid "Edit item"
msgstr "编辑项目"
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
msgid "Edit jump target"
msgstr "编辑跳跃目标"
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr "编辑原始的IEC代码添加至PLCGenerator生成的代码"
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
msgid "Edit step name"
msgstr "编辑步骤名称"
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
msgid "Edit transition"
msgstr "编辑跃迁"
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
msgid "Editor ToolBar"
msgstr "编辑工具栏"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
msgid "Editor selection"
msgstr "编辑选择"
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
msgid "Elements :"
msgstr "元素:"
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
msgid "Empty"
msgstr "空的"
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "启用 取消/重做"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "不允许空维度。"
+
+#: ../Beremiz_service.py:341
msgid "Enter a name "
msgstr "输入一个名字"
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
msgid "Enter a port number "
msgstr "输入一个端口号"
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
msgid "Enter the IP of the interface to bind"
msgstr "输入界面的ip用以绑定"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "列举的"
@@ -1538,48 +1524,47 @@
msgid "Equal to"
msgstr "等于"
-#: ../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 "错误"
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
msgid ""
"Error : At least one configuration and one resource must be declared in PLC "
"!\n"
msgstr "错误:在PLC中,必须申明至少一个配置和一个资源!\n"
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "错误:IEC到C编译器返回 %d\n"
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1588,37 +1573,44 @@
"错误在ST/IL/SFC代码生成器中:\n"
"%s\n"
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
#, python-format
msgid "Error while saving \"%s\"\n"
msgstr "存储时有错误 \"%s\"\n"
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
msgid "Error: Export slave failed\n"
msgstr "错误:导出从站失败\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 "错误: Modbus/IP 服务器 %{a1}.x 和 %{a2}.x 使用相同的端口号 {a3}.\n"
+
+#: ../canfestival/canfestival.py:388
msgid "Error: No Master generated\n"
msgstr "错误:没有主控生成\n"
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
msgid "Error: No PLC built\n"
msgstr "错误:没有PLC构建\n"
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "连接时存在异常 %s!\n"
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
msgid "Execution Control:"
msgstr "执行控制:"
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "执行命令:"
-#: ../features.py:35
+#: ../features.py:36
msgid "Experimental web based HMI"
msgstr "实验性的WEB基础的HMI"
@@ -1630,77 +1622,77 @@
msgid "Exponentiation"
msgstr "幂"
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "导出 CANOpen 从站到 EDS 文件"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
msgid "Export graph values to clipboard"
msgstr "导出图形值到剪切板"
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
msgid "Export slave"
msgstr "导出从站"
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
msgid "Expression:"
msgstr "表达式:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "External"
msgstr "外部的"
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
msgid "Extracting Located Variables...\n"
msgstr "正在提取位置变量......\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 "功能块图"
-#: ../ProjectController.py:1791
+#: ../ProjectController.py:1773
msgid "Failed : Must build before transfer.\n"
msgstr "失败:传输之前必须构建。\n"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
msgid "Falling Edge"
msgstr "下降沿"
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
msgid "Fatal : cannot get builder.\n"
msgstr "致命错误:无法获取构建者。\n"
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
#, python-format
msgid "Fetching %s"
msgstr "抓取 %s"
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr "领域 %s 没有一个有效值!"
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr "领域 %s 没有一个有效值!"
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
#, python-format
msgid "File '%s' already exists!"
msgstr "文件 '%s' 已经存在!"
-#: ../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 "查找"
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
msgid "Find Next"
msgstr "查找下一个"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
msgid "Find Previous"
msgstr "查找前一个"
@@ -1708,93 +1700,89 @@
msgid "Find position"
msgstr "查找位置"
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
msgid "Find:"
msgstr "查找:"
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "强制运行时重新加载\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
msgid "Force value"
msgstr "强制值"
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
msgid "Forcing Variable Value"
msgstr "强制变量值"
-#: ../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 "形式不完整。%s 必须被填补完整!"
-#: ../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 "形式不完整。%s 名字必须填!"
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
msgid "Form isn't complete. Valid block type must be selected!"
msgstr "形式不完整。%s 有效的块类型必须被选择!"
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
msgid "Forward"
msgstr "向前的"
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
msgid "Function"
msgstr "功能"
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
msgid "Function &Block"
msgstr "功能 &块"
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
msgid "Function Block"
msgstr "功能块"
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
msgid "Function Block Types"
msgstr "功能块类型"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Function Blocks"
msgstr "功能块"
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
msgid "Function Blocks can't be used in Functions!"
msgstr "功能块不能用于功能中!"
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
#, python-format
msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
msgstr "功能块 \"%s\" 不能用于功能中!"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "Functions"
msgstr "功能"
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
msgid "Generate Program"
msgstr "生成程序"
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "生成软PLC IEC-61131 ST/IL/SFC 代码......\n"
-#: ../controls/VariablePanel.py:73
+#: ../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:174
+#: ../controls/ProjectPropertiesPanel.py:189
msgid "Graphics"
msgstr "图形"
@@ -1806,110 +1794,114 @@
msgid "Greater than or equal to"
msgstr "大于或等于"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
msgid "Grid Resolution:"
msgstr "栅格分辨率:"
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
msgid "HTTP interface port :"
msgstr "HTTP 界面端口:"
-#: ../controls/ProjectPropertiesPanel.py:121
+#: ../controls/ProjectPropertiesPanel.py:135
msgid "Height:"
msgstr "高度:"
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
msgid "Home Directory:"
msgstr "主目录"
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
msgid "Horizontal:"
msgstr "水平:"
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
msgid "Hours:"
msgstr "小时:"
-#: ../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 "指令表编程语言"
-#: ../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 无效!"
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "导入 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 "输入输出"
-#: ../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 变量 {a1} 在块 {a2} 在 POU{a3} 必须被连接."
+
+#: ../editors/Viewer.py:473
msgid "Inactive"
msgstr "不活动"
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr " \"{a1}\" 和 \"{a2}\" 数据类型不相容"
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr " \"%s\" 和 \"BOOL\" 数据尺寸不相容"
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr " \"{a1}\" 和 \"{a2}\" 数据尺寸不相容"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "指示器"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
msgid "Initial"
msgstr "初始的"
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
msgid "Initial Step"
msgstr "初始的步"
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
msgid "Initial Value"
msgstr "初始值"
-#: ../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 "初始值:"
-#: ../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 "在线"
-#: ../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 "输入"
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
msgid "Inputs:"
msgstr "输入:"
@@ -1917,64 +1909,72 @@
msgid "Insertion (into)"
msgstr "插入"
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
#, python-format
msgid "Instance with id %d doesn't exist!"
msgstr "有id的实例 %d 尚不存在!"
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
msgid "Instances:"
msgstr "实例:"
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
msgid "Interface"
msgstr "界面"
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
msgid "Interrupt"
msgstr "中断"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Interval"
msgstr "区间"
-#: ../PLCControler.py:2331
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+"无效的URL!\n"
+"请输入正确的URL地址."
+
+#: ../PLCControler.py:1895
msgid "Invalid plcopen element(s)!!!"
msgstr "无效的plcopen元素!!!"
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
#, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location\"{a4}\""
-msgstr "无效类型 \"{a1}\"-> {a2} != {a3} 对于定位 \"{a4}\""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
+msgstr "无效类型 \"{a1}\"-> {a2} != {a3} 对于定位 \"{a4}\""
+
+#: ../canfestival/config_utils.py:689
#, python-brace-format
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "无效类型 \"{a1}\"-> {a2} != {a3} 对于定位 \"{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 "无效值 \"%s\" 为调试变量"
-#: ../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 "无效值 \"%s\" 对于变量网格元素"
-#: ../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 "无效值 \"%s\" 在视窗块"
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
#, python-brace-format
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr "无效值 \"{a1}\" 对于 \"{a2}\" 变量!"
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1982,51 +1982,55 @@
"无效值!\n"
"你必须填入一个数字值。"
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr "是安全连接吗?"
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
msgid "Jump"
msgstr "跳转"
-#: ../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 "梯级图"
-#: ../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 "有id的梯形元素 %d 不止在一个梯级上。"
-#: ../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 "语言"
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
msgid "Language (optional):"
msgstr "语言(选填):"
-#: ../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 "语言:"
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr "最新构建已经与当前目标匹配。正在传输中......\n"
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
msgid "Launch WX GUI inspector"
msgstr "启动 WX GUI 检查员"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
msgid "Launch a live Python shell"
msgstr "启动一个活的Python Shell"
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
msgid "Left"
msgstr "左"
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
msgid "Left PowerRail"
msgstr "左电源导轨"
@@ -2042,11 +2046,11 @@
msgid "Less than or equal to"
msgstr "小于或等于"
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
msgid "Library"
msgstr "库"
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
msgid "License"
msgstr "许可"
@@ -2054,27 +2058,27 @@
msgid "Limitation"
msgstr "限制"
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
msgid "Linking :\n"
msgstr "链接:\n"
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
msgid "Local"
msgstr "本地"
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
msgid "Local entries"
msgstr "本地入口"
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
msgid "Local service discovery failed!\n"
msgstr "本地服务探索失败!\n"
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
msgid "Location"
msgstr "位置"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
msgid "Locations available:"
msgstr "存在的定位:"
@@ -2082,12 +2086,12 @@
msgid "Logarithm to base 10"
msgstr "底数10的对数"
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "MDNS 解析度失败因为 '%s'\n"
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "映射变量"
@@ -2095,11 +2099,15 @@
msgid "Map located variables over CANopen"
msgstr "通过CANopen映射位置变量"
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr "通过Modbus定位变量"
+
+#: ../canfestival/NetworkEditor.py:113
msgid "Master"
msgstr "主站"
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr "最大计数 ({a1}) 达到了对于类型 {a2} 这个confnode"
@@ -2108,29 +2116,29 @@
msgid "Maximum"
msgstr "最大值"
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
msgid "Maximum:"
msgstr "最大值:"
-#: ../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 "存储"
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
msgid "Menu ToolBar"
msgstr "菜单工具栏"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
msgid "Microseconds:"
msgstr "微秒:"
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
msgid "Middle"
msgstr "中间"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
msgid "Milliseconds:"
msgstr "毫秒:"
@@ -2138,78 +2146,82 @@
msgid "Minimum"
msgstr "最小值"
-#: ../editors/DataTypeEditor.py:226
+#: ../editors/DataTypeEditor.py:233
msgid "Minimum:"
msgstr "最小值:"
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
msgid "Minutes:"
msgstr "分:"
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
msgid "Miscellaneous"
msgstr "其他"
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr "Modbus 支持"
+
+#: ../dialogs/LDElementDialog.py:65
msgid "Modifier:"
msgstr "改动:"
-#: ../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 "多个连接器发现对应在 \"{a2}\" POU中 \"{a1}\" 延续"
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
msgid "Move action down"
msgstr "下移动作"
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
msgid "Move action up"
msgstr "上移动作"
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
msgid "Move down"
msgstr "下移"
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
msgid "Move element down"
msgstr "下移元素"
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
msgid "Move element up"
msgstr "上移元素"
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
msgid "Move instance down"
msgstr "下移实例"
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
msgid "Move instance up"
msgstr "上移实例"
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
msgid "Move task down"
msgstr "下移任务"
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
msgid "Move task up"
msgstr "上移任务"
-#: ../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 "移动视图"
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
msgid "Move up"
msgstr "上移"
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
msgid "Move variable down"
msgstr "下移变量"
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
msgid "Move variable up"
msgstr "上移变量"
@@ -2221,26 +2233,26 @@
msgid "Multiplication"
msgstr "乘法"
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
msgid "My Computer:"
msgstr "我的计算机:"
-#: ../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 "名字"
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
msgid "Name must not be null!"
msgstr "名称不能为空!"
-#: ../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 "名字:"
@@ -2248,46 +2260,46 @@
msgid "Natural logarithm"
msgstr "自然对数"
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
msgid "Negated"
msgstr "否定"
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:610
msgid "Nevow Web service failed. "
msgstr "Nevow Web 服务失败。 "
-#: ../Beremiz_service.py:556
+#: ../Beremiz_service.py:580
msgid "Nevow/Athena import failed :"
msgstr "Nevow/Athena 导入失败:"
-#: ../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 "新建"
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
msgid "New item"
msgstr "新建项目"
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
msgid "No Modifier"
msgstr "无改动"
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "没有PLC可传输(构建是否成功?)\n"
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "在 \"%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 "没有连接器发现对应在 \"{a2}\" POU中 \"{a1}\" 延续"
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
msgid ""
"No documentation available.\n"
"Coming soon."
@@ -2295,60 +2307,60 @@
"没有文件可用。\n"
"稍候"
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
#, python-format
msgid "No informations found for \"%s\" block"
msgstr "对于 \"%s\" 块没有信息发现"
-#: ../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 "无输出{a1}变量发现在 {a3} POU的 {a2} 块。 连接必须断开"
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
msgid "No search results available."
msgstr "没有存在的搜索结果。"
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "没有这样的SVG文件:%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 "没有如此 标签/子标签 ({a1},{a2}) (变量 {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 "没有如此 标签/子标签 ({a1},{a2}) 在ID : {a3} (变量 {a4})"
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "没有有效的值被选择!"
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "无变量被定义在 \"%s\" POU"
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
msgstr "不存在节点 ID :{a1} (variable {a2})"
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
msgid "Non-Retain"
msgstr "非保持"
-#: ../dialogs/LDElementDialog.py:75
+#: ../dialogs/LDElementDialog.py:78
msgid "Normal"
msgstr "正常"
-#: ../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 "不是PDO可映射变量:'{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
@@ -2357,7 +2369,7 @@
msgid "Not equal to"
msgstr "不等于"
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "序列号:"
@@ -2365,90 +2377,90 @@
msgid "Numerical"
msgstr "数学式"
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
msgid "OnChange"
msgstr "在改变中"
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
msgid "Only Elements"
msgstr "唯一元素"
-#: ../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 "打开"
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
msgid "Open Inkscape"
msgstr "打开 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 "开源自动化框架,实现不断增长的扩展集和弹性的PLC运行时的IEC 61131-3 IDE"
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
msgid "Open a file explorer to manage project files"
msgstr "打开一个文件浏览器来管理项目文件"
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
msgid "Open wxGlade"
msgstr "打开 wxGlade"
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
msgid "Option"
msgstr "选项"
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
msgid "Options"
msgstr "选项"
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Organization (optional):"
msgstr "组织(选填):"
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
msgid "Other Profile"
msgstr "其他配置"
-#: ../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 "输出"
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO 接收"
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
msgid "PDO Transmit"
msgstr "PDO 传输"
-#: ../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 记录"
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
msgid "PLC code generation failed !\n"
msgstr "PLC 代码生成失败!\n"
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
msgid "PLC is empty or already started."
msgstr "PLC 是空的或者已经被启动。"
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
msgid "PLC is not started."
msgstr "PLC 没有被启动。"
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
"PLC syntax error at line {a1}:\n"
@@ -2457,15 +2469,15 @@
"PLC语法错误在行 {a1}:\n"
"{a2}"
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
msgstr "PLCOpen 文件 (*.xml)|*.xml|所有文件|*.*"
-#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
msgid "PLCOpenEditor"
msgstr "PLCOpen编辑器"
-#: ../PLCOpenEditor.py:365
+#: ../PLCOpenEditor.py:339
msgid ""
"PLCOpenEditor is part of Beremiz project.\n"
"\n"
@@ -2475,205 +2487,205 @@
"\n"
"Beremiz是一个"
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
msgid "PORT"
msgstr "端口"
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
msgid "POU Name"
msgstr "POU 名字"
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
msgid "POU Name:"
msgstr "POU 名字:"
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
msgid "POU Type"
msgstr "POU类型"
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
msgid "POU Type:"
msgstr "POU 类型:"
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr "PYRO 连接到 URI : %s\n"
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr "PYRO使用认证在 '%s' \n"
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
msgid "Page Setup"
msgstr "页面设置"
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
msgid "Page Size (optional):"
msgstr "页面大小(选填):"
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
#, python-format
msgid "Page: %d"
msgstr "页:%d"
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
msgid "Parent instance"
msgstr "父实例"
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
msgid "Paste"
msgstr "粘贴"
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
msgid "Paste POU"
msgstr "粘贴POU"
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
msgid "Pattern to search:"
msgstr "检索模式:"
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
msgid "Pin number:"
msgstr "插脚数:"
-#: ../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 "请选择一个目标"
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
msgid "Please enter a block name"
msgstr "请输入一个块名称"
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../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:799
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
msgid "Please enter step name"
msgstr "请输入步骤名称"
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
msgid "Please enter text"
msgstr "请输入文本"
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
#, python-format
msgid "Please enter value for a \"%s\" variable:"
msgstr "请输入值对于一个 \"%s\" 变量:"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be 0 <= port <= 65535!"
msgstr "端口号必须为 0 <= 端口号 <= 65535!"
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
msgid "Port number must be an integer!"
msgstr "端口号必须是整数!"
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
msgid "Power Rail"
msgstr "电源导轨"
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
msgid "Power Rail Properties"
msgstr "电源导轨属性"
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
msgid "Preview"
msgstr "打印预览"
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
msgid "Preview:"
msgstr "预览:"
-#: ../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 "打印"
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
msgid "Print preview"
msgstr "打印预览"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Priority"
msgstr "优先"
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
msgid "Priority:"
msgstr "优先:"
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "故障启动PLC:错误 %d"
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
msgid "Product Name"
msgstr "产品名称"
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Product Name (required):"
msgstr "产品名字(必填):"
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Release (optional):"
msgstr "产品发布(选填):"
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
msgid "Product Version"
msgstr "产品版本"
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Version (required):"
msgstr "产品版本(必填):"
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
msgid "Program"
msgstr "程序"
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
msgid "Program was successfully generated!"
msgstr "该编程成功生成文件!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Programs"
msgstr "程序"
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
msgid "Programs can't be used by other POUs!"
msgstr "程序不能被其它POU使用!"
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
msgid "Project"
msgstr "项目"
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
#, python-format
msgid "Project '%s':"
msgstr "项目 '%s':"
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
msgid "Project Files"
msgstr "项目文件"
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
msgid "Project Name"
msgstr "项目名称"
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
msgid "Project Name (required):"
msgstr "项目名称(必填):"
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Version (optional):"
msgstr "项目版本(选填):"
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
msgid ""
"Project file syntax error:\n"
"\n"
@@ -2681,90 +2693,90 @@
"项目文件语法错误:\n"
"\n"
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
msgid "Project properties"
msgstr "项目属性"
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
#, python-brace-format
msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
msgstr "项目树的布局不匹配confnode.xml {a1}!={a2} "
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
msgid "Propagate Name"
msgstr "扩展名"
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
msgid "Properties"
msgstr "属性"
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
msgid "Publishing service on local network"
msgstr "在本地网络上发布服务"
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
#, python-format
msgid "Pyro exception: %s\n"
msgstr "Pyro异常: %s\n"
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr "Pyro 目标的URL:"
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
msgid "Pyro port :"
msgstr "Pyro端口:"
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
msgid "Python code"
msgstr "Python代码"
-#: ../features.py:33
+#: ../features.py:34
msgid "Python file"
msgstr "Python文件"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Qualifier"
msgstr "合格验证"
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
msgid "Quit"
msgstr "退出"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
msgid "Range:"
msgstr "范围:"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
msgid "Raw IEC code"
msgstr "原始的IEC代码"
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
#, python-format
msgid "Really delete node '%s'?"
msgstr "真的删除节点 '%s'吗?"
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../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:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
msgid "Refresh"
msgstr "刷新"
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "正则表达式"
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
msgid "Regular expressions"
msgstr "正则表达式"
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
msgid "Release value"
msgstr "释放值"
@@ -2772,56 +2784,56 @@
msgid "Remainder (modulo)"
msgstr "余数(模)"
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
#, python-format
msgid "Remove %s node"
msgstr "移除 %s 节点"
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
msgid "Remove Datatype"
msgstr "移除数据类型"
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
msgid "Remove Pou"
msgstr "移除POU"
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
msgid "Remove action"
msgstr "移除动作"
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
msgid "Remove element"
msgstr "移除元素"
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
msgid "Remove file from left folder"
msgstr "从左侧目录移除文件"
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
msgid "Remove instance"
msgstr "移除实例"
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "移除从站"
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
msgid "Remove task"
msgstr "移除任务"
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
msgid "Remove variable"
msgstr "移除变量"
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
msgid "Rename"
msgstr "重命名"
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
msgid "Replace File"
msgstr "替换文件"
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
msgid "Replace Wire by connections"
msgstr "通过连接替换Wire"
@@ -2829,43 +2841,43 @@
msgid "Replacement (within)"
msgstr "替换"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Reset"
msgstr "重置"
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
msgid "Reset Execution Order"
msgstr "重置执行命令"
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
msgid "Reset Perspective"
msgstr "复位透视图"
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
msgid "Reset search result"
msgstr "复位搜索结果"
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "资源"
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
msgid "Retain"
msgstr "保持"
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
msgid "Return Type:"
msgstr "返回类型:"
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
msgid "Right"
msgstr "右"
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
msgid "Right PowerRail"
msgstr "右电源导轨"
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
msgid "Rising Edge"
msgstr "上升沿"
@@ -2881,114 +2893,114 @@
msgid "Rounding up/down"
msgstr "四舍五入"
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
msgid "Run"
msgstr "运行"
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
msgid "Runtime IO extensions C code generation failed !\n"
msgstr "运行时IO扩展C代码生成失败!\n"
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
msgid "Runtime library extensions C code generation failed !\n"
msgstr "运行时库扩展C代码生成失败!\n"
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
msgid "SDO Client"
msgstr "SDO客户端"
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
msgid "SDO Server"
msgstr "SDO服务器"
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
msgid "SFC"
msgstr "顺序功能图"
-#: ../PLCGenerator.py:1392
+#: ../PLCGenerator.py:1433
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr "POU \"{a1}\" 中的SFC跳转 涉及不存在SFC步 \"{a2}\""
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
#, python-format
msgid "SFC transition in POU \"%s\" must be connected."
msgstr "在POU \"%s\" 中 SFC 移动必须被连接。"
-#: ../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 "结构化文本"
-#: ../PLCOpenEditor.py:334
+#: ../PLCOpenEditor.py:308
msgid "ST files (*.st)|*.st|All files|*.*"
msgstr "ST 文件 (*.st)|*.st|所有文件|*.*"
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "SVG 文件 (*.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 "保存"
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
msgid "Save As..."
msgstr "另存为..."
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
msgid "Save as"
msgstr "另存为"
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
msgid "Save path is the same as path of a project! \n"
msgstr "保存路径和项目路径相同!\n"
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "范围"
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
msgid "Search"
msgstr "搜索"
-#: ../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 "在项目中搜索"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
msgid "Seconds:"
msgstr "秒:"
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
msgid "Select All"
msgstr "选择全部"
-#: ../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 "选择一个变量种类:"
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
msgid "Select an editor:"
msgstr "选择一个编辑:"
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
msgid "Select an instance"
msgstr "选择一个实例"
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
msgid "Select an object"
msgstr "选择一个对象"
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr "选择的目录已经包含其他项目。覆盖?\n"
@@ -2996,23 +3008,23 @@
msgid "Selection"
msgstr "选择"
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
msgid "Selection Convergence"
msgstr "选择收敛"
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
msgid "Selection Divergence"
msgstr "选择发散"
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "服务探索"
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
msgid "Services available:"
msgstr "存在的服务:"
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
msgid "Set"
msgstr "设置"
@@ -3024,27 +3036,27 @@
msgid "Shift right"
msgstr "右移"
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
msgid "Show IEC code generated by PLCGenerator"
msgstr "显示由PLCGenerator生成的IEC代码"
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
msgid "Show Master"
msgstr "显示主控"
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
msgid "Show Master generated by config_utils"
msgstr "显示由config_utils生成的主控"
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
msgid "Show code"
msgstr "显示代码"
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
msgid "Simultaneous Convergence"
msgstr "同步收敛"
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
msgid "Simultaneous Divergence"
msgstr "同步发散"
@@ -3052,15 +3064,15 @@
msgid "Sine"
msgstr "正弦"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Single"
msgstr "单"
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "源代码没有变化,不需要构建.\n"
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
#, python-brace-format
msgid ""
"Source signal has to be defined for single task '{a1}' in resource "
@@ -3071,60 +3083,56 @@
msgid "Square root (base 2)"
msgstr "平方根(底数2)"
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
msgid "Standard function blocks"
msgstr "标准功能类型"
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
msgid "Start PLC"
msgstr "开始PLC"
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
#, python-format
msgid "Start build in %s\n"
msgstr "开始建立 %s\n"
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
msgid "Started"
msgstr "已开始"
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
msgid "Starting PLC\n"
msgstr "启动PLC\n"
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
msgid "Status ToolBar"
msgstr "状态工具栏"
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
msgid "Step"
msgstr "步"
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
msgid "Stop"
msgstr "停止"
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
msgid "Stop PLC"
msgstr "停止PLC"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
msgid "Stop Running PLC"
msgstr "停止运行PLC"
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
msgid "Stopped"
msgstr "已停止"
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "停止调试器...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Structure"
msgstr "结构的"
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "子集的"
@@ -3132,19 +3140,19 @@
msgid "Subtraction"
msgstr "减法"
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
msgid "Successfully built.\n"
msgstr "成功构建.\n"
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
msgid "Switch perspective"
msgstr "切换视图"
-#: ../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 "在模式搜索正则表达式语法错误!"
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
msgid "TYPE"
msgstr "类型"
@@ -3152,19 +3160,19 @@
msgid "Tangent"
msgstr "正切"
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
msgid "Task"
msgstr "任务 "
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
msgid "Tasks:"
msgstr "任务:"
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
msgid "Temp"
msgstr "缓冲"
-#: ../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"
@@ -3184,7 +3192,7 @@
"你可在这里订阅列表:\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"
@@ -3193,22 +3201,22 @@
"文件 '%s' 已经存在。\n"
"你真的要替换它?"
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "块的组必须是连贯的!"
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
msgid "There are changes, do you want to save?"
msgstr "文件已被改动。你希望保存吗?"
-#: ../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 "一个编程组织单元被命名为\"%s\"。这可能会产生冲突。你希望继续吗?"
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3216,11 +3224,11 @@
"打印出现问题。\n"
"请检查你当前打印机设置。"
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
msgid "This option isn't available yet!"
msgstr "该选项尚未可用!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
#, python-format
msgid "Tick: %d"
msgstr "滴答: %d"
@@ -3258,94 +3266,94 @@
msgid "Time-of-day subtraction"
msgstr "日期时间减法"
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr "触发值"
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
msgid "Top"
msgstr "顶部"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
msgid "Transfer"
msgstr "传输"
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
msgid "Transfer PLC"
msgstr "传输PLC"
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
msgid "Transfer completed successfully.\n"
msgstr "传输成功\n"
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
msgid "Transfer failed\n"
msgstr "传输失败\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 "转换"
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
#, python-format
msgid ""
"Transition \"%s\" body must contain an output variable or coil referring to "
"its name"
msgstr "转换 \"%s\" 体必须包含一个输出变量或圈指的是它的名字"
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
msgid "Transition Name"
msgstr "转换名字"
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
msgid "Transition Name:"
msgstr "转换名字:"
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr "转换的内容 \"{a1}\" 没有连接到下一步在 \"{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 "转换的内容 \"{a1}\" 没有连接到前一步在 \"{a2}\" POU"
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
#, python-format
msgid "Transition with name %s doesn't exist!"
msgstr "已命名的转换 %s 尚不存在!"
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
msgid "Transitions"
msgstr "转换"
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
msgid "Translated by"
msgstr "转换因为"
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
msgid "Triggering"
msgstr "触发"
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
msgid "Twisted unavailable."
msgstr "扭曲的不可用。"
-#: ../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 "类型"
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
msgid "Type and derivated"
msgstr "类型和派生"
-#: ../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 "位置的冲突类型 \"%s\""
@@ -3354,179 +3362,233 @@
msgid "Type conversion"
msgstr "类型转换"
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
msgid "Type infos:"
msgstr "类型信息:"
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
msgid "Type strict"
msgstr "严格类型"
-#: ../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 "类型:"
-#: ../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主机:"
+
+#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46
+msgid "URI port:"
+msgstr "URI端口:"
+
+#: ../controls/UriLocationEditor.py:35
+msgid "URI type:"
+msgstr "URI 类型:"
+
+#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515
#, python-format
msgid "Unable to define PDO mapping for node %02x"
msgstr "对于 %02x节点不能定义POU映射"
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
#, python-format
msgid "Unable to get Xenomai's %s \n"
msgstr "不能获得 Xenomai 的 %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 "未定义块类型 \"{a1}\" 在 \"{a2}\" POU中"
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
#, python-format
msgid "Undefined pou type \"%s\""
msgstr "未定义的pou类型"
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
msgid "Undo"
msgstr "撤销"
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
msgid "Unknown"
msgstr "未知"
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "未知的变量 \"%s\" 这个POU!"
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
msgid "Unnamed"
msgstr "未命名"
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
#, python-format
msgid "Unnamed%d"
msgstr "未命名%d"
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "无法识别数据大小 \"%s\""
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
msgid "User Data Types"
msgstr "用户数据类型"
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
msgid "User Type"
msgstr "用户类型"
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
msgid "User-defined POUs"
msgstr "用户 - 定义POUs"
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
msgid "Value"
msgstr "值"
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
msgid "Values:"
msgstr "值:"
-#: ../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 "变量"
-#: ../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 "变量Drop"
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
msgid "Variable Properties"
msgstr "变量属性"
-#: ../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 "变量种类"
-#: ../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 "变量不属于这个POU!"
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "变量:"
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
msgid "Variables"
msgstr "变量"
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
msgid "Vertical:"
msgstr "垂直的:"
-#: ../Beremiz_service.py:588
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr "WAMP 客户端连接失败 (%s) .. 重试 .."
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr "WAMP 客户端连接丢失 (%s) .. 重试 .."
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr "WAMP ID:"
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr "WAMP 客户端连接到 :"
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr "WAMP 客户端连接没有建立!"
+
+#: ../Beremiz_service.py:625
msgid "WAMP client startup failed. "
msgstr "WAMP客户端启动失败。"
-#: ../connectors/WAMP/__init__.py:91
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr "WAMP 配置不完整."
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr "WAMP 配置丢失."
+
+#: ../connectors/WAMP/__init__.py:99
#, python-format
msgid "WAMP connecting to URL : %s\n"
msgstr "WAMP 连接到 URL : %s\n"
-#: ../connectors/WAMP/__init__.py:131
+#: ../connectors/WAMP/__init__.py:140
msgid "WAMP connection timeout"
msgstr "WAMP连接超时"
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr "WAMP 连接到 '%s' 失败。\n"
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
msgid "WAMP import failed :"
msgstr "WAMP导入失败:"
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr "WAMP 加载错误: "
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr "WAMP 会话残留"
+
+#: ../wxglade_hmi/wxglade_hmi.py:44
msgid "WXGLADE GUI"
msgstr "WXGLADE 用户图形界面"
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr "Wamp 加密加载错误:"
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "警告"
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "警告在ST/IL/SFC代码生成器中:\n"
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
msgid "Whole Project"
msgstr "整个项目"
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
msgid "Width:"
msgstr "宽度:"
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
msgid "Wrap search"
msgstr "包搜索"
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "出自"
-#: ../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 ?"
@@ -3534,7 +3596,7 @@
"你没有写入的许可。\n"
"无论如何都打开Inkscape?"
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3542,7 +3604,7 @@
"你没有写入的许可。\n"
"无论如何都打开wxGlade?"
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3550,79 +3612,71 @@
"你必须有在此项目上工作的许可\n"
"在项目的一个拷贝上工作?"
-#: ../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 "你必须选择一个块或块的组围绕着需被添加的分支!"
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
msgid "You must select the wire where a contact should be added!"
msgstr "你必须选择一条线连接需被添加的接触点!"
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
msgid "You must type a name!"
msgstr "你必须输入一个名字!"
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
msgid "You must type a value!"
msgstr "你必须输入一个值!"
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
msgid "Zoom"
msgstr "显示比例"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "days"
msgstr "日"
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
#, python-format
msgid "error: %s\n"
msgstr "错误:%s\n"
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
#, python-brace-format
msgid "exited with status {a1} (pid {a2})\n"
msgstr "退出伴随状态 {a1} (pid {a2})\n"
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "文件:"
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "function"
msgstr "功能"
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "功能:"
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "functionBlock"
msgstr "功能块"
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
msgid "hours"
msgstr "小时"
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "在线:"
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "matiec安装没有发现\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
msgid "milliseconds"
msgstr "毫秒"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr "分"
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
msgid "program"
msgstr "程序"
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
msgid "seconds"
msgstr "秒"
@@ -3638,27 +3692,27 @@
msgid "string right of"
msgstr "从右取字符串"
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "更新信息不存在"
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
#, python-format
msgid "warning: %s\n"
msgstr "警告:%s\n"
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
#, python-brace-format
msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
msgstr "{a1} \"{a2}\" 不能被粘贴作为一个 {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文件没有遵循XSD schema在行 %{a2}:\n"
+"{a1} XML文件没有遵循XSD schema在行 {a2}:\n"
"{a3}"
#: Extra XSD strings
@@ -3722,6 +3776,72 @@
msgid "Win32"
msgstr "Win32"
+msgid "ModbusRequest"
+msgstr "Modbus请求"
+
+msgid "SlaveID"
+msgstr "从站ID"
+
+msgid "Nr_of_Channels"
+msgstr "通道号"
+
+msgid "Start_Address"
+msgstr "起始地址"
+
+msgid "Timeout_in_ms"
+msgstr "超时 ms单位"
+
+msgid "MemoryArea"
+msgstr "存储区域"
+
+msgid "MemoryAreaType"
+msgstr "存储区域类型"
+
+msgid "ModbusTCPclient"
+msgstr "ModubsTCP客户端"
+
+msgid "Remote_IP_Address"
+msgstr "远程IP地址"
+
+msgid "Remote_Port_Number"
+msgstr "远程端口号"
+
+msgid "Invocation_Rate_in_ms"
+msgstr "调用率ms单位"
+
+msgid "ModbusServerNode"
+msgstr "Modbus服务器节点"
+
+msgid "Local_IP_Address"
+msgstr "本地IP地址"
+
+msgid "Local_Port_Number"
+msgstr "本地端口号"
+
+msgid "ModbusRTUclient"
+msgstr "ModbusRTC客户端"
+
+msgid "Serial_Port"
+msgstr "串行端口"
+
+msgid "Baud_Rate"
+msgstr "波特率"
+
+msgid "Parity"
+msgstr "奇偶校验"
+
+msgid "Stop_Bits"
+msgstr "停止位"
+
+msgid "ModbusRTUslave"
+msgstr "ModbusRTU从站"
+
+msgid "ModbusRoot"
+msgstr "Modbus根"
+
+msgid "MaxRemoteTCPclients"
+msgstr "最大远程TCP客户端"
+
msgid "BaseParams"
msgstr "基本参照 "
@@ -3896,7 +4016,7 @@
msgid ""
"The semaphore provides a mechanism to allow software elements mutually "
-"exclusive access to certain ressources."
+"exclusive access to certain resources."
msgstr "信号量提供一种机制,允许软件元素互斥排他的访问某一资源。"
msgid "The output produces a single pulse when a rising edge is detected."
--- a/i18n/Makefile Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/Makefile Fri Nov 23 00:33:04 2018 +0100
@@ -16,4 +16,12 @@
echo "../plcopen/Additional_Function_Blocks.xml" >> app.fil
echo "../plcopen/Standard_Function_Blocks.xml" >> app.fil
+transifex_init:
+ tx init --skipsetup
+
+transifex_pull:
+ tx pull --all
+ find . -name '*.po' -exec sed -i 's/charset=CHARSET/charset=UTF-8/' {} \;
+
+
.PHONY: all, template, locales, source_list
--- a/i18n/app.fil Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/app.fil Fri Nov 23 00:33:04 2018 +0100
@@ -21,6 +21,7 @@
../dialogs/ArrayTypeDialog.py
../dialogs/PouNameDialog.py
../dialogs/BrowseLocationsDialog.py
+../dialogs/CommentEditDialog.py
../dialogs/FBDBlockDialog.py
../dialogs/ConnectionDialog.py
../dialogs/BrowseValuesLibraryDialog.py
@@ -35,6 +36,12 @@
../graphics/LD_Objects.py
../graphics/SFC_Objects.py
../graphics/GraphicCommons.py
+../bacnet/BacnetSlaveEditor.py
+../bacnet/bacnet.py
+../bacnet/ede_files/template_ObjTypes.csv
+../bacnet/ede_files/template_Units.csv
+../bacnet/ede_files/template_EDE.csv
+../bacnet/ede_files/template_StateTexts.csv
../connectors/PYRO/__init__.py
../connectors/PYRO/dialog.py
../connectors/__init__.py
@@ -56,8 +63,17 @@
../py_ext/PythonFileCTNMixin.py
../wxglade_hmi/wxglade_hmi.py
../modbus/modbus.py
+../etherlab/EthercatCIA402Slave.py
+../etherlab/EtherCATManagementEditor.py
+../etherlab/CommonEtherCATFunction.py
+../etherlab/EthercatSlave.py
+../etherlab/etherlab.py
+../etherlab/EthercatCFileGenerator.py
+../etherlab/ConfigEditor.py
+../etherlab/EthercatMaster.py
../runtime/NevowServer.py
../runtime/WampClient.py
+../runtime/PlcStatus.py
../runtime/PLCObject.py
../runtime/ServicePublisher.py
../ConfigTreeNode.py
--- a/i18n/messages.po Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/messages.po Fri Nov 23 00:33:04 2018 +0100
@@ -7,8 +7,8 @@
msgstr ""
"Project-Id-Version: Beremiz\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-06-15 16:39+0300\n"
-"PO-Revision-Date: 2018-06-15 16:39+0300\n"
+"POT-Creation-Date: 2018-10-03 14:20+0300\n"
+"PO-Revision-Date: 2018-10-03 14:20+0300\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: en_US\n"
@@ -42,37 +42,46 @@
"\n"
"Traceback:\n"
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid " External"
msgstr " External"
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:86
msgid " InOut"
msgstr " InOut"
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:86
msgid " Input"
msgstr " Input"
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid " Local"
msgstr " Local"
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:86
msgid " Output"
msgstr " Output"
-#: ../controls/VariablePanel.py:91
+#: ../controls/VariablePanel.py:88
msgid " Temp"
msgstr " Temp"
-#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
-#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#: ../etherlab/etherlab.py:301
+#, python-format
+msgid " (rev. %s)"
+msgstr " (rev. %s)"
+
+#: ../etherlab/CommonEtherCATFunction.py:1599
+msgid " Warning..."
+msgstr " Warning..."
+
+#: ../dialogs/PouTransitionDialog.py:100 ../dialogs/ProjectDialog.py:72
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:157
#, python-format
msgid " and %s"
msgstr " and %s"
-#: ../ProjectController.py:1182
+#: ../ProjectController.py:1236
msgid " generation failed !\n"
msgstr " generation failed !\n"
@@ -96,7 +105,7 @@
msgid "\"%s\" can't use itself!"
msgstr "\"%s\" can't use itself!"
-#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#: ../IDEFrame.py:1705 ../IDEFrame.py:1724
#, python-format
msgid "\"%s\" config already exists!"
msgstr "\"%s\" config already exists!"
@@ -111,32 +120,32 @@
msgid "\"%s\" configuration doesn't exist !!!"
msgstr "\"%s\" configuration doesn't exist !!!"
-#: ../IDEFrame.py:1638
+#: ../IDEFrame.py:1655
#, python-format
msgid "\"%s\" data type already exists!"
msgstr "\"%s\" data type already exists!"
-#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220
+#: ../dialogs/PouTransitionDialog.py:111 ../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
+#: ../controls/VariablePanel.py:424
#, python-format
msgid "\"%s\" element for this pou already exists!"
msgstr "\"%s\" element for this pou already exists!"
-#: ../BeremizIDE.py:928
+#: ../BeremizIDE.py:925
#, 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:56 ../dialogs/PouTransitionDialog.py:108
+#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:107
#: ../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
+#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:164
+#: ../etherlab/ConfigEditor.py:973 ../editors/ResourceEditor.py:481
+#: ../editors/ResourceEditor.py:518 ../editors/DataTypeEditor.py:571
+#: ../editors/DataTypeEditor.py:603 ../editors/CodeFileEditor.py:793
+#: ../controls/VariablePanel.py:798 ../IDEFrame.py:1646
#, python-format
msgid "\"%s\" is a keyword. It can't be used!"
msgstr "\"%s\" is a keyword. It can't be used!"
@@ -151,27 +160,28 @@
msgid "\"%s\" is not a valid folder!"
msgstr "\"%s\" is not a valid folder!"
-#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106
+#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:105
#: ../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
+#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:162
+#: ../etherlab/ConfigEditor.py:971 ../editors/ResourceEditor.py:479
+#: ../editors/ResourceEditor.py:516 ../editors/DataTypeEditor.py:601
+#: ../editors/CodeFileEditor.py:791 ../controls/VariablePanel.py:796
+#: ../IDEFrame.py:1644
#, python-format
msgid "\"%s\" is not a valid identifier!"
msgstr "\"%s\" is not a valid identifier!"
-#: ../IDEFrame.py:2436
+#: ../IDEFrame.py:2454
#, 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:213 ../dialogs/PouDialog.py:131
+#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:166
#: ../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
+#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:363
+#: ../IDEFrame.py:1664
#, python-format
msgid "\"%s\" pou already exists!"
msgstr "\"%s\" pou already exists!"
@@ -200,7 +210,7 @@
"\"%s\" value isn't a valid array dimension!\n"
"Right value must be greater than left value."
-#: ../PLCGenerator.py:1133
+#: ../PLCGenerator.py:1182
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
@@ -220,35 +230,35 @@
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:559
#, python-format
msgid "%03gms"
msgstr "%03gms"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:550
#, python-format
msgid "%dd"
msgstr "%dd"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:189
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:551
#, python-format
msgid "%dh"
msgstr "%dh"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:188
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:552
#, python-format
msgid "%dm"
msgstr "%dm"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:186
#, python-format
msgid "%dms"
msgstr "%dms"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:187
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:553
#, python-format
msgid "%ds"
msgstr "%ds"
@@ -281,7 +291,12 @@
msgid "%s body don't have text!"
msgstr "%s body don't have text!"
-#: ../IDEFrame.py:388
+#: ../etherlab/ConfigEditor.py:856
+#, python-format
+msgid "%s's nodes"
+msgstr "%s's nodes"
+
+#: ../IDEFrame.py:391
msgid "&Add Element"
msgstr "&Add Element"
@@ -290,35 +305,35 @@
msgid "&Close"
msgstr "&Close"
-#: ../IDEFrame.py:361
+#: ../IDEFrame.py:364
msgid "&Configuration"
msgstr "&Configuration"
-#: ../IDEFrame.py:350
+#: ../IDEFrame.py:353
msgid "&Data Type"
msgstr "&Data Type"
-#: ../IDEFrame.py:392
+#: ../IDEFrame.py:395
msgid "&Delete"
msgstr "&Delete"
-#: ../IDEFrame.py:342
+#: ../IDEFrame.py:345
msgid "&Display"
msgstr "&Display"
-#: ../IDEFrame.py:341
+#: ../IDEFrame.py:344
msgid "&Edit"
msgstr "&Edit"
-#: ../IDEFrame.py:340
+#: ../IDEFrame.py:343
msgid "&File"
msgstr "&File"
-#: ../IDEFrame.py:352
+#: ../IDEFrame.py:355
msgid "&Function"
msgstr "&Function"
-#: ../IDEFrame.py:343
+#: ../IDEFrame.py:346
msgid "&Help"
msgstr "&Help"
@@ -326,7 +341,7 @@
msgid "&License"
msgstr "&License"
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:359
msgid "&Program"
msgstr "&Program"
@@ -338,10 +353,14 @@
msgid "&Recent Projects"
msgstr "&Recent Projects"
-#: ../IDEFrame.py:358
+#: ../IDEFrame.py:361
msgid "&Resource"
msgstr "&Resource"
+#: ../etherlab/ConfigEditor.py:450
+msgid "'Read from' and 'Write to' variables types are not compatible"
+msgstr "'Read from' and 'Write to' variables types are not compatible"
+
#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
@@ -352,7 +371,7 @@
msgid "'{a1}' - {a2} matches in project"
msgstr "'{a1}' - {a2} matches in project"
-#: ../connectors/PYRO/__init__.py:98
+#: ../connectors/PYRO/__init__.py:99
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr "'{a1}' is located at {a2}\n"
@@ -362,8 +381,8 @@
msgid "(%d matches)"
msgstr "(%d matches)"
-#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
-#: ../dialogs/PouDialog.py:124
+#: ../dialogs/PouTransitionDialog.py:102 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:159
#, python-format
msgid ", %s"
msgstr ", %s"
@@ -388,15 +407,15 @@
msgid "1s"
msgstr "1s"
-#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696
-#: ../IDEFrame.py:1715
+#: ../dialogs/PouDialog.py:168 ../IDEFrame.py:1667 ../IDEFrame.py:1713
+#: ../IDEFrame.py:1732
#, 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:58 ../dialogs/PouTransitionDialog.py:110
+#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:109
#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108
-#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677
+#: ../controls/VariablePanel.py:800 ../IDEFrame.py:1681 ../IDEFrame.py:1694
#, python-format
msgid "A POU named \"%s\" already exists!"
msgstr "A POU named \"%s\" already exists!"
@@ -406,21 +425,21 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr "A child named \"{a1}\" already exists -> \"{a2}\"\n"
-#: ../dialogs/BrowseLocationsDialog.py:229
+#: ../dialogs/BrowseLocationsDialog.py:228
msgid "A location must be selected!"
msgstr "A location must be selected!"
-#: ../editors/ResourceEditor.py:485
+#: ../editors/ResourceEditor.py:483
msgid "A task with the same name already exists!"
msgstr "A task with the same name already exists!"
-#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791
-#: ../IDEFrame.py:1666 ../IDEFrame.py:1679
+#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:802
+#: ../IDEFrame.py:1683 ../IDEFrame.py:1696
#, 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:778
+#: ../editors/CodeFileEditor.py:797
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr "A variable with \"%s\" as name already exists!"
@@ -433,11 +452,15 @@
msgid "Absolute number"
msgstr "Absolute number"
+#: ../etherlab/ConfigEditor.py:48
+msgid "Access"
+msgstr "Access"
+
#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr "Action"
-#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+#: ../editors/Viewer.py:656 ../editors/Viewer.py:2429
msgid "Action Block"
msgstr "Action Block"
@@ -462,56 +485,64 @@
msgid "Actions:"
msgstr "Actions:"
-#: ../editors/Viewer.py:473
+#: ../editors/Viewer.py:484
msgid "Active"
msgstr "Active"
#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
-#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+#: ../BeremizIDE.py:998 ../editors/Viewer.py:689
msgid "Add"
msgstr "Add"
-#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+#: ../IDEFrame.py:1941 ../IDEFrame.py:1976
msgid "Add Action"
msgstr "Add Action"
-#: ../features.py:33
+#: ../features.py:22
msgid "Add C code accessing located variables synchronously"
msgstr "Add C code accessing located variables synchronously"
-#: ../IDEFrame.py:1907
+#: ../IDEFrame.py:1924
msgid "Add Configuration"
msgstr "Add Configuration"
-#: ../IDEFrame.py:1887
+#: ../IDEFrame.py:1904
msgid "Add DataType"
msgstr "Add DataType"
-#: ../editors/Viewer.py:609
+#: ../editors/Viewer.py:612
msgid "Add Divergence Branch"
msgstr "Add Divergence Branch"
+#: ../etherlab/EthercatMaster.py:297
+msgid "Add Ethercat Slave"
+msgstr "Add Ethercat Slave"
+
+#: ../etherlab/EthercatMaster.py:297
+msgid "Add Ethercat Slave to Master"
+msgstr "Add Ethercat Slave to Master"
+
#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr "Add IP"
-#: ../IDEFrame.py:1895
+#: ../IDEFrame.py:1912
msgid "Add POU"
msgstr "Add POU"
-#: ../features.py:34
+#: ../features.py:23
msgid "Add Python code executed asynchronously"
msgstr "Add Python code executed asynchronously"
-#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+#: ../IDEFrame.py:1952 ../IDEFrame.py:2002
msgid "Add Resource"
msgstr "Add Resource"
-#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+#: ../IDEFrame.py:1930 ../IDEFrame.py:1973
msgid "Add Transition"
msgstr "Add Transition"
-#: ../editors/Viewer.py:596
+#: ../editors/Viewer.py:599
msgid "Add Wire Segment"
msgstr "Add Wire Segment"
@@ -519,7 +550,7 @@
msgid "Add a new initial step"
msgstr "Add a new initial step"
-#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+#: ../editors/Viewer.py:2790 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr "Add a new jump"
@@ -527,7 +558,7 @@
msgid "Add a new step"
msgstr "Add a new step"
-#: ../features.py:35
+#: ../features.py:24
msgid "Add a simple WxGlade based GUI."
msgstr "Add a simple WxGlade based GUI."
@@ -539,22 +570,49 @@
msgid "Add element"
msgstr "Add element"
-#: ../editors/ResourceEditor.py:283
+#: ../etherlab/ConfigEditor.py:1388
+msgid "Add file from ESI files database"
+msgstr "Add file from ESI files database"
+
+#: ../etherlab/ConfigEditor.py:1360
+msgid "Add file to project"
+msgstr "Add file to project"
+
+#: ../editors/ResourceEditor.py:281
msgid "Add instance"
msgstr "Add instance"
+#: ../etherlab/ConfigEditor.py:652
+msgid "Add process variable"
+msgstr "Add process variable"
+
#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr "Add slave"
-#: ../editors/ResourceEditor.py:252
+#: ../etherlab/ConfigEditor.py:679
+msgid "Add startup service variable"
+msgstr "Add startup service variable"
+
+#: ../editors/ResourceEditor.py:250
msgid "Add task"
msgstr "Add task"
-#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+#: ../bacnet/BacnetSlaveEditor.py:811 ../editors/CodeFileEditor.py:672
+#: ../controls/VariablePanel.py:483
msgid "Add variable"
msgstr "Add variable"
+#: ../etherlab/etherlab.py:186
+msgid ""
+"Adding a PDO not defined in default configuration\n"
+"for mapping needed location variables\n"
+"(1 if possible)"
+msgstr ""
+"Adding a PDO not defined in default configuration\n"
+"for mapping needed location variables\n"
+"(1 if possible)"
+
#: ../plcopen/iec_std.csv:33
msgid "Addition"
msgstr "Addition"
@@ -563,27 +621,28 @@
msgid "Additional function blocks"
msgstr "Additional function blocks"
-#: ../editors/Viewer.py:669
+#: ../editors/Viewer.py:672
msgid "Adjust Block Size"
msgstr "Adjust Block Size"
-#: ../editors/Viewer.py:1720
+#: ../editors/Viewer.py:1722
msgid "Alignment"
msgstr "Alignment"
#: ../dialogs/BrowseLocationsDialog.py:42
-#: ../dialogs/BrowseLocationsDialog.py:53
-#: ../dialogs/BrowseLocationsDialog.py:152
-#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307
-#: ../controls/VariablePanel.py:88
+#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:151
+#: ../dialogs/BrowseLocationsDialog.py:154 ../etherlab/ConfigEditor.py:65
+#: ../etherlab/ConfigEditor.py:853 ../controls/LogViewer.py:307
+#: ../controls/VariablePanel.py:85
msgid "All"
msgstr "All"
-#: ../editors/FileManagementPanel.py:37
+#: ../editors/FileManagementPanel.py:51
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
-#: ../ProjectController.py:1670
+#: ../ProjectController.py:1752
msgid "Already connected. Please disconnect\n"
msgstr "Already connected. Please disconnect\n"
@@ -596,6 +655,23 @@
msgid "An instance with the same name already exists!"
msgstr "An instance with the same name already exists!"
+#: ../etherlab/ConfigEditor.py:975
+#, python-format
+msgid "An variable named \"%s\" already exists!"
+msgstr "An variable named \"%s\" already exists!"
+
+#: ../bacnet/BacnetSlaveEditor.py:935
+msgid "Analog Input Objects"
+msgstr "Analog Input Objects"
+
+#: ../bacnet/BacnetSlaveEditor.py:934
+msgid "Analog Output Objects"
+msgstr "Analog Output Objects"
+
+#: ../bacnet/BacnetSlaveEditor.py:933
+msgid "Analog Value Objects"
+msgstr "Analog Value Objects"
+
#: ../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"
@@ -617,7 +693,7 @@
msgstr "Arithmetic"
#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
-#: ../controls/VariablePanel.py:872
+#: ../controls/VariablePanel.py:883
msgid "Array"
msgstr "Array"
@@ -625,22 +701,34 @@
msgid "Assignment"
msgstr "Assignment"
-#: ../dialogs/FBDVariableDialog.py:226
+#: ../dialogs/FBDVariableDialog.py:227
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:111
+#: ../controls/ProjectPropertiesPanel.py:113
msgid "Author"
msgstr "Author"
-#: ../controls/ProjectPropertiesPanel.py:108
+#: ../controls/ProjectPropertiesPanel.py:110
msgid "Author Name (optional):"
msgstr "Author Name (optional):"
+#: ../etherlab/EthercatCIA402Slave.py:125
+msgid "Axis Pos"
+msgstr "Axis Pos"
+
+#: ../etherlab/EthercatCIA402Slave.py:118
+msgid "Axis Ref"
+msgstr "Axis Ref"
+
#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr "Backward"
+#: ../features.py:19
+msgid "Bacnet support"
+msgstr "Bacnet support"
+
#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
#, python-format
msgid "Bad location size : %s"
@@ -651,14 +739,30 @@
msgid "Base Type:"
msgstr "Base Type:"
-#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:841
msgid "Base Types"
msgstr "Base Types"
-#: ../BeremizIDE.py:483
+#: ../BeremizIDE.py:479
msgid "Beremiz"
msgstr "Beremiz"
+#: ../runtime/NevowServer.py:201
+msgid "Beremiz Runtime Settings"
+msgstr "Beremiz Runtime Settings"
+
+#: ../bacnet/BacnetSlaveEditor.py:938
+msgid "Binary Input Objects"
+msgstr "Binary Input Objects"
+
+#: ../bacnet/BacnetSlaveEditor.py:937
+msgid "Binary Output Objects"
+msgstr "Binary Output Objects"
+
+#: ../bacnet/BacnetSlaveEditor.py:936
+msgid "Binary Value Objects"
+msgstr "Binary Value Objects"
+
#: ../plcopen/iec_std.csv:70
msgid "Binary selection (1 of 2)"
msgstr "Binary selection (1 of 2)"
@@ -687,7 +791,7 @@
msgid "Bitwise inverting"
msgstr "Bitwise inverting"
-#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+#: ../editors/Viewer.py:624 ../editors/Viewer.py:2442
msgid "Block"
msgstr "Block"
@@ -699,11 +803,11 @@
msgid "Block name"
msgstr "Block name"
-#: ../editors/Viewer.py:586
+#: ../editors/Viewer.py:589
msgid "Bottom"
msgstr "Bottom"
-#: ../ProjectController.py:1400
+#: ../runtime/PlcStatus.py:11
msgid "Broken"
msgstr "Broken"
@@ -712,27 +816,27 @@
msgid "Browse %s values library"
msgstr "Browse %s values library"
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:69
msgid "Browse Locations"
msgstr "Browse Locations"
-#: ../ProjectController.py:1815
+#: ../ProjectController.py:1898
msgid "Build"
msgstr "Build"
-#: ../ProjectController.py:1335
+#: ../ProjectController.py:1397
msgid "Build directory already clean\n"
msgstr "Build directory already clean\n"
-#: ../ProjectController.py:1816
+#: ../ProjectController.py:1899
msgid "Build project into build folder"
msgstr "Build project into build folder"
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1155
msgid "C Build crashed !\n"
msgstr "C Build crashed !\n"
-#: ../ProjectController.py:1105
+#: ../ProjectController.py:1152
msgid "C Build failed.\n"
msgstr "C Build failed.\n"
@@ -740,7 +844,7 @@
msgid "C code"
msgstr "C code"
-#: ../ProjectController.py:1186
+#: ../ProjectController.py:1240
msgid "C code generated successfully.\n"
msgstr "C code generated successfully.\n"
@@ -753,7 +857,7 @@
msgid "C compilation of %s failed.\n"
msgstr "C compilation of %s failed.\n"
-#: ../features.py:33
+#: ../features.py:22
msgid "C extension"
msgstr "C extension"
@@ -769,16 +873,20 @@
msgid "CANOpen slave"
msgstr "CANOpen slave"
-#: ../features.py:31
+#: ../features.py:18
msgid "CANopen support"
msgstr "CANopen support"
+#: ../etherlab/ConfigEditor.py:858
+msgid "CIA402 nodes"
+msgstr "CIA402 nodes"
+
#: ../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:291
+#: ../controls/VariablePanel.py:290
msgid "Can only give a location to local or global variables"
msgstr "Can only give a location to local or global variables"
@@ -787,7 +895,7 @@
msgid "Can't generate program to file %s!"
msgstr "Can't generate program to file %s!"
-#: ../controls/VariablePanel.py:289
+#: ../controls/VariablePanel.py:288
msgid "Can't give a location to a function block instance"
msgstr "Can't give a location to a function block instance"
@@ -796,7 +904,7 @@
msgid "Can't save project to file %s!"
msgstr "Can't save project to file %s!"
-#: ../controls/VariablePanel.py:339
+#: ../controls/VariablePanel.py:338
msgid "Can't set an initial value to a function block instance"
msgstr "Can't set an initial value to a function block instance"
@@ -810,11 +918,11 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr "Cannot find lower free IEC channel than %d\n"
-#: ../connectors/PYRO/__init__.py:139
+#: ../connectors/PYRO/__init__.py:140
msgid "Cannot get PLC status - connection failed.\n"
msgstr "Cannot get PLC status - connection failed.\n"
-#: ../ProjectController.py:967
+#: ../ProjectController.py:1013
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr "Cannot open/parse VARIABLES.csv!\n"
@@ -823,7 +931,7 @@
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}))"
-#: ../ProjectController.py:1761
+#: ../ProjectController.py:1842
msgid "Cannot transfer while PLC is running. Stop it now?"
msgstr "Cannot transfer while PLC is running. Stop it now?"
@@ -831,27 +939,27 @@
msgid "Case sensitive"
msgstr "Case sensitive"
-#: ../editors/Viewer.py:581
+#: ../editors/Viewer.py:584
msgid "Center"
msgstr "Center"
-#: ../Beremiz_service.py:276
+#: ../Beremiz_service.py:289
msgid "Change IP of interface to bind"
msgstr "Change IP of interface to bind"
-#: ../Beremiz_service.py:275
+#: ../Beremiz_service.py:288
msgid "Change Name"
msgstr "Change Name"
-#: ../IDEFrame.py:1977
+#: ../IDEFrame.py:1994
msgid "Change POU Type To"
msgstr "Change POU Type To"
-#: ../Beremiz_service.py:277
+#: ../Beremiz_service.py:290
msgid "Change Port Number"
msgstr "Change Port Number"
-#: ../Beremiz_service.py:278
+#: ../Beremiz_service.py:291
msgid "Change working directory"
msgstr "Change working directory"
@@ -863,16 +971,21 @@
msgid "Choose a SVG file"
msgstr "Choose a SVG file"
-#: ../ProjectController.py:561
+#: ../etherlab/EtherCATManagementEditor.py:911
+#: ../etherlab/EtherCATManagementEditor.py:1306
+msgid "Choose a binary file"
+msgstr "Choose a binary file"
+
+#: ../ProjectController.py:582
msgid "Choose a directory to save project"
msgstr "Choose a directory to save project"
-#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
-#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+#: ../canfestival/canfestival.py:171 ../bacnet/bacnet.py:434
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
msgid "Choose a file"
msgstr "Choose a file"
-#: ../BeremizIDE.py:900
+#: ../BeremizIDE.py:897
msgid "Choose a project"
msgstr "Choose a project"
@@ -881,19 +994,23 @@
msgid "Choose a value for %s:"
msgstr "Choose a value for %s:"
-#: ../Beremiz_service.py:333
+#: ../Beremiz_service.py:346
msgid "Choose a working directory "
msgstr "Choose a working directory "
-#: ../BeremizIDE.py:864
+#: ../etherlab/ConfigEditor.py:1234
+msgid "Choose an XML file"
+msgstr "Choose an XML file"
+
+#: ../BeremizIDE.py:861
msgid "Choose an empty directory for new project"
msgstr "Choose an empty directory for new project"
-#: ../ProjectController.py:468
+#: ../ProjectController.py:483
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:435
+#: ../ProjectController.py:450
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!"
@@ -901,15 +1018,15 @@
msgid "Class"
msgstr "Class"
-#: ../controls/VariablePanel.py:472
+#: ../controls/VariablePanel.py:474
msgid "Class Filter:"
msgstr "Class Filter:"
-#: ../dialogs/FBDVariableDialog.py:74
+#: ../dialogs/FBDVariableDialog.py:75
msgid "Class:"
msgstr "Class:"
-#: ../ProjectController.py:1821
+#: ../ProjectController.py:1904
msgid "Clean"
msgstr "Clean"
@@ -917,32 +1034,33 @@
msgid "Clean log messages"
msgstr "Clean log messages"
-#: ../ProjectController.py:1822
+#: ../ProjectController.py:1905
msgid "Clean project build folder"
msgstr "Clean project build folder"
-#: ../ProjectController.py:1332
+#: ../ProjectController.py:1394
msgid "Cleaning the build directory\n"
msgstr "Cleaning the build directory\n"
-#: ../IDEFrame.py:437
+#: ../IDEFrame.py:439
msgid "Clear Errors"
msgstr "Clear Errors"
-#: ../editors/Viewer.py:680
+#: ../editors/Viewer.py:683
msgid "Clear Execution Order"
msgstr "Clear Execution Order"
#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+#: ../etherlab/ConfigEditor.py:1361
msgid "Close"
msgstr "Close"
-#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+#: ../BeremizIDE.py:623 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr "Close Application"
-#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
-#: ../IDEFrame.py:1040
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:562 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1053
msgid "Close Project"
msgstr "Close Project"
@@ -950,28 +1068,32 @@
msgid "Close Tab"
msgstr "Close Tab"
-#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+#: ../editors/Viewer.py:641 ../editors/Viewer.py:2450
msgid "Coil"
msgstr "Coil"
-#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+#: ../editors/Viewer.py:662 ../editors/LDViewer.py:517
msgid "Comment"
msgstr "Comment"
+#: ../etherlab/ConfigEditor.py:66
+msgid "Communication Parameters"
+msgstr "Communication Parameters"
+
#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
#: ../PLCOpenEditor.py:138
msgid "Community support"
msgstr "Community support"
-#: ../dialogs/ProjectDialog.py:65
+#: ../dialogs/ProjectDialog.py:63
msgid "Company Name"
msgstr "Company Name"
-#: ../controls/ProjectPropertiesPanel.py:106
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Company Name (required):"
msgstr "Company Name (required):"
-#: ../controls/ProjectPropertiesPanel.py:107
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Company URL (optional):"
msgstr "Company URL (optional):"
@@ -979,7 +1101,7 @@
msgid "Comparison"
msgstr "Comparison"
-#: ../ProjectController.py:756
+#: ../ProjectController.py:787
msgid "Compiling IEC Program into C code...\n"
msgstr "Compiling IEC Program into C code...\n"
@@ -1005,25 +1127,25 @@
#: ../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
+#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:353
msgid "Confirm or change variable name"
msgstr "Confirm or change variable name"
-#: ../ProjectController.py:1842
+#: ../ProjectController.py:1925
msgid "Connect"
msgstr "Connect"
-#: ../ProjectController.py:1843
+#: ../ProjectController.py:1926
msgid "Connect to the target PLC"
msgstr "Connect to the target PLC"
-#: ../ProjectController.py:1391
+#: ../ProjectController.py:1469
#, python-format
msgid "Connected to URI: %s"
msgstr "Connected to URI: %s"
-#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
-#: ../editors/Viewer.py:2441
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:626
+#: ../editors/Viewer.py:2443
msgid "Connection"
msgstr "Connection"
@@ -1031,25 +1153,25 @@
msgid "Connection Properties"
msgstr "Connection Properties"
-#: ../ProjectController.py:1691
+#: ../ProjectController.py:1773
msgid "Connection canceled!\n"
msgstr "Connection canceled!\n"
-#: ../ProjectController.py:1714
+#: ../ProjectController.py:1797
#, python-format
msgid "Connection failed to %s!\n"
msgstr "Connection failed to %s!\n"
-#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+#: ../connectors/PYRO/__init__.py:124 ../connectors/WAMP/__init__.py:121
msgid "Connection lost!\n"
msgstr "Connection lost!\n"
-#: ../connectors/PYRO/__init__.py:110
+#: ../connectors/PYRO/__init__.py:111
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr "Connection to '%s' failed.\n"
-#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1678
msgid "Connector"
msgstr "Connector"
@@ -1057,7 +1179,7 @@
msgid "Connectors:"
msgstr "Connectors:"
-#: ../BeremizIDE.py:378
+#: ../BeremizIDE.py:374
msgid "Console"
msgstr "Console"
@@ -1065,18 +1187,22 @@
msgid "Constant"
msgstr "Constant"
-#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+#: ../editors/Viewer.py:637 ../editors/Viewer.py:2446
msgid "Contact"
msgstr "Contact"
-#: ../controls/ProjectPropertiesPanel.py:217
+#: ../controls/ProjectPropertiesPanel.py:219
msgid "Content Description (optional):"
msgstr "Content Description (optional):"
-#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1679
msgid "Continuation"
msgstr "Continuation"
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Control Byte"
+msgstr "Control Byte"
+
#: ../plcopen/iec_std.csv:18
msgid "Conversion from BCD"
msgstr "Conversion from BCD"
@@ -1093,20 +1219,20 @@
msgid "Conversion to time-of-day"
msgstr "Conversion to time-of-day"
-#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
-#: ../IDEFrame.py:427
+#: ../editors/Viewer.py:698 ../controls/LogViewer.py:713 ../IDEFrame.py:375
+#: ../IDEFrame.py:428
msgid "Copy"
msgstr "Copy"
-#: ../IDEFrame.py:1964
+#: ../IDEFrame.py:1981
msgid "Copy POU"
msgstr "Copy POU"
-#: ../editors/FileManagementPanel.py:68
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from left folder to right"
msgstr "Copy file from left folder to right"
-#: ../editors/FileManagementPanel.py:67
+#: ../editors/FileManagementPanel.py:66
msgid "Copy file from right folder to left"
msgstr "Copy file from right folder to left"
@@ -1128,6 +1254,16 @@
msgid "Couldn't import old %s file."
msgstr "Couldn't import old %s file."
+#: ../etherlab/EthercatMaster.py:258
+#, python-format
+msgid "Couldn't load %s network configuration file."
+msgstr "Couldn't load %s network configuration file."
+
+#: ../etherlab/EthercatMaster.py:279
+#, python-format
+msgid "Couldn't load %s network process variables file."
+msgstr "Couldn't load %s network process variables file."
+
#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
@@ -1146,15 +1282,24 @@
"Couldn't load confnode parameters {a1} :\n"
" {a2}"
+#: ../etherlab/etherlab.py:264
+#, python-brace-format
+msgid ""
+"Couldn't load {a1} XML file:\n"
+"{a2}"
+msgstr ""
+"Couldn't load {a1} XML file:\n"
+"{a2}"
+
#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr "Couldn't paste non-POU object."
-#: ../ProjectController.py:1636
+#: ../ProjectController.py:1717
msgid "Couldn't start PLC !\n"
msgstr "Couldn't start PLC !\n"
-#: ../ProjectController.py:1644
+#: ../ProjectController.py:1725
msgid "Couldn't stop PLC !\n"
msgstr "Couldn't stop PLC !\n"
@@ -1162,43 +1307,43 @@
msgid "Create HMI"
msgstr "Create HMI"
-#: ../dialogs/PouDialog.py:54
+#: ../dialogs/PouDialog.py:48
msgid "Create a new POU"
msgstr "Create a new POU"
-#: ../dialogs/PouActionDialog.py:45
+#: ../dialogs/PouActionDialog.py:42
msgid "Create a new action"
msgstr "Create a new action"
-#: ../IDEFrame.py:166
+#: ../IDEFrame.py:313
msgid "Create a new action block"
msgstr "Create a new action block"
-#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+#: ../IDEFrame.py:262 ../IDEFrame.py:292 ../IDEFrame.py:325
msgid "Create a new block"
msgstr "Create a new block"
-#: ../IDEFrame.py:139
+#: ../IDEFrame.py:286
msgid "Create a new branch"
msgstr "Create a new branch"
-#: ../IDEFrame.py:133
+#: ../IDEFrame.py:280
msgid "Create a new coil"
msgstr "Create a new coil"
-#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+#: ../IDEFrame.py:256 ../IDEFrame.py:271 ../IDEFrame.py:301
msgid "Create a new comment"
msgstr "Create a new comment"
-#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+#: ../IDEFrame.py:265 ../IDEFrame.py:295 ../IDEFrame.py:328
msgid "Create a new connection"
msgstr "Create a new connection"
-#: ../IDEFrame.py:136 ../IDEFrame.py:187
+#: ../IDEFrame.py:283 ../IDEFrame.py:334
msgid "Create a new contact"
msgstr "Create a new contact"
-#: ../IDEFrame.py:169
+#: ../IDEFrame.py:316
msgid "Create a new divergence"
msgstr "Create a new divergence"
@@ -1206,43 +1351,55 @@
msgid "Create a new divergence or convergence"
msgstr "Create a new divergence or convergence"
-#: ../IDEFrame.py:157
+#: ../IDEFrame.py:304
msgid "Create a new initial step"
msgstr "Create a new initial step"
-#: ../IDEFrame.py:172
+#: ../IDEFrame.py:319
msgid "Create a new jump"
msgstr "Create a new jump"
-#: ../IDEFrame.py:127 ../IDEFrame.py:184
+#: ../IDEFrame.py:274 ../IDEFrame.py:331
msgid "Create a new power rail"
msgstr "Create a new power rail"
-#: ../IDEFrame.py:130
+#: ../IDEFrame.py:277
msgid "Create a new rung"
msgstr "Create a new rung"
-#: ../IDEFrame.py:160
+#: ../IDEFrame.py:307
msgid "Create a new step"
msgstr "Create a new step"
-#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+#: ../dialogs/PouTransitionDialog.py:45 ../IDEFrame.py:310
msgid "Create a new transition"
msgstr "Create a new transition"
-#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+#: ../IDEFrame.py:259 ../IDEFrame.py:289 ../IDEFrame.py:322
msgid "Create a new variable"
msgstr "Create a new variable"
+#: ../etherlab/etherlab.py:183
+msgid "Creating new PDO"
+msgstr "Creating new PDO"
+
#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr "Credits"
-#: ../Beremiz_service.py:424
+#: ../runtime/WampClient.py:400
+msgid "Current status"
+msgstr "Current status"
+
+#: ../Beremiz_service.py:437
msgid "Current working directory :"
msgstr "Current working directory :"
-#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+#: ../runtime/WampClient.py:161
+msgid "Custom protocol options failed :"
+msgstr "Custom protocol options failed :"
+
+#: ../editors/Viewer.py:697 ../IDEFrame.py:373 ../IDEFrame.py:427
msgid "Cut"
msgstr "Cut"
@@ -1291,11 +1448,11 @@
msgid "Date subtraction"
msgstr "Date subtraction"
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:57
msgid "Days:"
msgstr "Days:"
-#: ../ProjectController.py:1729
+#: ../ProjectController.py:1809
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"
@@ -1303,42 +1460,51 @@
msgid "Debug instance"
msgstr "Debug instance"
-#: ../editors/Viewer.py:490
+#: ../editors/Viewer.py:493
#, python-format
msgid "Debug: %s"
msgstr "Debug: %s"
-#: ../ProjectController.py:1471
+#: ../ProjectController.py:1548
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr "Debug: Unknown variable '%s'\n"
-#: ../ProjectController.py:1469
+#: ../ProjectController.py:1545
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr "Debug: Unsupported type to debug '%s'\n"
-#: ../IDEFrame.py:660
+#: ../IDEFrame.py:666
msgid "Debugger"
msgstr "Debugger"
-#: ../ProjectController.py:1726
+#: ../ProjectController.py:1805
msgid "Debugger ready\n"
msgstr "Debugger ready\n"
-#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Default Size"
+msgstr "Default Size"
+
+#: ../etherlab/EthercatCFileGenerator.py:174
+#, python-format
+msgid "Definition conflict for location \"%s\""
+msgstr "Definition conflict for location \"%s\""
+
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:673 ../IDEFrame.py:2010
msgid "Delete"
msgstr "Delete"
-#: ../editors/Viewer.py:610
+#: ../editors/Viewer.py:613
msgid "Delete Divergence Branch"
msgstr "Delete Divergence Branch"
-#: ../editors/FileManagementPanel.py:157
+#: ../etherlab/ConfigEditor.py:1261 ../editors/FileManagementPanel.py:156
msgid "Delete File"
msgstr "Delete File"
-#: ../editors/Viewer.py:597
+#: ../editors/Viewer.py:600
msgid "Delete Wire Segment"
msgstr "Delete Wire Segment"
@@ -1354,11 +1520,12 @@
msgid "Derivation Type:"
msgstr "Derivation Type:"
-#: ../editors/CodeFileEditor.py:735
+#: ../etherlab/ConfigEditor.py:346 ../etherlab/ConfigEditor.py:465
+#: ../editors/CodeFileEditor.py:754
msgid "Description"
msgstr "Description"
-#: ../controls/VariablePanel.py:463
+#: ../controls/VariablePanel.py:465
msgid "Description:"
msgstr "Description:"
@@ -1370,7 +1537,7 @@
msgid "Direction"
msgstr "Direction"
-#: ../dialogs/BrowseLocationsDialog.py:102
+#: ../dialogs/BrowseLocationsDialog.py:101
msgid "Direction:"
msgstr "Direction:"
@@ -1378,19 +1545,19 @@
msgid "Directly"
msgstr "Directly"
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1938
msgid "Disconnect"
msgstr "Disconnect"
-#: ../ProjectController.py:1856
+#: ../ProjectController.py:1939
msgid "Disconnect from PLC"
msgstr "Disconnect from PLC"
-#: ../ProjectController.py:1401
+#: ../runtime/PlcStatus.py:14
msgid "Disconnected"
msgstr "Disconnected"
-#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+#: ../editors/Viewer.py:657 ../editors/Viewer.py:2438
msgid "Divergence"
msgstr "Divergence"
@@ -1398,7 +1565,7 @@
msgid "Division"
msgstr "Division"
-#: ../editors/FileManagementPanel.py:156
+#: ../etherlab/ConfigEditor.py:1260 ../editors/FileManagementPanel.py:155
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr "Do you really want to delete the file '%s'?"
@@ -1411,15 +1578,31 @@
msgid "Done"
msgstr "Done"
+#: ../runtime/WampClient.py:384
+msgid "Download"
+msgstr "Download"
+
#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr "Duration"
+#: ../bacnet/bacnet.py:437
+msgid "EDE files (*_EDE.csv)|*_EDE.csv|All files|*.*"
+msgstr "EDE files (*_EDE.csv)|*_EDE.csv|All files|*.*"
+
#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr "EDS files (*.eds)|*.eds|All files|*.*"
-#: ../editors/Viewer.py:668
+#: ../etherlab/ConfigEditor.py:1342
+msgid "ESI Files Database management"
+msgstr "ESI Files Database management"
+
+#: ../etherlab/ConfigEditor.py:1109
+msgid "ESI Files:"
+msgstr "ESI Files:"
+
+#: ../editors/Viewer.py:671
msgid "Edit Block"
msgstr "Edit Block"
@@ -1431,7 +1614,7 @@
msgid "Edit Contact Values"
msgstr "Edit Contact Values"
-#: ../dialogs/DurationEditorDialog.py:62
+#: ../dialogs/DurationEditorDialog.py:54
msgid "Edit Duration"
msgstr "Edit Duration"
@@ -1451,11 +1634,11 @@
msgid "Edit array type properties"
msgstr "Edit array type properties"
-#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+#: ../dialogs/CommentEditDialog.py:53
msgid "Edit comment"
msgstr "Edit comment"
-#: ../editors/FileManagementPanel.py:69
+#: ../editors/FileManagementPanel.py:68
msgid "Edit file"
msgstr "Edit file"
@@ -1463,11 +1646,11 @@
msgid "Edit item"
msgstr "Edit item"
-#: ../editors/Viewer.py:3059
+#: ../editors/Viewer.py:3058
msgid "Edit jump target"
msgstr "Edit jump target"
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1956
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr "Edit raw IEC code added to code generated by PLCGenerator"
@@ -1479,11 +1662,11 @@
msgid "Edit transition"
msgstr "Edit transition"
-#: ../IDEFrame.py:632
+#: ../IDEFrame.py:638
msgid "Editor ToolBar"
msgstr "Editor ToolBar"
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1355
msgid "Editor selection"
msgstr "Editor selection"
@@ -1491,7 +1674,7 @@
msgid "Elements :"
msgstr "Elements :"
-#: ../ProjectController.py:1399
+#: ../runtime/PlcStatus.py:15
msgid "Empty"
msgstr "Empty"
@@ -1499,18 +1682,43 @@
msgid "Empty dimension isn't allowed."
msgstr "Empty dimension isn't allowed."
-#: ../Beremiz_service.py:341
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Enable"
+msgstr "Enable"
+
+#: ../runtime/WampClient.py:410
+msgid "Enable WAMP connection"
+msgstr "Enable WAMP connection"
+
+#: ../Beremiz_service.py:354
msgid "Enter a name "
msgstr "Enter a name "
-#: ../Beremiz_service.py:326
+#: ../Beremiz_service.py:339
msgid "Enter a port number "
msgstr "Enter a port number "
-#: ../Beremiz_service.py:317
+#: ../etherlab/EtherCATManagementEditor.py:627
+msgid "Enter hex or dec value (if enter dec value, it automatically conversed hex value)"
+msgstr "Enter hex or dec value (if enter dec value, it automatically conversed hex value)"
+
+#: ../etherlab/EtherCATManagementEditor.py:1964
+msgid "Enter hex(0xnnnn) or dec(n) value"
+msgstr "Enter hex(0xnnnn) or dec(n) value"
+
+#: ../Beremiz_service.py:330
msgid "Enter the IP of the interface to bind"
msgstr "Enter the IP of the interface to bind"
+#: ../etherlab/ConfigEditor.py:502
+msgid "Entry can't be write through SDO"
+msgstr "Entry can't be write through SDO"
+
+#: ../etherlab/EthercatCFileGenerator.py:569
+#, python-brace-format
+msgid "Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}"
+msgstr "Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}"
+
#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr "Enumerated"
@@ -1521,42 +1729,45 @@
#: ../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/DurationEditorDialog.py:125
+#: ../dialogs/DurationEditorDialog.py:172 ../dialogs/PouTransitionDialog.py:113
+#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:78
#: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58
-#: ../dialogs/BrowseLocationsDialog.py:229
+#: ../dialogs/BrowseLocationsDialog.py:228
#: ../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
+#: ../dialogs/PouDialog.py:178 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324
+#: ../etherlab/ConfigEditor.py:458 ../etherlab/ConfigEditor.py:510
+#: ../etherlab/ConfigEditor.py:981 ../etherlab/ConfigEditor.py:1047
+#: ../etherlab/ConfigEditor.py:1246 ../etherlab/ConfigEditor.py:1314
+#: ../etherlab/EthercatMaster.py:463 ../editors/ResourceEditor.py:468
+#: ../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:779 ../ProjectController.py:404
+#: ../ProjectController.py:548 ../ProjectController.py:557
+#: ../controls/FolderTree.py:222 ../controls/ProjectPropertiesPanel.py:308
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:163
#: ../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
+#: ../controls/VariablePanel.py:430 ../controls/VariablePanel.py:784
+#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1049 ../IDEFrame.py:1667
+#: ../IDEFrame.py:1708 ../IDEFrame.py:1713 ../IDEFrame.py:1727
+#: ../IDEFrame.py:1732 ../Beremiz_service.py:234
msgid "Error"
msgstr "Error"
-#: ../ProjectController.py:811
+#: ../ProjectController.py:848
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:803
+#: ../ProjectController.py:838
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr "Error : IEC to C compiler returned %d\n"
-#: ../ProjectController.py:731
+#: ../ProjectController.py:762
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1570,7 +1781,17 @@
msgid "Error while saving \"%s\"\n"
msgstr "Error while saving \"%s\"\n"
-#: ../canfestival/canfestival.py:179
+#: ../bacnet/bacnet.py:581
+#, python-brace-format
+msgid "Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n"
+msgstr "Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n"
+
+#: ../bacnet/bacnet.py:573
+#, python-brace-format
+msgid "Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n"
+msgstr "Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n"
+
+#: ../canfestival/canfestival.py:179 ../bacnet/bacnet.py:444
msgid "Error: Export slave failed\n"
msgstr "Error: Export slave failed\n"
@@ -1587,7 +1808,23 @@
msgid "Error: No PLC built\n"
msgstr "Error: No PLC built\n"
-#: ../ProjectController.py:1708
+#: ../etherlab/ConfigEditor.py:269
+msgid "EtherCAT Management"
+msgstr "EtherCAT Management"
+
+#: ../features.py:20
+msgid "EtherCAT master"
+msgstr "EtherCAT master"
+
+#: ../etherlab/EthercatMaster.py:302
+msgid "Ethercat Slave Type"
+msgstr "Ethercat Slave Type"
+
+#: ../etherlab/ConfigEditor.py:267
+msgid "Ethercat node"
+msgstr "Ethercat node"
+
+#: ../ProjectController.py:1791
#, python-format
msgid "Exception while connecting %s!\n"
msgstr "Exception while connecting %s!\n"
@@ -1596,11 +1833,11 @@
msgid "Execution Control:"
msgstr "Execution Control:"
-#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+#: ../dialogs/FBDVariableDialog.py:85 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr "Execution Order:"
-#: ../features.py:36
+#: ../features.py:25
msgid "Experimental web based HMI"
msgstr "Experimental web based HMI"
@@ -1612,44 +1849,48 @@
msgid "Exponentiation"
msgstr "Exponentiation"
+#: ../bacnet/bacnet.py:156
+msgid "Export BACnet slave to EDE file"
+msgstr "Export BACnet slave to EDE file"
+
#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr "Export CanOpen slave to EDS file"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
msgid "Export graph values to clipboard"
msgstr "Export graph values to clipboard"
-#: ../canfestival/canfestival.py:185
+#: ../canfestival/canfestival.py:185 ../bacnet/bacnet.py:155
msgid "Export slave"
msgstr "Export slave"
-#: ../dialogs/FBDVariableDialog.py:94
+#: ../dialogs/FBDVariableDialog.py:95
msgid "Expression:"
msgstr "Expression:"
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid "External"
msgstr "External"
-#: ../ProjectController.py:826
+#: ../ProjectController.py:866
msgid "Extracting Located Variables...\n"
msgstr "Extracting Located Variables...\n"
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161
msgid "FBD"
msgstr "FBD"
-#: ../ProjectController.py:1773
+#: ../ProjectController.py:1855
msgid "Failed : Must build before transfer.\n"
msgstr "Failed : Must build before transfer.\n"
-#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:559
msgid "Falling Edge"
msgstr "Falling Edge"
-#: ../ProjectController.py:1098
+#: ../ProjectController.py:1145
msgid "Fatal : cannot get builder.\n"
msgstr "Fatal : cannot get builder.\n"
@@ -1658,12 +1899,12 @@
msgid "Fetching %s"
msgstr "Fetching %s"
-#: ../dialogs/DurationEditorDialog.py:167
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr "Field %s hasn't a valid value!"
-#: ../dialogs/DurationEditorDialog.py:169
+#: ../dialogs/DurationEditorDialog.py:171
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr "Fields %s haven't a valid value!"
@@ -1673,16 +1914,20 @@
msgid "File '%s' already exists!"
msgstr "File '%s' already exists!"
+#: ../runtime/WampClient.py:407
+msgid "File containing secret for that ID"
+msgstr "File containing secret for that ID"
+
#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
-#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:380
msgid "Find"
msgstr "Find"
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:382
msgid "Find Next"
msgstr "Find Next"
-#: ../IDEFrame.py:381
+#: ../IDEFrame.py:384
msgid "Find Previous"
msgstr "Find Previous"
@@ -1694,7 +1939,7 @@
msgid "Find:"
msgstr "Find:"
-#: ../editors/Viewer.py:1633
+#: ../editors/Viewer.py:1635
msgid "Force value"
msgstr "Force value"
@@ -1702,9 +1947,9 @@
msgid "Forcing Variable Value"
msgstr "Forcing Variable Value"
-#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104
-#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102
-#: ../dialogs/PouDialog.py:125
+#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:103
+#: ../dialogs/ProjectDialog.py:77 ../dialogs/PouActionDialog.py:102
+#: ../dialogs/PouDialog.py:160
#, python-format
msgid "Form isn't complete. %s must be filled!"
msgstr "Form isn't complete. %s must be filled!"
@@ -1722,20 +1967,24 @@
msgid "Forward"
msgstr "Forward"
-#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+#: ../IDEFrame.py:455
+msgid "Full screen"
+msgstr "Full screen"
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1797
msgid "Function"
msgstr "Function"
-#: ../IDEFrame.py:354
+#: ../IDEFrame.py:357
msgid "Function &Block"
msgstr "Function &Block"
-#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
-#: ../IDEFrame.py:1972
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1796
+#: ../IDEFrame.py:1989
msgid "Function Block"
msgstr "Function Block"
-#: ../controls/VariablePanel.py:868
+#: ../controls/VariablePanel.py:879
msgid "Function Block Types"
msgstr "Function Block Types"
@@ -1760,19 +2009,19 @@
msgid "Generate Program"
msgstr "Generate Program"
-#: ../ProjectController.py:722
+#: ../ProjectController.py:750
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
-#: ../controls/VariablePanel.py:91
+#: ../controls/VariablePanel.py:88
msgid "Global"
msgstr "Global"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
msgid "Go to current value"
msgstr "Go to current value"
-#: ../controls/ProjectPropertiesPanel.py:189
+#: ../controls/ProjectPropertiesPanel.py:192
msgid "Graphics"
msgstr "Graphics"
@@ -1784,32 +2033,36 @@
msgid "Greater than or equal to"
msgstr "Greater than or equal to"
-#: ../controls/ProjectPropertiesPanel.py:149
+#: ../controls/ProjectPropertiesPanel.py:152
msgid "Grid Resolution:"
msgstr "Grid Resolution:"
-#: ../runtime/NevowServer.py:192
+#: ../runtime/NevowServer.py:313
msgid "HTTP interface port :"
msgstr "HTTP interface port :"
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:138
msgid "Height:"
msgstr "Height:"
-#: ../editors/FileManagementPanel.py:89
+#: ../editors/FileManagementPanel.py:88
msgid "Home Directory:"
msgstr "Home Directory:"
-#: ../controls/ProjectPropertiesPanel.py:165
+#: ../controls/ProjectPropertiesPanel.py:168
msgid "Horizontal:"
msgstr "Horizontal:"
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:58
msgid "Hours:"
msgstr "Hours:"
+#: ../runtime/WampClient.py:404
+msgid "ID"
+msgstr "ID"
+
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44
+#: ../dialogs/PouDialog.py:128
msgid "IL"
msgstr "IL"
@@ -1817,52 +2070,64 @@
msgid "IP"
msgstr "IP"
-#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+#: ../Beremiz_service.py:331 ../Beremiz_service.py:333
msgid "IP is not valid!"
msgstr "IP is not valid!"
+#: ../etherlab/ConfigEditor.py:1387
+msgid "Import ESI file"
+msgstr "Import ESI file"
+
#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr "Import SVG"
-#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
-#: ../controls/VariablePanel.py:89
+#: ../etherlab/ConfigEditor.py:1352
+msgid "Import file to ESI files database"
+msgstr "Import file to ESI files database"
+
+#: ../dialogs/FBDVariableDialog.py:64 ../editors/Viewer.py:1664
+#: ../controls/VariablePanel.py:86
msgid "InOut"
msgstr "InOut"
-#: ../PLCGenerator.py:1040
+#: ../PLCGenerator.py:1089
#, 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
+#: ../editors/Viewer.py:484
msgid "Inactive"
msgstr "Inactive"
-#: ../controls/VariablePanel.py:300
+#: ../controls/VariablePanel.py:299
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr "Incompatible data types between \"{a1}\" and \"{a2}\""
-#: ../controls/VariablePanel.py:306
+#: ../controls/VariablePanel.py:305
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr "Incompatible size of data between \"%s\" and \"BOOL\""
-#: ../controls/VariablePanel.py:310
+#: ../controls/VariablePanel.py:309
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr "Incompatible size of data between \"{a1}\" and \"{a2}\""
+#: ../etherlab/ConfigEditor.py:48 ../etherlab/ConfigEditor.py:465
+msgid "Index"
+msgstr "Index"
+
#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr "Indicator"
-#: ../editors/CodeFileEditor.py:734
+#: ../editors/CodeFileEditor.py:753
msgid "Initial"
msgstr "Initial"
-#: ../editors/Viewer.py:650
+#: ../editors/Viewer.py:653
msgid "Initial Step"
msgstr "Initial Step"
@@ -1875,6 +2140,14 @@
msgid "Initial Value:"
msgstr "Initial Value:"
+#: ../etherlab/EthercatCIA402Slave.py:119
+msgid "Initiate Drag'n drop of Axis ref located variable"
+msgstr "Initiate Drag'n drop of Axis ref located variable"
+
+#: ../etherlab/EthercatCIA402Slave.py:126
+msgid "Initiate Drag'n drop of Network position located variable"
+msgstr "Initiate Drag'n drop of Network position located variable"
+
#: ../svgui/svgui.py:56
msgid "Inkscape"
msgstr "Inkscape"
@@ -1883,11 +2156,11 @@
msgid "Inline"
msgstr "Inline"
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40
+#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:63
#: ../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
+#: ../editors/Viewer.py:1662 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86
+#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379
msgid "Input"
msgstr "Input"
@@ -1904,11 +2177,11 @@
msgid "Instance with id %d doesn't exist!"
msgstr "Instance with id %d doesn't exist!"
-#: ../editors/ResourceEditor.py:279
+#: ../editors/ResourceEditor.py:277
msgid "Instances:"
msgstr "Instances:"
-#: ../controls/VariablePanel.py:88
+#: ../controls/VariablePanel.py:85
msgid "Interface"
msgstr "Interface"
@@ -1920,7 +2193,7 @@
msgid "Interval"
msgstr "Interval"
-#: ../controls/ProjectPropertiesPanel.py:304
+#: ../controls/ProjectPropertiesPanel.py:306
msgid ""
"Invalid URL!\n"
"Please enter correct URL address."
@@ -1942,14 +2215,26 @@
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:129
#: ../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:279 ../controls/VariablePanel.py:282
+#: ../etherlab/ConfigEditor.py:418 ../etherlab/ConfigEditor.py:421
+#: ../etherlab/ConfigEditor.py:452
+#, python-format
+msgid "Invalid value \"%s\" for process variable"
+msgstr "Invalid value \"%s\" for process variable"
+
+#: ../etherlab/ConfigEditor.py:480 ../etherlab/ConfigEditor.py:483
+#: ../etherlab/ConfigEditor.py:504
+#, python-format
+msgid "Invalid value \"%s\" for startup command"
+msgstr "Invalid value \"%s\" for startup command"
+
+#: ../controls/VariablePanel.py:278 ../controls/VariablePanel.py:281
#, python-format
msgid "Invalid value \"%s\" for variable grid element"
msgstr "Invalid value \"%s\" for variable grid element"
@@ -1964,7 +2249,12 @@
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr "Invalid value \"{a1}\" for \"{a2}\" variable!"
-#: ../dialogs/DurationEditorDialog.py:124
+#: ../etherlab/CommonEtherCATFunction.py:31
+#, python-format
+msgid "Invalid value for HexDecValue \"%s\""
+msgstr "Invalid value for HexDecValue \"%s\""
+
+#: ../dialogs/DurationEditorDialog.py:125
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1976,12 +2266,12 @@
msgid "Is connection secure?"
msgstr "Is connection secure?"
-#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+#: ../editors/Viewer.py:658 ../editors/Viewer.py:2427
msgid "Jump"
msgstr "Jump"
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161
msgid "LD"
msgstr "LD"
@@ -1990,33 +2280,33 @@
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:93 ../dialogs/PouActionDialog.py:91
-#: ../dialogs/PouDialog.py:113
+#: ../dialogs/PouTransitionDialog.py:92 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:148
msgid "Language"
msgstr "Language"
-#: ../controls/ProjectPropertiesPanel.py:206
+#: ../controls/ProjectPropertiesPanel.py:208
msgid "Language (optional):"
msgstr "Language (optional):"
-#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
-#: ../dialogs/PouDialog.py:81
+#: ../dialogs/PouTransitionDialog.py:66 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:79
msgid "Language:"
msgstr "Language:"
-#: ../ProjectController.py:1779
+#: ../ProjectController.py:1861
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr "Latest build already matches current target. Transfering anyway...\n"
-#: ../Beremiz_service.py:281
+#: ../Beremiz_service.py:294
msgid "Launch WX GUI inspector"
msgstr "Launch WX GUI inspector"
-#: ../Beremiz_service.py:280
+#: ../Beremiz_service.py:293
msgid "Launch a live Python shell"
msgstr "Launch a live Python shell"
-#: ../editors/Viewer.py:580
+#: ../editors/Viewer.py:583
msgid "Left"
msgstr "Left"
@@ -2036,7 +2326,7 @@
msgid "Less than or equal to"
msgstr "Less than or equal to"
-#: ../IDEFrame.py:652
+#: ../IDEFrame.py:658
msgid "Library"
msgstr "Library"
@@ -2052,7 +2342,7 @@
msgid "Linking :\n"
msgstr "Linking :\n"
-#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:87
msgid "Local"
msgstr "Local"
@@ -2060,7 +2350,7 @@
msgid "Local entries"
msgstr "Local entries"
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1767
msgid "Local service discovery failed!\n"
msgstr "Local service discovery failed!\n"
@@ -2068,28 +2358,44 @@
msgid "Location"
msgstr "Location"
-#: ../dialogs/BrowseLocationsDialog.py:79
+#: ../dialogs/BrowseLocationsDialog.py:78
msgid "Locations available:"
msgstr "Locations available:"
+#: ../runtime/NevowServer.py:175
+msgid "Log message level"
+msgstr "Log message level"
+
#: ../plcopen/iec_std.csv:25
msgid "Logarithm to base 10"
msgstr "Logarithm to base 10"
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:103
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr "MDNS resolution failure for '%s'\n"
+#: ../etherlab/ConfigEditor.py:67
+msgid "Manufacturer Specific"
+msgstr "Manufacturer Specific"
+
#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr "Map Variable"
-#: ../features.py:31
+#: ../features.py:19
+msgid "Map located variables over Bacnet"
+msgstr "Map located variables over Bacnet"
+
+#: ../features.py:18
msgid "Map located variables over CANopen"
msgstr "Map located variables over CANopen"
-#: ../features.py:32
+#: ../features.py:20
+msgid "Map located variables over EtherCAT"
+msgstr "Map located variables over EtherCAT"
+
+#: ../features.py:21
msgid "Map located variables over Modbus"
msgstr "Map located variables over Modbus"
@@ -2097,11 +2403,27 @@
msgid "Master"
msgstr "Master"
+#: ../etherlab/ConfigEditor.py:613
+msgid "Master State"
+msgstr "Master State"
+
#: ../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} "
+#: ../etherlab/etherlab.py:173
+msgid "Max entries by PDO"
+msgstr "Max entries by PDO"
+
+#: ../etherlab/etherlab.py:176
+msgid ""
+"Maximal number of entries mapped in a PDO\n"
+"including empty entries used for PDO alignment"
+msgstr ""
+"Maximal number of entries mapped in a PDO\n"
+"including empty entries used for PDO alignment"
+
#: ../plcopen/iec_std.csv:71
msgid "Maximum"
msgstr "Maximum"
@@ -2112,26 +2434,34 @@
#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333
#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103
-#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
+#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379
msgid "Memory"
msgstr "Memory"
-#: ../IDEFrame.py:617
+#: ../IDEFrame.py:623
msgid "Menu ToolBar"
msgstr "Menu ToolBar"
-#: ../dialogs/DurationEditorDialog.py:51
+#: ../runtime/NevowServer.py:176
+msgid "Message text"
+msgstr "Message text"
+
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Microseconds:"
msgstr "Microseconds:"
-#: ../editors/Viewer.py:585
+#: ../editors/Viewer.py:588
msgid "Middle"
msgstr "Middle"
-#: ../dialogs/DurationEditorDialog.py:50
+#: ../dialogs/DurationEditorDialog.py:61
msgid "Milliseconds:"
msgstr "Milliseconds:"
+#: ../etherlab/etherlab.py:167
+msgid "Minimal size in bits between 2 pdo entries"
+msgstr "Minimal size in bits between 2 pdo entries"
+
#: ../plcopen/iec_std.csv:72
msgid "Minimum"
msgstr "Minimum"
@@ -2140,15 +2470,15 @@
msgid "Minimum:"
msgstr "Minimum:"
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:59
msgid "Minutes:"
msgstr "Minutes:"
-#: ../controls/ProjectPropertiesPanel.py:231
+#: ../etherlab/etherlab.py:238 ../controls/ProjectPropertiesPanel.py:233
msgid "Miscellaneous"
msgstr "Miscellaneous"
-#: ../features.py:32
+#: ../features.py:21
msgid "Modbus support"
msgstr "Modbus support"
@@ -2156,7 +2486,20 @@
msgid "Modifier:"
msgstr "Modifier:"
-#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269
+#: ../etherlab/ConfigEditor.py:1313
+#, python-format
+msgid "Module %s must be an integer!"
+msgstr "Module %s must be an integer!"
+
+#: ../etherlab/ConfigEditor.py:1376
+msgid "Modules Library"
+msgstr "Modules Library"
+
+#: ../etherlab/ConfigEditor.py:1145
+msgid "Modules library:"
+msgstr "Modules library:"
+
+#: ../PLCGenerator.py:795 ../PLCGenerator.py:1318
#, 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"
@@ -2181,23 +2524,31 @@
msgid "Move element up"
msgstr "Move element up"
-#: ../editors/ResourceEditor.py:286
+#: ../editors/ResourceEditor.py:284
msgid "Move instance down"
msgstr "Move instance down"
-#: ../editors/ResourceEditor.py:285
+#: ../editors/ResourceEditor.py:283
msgid "Move instance up"
msgstr "Move instance up"
-#: ../editors/ResourceEditor.py:255
+#: ../etherlab/ConfigEditor.py:655
+msgid "Move process variable down"
+msgstr "Move process variable down"
+
+#: ../etherlab/ConfigEditor.py:654
+msgid "Move process variable up"
+msgstr "Move process variable up"
+
+#: ../editors/ResourceEditor.py:253
msgid "Move task down"
msgstr "Move task down"
-#: ../editors/ResourceEditor.py:254
+#: ../editors/ResourceEditor.py:252
msgid "Move task up"
msgstr "Move task up"
-#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+#: ../IDEFrame.py:253 ../IDEFrame.py:268 ../IDEFrame.py:298 ../IDEFrame.py:339
msgid "Move the view"
msgstr "Move the view"
@@ -2205,14 +2556,28 @@
msgid "Move up"
msgstr "Move up"
-#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+#: ../bacnet/BacnetSlaveEditor.py:814 ../editors/CodeFileEditor.py:675
+#: ../controls/VariablePanel.py:486
msgid "Move variable down"
msgstr "Move variable down"
-#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+#: ../bacnet/BacnetSlaveEditor.py:813 ../editors/CodeFileEditor.py:674
+#: ../controls/VariablePanel.py:485
msgid "Move variable up"
msgstr "Move variable up"
+#: ../bacnet/BacnetSlaveEditor.py:941
+msgid "Multi-State Input Objects"
+msgstr "Multi-State Input Objects"
+
+#: ../bacnet/BacnetSlaveEditor.py:940
+msgid "Multi-State Output Objects"
+msgstr "Multi-State Output Objects"
+
+#: ../bacnet/BacnetSlaveEditor.py:939
+msgid "Multi-State Value Objects"
+msgstr "Multi-State Value Objects"
+
#: ../plcopen/iec_std.csv:74
msgid "Multiplexer (select 1 of N)"
msgstr "Multiplexer (select 1 of N)"
@@ -2221,7 +2586,7 @@
msgid "Multiplication"
msgstr "Multiplication"
-#: ../editors/FileManagementPanel.py:87
+#: ../editors/FileManagementPanel.py:86
msgid "My Computer:"
msgstr "My Computer:"
@@ -2229,13 +2594,15 @@
msgid "NAME"
msgstr "NAME"
-#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
-#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../etherlab/EtherCATManagementEditor.py:37 ../etherlab/ConfigEditor.py:48
+#: ../etherlab/ConfigEditor.py:343 ../etherlab/ConfigEditor.py:1167
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:94
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:751
#: ../controls/VariablePanel.py:59
msgid "Name"
msgstr "Name"
-#: ../Beremiz_service.py:342
+#: ../Beremiz_service.py:355
msgid "Name must not be null!"
msgstr "Name must not be null!"
@@ -2248,15 +2615,19 @@
msgid "Natural logarithm"
msgstr "Natural logarithm"
-#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:557
msgid "Negated"
msgstr "Negated"
-#: ../Beremiz_service.py:610
+#: ../etherlab/ConfigEditor.py:612
+msgid "Network"
+msgstr "Network"
+
+#: ../Beremiz_service.py:620
msgid "Nevow Web service failed. "
msgstr "Nevow Web service failed. "
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:596
msgid "Nevow/Athena import failed :"
msgstr "Nevow/Athena import failed :"
@@ -2269,20 +2640,29 @@
msgid "New item"
msgstr "New item"
-#: ../editors/Viewer.py:553
+#: ../editors/Viewer.py:556
msgid "No Modifier"
msgstr "No Modifier"
-#: ../ProjectController.py:1808
+#: ../ProjectController.py:1891
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr "No PLC to transfer (did build succeed ?)\n"
-#: ../PLCGenerator.py:1678
+#: ../etherlab/EthercatCFileGenerator.py:504
+#, python-format
+msgid "No Sync manager defined for %s!"
+msgstr "No Sync manager defined for %s!"
+
+#: ../PLCGenerator.py:1727
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr "No body defined in \"%s\" POU"
-#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#: ../etherlab/CommonEtherCATFunction.py:1581
+msgid "No connected slaves"
+msgstr "No connected slaves"
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1330
#, 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"
@@ -2300,7 +2680,17 @@
msgid "No informations found for \"%s\" block"
msgstr "No informations found for \"%s\" block"
-#: ../PLCGenerator.py:1232
+#: ../etherlab/EthercatCFileGenerator.py:224
+#, python-format
+msgid "No informations found for device %s!"
+msgstr "No informations found for device %s!"
+
+#: ../etherlab/EthercatCFileGenerator.py:515
+#, python-format
+msgid "No more free PDO index available for %s!"
+msgstr "No more free PDO index available for %s!"
+
+#: ../PLCGenerator.py:1281
#, 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"
@@ -2309,11 +2699,21 @@
msgid "No search results available."
msgstr "No search results available."
+#: ../etherlab/ConfigEditor.py:1029
+#, python-format
+msgid "No slave defined at position %d!"
+msgstr "No slave defined at position %d!"
+
#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr "No such SVG file: %s\n"
+#: ../etherlab/ConfigEditor.py:1245
+#, python-format
+msgid "No such XML file: %s\n"
+msgstr "No such XML file: %s\n"
+
#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
@@ -2324,15 +2724,33 @@
msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
msgstr "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
+#: ../etherlab/EthercatCFileGenerator.py:438
+#, python-format
+msgid "No sync manager available for %s pdo!"
+msgstr "No sync manager available for %s pdo!"
+
#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr "No valid value selected!"
-#: ../PLCGenerator.py:1676
+#: ../PLCGenerator.py:1725
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr "No variable defined in \"%s\" POU"
+#: ../etherlab/ConfigEditor.py:606
+#, python-format
+msgid "Node Position: %d"
+msgstr "Node Position: %d"
+
+#: ../etherlab/ConfigEditor.py:697
+msgid "Node filter:"
+msgstr "Node filter:"
+
+#: ../etherlab/ConfigEditor.py:717
+msgid "Nodes variables filter:"
+msgstr "Nodes variables filter:"
+
#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
@@ -2355,6 +2773,10 @@
msgid "Not equal to"
msgstr "Not equal to"
+#: ../etherlab/EtherCATManagementEditor.py:361
+msgid "Now Uploading..."
+msgstr "Now Uploading..."
+
#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr "Number of sequences:"
@@ -2363,7 +2785,11 @@
msgid "Numerical"
msgstr "Numerical"
-#: ../editors/CodeFileEditor.py:736
+#: ../bacnet/BacnetSlaveEditor.py:808
+msgid "Object Properties:"
+msgstr "Object Properties:"
+
+#: ../editors/CodeFileEditor.py:755
msgid "OnChange"
msgstr "OnChange"
@@ -2380,15 +2806,15 @@
msgid "Open Inkscape"
msgstr "Open Inkscape"
-#: ../version.py:86
+#: ../version.py:88
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:1879
+#: ../ProjectController.py:1962
msgid "Open a file explorer to manage project files"
msgstr "Open a file explorer to manage project files"
-#: ../wxglade_hmi/wxglade_hmi.py:161
+#: ../wxglade_hmi/wxglade_hmi.py:176
msgid "Open wxGlade"
msgstr "Open wxGlade"
@@ -2396,11 +2822,11 @@
msgid "Option"
msgstr "Option"
-#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:756
msgid "Options"
msgstr "Options"
-#: ../controls/ProjectPropertiesPanel.py:109
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Organization (optional):"
msgstr "Organization (optional):"
@@ -2408,14 +2834,19 @@
msgid "Other Profile"
msgstr "Other Profile"
-#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42
+#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:65
#: ../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
+#: ../editors/Viewer.py:1663 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86
+#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379
msgid "Output"
msgstr "Output"
+#: ../etherlab/EthercatCFileGenerator.py:170
+#, python-brace-format
+msgid "Output variables can't be defined with different locations ({a1} and {a2})"
+msgstr "Output variables can't be defined with different locations ({a1} and {a2})"
+
#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr "PDO Receive"
@@ -2424,26 +2855,39 @@
msgid "PDO Transmit"
msgstr "PDO Transmit"
+#: ../etherlab/etherlab.py:164
+msgid "PDO alignment"
+msgstr "PDO alignment"
+
#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr "PLC :\n"
-#: ../BeremizIDE.py:383
+#: ../BeremizIDE.py:379
msgid "PLC Log"
msgstr "PLC Log"
-#: ../ProjectController.py:1082
+#: ../ProjectController.py:1129
msgid "PLC code generation failed !\n"
msgstr "PLC code generation failed !\n"
-#: ../Beremiz_service.py:305
+#: ../etherlab/EtherCATManagementEditor.py:250
+msgid "PLC is Not Started"
+msgstr "PLC is Not Started"
+
+#: ../Beremiz_service.py:318
msgid "PLC is empty or already started."
msgstr "PLC is empty or already started."
-#: ../Beremiz_service.py:312
+#: ../Beremiz_service.py:325
msgid "PLC is not started."
msgstr "PLC is not started."
+#: ../etherlab/EtherCATManagementEditor.py:2160
+#: ../etherlab/CommonEtherCATFunction.py:1589
+msgid "PLC not connected!"
+msgstr "PLC not connected!"
+
#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
@@ -2475,28 +2919,28 @@
msgid "PORT"
msgstr "PORT"
-#: ../dialogs/PouDialog.py:109
+#: ../dialogs/PouDialog.py:144
msgid "POU Name"
msgstr "POU Name"
-#: ../dialogs/PouDialog.py:66
+#: ../dialogs/PouDialog.py:64
msgid "POU Name:"
msgstr "POU Name:"
-#: ../dialogs/PouDialog.py:111
+#: ../dialogs/PouDialog.py:146
msgid "POU Type"
msgstr "POU Type"
-#: ../dialogs/PouDialog.py:73
+#: ../dialogs/PouDialog.py:71
msgid "POU Type:"
msgstr "POU Type:"
-#: ../connectors/PYRO/__init__.py:52
+#: ../connectors/PYRO/__init__.py:53
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr "PYRO connecting to URI : %s\n"
-#: ../connectors/PYRO/__init__.py:68
+#: ../connectors/PYRO/__init__.py:69
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr "PYRO using certificates in '%s' \n"
@@ -2505,11 +2949,11 @@
msgid "Page Setup"
msgstr "Page Setup"
-#: ../controls/ProjectPropertiesPanel.py:124
+#: ../controls/ProjectPropertiesPanel.py:127
msgid "Page Size (optional):"
msgstr "Page Size (optional):"
-#: ../IDEFrame.py:2640
+#: ../IDEFrame.py:2660
#, python-format
msgid "Page: %d"
msgstr "Page: %d"
@@ -2518,11 +2962,11 @@
msgid "Parent instance"
msgstr "Parent instance"
-#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+#: ../editors/Viewer.py:699 ../IDEFrame.py:377 ../IDEFrame.py:429
msgid "Paste"
msgstr "Paste"
-#: ../IDEFrame.py:1899
+#: ../IDEFrame.py:1916
msgid "Paste POU"
msgstr "Paste POU"
@@ -2534,7 +2978,11 @@
msgid "Pin number:"
msgstr "Pin number:"
-#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../runtime/NevowServer.py:163
+msgid "Platform"
+msgstr "Platform"
+
+#: ../editors/Viewer.py:2791 ../editors/Viewer.py:3059
#: ../editors/SFCViewer.py:785
msgid "Please choose a target"
msgstr "Please choose a target"
@@ -2543,7 +2991,7 @@
msgid "Please enter a block name"
msgstr "Please enter a block name"
-#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+#: ../dialogs/CommentEditDialog.py:52
msgid "Please enter comment text"
msgstr "Please enter comment text"
@@ -2552,7 +3000,8 @@
msgid "Please enter step name"
msgstr "Please enter step name"
-#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+#: ../dialogs/SFCStepNameDialog.py:37 ../dialogs/PouNameDialog.py:37
+#: ../Beremiz_service.py:222
msgid "Please enter text"
msgstr "Please enter text"
@@ -2561,15 +3010,19 @@
msgid "Please enter value for a \"%s\" variable:"
msgstr "Please enter value for a \"%s\" variable:"
-#: ../Beremiz_service.py:327
+#: ../Beremiz_service.py:340
msgid "Port number must be 0 <= port <= 65535!"
msgstr "Port number must be 0 <= port <= 65535!"
-#: ../Beremiz_service.py:327
+#: ../Beremiz_service.py:340
msgid "Port number must be an integer!"
msgstr "Port number must be an integer!"
-#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+#: ../etherlab/ConfigEditor.py:47 ../etherlab/ConfigEditor.py:465
+msgid "Position"
+msgstr "Position"
+
+#: ../editors/Viewer.py:636 ../editors/Viewer.py:2451
msgid "Power Rail"
msgstr "Power Rail"
@@ -2590,7 +3043,7 @@
msgid "Print"
msgstr "Print"
-#: ../IDEFrame.py:1110
+#: ../IDEFrame.py:1123
msgid "Print preview"
msgstr "Print preview"
@@ -2602,33 +3055,37 @@
msgid "Priority:"
msgstr "Priority:"
-#: ../runtime/PLCObject.py:518
+#: ../runtime/PLCObject.py:523
#, python-format
msgid "Problem starting PLC : error %d"
msgstr "Problem starting PLC : error %d"
-#: ../dialogs/ProjectDialog.py:63
+#: ../etherlab/ConfigEditor.py:647
+msgid "Process variables mapped between nodes:"
+msgstr "Process variables mapped between nodes:"
+
+#: ../dialogs/ProjectDialog.py:61
msgid "Product Name"
msgstr "Product Name"
-#: ../controls/ProjectPropertiesPanel.py:90
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Name (required):"
msgstr "Product Name (required):"
-#: ../controls/ProjectPropertiesPanel.py:92
+#: ../controls/ProjectPropertiesPanel.py:93
msgid "Product Release (optional):"
msgstr "Product Release (optional):"
-#: ../dialogs/ProjectDialog.py:64
+#: ../dialogs/ProjectDialog.py:62
msgid "Product Version"
msgstr "Product Version"
-#: ../controls/ProjectPropertiesPanel.py:91
+#: ../controls/ProjectPropertiesPanel.py:92
msgid "Product Version (required):"
msgstr "Product Version (required):"
-#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
-#: ../IDEFrame.py:1975
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1795
+#: ../IDEFrame.py:1992
msgid "Program"
msgstr "Program"
@@ -2644,7 +3101,7 @@
msgid "Programs can't be used by other POUs!"
msgstr "Programs can't be used by other POUs!"
-#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
+#: ../controls/ProjectPropertiesPanel.py:95 ../IDEFrame.py:607
msgid "Project"
msgstr "Project"
@@ -2653,19 +3110,19 @@
msgid "Project '%s':"
msgstr "Project '%s':"
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1961
msgid "Project Files"
msgstr "Project Files"
-#: ../dialogs/ProjectDialog.py:62
+#: ../dialogs/ProjectDialog.py:60
msgid "Project Name"
msgstr "Project Name"
-#: ../controls/ProjectPropertiesPanel.py:88
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Name (required):"
msgstr "Project Name (required):"
-#: ../controls/ProjectPropertiesPanel.py:89
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Project Version (optional):"
msgstr "Project Version (optional):"
@@ -2694,16 +3151,16 @@
msgid "Properties"
msgstr "Properties"
-#: ../Beremiz_service.py:427
+#: ../Beremiz_service.py:440
msgid "Publishing service on local network"
msgstr "Publishing service on local network"
-#: ../connectors/PYRO/__init__.py:126
+#: ../connectors/PYRO/__init__.py:127
#, python-format
msgid "Pyro exception: %s\n"
msgstr "Pyro exception: %s\n"
-#: ../Beremiz_service.py:420
+#: ../Beremiz_service.py:433
msgid "Pyro port :"
msgstr "Pyro port :"
@@ -2711,7 +3168,7 @@
msgid "Python code"
msgstr "Python code"
-#: ../features.py:34
+#: ../features.py:23
msgid "Python file"
msgstr "Python file"
@@ -2719,19 +3176,23 @@
msgid "Qualifier"
msgstr "Qualifier"
-#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:296
msgid "Quit"
msgstr "Quit"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:224
msgid "Range:"
msgstr "Range:"
-#: ../ProjectController.py:1872
+#: ../ProjectController.py:1955
msgid "Raw IEC code"
msgstr "Raw IEC code"
-#: ../BeremizIDE.py:1083
+#: ../etherlab/ConfigEditor.py:344
+msgid "Read from (nodeid, index, subindex)"
+msgstr "Read from (nodeid, index, subindex)"
+
+#: ../BeremizIDE.py:1080
#, python-format
msgid "Really delete node '%s'?"
msgstr "Really delete node '%s'?"
@@ -2740,7 +3201,7 @@
msgid "Realm:"
msgstr "Realm:"
-#: ../IDEFrame.py:367 ../IDEFrame.py:424
+#: ../IDEFrame.py:370 ../IDEFrame.py:425
msgid "Redo"
msgstr "Redo"
@@ -2748,10 +3209,14 @@
msgid "Reference"
msgstr "Reference"
-#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:436
msgid "Refresh"
msgstr "Refresh"
+#: ../etherlab/EtherCATManagementEditor.py:1965
+msgid "Register Modify Dialog"
+msgstr "Register Modify Dialog"
+
#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr "Regular expression"
@@ -2760,7 +3225,7 @@
msgid "Regular expressions"
msgstr "Regular expressions"
-#: ../editors/Viewer.py:1636
+#: ../editors/Viewer.py:1638
msgid "Release value"
msgstr "Release value"
@@ -2768,16 +3233,16 @@
msgid "Remainder (modulo)"
msgstr "Remainder (modulo)"
-#: ../BeremizIDE.py:1084
+#: ../BeremizIDE.py:1081
#, python-format
msgid "Remove %s node"
msgstr "Remove %s node"
-#: ../IDEFrame.py:2445
+#: ../IDEFrame.py:2463
msgid "Remove Datatype"
msgstr "Remove Datatype"
-#: ../IDEFrame.py:2450
+#: ../IDEFrame.py:2468
msgid "Remove Pou"
msgstr "Remove Pou"
@@ -2789,35 +3254,52 @@
msgid "Remove element"
msgstr "Remove element"
-#: ../editors/FileManagementPanel.py:66
+#: ../etherlab/ConfigEditor.py:1353
+msgid "Remove file from database"
+msgstr "Remove file from database"
+
+#: ../editors/FileManagementPanel.py:65
msgid "Remove file from left folder"
msgstr "Remove file from left folder"
-#: ../editors/ResourceEditor.py:284
+#: ../etherlab/ConfigEditor.py:1389
+msgid "Remove file from library"
+msgstr "Remove file from library"
+
+#: ../editors/ResourceEditor.py:282
msgid "Remove instance"
msgstr "Remove instance"
+#: ../etherlab/ConfigEditor.py:653
+msgid "Remove process variable"
+msgstr "Remove process variable"
+
#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr "Remove slave"
-#: ../editors/ResourceEditor.py:253
+#: ../etherlab/ConfigEditor.py:680
+msgid "Remove startup service variable"
+msgstr "Remove startup service variable"
+
+#: ../editors/ResourceEditor.py:251
msgid "Remove task"
msgstr "Remove task"
-#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+#: ../bacnet/BacnetSlaveEditor.py:812 ../editors/CodeFileEditor.py:673
+#: ../controls/VariablePanel.py:484
msgid "Remove variable"
msgstr "Remove variable"
-#: ../IDEFrame.py:1979
+#: ../IDEFrame.py:1996
msgid "Rename"
msgstr "Rename"
-#: ../editors/FileManagementPanel.py:187
+#: ../editors/FileManagementPanel.py:186
msgid "Replace File"
msgstr "Replace File"
-#: ../editors/Viewer.py:598
+#: ../editors/Viewer.py:601
msgid "Replace Wire by connections"
msgstr "Replace Wire by connections"
@@ -2829,11 +3311,11 @@
msgid "Reset"
msgstr "Reset"
-#: ../editors/Viewer.py:681
+#: ../editors/Viewer.py:684
msgid "Reset Execution Order"
msgstr "Reset Execution Order"
-#: ../IDEFrame.py:453
+#: ../IDEFrame.py:459
msgid "Reset Perspective"
msgstr "Reset Perspective"
@@ -2841,7 +3323,7 @@
msgid "Reset search result"
msgstr "Reset search result"
-#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+#: ../BeremizIDE.py:1012 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr "Resources"
@@ -2849,11 +3331,11 @@
msgid "Retain"
msgstr "Retain"
-#: ../controls/VariablePanel.py:455
+#: ../controls/VariablePanel.py:457
msgid "Return Type:"
msgstr "Return Type:"
-#: ../editors/Viewer.py:582
+#: ../editors/Viewer.py:585
msgid "Right"
msgstr "Right"
@@ -2861,7 +3343,7 @@
msgid "Right PowerRail"
msgstr "Right PowerRail"
-#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:558
msgid "Rising Edge"
msgstr "Rising Edge"
@@ -2877,15 +3359,15 @@
msgid "Rounding up/down"
msgstr "Rounding up/down"
-#: ../ProjectController.py:1828
+#: ../ProjectController.py:1911
msgid "Run"
msgstr "Run"
-#: ../ProjectController.py:1127
+#: ../ProjectController.py:1175
msgid "Runtime IO extensions C code generation failed !\n"
msgstr "Runtime IO extensions C code generation failed !\n"
-#: ../ProjectController.py:1136
+#: ../ProjectController.py:1186
msgid "Runtime library extensions C code generation failed !\n"
msgstr "Runtime library extensions C code generation failed !\n"
@@ -2897,11 +3379,11 @@
msgid "SDO Server"
msgstr "SDO Server"
-#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161
msgid "SFC"
msgstr "SFC"
-#: ../PLCGenerator.py:1433
+#: ../PLCGenerator.py:1482
#, 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}\""
@@ -2912,7 +3394,7 @@
msgstr "SFC transition in POU \"%s\" must be connected."
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44
+#: ../dialogs/PouDialog.py:128
msgid "ST"
msgstr "ST"
@@ -2924,7 +3406,7 @@
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr "SVG files (*.svg)|*.svg|All files|*.*"
-#: ../features.py:36
+#: ../features.py:25
msgid "SVGUI"
msgstr "SVGUI"
@@ -2941,37 +3423,47 @@
msgid "Save as"
msgstr "Save as"
-#: ../ProjectController.py:530
+#: ../etherlab/EtherCATManagementEditor.py:941
+#: ../etherlab/EtherCATManagementEditor.py:1289
+msgid "Save as..."
+msgstr "Save as..."
+
+#: ../ProjectController.py:546
msgid "Save path is the same as path of a project! \n"
msgstr "Save path is the same as path of a project! \n"
+#: ../etherlab/EthercatMaster.py:455 ../etherlab/EthercatMaster.py:764
+#: ../etherlab/EthercatMaster.py:765
+msgid "Scan Network"
+msgstr "Scan Network"
+
#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr "Scope"
-#: ../IDEFrame.py:644
+#: ../IDEFrame.py:650
msgid "Search"
msgstr "Search"
-#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:387 ../IDEFrame.py:431
msgid "Search in Project"
msgstr "Search in Project"
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:60
msgid "Seconds:"
msgstr "Seconds:"
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:393
msgid "Select All"
msgstr "Select All"
#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305
-#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315
-#: ../controls/VariablePanel.py:378
+#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:314
+#: ../controls/VariablePanel.py:377
msgid "Select a variable class:"
msgstr "Select a variable class:"
-#: ../ProjectController.py:1293
+#: ../ProjectController.py:1354
msgid "Select an editor:"
msgstr "Select an editor:"
@@ -2979,11 +3471,11 @@
msgid "Select an instance"
msgstr "Select an instance"
-#: ../IDEFrame.py:628
+#: ../IDEFrame.py:634
msgid "Select an object"
msgstr "Select an object"
-#: ../ProjectController.py:537
+#: ../ProjectController.py:555
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr "Selected directory already contains another project. Overwrite? \n"
@@ -2999,6 +3491,14 @@
msgid "Selection Divergence"
msgstr "Selection Divergence"
+#: ../runtime/NevowServer.py:182
+msgid "Send"
+msgstr "Send"
+
+#: ../runtime/NevowServer.py:181
+msgid "Send a message to the log"
+msgstr "Send a message to the log"
+
#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr "Service Discovery"
@@ -3007,7 +3507,7 @@
msgid "Services available:"
msgstr "Services available:"
-#: ../dialogs/LDElementDialog.py:79
+#: ../dialogs/LDElementDialog.py:79 ../runtime/WampClient.py:434
msgid "Set"
msgstr "Set"
@@ -3019,7 +3519,7 @@
msgid "Shift right"
msgstr "Shift right"
-#: ../ProjectController.py:1863
+#: ../ProjectController.py:1946
msgid "Show IEC code generated by PLCGenerator"
msgstr "Show IEC code generated by PLCGenerator"
@@ -3031,7 +3531,7 @@
msgid "Show Master generated by config_utils"
msgstr "Show Master generated by config_utils"
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1945
msgid "Show code"
msgstr "Show code"
@@ -3051,6 +3551,14 @@
msgid "Single"
msgstr "Single"
+#: ../etherlab/EtherCATManagementEditor.py:361
+msgid "Slave SDO Monitoring"
+msgstr "Slave SDO Monitoring"
+
+#: ../etherlab/ConfigEditor.py:135
+msgid "Slave entries"
+msgstr "Slave entries"
+
#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr "Source didn't change, no build.\n"
@@ -3068,44 +3576,56 @@
msgid "Standard function blocks"
msgstr "Standard function blocks"
-#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+#: ../etherlab/ConfigEditor.py:68
+msgid "Standardized Device Profile"
+msgstr "Standardized Device Profile"
+
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Start Address"
+msgstr "Start Address"
+
+#: ../ProjectController.py:1912 ../Beremiz_service.py:284
msgid "Start PLC"
msgstr "Start PLC"
-#: ../ProjectController.py:1074
+#: ../ProjectController.py:1121
#, python-format
msgid "Start build in %s\n"
msgstr "Start build in %s\n"
-#: ../ProjectController.py:1397
+#: ../runtime/PlcStatus.py:12
msgid "Started"
msgstr "Started"
-#: ../ProjectController.py:1633
+#: ../ProjectController.py:1714
msgid "Starting PLC\n"
msgstr "Starting PLC\n"
-#: ../BeremizIDE.py:393
+#: ../etherlab/ConfigEditor.py:674
+msgid "Startup service variables assignments:"
+msgstr "Startup service variables assignments:"
+
+#: ../BeremizIDE.py:389
msgid "Status ToolBar"
msgstr "Status ToolBar"
-#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2426
msgid "Step"
msgstr "Step"
-#: ../ProjectController.py:1835
+#: ../ProjectController.py:1918
msgid "Stop"
msgstr "Stop"
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:285
msgid "Stop PLC"
msgstr "Stop PLC"
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1919
msgid "Stop Running PLC"
msgstr "Stop Running PLC"
-#: ../ProjectController.py:1398
+#: ../runtime/PlcStatus.py:13
msgid "Stopped"
msgstr "Stopped"
@@ -3113,6 +3633,14 @@
msgid "Structure"
msgstr "Structure"
+#: ../etherlab/ConfigEditor.py:48
+msgid "SubIndex"
+msgstr "SubIndex"
+
+#: ../etherlab/ConfigEditor.py:465
+msgid "Subindex"
+msgstr "Subindex"
+
#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr "Subrange"
@@ -3121,11 +3649,11 @@
msgid "Subtraction"
msgstr "Subtraction"
-#: ../ProjectController.py:1113
+#: ../ProjectController.py:1160
msgid "Successfully built.\n"
msgstr "Successfully built.\n"
-#: ../IDEFrame.py:449
+#: ../IDEFrame.py:451
msgid "Switch perspective"
msgstr "Switch perspective"
@@ -3141,19 +3669,19 @@
msgid "Tangent"
msgstr "Tangent"
-#: ../editors/ResourceEditor.py:97
+#: ../editors/ResourceEditor.py:94
msgid "Task"
msgstr "Task"
-#: ../editors/ResourceEditor.py:248
+#: ../editors/ResourceEditor.py:246
msgid "Tasks:"
msgstr "Tasks:"
-#: ../controls/VariablePanel.py:91
+#: ../controls/VariablePanel.py:88
msgid "Temp"
msgstr "Temp"
-#: ../version.py:35
+#: ../version.py:37
msgid ""
"The best place to ask questions about Beremiz/PLCOpenEditor\n"
"is project's mailing list: beremiz-devel@lists.sourceforge.net\n"
@@ -3173,7 +3701,15 @@
"You can subscribe to the list here:\n"
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
-#: ../editors/FileManagementPanel.py:186
+#: ../etherlab/EthercatMaster.py:454
+msgid ""
+"The current network configuration will be deleted.\n"
+"Do you want to continue?"
+msgstr ""
+"The current network configuration will be deleted.\n"
+"Do you want to continue?"
+
+#: ../editors/FileManagementPanel.py:185
#, python-format
msgid ""
"The file '%s' already exist.\n"
@@ -3182,20 +3718,25 @@
"The file '%s' already exist.\n"
"Do you want to replace it?"
+#: ../etherlab/EtherCATManagementEditor.py:928
+#: ../etherlab/EtherCATManagementEditor.py:1320
+msgid "The file does not exist!"
+msgstr "The file does not exist!"
+
#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr "The group of block must be coherent!"
-#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+#: ../BeremizIDE.py:569 ../IDEFrame.py:1059
msgid "There are changes, do you want to save?"
msgstr "There are changes, do you want to save?"
-#: ../IDEFrame.py:1691 ../IDEFrame.py:1710
+#: ../IDEFrame.py:1708 ../IDEFrame.py:1727
#, 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:1133
+#: ../IDEFrame.py:1146
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3207,7 +3748,7 @@
msgid "This option isn't available yet!"
msgstr "This option isn't available yet!"
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:546
#, python-format
msgid "Tick: %d"
msgstr "Tick: %d"
@@ -3245,53 +3786,57 @@
msgid "Time-of-day subtraction"
msgstr "Time-of-day subtraction"
+#: ../IDEFrame.py:432
+msgid "Toggle fullscreen mode"
+msgstr "Toggle fullscreen mode"
+
#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr "Toggle value"
-#: ../editors/Viewer.py:584
+#: ../editors/Viewer.py:587
msgid "Top"
msgstr "Top"
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1931
msgid "Transfer"
msgstr "Transfer"
-#: ../ProjectController.py:1849
+#: ../ProjectController.py:1932
msgid "Transfer PLC"
msgstr "Transfer PLC"
-#: ../ProjectController.py:1802
+#: ../ProjectController.py:1884
msgid "Transfer completed successfully.\n"
msgstr "Transfer completed successfully.\n"
-#: ../ProjectController.py:1805
+#: ../ProjectController.py:1887
msgid "Transfer failed\n"
msgstr "Transfer failed\n"
-#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2428 ../editors/Viewer.py:2455
msgid "Transition"
msgstr "Transition"
-#: ../PLCGenerator.py:1564
+#: ../PLCGenerator.py:1613
#, 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:91
+#: ../dialogs/PouTransitionDialog.py:90
msgid "Transition Name"
msgstr "Transition Name"
-#: ../dialogs/PouTransitionDialog.py:60
+#: ../dialogs/PouTransitionDialog.py:59
msgid "Transition Name:"
msgstr "Transition Name:"
-#: ../PLCGenerator.py:1657
+#: ../PLCGenerator.py:1706
#, 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:1646
+#: ../PLCGenerator.py:1695
#, 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"
@@ -3313,17 +3858,17 @@
msgid "Triggering"
msgstr "Triggering"
-#: ../Beremiz_service.py:490
+#: ../Beremiz_service.py:503
msgid "Twisted unavailable."
msgstr "Twisted unavailable."
-#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
-#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
-#: ../controls/VariablePanel.py:61
+#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:48
+#: ../editors/ResourceEditor.py:94 ../editors/DataTypeEditor.py:55
+#: ../editors/CodeFileEditor.py:752 ../controls/VariablePanel.py:61
msgid "Type"
msgstr "Type"
-#: ../dialogs/BrowseLocationsDialog.py:54
+#: ../dialogs/BrowseLocationsDialog.py:51
msgid "Type and derivated"
msgstr "Type and derivated"
@@ -3340,16 +3885,25 @@
msgid "Type infos:"
msgstr "Type infos:"
-#: ../dialogs/BrowseLocationsDialog.py:55
+#: ../etherlab/EthercatCFileGenerator.py:76
+#, python-format
+msgid "Type of location \"%s\" not yet supported!"
+msgstr "Type of location \"%s\" not yet supported!"
+
+#: ../dialogs/BrowseLocationsDialog.py:52
msgid "Type strict"
msgstr "Type strict"
#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59
-#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111
+#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:110
#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61
msgid "Type:"
msgstr "Type:"
+#: ../runtime/WampClient.py:129
+msgid "TypeError register option: {}"
+msgstr "TypeError register option: {}"
+
#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
msgid "URI host:"
msgstr "URI host:"
@@ -3372,7 +3926,17 @@
msgid "Unable to get Xenomai's %s \n"
msgstr "Unable to get Xenomai's %s \n"
-#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#: ../bacnet/bacnet.py:430
+#, python-format
+msgid "Unable to load file \"%s\"!"
+msgstr "Unable to load file \"%s\"!"
+
+#: ../bacnet/bacnet.py:420
+#, python-format
+msgid "Unable to save to file \"%s\"!"
+msgstr "Unable to save to file \"%s\"!"
+
+#: ../PLCGenerator.py:1023 ../PLCGenerator.py:1301
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr "Undefined block type \"{a1}\" in \"{a2}\" POU"
@@ -3382,20 +3946,25 @@
msgid "Undefined pou type \"%s\""
msgstr "Undefined pou type \"%s\""
-#: ../IDEFrame.py:365 ../IDEFrame.py:423
+#: ../IDEFrame.py:368 ../IDEFrame.py:424
msgid "Undo"
msgstr "Undo"
-#: ../ProjectController.py:442
+#: ../ProjectController.py:457
msgid "Unknown"
msgstr "Unknown"
+#: ../etherlab/EthercatCFileGenerator.py:470
+#, python-brace-format
+msgid "Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}"
+msgstr "Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}"
+
#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr "Unknown variable \"%s\" for this POU!"
-#: ../ProjectController.py:439 ../ProjectController.py:440
+#: ../ProjectController.py:454 ../ProjectController.py:455
msgid "Unnamed"
msgstr "Unnamed"
@@ -3404,12 +3973,20 @@
msgid "Unnamed%d"
msgstr "Unnamed%d"
-#: ../controls/VariablePanel.py:308
+#: ../controls/VariablePanel.py:307
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr "Unrecognized data size \"%s\""
-#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+#: ../etherlab/EtherCATManagementEditor.py:2080
+msgid "Update"
+msgstr "Update"
+
+#: ../runtime/WampClient.py:380
+msgid "Upload:"
+msgstr "Upload:"
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:852
msgid "User Data Types"
msgstr "User Data Types"
@@ -3421,7 +3998,7 @@
msgid "User-defined POUs"
msgstr "User-defined POUs"
-#: ../dialogs/ActionBlockDialog.py:42
+#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:465
msgid "Value"
msgstr "Value"
@@ -3429,24 +4006,29 @@
msgid "Values:"
msgstr "Values:"
-#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
-#: ../editors/Viewer.py:2456
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:625
+#: ../editors/Viewer.py:2458
msgid "Variable"
msgstr "Variable"
#: ../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
+#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:354
msgid "Variable Drop"
msgstr "Variable Drop"
-#: ../dialogs/FBDVariableDialog.py:68
+#: ../etherlab/ConfigEditor.py:70
+#, python-format
+msgid "Variable Index: #x%4.4X"
+msgstr "Variable Index: #x%4.4X"
+
+#: ../dialogs/FBDVariableDialog.py:58
msgid "Variable Properties"
msgstr "Variable Properties"
#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316
-#: ../controls/VariablePanel.py:379
+#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:315
+#: ../controls/VariablePanel.py:378
msgid "Variable class"
msgstr "Variable class"
@@ -3454,24 +4036,28 @@
msgid "Variable don't belong to this POU!"
msgstr "Variable don't belong to this POU!"
+#: ../etherlab/ConfigEditor.py:280
+msgid "Variable entries:"
+msgstr "Variable entries:"
+
#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr "Variable:"
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid "Variables"
msgstr "Variables"
-#: ../controls/ProjectPropertiesPanel.py:166
+#: ../controls/ProjectPropertiesPanel.py:169
msgid "Vertical:"
msgstr "Vertical:"
-#: ../runtime/WampClient.py:113
+#: ../runtime/WampClient.py:170
#, python-format
msgid "WAMP Client connection failed (%s) .. retrying .."
msgstr "WAMP Client connection failed (%s) .. retrying .."
-#: ../runtime/WampClient.py:117
+#: ../runtime/WampClient.py:179
#, python-format
msgid "WAMP Client connection lost (%s) .. retrying .."
msgstr "WAMP Client connection lost (%s) .. retrying .."
@@ -3480,49 +4066,66 @@
msgid "WAMP ID:"
msgstr "WAMP ID:"
-#: ../runtime/WampClient.py:172
+#: ../runtime/WampClient.py:413
+msgid "WAMP Server URL"
+msgstr "WAMP Server URL"
+
+#: ../runtime/WampClient.py:276
+msgid "WAMP authentication has no secret configured"
+msgstr "WAMP authentication has no secret configured"
+
+#: ../runtime/WampClient.py:304
+msgid "WAMP client can not connect to :"
+msgstr "WAMP client can not connect to :"
+
+#: ../runtime/WampClient.py:301
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
+#: ../Beremiz_service.py:628
msgid "WAMP client startup failed. "
msgstr "WAMP client startup failed. "
-#: ../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
+#: ../runtime/WampClient.py:206
+msgid "WAMP configuration error : missing '{}' parameter."
+msgstr "WAMP configuration error : missing '{}' parameter."
+
+#: ../runtime/WampClient.py:192
+msgid "WAMP configuration error:"
+msgstr "WAMP configuration error:"
+
+#: ../connectors/WAMP/__init__.py:100
#, python-format
msgid "WAMP connecting to URL : %s\n"
msgstr "WAMP connecting to URL : %s\n"
-#: ../connectors/WAMP/__init__.py:140
+#: ../connectors/WAMP/__init__.py:141
msgid "WAMP connection timeout"
msgstr "WAMP connection timeout"
-#: ../connectors/WAMP/__init__.py:158
+#: ../connectors/WAMP/__init__.py:159
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr "WAMP connection to '%s' failed.\n"
-#: ../Beremiz_service.py:595
+#: ../runtime/WampClient.py:280
+msgid "WAMP deactivated in configuration"
+msgstr "WAMP deactivated in configuration"
+
+#: ../Beremiz_service.py:605
msgid "WAMP import failed :"
msgstr "WAMP import failed :"
-#: ../runtime/WampClient.py:126
-msgid "WAMP load error: "
-msgstr "WAMP load error: "
-
-#: ../runtime/WampClient.py:108
+#: ../runtime/WampClient.py:241
+msgid "WAMP secret empty"
+msgstr "WAMP secret empty"
+
+#: ../runtime/WampClient.py:139
+#, python-format
+msgid "WAMP session joined (%s) by:"
+msgstr "WAMP session joined (%s) by:"
+
+#: ../runtime/WampClient.py:146
msgid "WAMP session left"
msgstr "WAMP session left"
@@ -3530,15 +4133,24 @@
msgid "WXGLADE GUI"
msgstr "WXGLADE GUI"
-#: ../runtime/WampClient.py:137
-msgid "Wamp secret load error:"
-msgstr "Wamp secret load error:"
-
-#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+#: ../runtime/WampClient.py:432
+msgid "Wamp Settings"
+msgstr "Wamp Settings"
+
+#: ../dialogs/PouDialog.py:172 ../editors/LDViewer.py:902
msgid "Warning"
msgstr "Warning"
-#: ../ProjectController.py:726
+#: ../etherlab/EthercatCFileGenerator.py:405
+#: ../etherlab/EthercatCFileGenerator.py:571
+msgid "Warning: "
+msgstr "Warning: "
+
+#: ../wxglade_hmi/wxglade_hmi.py:166
+msgid "Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n"
+msgstr "Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n"
+
+#: ../ProjectController.py:756
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr "Warnings in ST/IL/SFC code generator :\n"
@@ -3546,7 +4158,7 @@
msgid "Whole Project"
msgstr "Whole Project"
-#: ../controls/ProjectPropertiesPanel.py:134
+#: ../controls/ProjectPropertiesPanel.py:137
msgid "Width:"
msgstr "Width:"
@@ -3554,14 +4166,46 @@
msgid "Wrap search"
msgstr "Wrap search"
+#: ../etherlab/ConfigEditor.py:345
+msgid "Write to (nodeid, index, subindex)"
+msgstr "Write to (nodeid, index, subindex)"
+
#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr "Written by"
-#: ../features.py:35
+#: ../etherlab/EthercatCFileGenerator.py:409
+#: ../etherlab/EthercatCFileGenerator.py:499
+#, python-format
+msgid "Wrong direction for location \"%s\"!"
+msgstr "Wrong direction for location \"%s\"!"
+
+#: ../etherlab/EthercatCFileGenerator.py:400
+#: ../etherlab/EthercatCFileGenerator.py:487
+#, python-format
+msgid "Wrong type for location \"%s\"!"
+msgstr "Wrong type for location \"%s\"!"
+
+#: ../features.py:24
msgid "WxGlade GUI"
msgstr "WxGlade GUI"
+#: ../etherlab/ConfigEditor.py:1236
+msgid "XML files (*.xml)|*.xml|All files|*.*"
+msgstr "XML files (*.xml)|*.xml|All files|*.*"
+
+#: ../etherlab/EtherCATManagementEditor.py:652
+msgid "You can input only hex, dec value"
+msgstr "You can input only hex, dec value"
+
+#: ../etherlab/EtherCATManagementEditor.py:1999
+msgid "You can't modify it. This register is read-only or it's not connected."
+msgstr "You can't modify it. This register is read-only or it's not connected."
+
+#: ../etherlab/EtherCATManagementEditor.py:648
+msgid "You cannot SDO download this state"
+msgstr "You cannot SDO download this state"
+
#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
@@ -3570,7 +4214,7 @@
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
-#: ../wxglade_hmi/wxglade_hmi.py:160
+#: ../wxglade_hmi/wxglade_hmi.py:175
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
@@ -3578,7 +4222,11 @@
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
-#: ../ProjectController.py:390
+#: ../etherlab/EtherCATManagementEditor.py:2002
+msgid "You entered wrong value. You can enter dec or hex value only."
+msgstr "You entered wrong value. You can enter dec or hex value only."
+
+#: ../ProjectController.py:403
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3602,11 +4250,21 @@
msgid "You must type a value!"
msgstr "You must type a value!"
-#: ../IDEFrame.py:440
+#: ../IDEFrame.py:442
msgid "Zoom"
msgstr "Zoom"
-#: ../dialogs/DurationEditorDialog.py:158
+#: ../etherlab/EtherCATManagementEditor.py:911
+#: ../etherlab/EtherCATManagementEditor.py:1307
+msgid "bin files (*.bin)|*.bin"
+msgstr "bin files (*.bin)|*.bin"
+
+#: ../etherlab/EtherCATManagementEditor.py:942
+#: ../etherlab/EtherCATManagementEditor.py:1290
+msgid "bin files (*.bin)|*.bin|All files|*.*"
+msgstr "bin files (*.bin)|*.bin|All files|*.*"
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "days"
msgstr "days"
@@ -3620,35 +4278,39 @@
msgid "exited with status {a1} (pid {a2})\n"
msgstr "exited with status {a1} (pid {a2})\n"
-#: ../dialogs/PouDialog.py:36
+#: ../dialogs/PouDialog.py:110
msgid "function"
msgstr "function"
-#: ../dialogs/PouDialog.py:36
+#: ../dialogs/PouDialog.py:110
msgid "functionBlock"
msgstr "functionBlock"
-#: ../dialogs/DurationEditorDialog.py:158
+#: ../dialogs/DurationEditorDialog.py:159
msgid "hours"
msgstr "hours"
-#: ../ProjectController.py:753
+#: ../ProjectController.py:784
msgid "matiec installation is not found\n"
msgstr "matiec installation is not found\n"
-#: ../dialogs/DurationEditorDialog.py:160
+#: ../dialogs/DurationEditorDialog.py:162
+msgid "microseconds"
+msgstr "microseconds"
+
+#: ../dialogs/DurationEditorDialog.py:161
msgid "milliseconds"
msgstr "milliseconds"
-#: ../dialogs/DurationEditorDialog.py:159
+#: ../dialogs/DurationEditorDialog.py:160
msgid "minutes"
msgstr "minutes"
-#: ../dialogs/PouDialog.py:36
+#: ../dialogs/PouDialog.py:110
msgid "program"
msgstr "program"
-#: ../dialogs/DurationEditorDialog.py:159
+#: ../dialogs/DurationEditorDialog.py:160
msgid "seconds"
msgstr "seconds"
@@ -3664,6 +4326,10 @@
msgid "string right of"
msgstr "string right of"
+#: ../etherlab/EtherCATManagementEditor.py:323
+msgid "update"
+msgstr "update"
+
#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr "update info unavailable."
@@ -3718,6 +4384,33 @@
msgid "CAN_Driver"
msgstr "CAN_Driver"
+msgid "BACnetServerNode"
+msgstr "BACnetServerNode"
+
+msgid "Network_Interface"
+msgstr "Network_Interface"
+
+msgid "UDP_Port_Number"
+msgstr "UDP_Port_Number"
+
+msgid "BACnet_Communication_Control_Password"
+msgstr "BACnet_Communication_Control_Password"
+
+msgid "BACnet_Device_ID"
+msgstr "BACnet_Device_ID"
+
+msgid "BACnet_Device_Name"
+msgstr "BACnet_Device_Name"
+
+msgid "BACnet_Device_Location"
+msgstr "BACnet_Device_Location"
+
+msgid "BACnet_Device_Description"
+msgstr "BACnet_Device_Description"
+
+msgid "BACnet_Device_Application_Software_Version"
+msgstr "BACnet_Device_Application_Software_Version"
+
msgid "Generic"
msgstr "Generic"
@@ -3814,6 +4507,24 @@
msgid "MaxRemoteTCPclients"
msgstr "MaxRemoteTCPclients"
+msgid "CIA402SlaveParams"
+msgstr "CIA402SlaveParams"
+
+msgid "Enable%s"
+msgstr "Enable%s"
+
+msgid "ProcessVariables"
+msgstr "ProcessVariables"
+
+msgid "variable"
+msgstr "variable"
+
+msgid "ReadFrom"
+msgstr "ReadFrom"
+
+msgid "WriteTo"
+msgstr "WriteTo"
+
msgid "BaseParams"
msgstr "BaseParams"
@@ -3844,9 +4555,6 @@
msgid "variables"
msgstr "variables"
-msgid "variable"
-msgstr "variable"
-
msgid "name"
msgstr "name"
--- a/i18n/messages.pot Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/messages.pot Fri Nov 23 00:33:04 2018 +0100
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: Beremiz\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"POT-Creation-Date: 2018-10-03 14:20+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"
@@ -32,37 +32,46 @@
"Traceback:\n"
msgstr ""
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid " External"
msgstr ""
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:86
msgid " InOut"
msgstr ""
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:86
msgid " Input"
msgstr ""
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid " Local"
msgstr ""
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:86
msgid " Output"
msgstr ""
-#: ../controls/VariablePanel.py:91
+#: ../controls/VariablePanel.py:88
msgid " Temp"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
-#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
+#: ../etherlab/etherlab.py:301
+#, python-format
+msgid " (rev. %s)"
+msgstr ""
+
+#: ../etherlab/CommonEtherCATFunction.py:1599
+msgid " Warning..."
+msgstr ""
+
+#: ../dialogs/PouTransitionDialog.py:100 ../dialogs/ProjectDialog.py:72
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:157
#, python-format
msgid " and %s"
msgstr ""
-#: ../ProjectController.py:1182
+#: ../ProjectController.py:1236
msgid " generation failed !\n"
msgstr ""
@@ -86,7 +95,7 @@
msgid "\"%s\" can't use itself!"
msgstr ""
-#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
+#: ../IDEFrame.py:1705 ../IDEFrame.py:1724
#, python-format
msgid "\"%s\" config already exists!"
msgstr ""
@@ -101,32 +110,32 @@
msgid "\"%s\" configuration doesn't exist !!!"
msgstr ""
-#: ../IDEFrame.py:1638
+#: ../IDEFrame.py:1655
#, python-format
msgid "\"%s\" data type already exists!"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220
+#: ../dialogs/PouTransitionDialog.py:111 ../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
+#: ../controls/VariablePanel.py:424
#, python-format
msgid "\"%s\" element for this pou already exists!"
msgstr ""
-#: ../BeremizIDE.py:928
+#: ../BeremizIDE.py:925
#, python-format
msgid "\"%s\" folder is not a valid Beremiz project\n"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108
+#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:107
#: ../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
+#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:164
+#: ../etherlab/ConfigEditor.py:973 ../editors/ResourceEditor.py:481
+#: ../editors/ResourceEditor.py:518 ../editors/DataTypeEditor.py:571
+#: ../editors/DataTypeEditor.py:603 ../editors/CodeFileEditor.py:793
+#: ../controls/VariablePanel.py:798 ../IDEFrame.py:1646
#, python-format
msgid "\"%s\" is a keyword. It can't be used!"
msgstr ""
@@ -141,27 +150,28 @@
msgid "\"%s\" is not a valid folder!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106
+#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:105
#: ../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
+#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:162
+#: ../etherlab/ConfigEditor.py:971 ../editors/ResourceEditor.py:479
+#: ../editors/ResourceEditor.py:516 ../editors/DataTypeEditor.py:601
+#: ../editors/CodeFileEditor.py:791 ../controls/VariablePanel.py:796
+#: ../IDEFrame.py:1644
#, python-format
msgid "\"%s\" is not a valid identifier!"
msgstr ""
-#: ../IDEFrame.py:2436
+#: ../IDEFrame.py:2454
#, python-format
msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
msgstr ""
-#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131
+#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:166
#: ../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
+#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:363
+#: ../IDEFrame.py:1664
#, python-format
msgid "\"%s\" pou already exists!"
msgstr ""
@@ -188,7 +198,7 @@
"Right value must be greater than left value."
msgstr ""
-#: ../PLCGenerator.py:1133
+#: ../PLCGenerator.py:1182
#, python-brace-format
msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
msgstr ""
@@ -208,35 +218,35 @@
msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:559
#, python-format
msgid "%03gms"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:550
#, python-format
msgid "%dd"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:189
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:551
#, python-format
msgid "%dh"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:188
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:552
#, python-format
msgid "%dm"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:186
#, python-format
msgid "%dms"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:187
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:553
#, python-format
msgid "%ds"
msgstr ""
@@ -269,7 +279,12 @@
msgid "%s body don't have text!"
msgstr ""
-#: ../IDEFrame.py:388
+#: ../etherlab/ConfigEditor.py:856
+#, python-format
+msgid "%s's nodes"
+msgstr ""
+
+#: ../IDEFrame.py:391
msgid "&Add Element"
msgstr ""
@@ -278,35 +293,35 @@
msgid "&Close"
msgstr ""
-#: ../IDEFrame.py:361
+#: ../IDEFrame.py:364
msgid "&Configuration"
msgstr ""
-#: ../IDEFrame.py:350
+#: ../IDEFrame.py:353
msgid "&Data Type"
msgstr ""
-#: ../IDEFrame.py:392
+#: ../IDEFrame.py:395
msgid "&Delete"
msgstr ""
-#: ../IDEFrame.py:342
+#: ../IDEFrame.py:345
msgid "&Display"
msgstr ""
-#: ../IDEFrame.py:341
+#: ../IDEFrame.py:344
msgid "&Edit"
msgstr ""
-#: ../IDEFrame.py:340
+#: ../IDEFrame.py:343
msgid "&File"
msgstr ""
-#: ../IDEFrame.py:352
+#: ../IDEFrame.py:355
msgid "&Function"
msgstr ""
-#: ../IDEFrame.py:343
+#: ../IDEFrame.py:346
msgid "&Help"
msgstr ""
@@ -314,7 +329,7 @@
msgid "&License"
msgstr ""
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:359
msgid "&Program"
msgstr ""
@@ -326,10 +341,14 @@
msgid "&Recent Projects"
msgstr ""
-#: ../IDEFrame.py:358
+#: ../IDEFrame.py:361
msgid "&Resource"
msgstr ""
+#: ../etherlab/ConfigEditor.py:450
+msgid "'Read from' and 'Write to' variables types are not compatible"
+msgstr ""
+
#: ../controls/SearchResultPanel.py:247
#, python-brace-format
msgid "'{a1}' - {a2} match in project"
@@ -340,7 +359,7 @@
msgid "'{a1}' - {a2} matches in project"
msgstr ""
-#: ../connectors/PYRO/__init__.py:98
+#: ../connectors/PYRO/__init__.py:99
#, python-brace-format
msgid "'{a1}' is located at {a2}\n"
msgstr ""
@@ -350,8 +369,8 @@
msgid "(%d matches)"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
-#: ../dialogs/PouDialog.py:124
+#: ../dialogs/PouTransitionDialog.py:102 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:159
#, python-format
msgid ", %s"
msgstr ""
@@ -376,15 +395,15 @@
msgid "1s"
msgstr ""
-#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696
-#: ../IDEFrame.py:1715
+#: ../dialogs/PouDialog.py:168 ../IDEFrame.py:1667 ../IDEFrame.py:1713
+#: ../IDEFrame.py:1732
#, python-format
msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110
+#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:109
#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108
-#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677
+#: ../controls/VariablePanel.py:800 ../IDEFrame.py:1681 ../IDEFrame.py:1694
#, python-format
msgid "A POU named \"%s\" already exists!"
msgstr ""
@@ -394,21 +413,21 @@
msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:229
+#: ../dialogs/BrowseLocationsDialog.py:228
msgid "A location must be selected!"
msgstr ""
-#: ../editors/ResourceEditor.py:485
+#: ../editors/ResourceEditor.py:483
msgid "A task with the same name already exists!"
msgstr ""
-#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791
-#: ../IDEFrame.py:1666 ../IDEFrame.py:1679
+#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:802
+#: ../IDEFrame.py:1683 ../IDEFrame.py:1696
#, python-format
msgid "A variable with \"%s\" as name already exists in this pou!"
msgstr ""
-#: ../editors/CodeFileEditor.py:778
+#: ../editors/CodeFileEditor.py:797
#, python-format
msgid "A variable with \"%s\" as name already exists!"
msgstr ""
@@ -421,11 +440,15 @@
msgid "Absolute number"
msgstr ""
+#: ../etherlab/ConfigEditor.py:48
+msgid "Access"
+msgstr ""
+
#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
msgid "Action"
msgstr ""
-#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
+#: ../editors/Viewer.py:656 ../editors/Viewer.py:2429
msgid "Action Block"
msgstr ""
@@ -450,56 +473,64 @@
msgid "Actions:"
msgstr ""
-#: ../editors/Viewer.py:473
+#: ../editors/Viewer.py:484
msgid "Active"
msgstr ""
#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
-#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
+#: ../BeremizIDE.py:998 ../editors/Viewer.py:689
msgid "Add"
msgstr ""
-#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
+#: ../IDEFrame.py:1941 ../IDEFrame.py:1976
msgid "Add Action"
msgstr ""
-#: ../features.py:33
+#: ../features.py:22
msgid "Add C code accessing located variables synchronously"
msgstr ""
-#: ../IDEFrame.py:1907
+#: ../IDEFrame.py:1924
msgid "Add Configuration"
msgstr ""
-#: ../IDEFrame.py:1887
+#: ../IDEFrame.py:1904
msgid "Add DataType"
msgstr ""
-#: ../editors/Viewer.py:609
+#: ../editors/Viewer.py:612
msgid "Add Divergence Branch"
msgstr ""
+#: ../etherlab/EthercatMaster.py:297
+msgid "Add Ethercat Slave"
+msgstr ""
+
+#: ../etherlab/EthercatMaster.py:297
+msgid "Add Ethercat Slave to Master"
+msgstr ""
+
#: ../dialogs/DiscoveryDialog.py:121
msgid "Add IP"
msgstr ""
-#: ../IDEFrame.py:1895
+#: ../IDEFrame.py:1912
msgid "Add POU"
msgstr ""
-#: ../features.py:34
+#: ../features.py:23
msgid "Add Python code executed asynchronously"
msgstr ""
-#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
+#: ../IDEFrame.py:1952 ../IDEFrame.py:2002
msgid "Add Resource"
msgstr ""
-#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
+#: ../IDEFrame.py:1930 ../IDEFrame.py:1973
msgid "Add Transition"
msgstr ""
-#: ../editors/Viewer.py:596
+#: ../editors/Viewer.py:599
msgid "Add Wire Segment"
msgstr ""
@@ -507,7 +538,7 @@
msgid "Add a new initial step"
msgstr ""
-#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
+#: ../editors/Viewer.py:2790 ../editors/SFCViewer.py:784
msgid "Add a new jump"
msgstr ""
@@ -515,7 +546,7 @@
msgid "Add a new step"
msgstr ""
-#: ../features.py:35
+#: ../features.py:24
msgid "Add a simple WxGlade based GUI."
msgstr ""
@@ -527,22 +558,46 @@
msgid "Add element"
msgstr ""
-#: ../editors/ResourceEditor.py:283
+#: ../etherlab/ConfigEditor.py:1388
+msgid "Add file from ESI files database"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:1360
+msgid "Add file to project"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:281
msgid "Add instance"
msgstr ""
+#: ../etherlab/ConfigEditor.py:652
+msgid "Add process variable"
+msgstr ""
+
#: ../canfestival/NetworkEditor.py:110
msgid "Add slave"
msgstr ""
-#: ../editors/ResourceEditor.py:252
+#: ../etherlab/ConfigEditor.py:679
+msgid "Add startup service variable"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:250
msgid "Add task"
msgstr ""
-#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
+#: ../bacnet/BacnetSlaveEditor.py:811 ../editors/CodeFileEditor.py:672
+#: ../controls/VariablePanel.py:483
msgid "Add variable"
msgstr ""
+#: ../etherlab/etherlab.py:186
+msgid ""
+"Adding a PDO not defined in default configuration\n"
+"for mapping needed location variables\n"
+"(1 if possible)"
+msgstr ""
+
#: ../plcopen/iec_std.csv:33
msgid "Addition"
msgstr ""
@@ -551,27 +606,28 @@
msgid "Additional function blocks"
msgstr ""
-#: ../editors/Viewer.py:669
+#: ../editors/Viewer.py:672
msgid "Adjust Block Size"
msgstr ""
-#: ../editors/Viewer.py:1720
+#: ../editors/Viewer.py:1722
msgid "Alignment"
msgstr ""
#: ../dialogs/BrowseLocationsDialog.py:42
-#: ../dialogs/BrowseLocationsDialog.py:53
-#: ../dialogs/BrowseLocationsDialog.py:152
-#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307
-#: ../controls/VariablePanel.py:88
+#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:151
+#: ../dialogs/BrowseLocationsDialog.py:154 ../etherlab/ConfigEditor.py:65
+#: ../etherlab/ConfigEditor.py:853 ../controls/LogViewer.py:307
+#: ../controls/VariablePanel.py:85
msgid "All"
msgstr ""
-#: ../editors/FileManagementPanel.py:37
+#: ../editors/FileManagementPanel.py:51
msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
msgstr ""
-#: ../ProjectController.py:1670
+#: ../ProjectController.py:1752
msgid "Already connected. Please disconnect\n"
msgstr ""
@@ -584,6 +640,23 @@
msgid "An instance with the same name already exists!"
msgstr ""
+#: ../etherlab/ConfigEditor.py:975
+#, python-format
+msgid "An variable named \"%s\" already exists!"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:935
+msgid "Analog Input Objects"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:934
+msgid "Analog Output Objects"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:933
+msgid "Analog Value Objects"
+msgstr ""
+
#: ../dialogs/ConnectionDialog.py:103
msgid "Apply name modification to all continuations with the same name"
msgstr ""
@@ -605,7 +678,7 @@
msgstr ""
#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
-#: ../controls/VariablePanel.py:872
+#: ../controls/VariablePanel.py:883
msgid "Array"
msgstr ""
@@ -613,22 +686,34 @@
msgid "Assignment"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:226
+#: ../dialogs/FBDVariableDialog.py:227
msgid "At least a variable or an expression must be selected!"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:113
msgid "Author"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:108
+#: ../controls/ProjectPropertiesPanel.py:110
msgid "Author Name (optional):"
msgstr ""
+#: ../etherlab/EthercatCIA402Slave.py:125
+msgid "Axis Pos"
+msgstr ""
+
+#: ../etherlab/EthercatCIA402Slave.py:118
+msgid "Axis Ref"
+msgstr ""
+
#: ../dialogs/FindInPouDialog.py:80
msgid "Backward"
msgstr ""
+#: ../features.py:19
+msgid "Bacnet support"
+msgstr ""
+
#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
#, python-format
msgid "Bad location size : %s"
@@ -639,14 +724,30 @@
msgid "Base Type:"
msgstr ""
-#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:841
msgid "Base Types"
msgstr ""
-#: ../BeremizIDE.py:483
+#: ../BeremizIDE.py:479
msgid "Beremiz"
msgstr ""
+#: ../runtime/NevowServer.py:201
+msgid "Beremiz Runtime Settings"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:938
+msgid "Binary Input Objects"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:937
+msgid "Binary Output Objects"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:936
+msgid "Binary Value Objects"
+msgstr ""
+
#: ../plcopen/iec_std.csv:70
msgid "Binary selection (1 of 2)"
msgstr ""
@@ -675,7 +776,7 @@
msgid "Bitwise inverting"
msgstr ""
-#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
+#: ../editors/Viewer.py:624 ../editors/Viewer.py:2442
msgid "Block"
msgstr ""
@@ -687,11 +788,11 @@
msgid "Block name"
msgstr ""
-#: ../editors/Viewer.py:586
+#: ../editors/Viewer.py:589
msgid "Bottom"
msgstr ""
-#: ../ProjectController.py:1400
+#: ../runtime/PlcStatus.py:11
msgid "Broken"
msgstr ""
@@ -700,27 +801,27 @@
msgid "Browse %s values library"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:69
msgid "Browse Locations"
msgstr ""
-#: ../ProjectController.py:1815
+#: ../ProjectController.py:1898
msgid "Build"
msgstr ""
-#: ../ProjectController.py:1335
+#: ../ProjectController.py:1397
msgid "Build directory already clean\n"
msgstr ""
-#: ../ProjectController.py:1816
+#: ../ProjectController.py:1899
msgid "Build project into build folder"
msgstr ""
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1155
msgid "C Build crashed !\n"
msgstr ""
-#: ../ProjectController.py:1105
+#: ../ProjectController.py:1152
msgid "C Build failed.\n"
msgstr ""
@@ -728,7 +829,7 @@
msgid "C code"
msgstr ""
-#: ../ProjectController.py:1186
+#: ../ProjectController.py:1240
msgid "C code generated successfully.\n"
msgstr ""
@@ -741,7 +842,7 @@
msgid "C compilation of %s failed.\n"
msgstr ""
-#: ../features.py:33
+#: ../features.py:22
msgid "C extension"
msgstr ""
@@ -757,16 +858,20 @@
msgid "CANOpen slave"
msgstr ""
-#: ../features.py:31
+#: ../features.py:18
msgid "CANopen support"
msgstr ""
+#: ../etherlab/ConfigEditor.py:858
+msgid "CIA402 nodes"
+msgstr ""
+
#: ../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 ""
-#: ../controls/VariablePanel.py:291
+#: ../controls/VariablePanel.py:290
msgid "Can only give a location to local or global variables"
msgstr ""
@@ -775,7 +880,7 @@
msgid "Can't generate program to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:289
+#: ../controls/VariablePanel.py:288
msgid "Can't give a location to a function block instance"
msgstr ""
@@ -784,7 +889,7 @@
msgid "Can't save project to file %s!"
msgstr ""
-#: ../controls/VariablePanel.py:339
+#: ../controls/VariablePanel.py:338
msgid "Can't set an initial value to a function block instance"
msgstr ""
@@ -798,11 +903,11 @@
msgid "Cannot find lower free IEC channel than %d\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:139
+#: ../connectors/PYRO/__init__.py:140
msgid "Cannot get PLC status - connection failed.\n"
msgstr ""
-#: ../ProjectController.py:967
+#: ../ProjectController.py:1013
msgid "Cannot open/parse VARIABLES.csv!\n"
msgstr ""
@@ -811,7 +916,7 @@
msgid "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))"
msgstr ""
-#: ../ProjectController.py:1761
+#: ../ProjectController.py:1842
msgid "Cannot transfer while PLC is running. Stop it now?"
msgstr ""
@@ -819,27 +924,27 @@
msgid "Case sensitive"
msgstr ""
-#: ../editors/Viewer.py:581
+#: ../editors/Viewer.py:584
msgid "Center"
msgstr ""
-#: ../Beremiz_service.py:276
+#: ../Beremiz_service.py:289
msgid "Change IP of interface to bind"
msgstr ""
-#: ../Beremiz_service.py:275
+#: ../Beremiz_service.py:288
msgid "Change Name"
msgstr ""
-#: ../IDEFrame.py:1977
+#: ../IDEFrame.py:1994
msgid "Change POU Type To"
msgstr ""
-#: ../Beremiz_service.py:277
+#: ../Beremiz_service.py:290
msgid "Change Port Number"
msgstr ""
-#: ../Beremiz_service.py:278
+#: ../Beremiz_service.py:291
msgid "Change working directory"
msgstr ""
@@ -851,16 +956,21 @@
msgid "Choose a SVG file"
msgstr ""
-#: ../ProjectController.py:561
+#: ../etherlab/EtherCATManagementEditor.py:911
+#: ../etherlab/EtherCATManagementEditor.py:1306
+msgid "Choose a binary file"
+msgstr ""
+
+#: ../ProjectController.py:582
msgid "Choose a directory to save project"
msgstr ""
-#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
-#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
+#: ../canfestival/canfestival.py:171 ../bacnet/bacnet.py:434
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
msgid "Choose a file"
msgstr ""
-#: ../BeremizIDE.py:900
+#: ../BeremizIDE.py:897
msgid "Choose a project"
msgstr ""
@@ -869,19 +979,23 @@
msgid "Choose a value for %s:"
msgstr ""
-#: ../Beremiz_service.py:333
+#: ../Beremiz_service.py:346
msgid "Choose a working directory "
msgstr ""
-#: ../BeremizIDE.py:864
+#: ../etherlab/ConfigEditor.py:1234
+msgid "Choose an XML file"
+msgstr ""
+
+#: ../BeremizIDE.py:861
msgid "Choose an empty directory for new project"
msgstr ""
-#: ../ProjectController.py:468
+#: ../ProjectController.py:483
msgid "Chosen folder doesn't contain a program. It's not a valid project!"
msgstr ""
-#: ../ProjectController.py:435
+#: ../ProjectController.py:450
msgid "Chosen folder isn't empty. You can't use it for a new project!"
msgstr ""
@@ -889,15 +1003,15 @@
msgid "Class"
msgstr ""
-#: ../controls/VariablePanel.py:472
+#: ../controls/VariablePanel.py:474
msgid "Class Filter:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:74
+#: ../dialogs/FBDVariableDialog.py:75
msgid "Class:"
msgstr ""
-#: ../ProjectController.py:1821
+#: ../ProjectController.py:1904
msgid "Clean"
msgstr ""
@@ -905,32 +1019,33 @@
msgid "Clean log messages"
msgstr ""
-#: ../ProjectController.py:1822
+#: ../ProjectController.py:1905
msgid "Clean project build folder"
msgstr ""
-#: ../ProjectController.py:1332
+#: ../ProjectController.py:1394
msgid "Cleaning the build directory\n"
msgstr ""
-#: ../IDEFrame.py:437
+#: ../IDEFrame.py:439
msgid "Clear Errors"
msgstr ""
-#: ../editors/Viewer.py:680
+#: ../editors/Viewer.py:683
msgid "Clear Execution Order"
msgstr ""
#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
+#: ../etherlab/ConfigEditor.py:1361
msgid "Close"
msgstr ""
-#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
+#: ../BeremizIDE.py:623 ../PLCOpenEditor.py:183
msgid "Close Application"
msgstr ""
-#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
-#: ../IDEFrame.py:1040
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:562 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1053
msgid "Close Project"
msgstr ""
@@ -938,28 +1053,32 @@
msgid "Close Tab"
msgstr ""
-#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
+#: ../editors/Viewer.py:641 ../editors/Viewer.py:2450
msgid "Coil"
msgstr ""
-#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
+#: ../editors/Viewer.py:662 ../editors/LDViewer.py:517
msgid "Comment"
msgstr ""
+#: ../etherlab/ConfigEditor.py:66
+msgid "Communication Parameters"
+msgstr ""
+
#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
#: ../PLCOpenEditor.py:138
msgid "Community support"
msgstr ""
-#: ../dialogs/ProjectDialog.py:65
+#: ../dialogs/ProjectDialog.py:63
msgid "Company Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:106
+#: ../controls/ProjectPropertiesPanel.py:108
msgid "Company Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:107
+#: ../controls/ProjectPropertiesPanel.py:109
msgid "Company URL (optional):"
msgstr ""
@@ -967,7 +1086,7 @@
msgid "Comparison"
msgstr ""
-#: ../ProjectController.py:756
+#: ../ProjectController.py:787
msgid "Compiling IEC Program into C code...\n"
msgstr ""
@@ -993,25 +1112,25 @@
#: ../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
+#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:353
msgid "Confirm or change variable name"
msgstr ""
-#: ../ProjectController.py:1842
+#: ../ProjectController.py:1925
msgid "Connect"
msgstr ""
-#: ../ProjectController.py:1843
+#: ../ProjectController.py:1926
msgid "Connect to the target PLC"
msgstr ""
-#: ../ProjectController.py:1391
+#: ../ProjectController.py:1469
#, python-format
msgid "Connected to URI: %s"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
-#: ../editors/Viewer.py:2441
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:626
+#: ../editors/Viewer.py:2443
msgid "Connection"
msgstr ""
@@ -1019,25 +1138,25 @@
msgid "Connection Properties"
msgstr ""
-#: ../ProjectController.py:1691
+#: ../ProjectController.py:1773
msgid "Connection canceled!\n"
msgstr ""
-#: ../ProjectController.py:1714
+#: ../ProjectController.py:1797
#, python-format
msgid "Connection failed to %s!\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
+#: ../connectors/PYRO/__init__.py:124 ../connectors/WAMP/__init__.py:121
msgid "Connection lost!\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:110
+#: ../connectors/PYRO/__init__.py:111
#, python-format
msgid "Connection to '%s' failed.\n"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1678
msgid "Connector"
msgstr ""
@@ -1045,7 +1164,7 @@
msgid "Connectors:"
msgstr ""
-#: ../BeremizIDE.py:378
+#: ../BeremizIDE.py:374
msgid "Console"
msgstr ""
@@ -1053,18 +1172,22 @@
msgid "Constant"
msgstr ""
-#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
+#: ../editors/Viewer.py:637 ../editors/Viewer.py:2446
msgid "Contact"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:217
+#: ../controls/ProjectPropertiesPanel.py:219
msgid "Content Description (optional):"
msgstr ""
-#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1679
msgid "Continuation"
msgstr ""
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Control Byte"
+msgstr ""
+
#: ../plcopen/iec_std.csv:18
msgid "Conversion from BCD"
msgstr ""
@@ -1081,20 +1204,20 @@
msgid "Conversion to time-of-day"
msgstr ""
-#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
-#: ../IDEFrame.py:427
+#: ../editors/Viewer.py:698 ../controls/LogViewer.py:713 ../IDEFrame.py:375
+#: ../IDEFrame.py:428
msgid "Copy"
msgstr ""
-#: ../IDEFrame.py:1964
+#: ../IDEFrame.py:1981
msgid "Copy POU"
msgstr ""
-#: ../editors/FileManagementPanel.py:68
+#: ../editors/FileManagementPanel.py:67
msgid "Copy file from left folder to right"
msgstr ""
-#: ../editors/FileManagementPanel.py:67
+#: ../editors/FileManagementPanel.py:66
msgid "Copy file from right folder to left"
msgstr ""
@@ -1114,6 +1237,16 @@
msgid "Couldn't import old %s file."
msgstr ""
+#: ../etherlab/EthercatMaster.py:258
+#, python-format
+msgid "Couldn't load %s network configuration file."
+msgstr ""
+
+#: ../etherlab/EthercatMaster.py:279
+#, python-format
+msgid "Couldn't load %s network process variables file."
+msgstr ""
+
#: ../ConfigTreeNode.py:630
#, python-brace-format
msgid ""
@@ -1128,15 +1261,22 @@
" {a2}"
msgstr ""
+#: ../etherlab/etherlab.py:264
+#, python-brace-format
+msgid ""
+"Couldn't load {a1} XML file:\n"
+"{a2}"
+msgstr ""
+
#: ../PLCControler.py:552
msgid "Couldn't paste non-POU object."
msgstr ""
-#: ../ProjectController.py:1636
+#: ../ProjectController.py:1717
msgid "Couldn't start PLC !\n"
msgstr ""
-#: ../ProjectController.py:1644
+#: ../ProjectController.py:1725
msgid "Couldn't stop PLC !\n"
msgstr ""
@@ -1144,43 +1284,43 @@
msgid "Create HMI"
msgstr ""
-#: ../dialogs/PouDialog.py:54
+#: ../dialogs/PouDialog.py:48
msgid "Create a new POU"
msgstr ""
-#: ../dialogs/PouActionDialog.py:45
+#: ../dialogs/PouActionDialog.py:42
msgid "Create a new action"
msgstr ""
-#: ../IDEFrame.py:166
+#: ../IDEFrame.py:313
msgid "Create a new action block"
msgstr ""
-#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
+#: ../IDEFrame.py:262 ../IDEFrame.py:292 ../IDEFrame.py:325
msgid "Create a new block"
msgstr ""
-#: ../IDEFrame.py:139
+#: ../IDEFrame.py:286
msgid "Create a new branch"
msgstr ""
-#: ../IDEFrame.py:133
+#: ../IDEFrame.py:280
msgid "Create a new coil"
msgstr ""
-#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
+#: ../IDEFrame.py:256 ../IDEFrame.py:271 ../IDEFrame.py:301
msgid "Create a new comment"
msgstr ""
-#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
+#: ../IDEFrame.py:265 ../IDEFrame.py:295 ../IDEFrame.py:328
msgid "Create a new connection"
msgstr ""
-#: ../IDEFrame.py:136 ../IDEFrame.py:187
+#: ../IDEFrame.py:283 ../IDEFrame.py:334
msgid "Create a new contact"
msgstr ""
-#: ../IDEFrame.py:169
+#: ../IDEFrame.py:316
msgid "Create a new divergence"
msgstr ""
@@ -1188,43 +1328,55 @@
msgid "Create a new divergence or convergence"
msgstr ""
-#: ../IDEFrame.py:157
+#: ../IDEFrame.py:304
msgid "Create a new initial step"
msgstr ""
-#: ../IDEFrame.py:172
+#: ../IDEFrame.py:319
msgid "Create a new jump"
msgstr ""
-#: ../IDEFrame.py:127 ../IDEFrame.py:184
+#: ../IDEFrame.py:274 ../IDEFrame.py:331
msgid "Create a new power rail"
msgstr ""
-#: ../IDEFrame.py:130
+#: ../IDEFrame.py:277
msgid "Create a new rung"
msgstr ""
-#: ../IDEFrame.py:160
+#: ../IDEFrame.py:307
msgid "Create a new step"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
+#: ../dialogs/PouTransitionDialog.py:45 ../IDEFrame.py:310
msgid "Create a new transition"
msgstr ""
-#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
+#: ../IDEFrame.py:259 ../IDEFrame.py:289 ../IDEFrame.py:322
msgid "Create a new variable"
msgstr ""
+#: ../etherlab/etherlab.py:183
+msgid "Creating new PDO"
+msgstr ""
+
#: ../dialogs/AboutDialog.py:109
msgid "Credits"
msgstr ""
-#: ../Beremiz_service.py:424
+#: ../runtime/WampClient.py:400
+msgid "Current status"
+msgstr ""
+
+#: ../Beremiz_service.py:437
msgid "Current working directory :"
msgstr ""
-#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
+#: ../runtime/WampClient.py:161
+msgid "Custom protocol options failed :"
+msgstr ""
+
+#: ../editors/Viewer.py:697 ../IDEFrame.py:373 ../IDEFrame.py:427
msgid "Cut"
msgstr ""
@@ -1273,11 +1425,11 @@
msgid "Date subtraction"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:57
msgid "Days:"
msgstr ""
-#: ../ProjectController.py:1729
+#: ../ProjectController.py:1809
msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
msgstr ""
@@ -1285,42 +1437,51 @@
msgid "Debug instance"
msgstr ""
-#: ../editors/Viewer.py:490
+#: ../editors/Viewer.py:493
#, python-format
msgid "Debug: %s"
msgstr ""
-#: ../ProjectController.py:1471
+#: ../ProjectController.py:1548
#, python-format
msgid "Debug: Unknown variable '%s'\n"
msgstr ""
-#: ../ProjectController.py:1469
+#: ../ProjectController.py:1545
#, python-format
msgid "Debug: Unsupported type to debug '%s'\n"
msgstr ""
-#: ../IDEFrame.py:660
+#: ../IDEFrame.py:666
msgid "Debugger"
msgstr ""
-#: ../ProjectController.py:1726
+#: ../ProjectController.py:1805
msgid "Debugger ready\n"
msgstr ""
-#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Default Size"
+msgstr ""
+
+#: ../etherlab/EthercatCFileGenerator.py:174
+#, python-format
+msgid "Definition conflict for location \"%s\""
+msgstr ""
+
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:673 ../IDEFrame.py:2010
msgid "Delete"
msgstr ""
-#: ../editors/Viewer.py:610
+#: ../editors/Viewer.py:613
msgid "Delete Divergence Branch"
msgstr ""
-#: ../editors/FileManagementPanel.py:157
+#: ../etherlab/ConfigEditor.py:1261 ../editors/FileManagementPanel.py:156
msgid "Delete File"
msgstr ""
-#: ../editors/Viewer.py:597
+#: ../editors/Viewer.py:600
msgid "Delete Wire Segment"
msgstr ""
@@ -1336,11 +1497,12 @@
msgid "Derivation Type:"
msgstr ""
-#: ../editors/CodeFileEditor.py:735
+#: ../etherlab/ConfigEditor.py:346 ../etherlab/ConfigEditor.py:465
+#: ../editors/CodeFileEditor.py:754
msgid "Description"
msgstr ""
-#: ../controls/VariablePanel.py:463
+#: ../controls/VariablePanel.py:465
msgid "Description:"
msgstr ""
@@ -1352,7 +1514,7 @@
msgid "Direction"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:102
+#: ../dialogs/BrowseLocationsDialog.py:101
msgid "Direction:"
msgstr ""
@@ -1360,19 +1522,19 @@
msgid "Directly"
msgstr ""
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1938
msgid "Disconnect"
msgstr ""
-#: ../ProjectController.py:1856
+#: ../ProjectController.py:1939
msgid "Disconnect from PLC"
msgstr ""
-#: ../ProjectController.py:1401
+#: ../runtime/PlcStatus.py:14
msgid "Disconnected"
msgstr ""
-#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
+#: ../editors/Viewer.py:657 ../editors/Viewer.py:2438
msgid "Divergence"
msgstr ""
@@ -1380,7 +1542,7 @@
msgid "Division"
msgstr ""
-#: ../editors/FileManagementPanel.py:156
+#: ../etherlab/ConfigEditor.py:1260 ../editors/FileManagementPanel.py:155
#, python-format
msgid "Do you really want to delete the file '%s'?"
msgstr ""
@@ -1393,15 +1555,31 @@
msgid "Done"
msgstr ""
+#: ../runtime/WampClient.py:384
+msgid "Download"
+msgstr ""
+
#: ../dialogs/ActionBlockDialog.py:42
msgid "Duration"
msgstr ""
+#: ../bacnet/bacnet.py:437
+msgid "EDE files (*_EDE.csv)|*_EDE.csv|All files|*.*"
+msgstr ""
+
#: ../canfestival/canfestival.py:174
msgid "EDS files (*.eds)|*.eds|All files|*.*"
msgstr ""
-#: ../editors/Viewer.py:668
+#: ../etherlab/ConfigEditor.py:1342
+msgid "ESI Files Database management"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:1109
+msgid "ESI Files:"
+msgstr ""
+
+#: ../editors/Viewer.py:671
msgid "Edit Block"
msgstr ""
@@ -1413,7 +1591,7 @@
msgid "Edit Contact Values"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:62
+#: ../dialogs/DurationEditorDialog.py:54
msgid "Edit Duration"
msgstr ""
@@ -1433,11 +1611,11 @@
msgid "Edit array type properties"
msgstr ""
-#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
+#: ../dialogs/CommentEditDialog.py:53
msgid "Edit comment"
msgstr ""
-#: ../editors/FileManagementPanel.py:69
+#: ../editors/FileManagementPanel.py:68
msgid "Edit file"
msgstr ""
@@ -1445,11 +1623,11 @@
msgid "Edit item"
msgstr ""
-#: ../editors/Viewer.py:3059
+#: ../editors/Viewer.py:3058
msgid "Edit jump target"
msgstr ""
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1956
msgid "Edit raw IEC code added to code generated by PLCGenerator"
msgstr ""
@@ -1461,11 +1639,11 @@
msgid "Edit transition"
msgstr ""
-#: ../IDEFrame.py:632
+#: ../IDEFrame.py:638
msgid "Editor ToolBar"
msgstr ""
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1355
msgid "Editor selection"
msgstr ""
@@ -1473,7 +1651,7 @@
msgid "Elements :"
msgstr ""
-#: ../ProjectController.py:1399
+#: ../runtime/PlcStatus.py:15
msgid "Empty"
msgstr ""
@@ -1481,18 +1659,43 @@
msgid "Empty dimension isn't allowed."
msgstr ""
-#: ../Beremiz_service.py:341
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Enable"
+msgstr ""
+
+#: ../runtime/WampClient.py:410
+msgid "Enable WAMP connection"
+msgstr ""
+
+#: ../Beremiz_service.py:354
msgid "Enter a name "
msgstr ""
-#: ../Beremiz_service.py:326
+#: ../Beremiz_service.py:339
msgid "Enter a port number "
msgstr ""
-#: ../Beremiz_service.py:317
+#: ../etherlab/EtherCATManagementEditor.py:627
+msgid "Enter hex or dec value (if enter dec value, it automatically conversed hex value)"
+msgstr ""
+
+#: ../etherlab/EtherCATManagementEditor.py:1964
+msgid "Enter hex(0xnnnn) or dec(n) value"
+msgstr ""
+
+#: ../Beremiz_service.py:330
msgid "Enter the IP of the interface to bind"
msgstr ""
+#: ../etherlab/ConfigEditor.py:502
+msgid "Entry can't be write through SDO"
+msgstr ""
+
+#: ../etherlab/EthercatCFileGenerator.py:569
+#, python-brace-format
+msgid "Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}"
+msgstr ""
+
#: ../editors/DataTypeEditor.py:60
msgid "Enumerated"
msgstr ""
@@ -1503,42 +1706,45 @@
#: ../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/DurationEditorDialog.py:125
+#: ../dialogs/DurationEditorDialog.py:172 ../dialogs/PouTransitionDialog.py:113
+#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:78
#: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58
-#: ../dialogs/BrowseLocationsDialog.py:229
+#: ../dialogs/BrowseLocationsDialog.py:228
#: ../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
+#: ../dialogs/PouDialog.py:178 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324
+#: ../etherlab/ConfigEditor.py:458 ../etherlab/ConfigEditor.py:510
+#: ../etherlab/ConfigEditor.py:981 ../etherlab/ConfigEditor.py:1047
+#: ../etherlab/ConfigEditor.py:1246 ../etherlab/ConfigEditor.py:1314
+#: ../etherlab/EthercatMaster.py:463 ../editors/ResourceEditor.py:468
+#: ../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:779 ../ProjectController.py:404
+#: ../ProjectController.py:548 ../ProjectController.py:557
+#: ../controls/FolderTree.py:222 ../controls/ProjectPropertiesPanel.py:308
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:163
#: ../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
+#: ../controls/VariablePanel.py:430 ../controls/VariablePanel.py:784
+#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1049 ../IDEFrame.py:1667
+#: ../IDEFrame.py:1708 ../IDEFrame.py:1713 ../IDEFrame.py:1727
+#: ../IDEFrame.py:1732 ../Beremiz_service.py:234
msgid "Error"
msgstr ""
-#: ../ProjectController.py:811
+#: ../ProjectController.py:848
msgid "Error : At least one configuration and one resource must be declared in PLC !\n"
msgstr ""
-#: ../ProjectController.py:803
+#: ../ProjectController.py:838
#, python-format
msgid "Error : IEC to C compiler returned %d\n"
msgstr ""
-#: ../ProjectController.py:731
+#: ../ProjectController.py:762
#, python-format
msgid ""
"Error in ST/IL/SFC code generator :\n"
@@ -1550,7 +1756,17 @@
msgid "Error while saving \"%s\"\n"
msgstr ""
-#: ../canfestival/canfestival.py:179
+#: ../bacnet/bacnet.py:581
+#, python-brace-format
+msgid "Error: BACnet server '{a1}.x: {a2}' contains objects with duplicate object identifiers.\n"
+msgstr ""
+
+#: ../bacnet/bacnet.py:573
+#, python-brace-format
+msgid "Error: BACnet server '{a1}.x:{a2}' contains objects with duplicate object names.\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:179 ../bacnet/bacnet.py:444
msgid "Error: Export slave failed\n"
msgstr ""
@@ -1567,7 +1783,23 @@
msgid "Error: No PLC built\n"
msgstr ""
-#: ../ProjectController.py:1708
+#: ../etherlab/ConfigEditor.py:269
+msgid "EtherCAT Management"
+msgstr ""
+
+#: ../features.py:20
+msgid "EtherCAT master"
+msgstr ""
+
+#: ../etherlab/EthercatMaster.py:302
+msgid "Ethercat Slave Type"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:267
+msgid "Ethercat node"
+msgstr ""
+
+#: ../ProjectController.py:1791
#, python-format
msgid "Exception while connecting %s!\n"
msgstr ""
@@ -1576,11 +1808,11 @@
msgid "Execution Control:"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
+#: ../dialogs/FBDVariableDialog.py:85 ../dialogs/FBDBlockDialog.py:111
msgid "Execution Order:"
msgstr ""
-#: ../features.py:36
+#: ../features.py:25
msgid "Experimental web based HMI"
msgstr ""
@@ -1592,44 +1824,48 @@
msgid "Exponentiation"
msgstr ""
+#: ../bacnet/bacnet.py:156
+msgid "Export BACnet slave to EDE file"
+msgstr ""
+
#: ../canfestival/canfestival.py:186
msgid "Export CanOpen slave to EDS file"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
msgid "Export graph values to clipboard"
msgstr ""
-#: ../canfestival/canfestival.py:185
+#: ../canfestival/canfestival.py:185 ../bacnet/bacnet.py:155
msgid "Export slave"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:94
+#: ../dialogs/FBDVariableDialog.py:95
msgid "Expression:"
msgstr ""
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid "External"
msgstr ""
-#: ../ProjectController.py:826
+#: ../ProjectController.py:866
msgid "Extracting Located Variables...\n"
msgstr ""
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161
msgid "FBD"
msgstr ""
-#: ../ProjectController.py:1773
+#: ../ProjectController.py:1855
msgid "Failed : Must build before transfer.\n"
msgstr ""
-#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:559
msgid "Falling Edge"
msgstr ""
-#: ../ProjectController.py:1098
+#: ../ProjectController.py:1145
msgid "Fatal : cannot get builder.\n"
msgstr ""
@@ -1638,12 +1874,12 @@
msgid "Fetching %s"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:167
+#: ../dialogs/DurationEditorDialog.py:169
#, python-format
msgid "Field %s hasn't a valid value!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:169
+#: ../dialogs/DurationEditorDialog.py:171
#, python-format
msgid "Fields %s haven't a valid value!"
msgstr ""
@@ -1653,16 +1889,20 @@
msgid "File '%s' already exists!"
msgstr ""
+#: ../runtime/WampClient.py:407
+msgid "File containing secret for that ID"
+msgstr ""
+
#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
-#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:380
msgid "Find"
msgstr ""
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:382
msgid "Find Next"
msgstr ""
-#: ../IDEFrame.py:381
+#: ../IDEFrame.py:384
msgid "Find Previous"
msgstr ""
@@ -1674,7 +1914,7 @@
msgid "Find:"
msgstr ""
-#: ../editors/Viewer.py:1633
+#: ../editors/Viewer.py:1635
msgid "Force value"
msgstr ""
@@ -1682,9 +1922,9 @@
msgid "Forcing Variable Value"
msgstr ""
-#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104
-#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102
-#: ../dialogs/PouDialog.py:125
+#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:103
+#: ../dialogs/ProjectDialog.py:77 ../dialogs/PouActionDialog.py:102
+#: ../dialogs/PouDialog.py:160
#, python-format
msgid "Form isn't complete. %s must be filled!"
msgstr ""
@@ -1702,20 +1942,24 @@
msgid "Forward"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
+#: ../IDEFrame.py:455
+msgid "Full screen"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1797
msgid "Function"
msgstr ""
-#: ../IDEFrame.py:354
+#: ../IDEFrame.py:357
msgid "Function &Block"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
-#: ../IDEFrame.py:1972
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1796
+#: ../IDEFrame.py:1989
msgid "Function Block"
msgstr ""
-#: ../controls/VariablePanel.py:868
+#: ../controls/VariablePanel.py:879
msgid "Function Block Types"
msgstr ""
@@ -1740,19 +1984,19 @@
msgid "Generate Program"
msgstr ""
-#: ../ProjectController.py:722
+#: ../ProjectController.py:750
msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
msgstr ""
-#: ../controls/VariablePanel.py:91
+#: ../controls/VariablePanel.py:88
msgid "Global"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
msgid "Go to current value"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:189
+#: ../controls/ProjectPropertiesPanel.py:192
msgid "Graphics"
msgstr ""
@@ -1764,32 +2008,36 @@
msgid "Greater than or equal to"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:149
+#: ../controls/ProjectPropertiesPanel.py:152
msgid "Grid Resolution:"
msgstr ""
-#: ../runtime/NevowServer.py:192
+#: ../runtime/NevowServer.py:313
msgid "HTTP interface port :"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:138
msgid "Height:"
msgstr ""
-#: ../editors/FileManagementPanel.py:89
+#: ../editors/FileManagementPanel.py:88
msgid "Home Directory:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:165
+#: ../controls/ProjectPropertiesPanel.py:168
msgid "Horizontal:"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:58
msgid "Hours:"
msgstr ""
+#: ../runtime/WampClient.py:404
+msgid "ID"
+msgstr ""
+
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44
+#: ../dialogs/PouDialog.py:128
msgid "IL"
msgstr ""
@@ -1797,52 +2045,64 @@
msgid "IP"
msgstr ""
-#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
+#: ../Beremiz_service.py:331 ../Beremiz_service.py:333
msgid "IP is not valid!"
msgstr ""
+#: ../etherlab/ConfigEditor.py:1387
+msgid "Import ESI file"
+msgstr ""
+
#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
msgid "Import SVG"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
-#: ../controls/VariablePanel.py:89
+#: ../etherlab/ConfigEditor.py:1352
+msgid "Import file to ESI files database"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:64 ../editors/Viewer.py:1664
+#: ../controls/VariablePanel.py:86
msgid "InOut"
msgstr ""
-#: ../PLCGenerator.py:1040
+#: ../PLCGenerator.py:1089
#, python-brace-format
msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
msgstr ""
-#: ../editors/Viewer.py:473
+#: ../editors/Viewer.py:484
msgid "Inactive"
msgstr ""
-#: ../controls/VariablePanel.py:300
+#: ../controls/VariablePanel.py:299
#, python-brace-format
msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
msgstr ""
-#: ../controls/VariablePanel.py:306
+#: ../controls/VariablePanel.py:305
#, python-format
msgid "Incompatible size of data between \"%s\" and \"BOOL\""
msgstr ""
-#: ../controls/VariablePanel.py:310
+#: ../controls/VariablePanel.py:309
#, python-brace-format
msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
msgstr ""
+#: ../etherlab/ConfigEditor.py:48 ../etherlab/ConfigEditor.py:465
+msgid "Index"
+msgstr ""
+
#: ../dialogs/ActionBlockDialog.py:42
msgid "Indicator"
msgstr ""
-#: ../editors/CodeFileEditor.py:734
+#: ../editors/CodeFileEditor.py:753
msgid "Initial"
msgstr ""
-#: ../editors/Viewer.py:650
+#: ../editors/Viewer.py:653
msgid "Initial Step"
msgstr ""
@@ -1855,6 +2115,14 @@
msgid "Initial Value:"
msgstr ""
+#: ../etherlab/EthercatCIA402Slave.py:119
+msgid "Initiate Drag'n drop of Axis ref located variable"
+msgstr ""
+
+#: ../etherlab/EthercatCIA402Slave.py:126
+msgid "Initiate Drag'n drop of Network position located variable"
+msgstr ""
+
#: ../svgui/svgui.py:56
msgid "Inkscape"
msgstr ""
@@ -1863,11 +2131,11 @@
msgid "Inline"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40
+#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:63
#: ../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
+#: ../editors/Viewer.py:1662 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86
+#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379
msgid "Input"
msgstr ""
@@ -1884,11 +2152,11 @@
msgid "Instance with id %d doesn't exist!"
msgstr ""
-#: ../editors/ResourceEditor.py:279
+#: ../editors/ResourceEditor.py:277
msgid "Instances:"
msgstr ""
-#: ../controls/VariablePanel.py:88
+#: ../controls/VariablePanel.py:85
msgid "Interface"
msgstr ""
@@ -1900,7 +2168,7 @@
msgid "Interval"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:304
+#: ../controls/ProjectPropertiesPanel.py:306
msgid ""
"Invalid URL!\n"
"Please enter correct URL address."
@@ -1920,14 +2188,26 @@
msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:129
#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93
#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162
#, python-format
msgid "Invalid value \"%s\" for debug variable"
msgstr ""
-#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
+#: ../etherlab/ConfigEditor.py:418 ../etherlab/ConfigEditor.py:421
+#: ../etherlab/ConfigEditor.py:452
+#, python-format
+msgid "Invalid value \"%s\" for process variable"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:480 ../etherlab/ConfigEditor.py:483
+#: ../etherlab/ConfigEditor.py:504
+#, python-format
+msgid "Invalid value \"%s\" for startup command"
+msgstr ""
+
+#: ../controls/VariablePanel.py:278 ../controls/VariablePanel.py:281
#, python-format
msgid "Invalid value \"%s\" for variable grid element"
msgstr ""
@@ -1942,7 +2222,12 @@
msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:124
+#: ../etherlab/CommonEtherCATFunction.py:31
+#, python-format
+msgid "Invalid value for HexDecValue \"%s\""
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:125
msgid ""
"Invalid value!\n"
"You must fill a numeric value."
@@ -1952,12 +2237,12 @@
msgid "Is connection secure?"
msgstr ""
-#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
+#: ../editors/Viewer.py:658 ../editors/Viewer.py:2427
msgid "Jump"
msgstr ""
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161
msgid "LD"
msgstr ""
@@ -1966,33 +2251,33 @@
msgid "Ladder element with id %d is on more than one rung."
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91
-#: ../dialogs/PouDialog.py:113
+#: ../dialogs/PouTransitionDialog.py:92 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:148
msgid "Language"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:206
+#: ../controls/ProjectPropertiesPanel.py:208
msgid "Language (optional):"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
-#: ../dialogs/PouDialog.py:81
+#: ../dialogs/PouTransitionDialog.py:66 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:79
msgid "Language:"
msgstr ""
-#: ../ProjectController.py:1779
+#: ../ProjectController.py:1861
msgid "Latest build already matches current target. Transfering anyway...\n"
msgstr ""
-#: ../Beremiz_service.py:281
+#: ../Beremiz_service.py:294
msgid "Launch WX GUI inspector"
msgstr ""
-#: ../Beremiz_service.py:280
+#: ../Beremiz_service.py:293
msgid "Launch a live Python shell"
msgstr ""
-#: ../editors/Viewer.py:580
+#: ../editors/Viewer.py:583
msgid "Left"
msgstr ""
@@ -2012,7 +2297,7 @@
msgid "Less than or equal to"
msgstr ""
-#: ../IDEFrame.py:652
+#: ../IDEFrame.py:658
msgid "Library"
msgstr ""
@@ -2028,7 +2313,7 @@
msgid "Linking :\n"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:87
msgid "Local"
msgstr ""
@@ -2036,7 +2321,7 @@
msgid "Local entries"
msgstr ""
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1767
msgid "Local service discovery failed!\n"
msgstr ""
@@ -2044,28 +2329,44 @@
msgid "Location"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:79
+#: ../dialogs/BrowseLocationsDialog.py:78
msgid "Locations available:"
msgstr ""
+#: ../runtime/NevowServer.py:175
+msgid "Log message level"
+msgstr ""
+
#: ../plcopen/iec_std.csv:25
msgid "Logarithm to base 10"
msgstr ""
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:103
#, python-format
msgid "MDNS resolution failure for '%s'\n"
msgstr ""
+#: ../etherlab/ConfigEditor.py:67
+msgid "Manufacturer Specific"
+msgstr ""
+
#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
msgid "Map Variable"
msgstr ""
-#: ../features.py:31
+#: ../features.py:19
+msgid "Map located variables over Bacnet"
+msgstr ""
+
+#: ../features.py:18
msgid "Map located variables over CANopen"
msgstr ""
-#: ../features.py:32
+#: ../features.py:20
+msgid "Map located variables over EtherCAT"
+msgstr ""
+
+#: ../features.py:21
msgid "Map located variables over Modbus"
msgstr ""
@@ -2073,11 +2374,25 @@
msgid "Master"
msgstr ""
+#: ../etherlab/ConfigEditor.py:613
+msgid "Master State"
+msgstr ""
+
#: ../ConfigTreeNode.py:544
#, python-brace-format
msgid "Max count ({a1}) reached for this confnode of type {a2} "
msgstr ""
+#: ../etherlab/etherlab.py:173
+msgid "Max entries by PDO"
+msgstr ""
+
+#: ../etherlab/etherlab.py:176
+msgid ""
+"Maximal number of entries mapped in a PDO\n"
+"including empty entries used for PDO alignment"
+msgstr ""
+
#: ../plcopen/iec_std.csv:71
msgid "Maximum"
msgstr ""
@@ -2088,26 +2403,34 @@
#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333
#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103
-#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
+#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379
msgid "Memory"
msgstr ""
-#: ../IDEFrame.py:617
+#: ../IDEFrame.py:623
msgid "Menu ToolBar"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:51
+#: ../runtime/NevowServer.py:176
+msgid "Message text"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:62
msgid "Microseconds:"
msgstr ""
-#: ../editors/Viewer.py:585
+#: ../editors/Viewer.py:588
msgid "Middle"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:50
+#: ../dialogs/DurationEditorDialog.py:61
msgid "Milliseconds:"
msgstr ""
+#: ../etherlab/etherlab.py:167
+msgid "Minimal size in bits between 2 pdo entries"
+msgstr ""
+
#: ../plcopen/iec_std.csv:72
msgid "Minimum"
msgstr ""
@@ -2116,15 +2439,15 @@
msgid "Minimum:"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:59
msgid "Minutes:"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:231
+#: ../etherlab/etherlab.py:238 ../controls/ProjectPropertiesPanel.py:233
msgid "Miscellaneous"
msgstr ""
-#: ../features.py:32
+#: ../features.py:21
msgid "Modbus support"
msgstr ""
@@ -2132,7 +2455,20 @@
msgid "Modifier:"
msgstr ""
-#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269
+#: ../etherlab/ConfigEditor.py:1313
+#, python-format
+msgid "Module %s must be an integer!"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:1376
+msgid "Modules Library"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:1145
+msgid "Modules library:"
+msgstr ""
+
+#: ../PLCGenerator.py:795 ../PLCGenerator.py:1318
#, python-brace-format
msgid "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
msgstr ""
@@ -2157,23 +2493,31 @@
msgid "Move element up"
msgstr ""
-#: ../editors/ResourceEditor.py:286
+#: ../editors/ResourceEditor.py:284
msgid "Move instance down"
msgstr ""
-#: ../editors/ResourceEditor.py:285
+#: ../editors/ResourceEditor.py:283
msgid "Move instance up"
msgstr ""
-#: ../editors/ResourceEditor.py:255
+#: ../etherlab/ConfigEditor.py:655
+msgid "Move process variable down"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:654
+msgid "Move process variable up"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:253
msgid "Move task down"
msgstr ""
-#: ../editors/ResourceEditor.py:254
+#: ../editors/ResourceEditor.py:252
msgid "Move task up"
msgstr ""
-#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
+#: ../IDEFrame.py:253 ../IDEFrame.py:268 ../IDEFrame.py:298 ../IDEFrame.py:339
msgid "Move the view"
msgstr ""
@@ -2181,14 +2525,28 @@
msgid "Move up"
msgstr ""
-#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
+#: ../bacnet/BacnetSlaveEditor.py:814 ../editors/CodeFileEditor.py:675
+#: ../controls/VariablePanel.py:486
msgid "Move variable down"
msgstr ""
-#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
+#: ../bacnet/BacnetSlaveEditor.py:813 ../editors/CodeFileEditor.py:674
+#: ../controls/VariablePanel.py:485
msgid "Move variable up"
msgstr ""
+#: ../bacnet/BacnetSlaveEditor.py:941
+msgid "Multi-State Input Objects"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:940
+msgid "Multi-State Output Objects"
+msgstr ""
+
+#: ../bacnet/BacnetSlaveEditor.py:939
+msgid "Multi-State Value Objects"
+msgstr ""
+
#: ../plcopen/iec_std.csv:74
msgid "Multiplexer (select 1 of N)"
msgstr ""
@@ -2197,7 +2555,7 @@
msgid "Multiplication"
msgstr ""
-#: ../editors/FileManagementPanel.py:87
+#: ../editors/FileManagementPanel.py:86
msgid "My Computer:"
msgstr ""
@@ -2205,13 +2563,15 @@
msgid "NAME"
msgstr ""
-#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
-#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../etherlab/EtherCATManagementEditor.py:37 ../etherlab/ConfigEditor.py:48
+#: ../etherlab/ConfigEditor.py:343 ../etherlab/ConfigEditor.py:1167
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:94
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:751
#: ../controls/VariablePanel.py:59
msgid "Name"
msgstr ""
-#: ../Beremiz_service.py:342
+#: ../Beremiz_service.py:355
msgid "Name must not be null!"
msgstr ""
@@ -2224,15 +2584,19 @@
msgid "Natural logarithm"
msgstr ""
-#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:557
msgid "Negated"
msgstr ""
-#: ../Beremiz_service.py:610
+#: ../etherlab/ConfigEditor.py:612
+msgid "Network"
+msgstr ""
+
+#: ../Beremiz_service.py:620
msgid "Nevow Web service failed. "
msgstr ""
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:596
msgid "Nevow/Athena import failed :"
msgstr ""
@@ -2245,20 +2609,29 @@
msgid "New item"
msgstr ""
-#: ../editors/Viewer.py:553
+#: ../editors/Viewer.py:556
msgid "No Modifier"
msgstr ""
-#: ../ProjectController.py:1808
+#: ../ProjectController.py:1891
msgid "No PLC to transfer (did build succeed ?)\n"
msgstr ""
-#: ../PLCGenerator.py:1678
+#: ../etherlab/EthercatCFileGenerator.py:504
+#, python-format
+msgid "No Sync manager defined for %s!"
+msgstr ""
+
+#: ../PLCGenerator.py:1727
#, python-format
msgid "No body defined in \"%s\" POU"
msgstr ""
-#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
+#: ../etherlab/CommonEtherCATFunction.py:1581
+msgid "No connected slaves"
+msgstr ""
+
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1330
#, python-brace-format
msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
msgstr ""
@@ -2274,7 +2647,17 @@
msgid "No informations found for \"%s\" block"
msgstr ""
-#: ../PLCGenerator.py:1232
+#: ../etherlab/EthercatCFileGenerator.py:224
+#, python-format
+msgid "No informations found for device %s!"
+msgstr ""
+
+#: ../etherlab/EthercatCFileGenerator.py:515
+#, python-format
+msgid "No more free PDO index available for %s!"
+msgstr ""
+
+#: ../PLCGenerator.py:1281
#, python-brace-format
msgid "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken"
msgstr ""
@@ -2283,11 +2666,21 @@
msgid "No search results available."
msgstr ""
+#: ../etherlab/ConfigEditor.py:1029
+#, python-format
+msgid "No slave defined at position %d!"
+msgstr ""
+
#: ../svgui/svgui.py:142
#, python-format
msgid "No such SVG file: %s\n"
msgstr ""
+#: ../etherlab/ConfigEditor.py:1245
+#, python-format
+msgid "No such XML file: %s\n"
+msgstr ""
+
#: ../canfestival/config_utils.py:682
#, python-brace-format
msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
@@ -2298,15 +2691,33 @@
msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
msgstr ""
+#: ../etherlab/EthercatCFileGenerator.py:438
+#, python-format
+msgid "No sync manager available for %s pdo!"
+msgstr ""
+
#: ../dialogs/BrowseValuesLibraryDialog.py:87
msgid "No valid value selected!"
msgstr ""
-#: ../PLCGenerator.py:1676
+#: ../PLCGenerator.py:1725
#, python-format
msgid "No variable defined in \"%s\" POU"
msgstr ""
+#: ../etherlab/ConfigEditor.py:606
+#, python-format
+msgid "Node Position: %d"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:697
+msgid "Node filter:"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:717
+msgid "Nodes variables filter:"
+msgstr ""
+
#: ../canfestival/config_utils.py:379
#, python-brace-format
msgid "Non existing node ID : {a1} (variable {a2})"
@@ -2329,6 +2740,10 @@
msgid "Not equal to"
msgstr ""
+#: ../etherlab/EtherCATManagementEditor.py:361
+msgid "Now Uploading..."
+msgstr ""
+
#: ../dialogs/SFCDivergenceDialog.py:91
msgid "Number of sequences:"
msgstr ""
@@ -2337,7 +2752,11 @@
msgid "Numerical"
msgstr ""
-#: ../editors/CodeFileEditor.py:736
+#: ../bacnet/BacnetSlaveEditor.py:808
+msgid "Object Properties:"
+msgstr ""
+
+#: ../editors/CodeFileEditor.py:755
msgid "OnChange"
msgstr ""
@@ -2354,15 +2773,15 @@
msgid "Open Inkscape"
msgstr ""
-#: ../version.py:86
+#: ../version.py:88
msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
msgstr ""
-#: ../ProjectController.py:1879
+#: ../ProjectController.py:1962
msgid "Open a file explorer to manage project files"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:161
+#: ../wxglade_hmi/wxglade_hmi.py:176
msgid "Open wxGlade"
msgstr ""
@@ -2370,11 +2789,11 @@
msgid "Option"
msgstr ""
-#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:756
msgid "Options"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:109
+#: ../controls/ProjectPropertiesPanel.py:111
msgid "Organization (optional):"
msgstr ""
@@ -2382,14 +2801,19 @@
msgid "Other Profile"
msgstr ""
-#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42
+#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:65
#: ../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
+#: ../editors/Viewer.py:1663 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:86
+#: ../controls/VariablePanel.py:316 ../controls/VariablePanel.py:379
msgid "Output"
msgstr ""
+#: ../etherlab/EthercatCFileGenerator.py:170
+#, python-brace-format
+msgid "Output variables can't be defined with different locations ({a1} and {a2})"
+msgstr ""
+
#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
msgid "PDO Receive"
msgstr ""
@@ -2398,26 +2822,39 @@
msgid "PDO Transmit"
msgstr ""
+#: ../etherlab/etherlab.py:164
+msgid "PDO alignment"
+msgstr ""
+
#: ../targets/toolchain_gcc.py:174
msgid "PLC :\n"
msgstr ""
-#: ../BeremizIDE.py:383
+#: ../BeremizIDE.py:379
msgid "PLC Log"
msgstr ""
-#: ../ProjectController.py:1082
+#: ../ProjectController.py:1129
msgid "PLC code generation failed !\n"
msgstr ""
-#: ../Beremiz_service.py:305
+#: ../etherlab/EtherCATManagementEditor.py:250
+msgid "PLC is Not Started"
+msgstr ""
+
+#: ../Beremiz_service.py:318
msgid "PLC is empty or already started."
msgstr ""
-#: ../Beremiz_service.py:312
+#: ../Beremiz_service.py:325
msgid "PLC is not started."
msgstr ""
+#: ../etherlab/EtherCATManagementEditor.py:2160
+#: ../etherlab/CommonEtherCATFunction.py:1589
+msgid "PLC not connected!"
+msgstr ""
+
#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
#, python-brace-format
msgid ""
@@ -2444,28 +2881,28 @@
msgid "PORT"
msgstr ""
-#: ../dialogs/PouDialog.py:109
+#: ../dialogs/PouDialog.py:144
msgid "POU Name"
msgstr ""
-#: ../dialogs/PouDialog.py:66
+#: ../dialogs/PouDialog.py:64
msgid "POU Name:"
msgstr ""
-#: ../dialogs/PouDialog.py:111
+#: ../dialogs/PouDialog.py:146
msgid "POU Type"
msgstr ""
-#: ../dialogs/PouDialog.py:73
+#: ../dialogs/PouDialog.py:71
msgid "POU Type:"
msgstr ""
-#: ../connectors/PYRO/__init__.py:52
+#: ../connectors/PYRO/__init__.py:53
#, python-format
msgid "PYRO connecting to URI : %s\n"
msgstr ""
-#: ../connectors/PYRO/__init__.py:68
+#: ../connectors/PYRO/__init__.py:69
#, python-format
msgid "PYRO using certificates in '%s' \n"
msgstr ""
@@ -2474,11 +2911,11 @@
msgid "Page Setup"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:124
+#: ../controls/ProjectPropertiesPanel.py:127
msgid "Page Size (optional):"
msgstr ""
-#: ../IDEFrame.py:2640
+#: ../IDEFrame.py:2660
#, python-format
msgid "Page: %d"
msgstr ""
@@ -2487,11 +2924,11 @@
msgid "Parent instance"
msgstr ""
-#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
+#: ../editors/Viewer.py:699 ../IDEFrame.py:377 ../IDEFrame.py:429
msgid "Paste"
msgstr ""
-#: ../IDEFrame.py:1899
+#: ../IDEFrame.py:1916
msgid "Paste POU"
msgstr ""
@@ -2503,7 +2940,11 @@
msgid "Pin number:"
msgstr ""
-#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../runtime/NevowServer.py:163
+msgid "Platform"
+msgstr ""
+
+#: ../editors/Viewer.py:2791 ../editors/Viewer.py:3059
#: ../editors/SFCViewer.py:785
msgid "Please choose a target"
msgstr ""
@@ -2512,7 +2953,7 @@
msgid "Please enter a block name"
msgstr ""
-#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
+#: ../dialogs/CommentEditDialog.py:52
msgid "Please enter comment text"
msgstr ""
@@ -2521,7 +2962,8 @@
msgid "Please enter step name"
msgstr ""
-#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
+#: ../dialogs/SFCStepNameDialog.py:37 ../dialogs/PouNameDialog.py:37
+#: ../Beremiz_service.py:222
msgid "Please enter text"
msgstr ""
@@ -2530,15 +2972,19 @@
msgid "Please enter value for a \"%s\" variable:"
msgstr ""
-#: ../Beremiz_service.py:327
+#: ../Beremiz_service.py:340
msgid "Port number must be 0 <= port <= 65535!"
msgstr ""
-#: ../Beremiz_service.py:327
+#: ../Beremiz_service.py:340
msgid "Port number must be an integer!"
msgstr ""
-#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
+#: ../etherlab/ConfigEditor.py:47 ../etherlab/ConfigEditor.py:465
+msgid "Position"
+msgstr ""
+
+#: ../editors/Viewer.py:636 ../editors/Viewer.py:2451
msgid "Power Rail"
msgstr ""
@@ -2559,7 +3005,7 @@
msgid "Print"
msgstr ""
-#: ../IDEFrame.py:1110
+#: ../IDEFrame.py:1123
msgid "Print preview"
msgstr ""
@@ -2571,33 +3017,37 @@
msgid "Priority:"
msgstr ""
-#: ../runtime/PLCObject.py:518
+#: ../runtime/PLCObject.py:523
#, python-format
msgid "Problem starting PLC : error %d"
msgstr ""
-#: ../dialogs/ProjectDialog.py:63
+#: ../etherlab/ConfigEditor.py:647
+msgid "Process variables mapped between nodes:"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:61
msgid "Product Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:90
+#: ../controls/ProjectPropertiesPanel.py:91
msgid "Product Name (required):"
msgstr ""
+#: ../controls/ProjectPropertiesPanel.py:93
+msgid "Product Release (optional):"
+msgstr ""
+
+#: ../dialogs/ProjectDialog.py:62
+msgid "Product Version"
+msgstr ""
+
#: ../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
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1795
+#: ../IDEFrame.py:1992
msgid "Program"
msgstr ""
@@ -2613,7 +3063,7 @@
msgid "Programs can't be used by other POUs!"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
+#: ../controls/ProjectPropertiesPanel.py:95 ../IDEFrame.py:607
msgid "Project"
msgstr ""
@@ -2622,19 +3072,19 @@
msgid "Project '%s':"
msgstr ""
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1961
msgid "Project Files"
msgstr ""
-#: ../dialogs/ProjectDialog.py:62
+#: ../dialogs/ProjectDialog.py:60
msgid "Project Name"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:88
+#: ../controls/ProjectPropertiesPanel.py:89
msgid "Project Name (required):"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:89
+#: ../controls/ProjectPropertiesPanel.py:90
msgid "Project Version (optional):"
msgstr ""
@@ -2661,16 +3111,16 @@
msgid "Properties"
msgstr ""
-#: ../Beremiz_service.py:427
+#: ../Beremiz_service.py:440
msgid "Publishing service on local network"
msgstr ""
-#: ../connectors/PYRO/__init__.py:126
+#: ../connectors/PYRO/__init__.py:127
#, python-format
msgid "Pyro exception: %s\n"
msgstr ""
-#: ../Beremiz_service.py:420
+#: ../Beremiz_service.py:433
msgid "Pyro port :"
msgstr ""
@@ -2678,7 +3128,7 @@
msgid "Python code"
msgstr ""
-#: ../features.py:34
+#: ../features.py:23
msgid "Python file"
msgstr ""
@@ -2686,19 +3136,23 @@
msgid "Qualifier"
msgstr ""
-#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:296
msgid "Quit"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:224
msgid "Range:"
msgstr ""
-#: ../ProjectController.py:1872
+#: ../ProjectController.py:1955
msgid "Raw IEC code"
msgstr ""
-#: ../BeremizIDE.py:1083
+#: ../etherlab/ConfigEditor.py:344
+msgid "Read from (nodeid, index, subindex)"
+msgstr ""
+
+#: ../BeremizIDE.py:1080
#, python-format
msgid "Really delete node '%s'?"
msgstr ""
@@ -2707,7 +3161,7 @@
msgid "Realm:"
msgstr ""
-#: ../IDEFrame.py:367 ../IDEFrame.py:424
+#: ../IDEFrame.py:370 ../IDEFrame.py:425
msgid "Redo"
msgstr ""
@@ -2715,10 +3169,14 @@
msgid "Reference"
msgstr ""
-#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:436
msgid "Refresh"
msgstr ""
+#: ../etherlab/EtherCATManagementEditor.py:1965
+msgid "Register Modify Dialog"
+msgstr ""
+
#: ../dialogs/SearchInProjectDialog.py:70
msgid "Regular expression"
msgstr ""
@@ -2727,7 +3185,7 @@
msgid "Regular expressions"
msgstr ""
-#: ../editors/Viewer.py:1636
+#: ../editors/Viewer.py:1638
msgid "Release value"
msgstr ""
@@ -2735,16 +3193,16 @@
msgid "Remainder (modulo)"
msgstr ""
-#: ../BeremizIDE.py:1084
+#: ../BeremizIDE.py:1081
#, python-format
msgid "Remove %s node"
msgstr ""
-#: ../IDEFrame.py:2445
+#: ../IDEFrame.py:2463
msgid "Remove Datatype"
msgstr ""
-#: ../IDEFrame.py:2450
+#: ../IDEFrame.py:2468
msgid "Remove Pou"
msgstr ""
@@ -2756,35 +3214,52 @@
msgid "Remove element"
msgstr ""
-#: ../editors/FileManagementPanel.py:66
+#: ../etherlab/ConfigEditor.py:1353
+msgid "Remove file from database"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:65
msgid "Remove file from left folder"
msgstr ""
-#: ../editors/ResourceEditor.py:284
+#: ../etherlab/ConfigEditor.py:1389
+msgid "Remove file from library"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:282
msgid "Remove instance"
msgstr ""
+#: ../etherlab/ConfigEditor.py:653
+msgid "Remove process variable"
+msgstr ""
+
#: ../canfestival/NetworkEditor.py:111
msgid "Remove slave"
msgstr ""
-#: ../editors/ResourceEditor.py:253
+#: ../etherlab/ConfigEditor.py:680
+msgid "Remove startup service variable"
+msgstr ""
+
+#: ../editors/ResourceEditor.py:251
msgid "Remove task"
msgstr ""
-#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
+#: ../bacnet/BacnetSlaveEditor.py:812 ../editors/CodeFileEditor.py:673
+#: ../controls/VariablePanel.py:484
msgid "Remove variable"
msgstr ""
-#: ../IDEFrame.py:1979
+#: ../IDEFrame.py:1996
msgid "Rename"
msgstr ""
-#: ../editors/FileManagementPanel.py:187
+#: ../editors/FileManagementPanel.py:186
msgid "Replace File"
msgstr ""
-#: ../editors/Viewer.py:598
+#: ../editors/Viewer.py:601
msgid "Replace Wire by connections"
msgstr ""
@@ -2796,11 +3271,11 @@
msgid "Reset"
msgstr ""
-#: ../editors/Viewer.py:681
+#: ../editors/Viewer.py:684
msgid "Reset Execution Order"
msgstr ""
-#: ../IDEFrame.py:453
+#: ../IDEFrame.py:459
msgid "Reset Perspective"
msgstr ""
@@ -2808,7 +3283,7 @@
msgid "Reset search result"
msgstr ""
-#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
+#: ../BeremizIDE.py:1012 ../plcopen/types_enums.py:77
msgid "Resources"
msgstr ""
@@ -2816,11 +3291,11 @@
msgid "Retain"
msgstr ""
-#: ../controls/VariablePanel.py:455
+#: ../controls/VariablePanel.py:457
msgid "Return Type:"
msgstr ""
-#: ../editors/Viewer.py:582
+#: ../editors/Viewer.py:585
msgid "Right"
msgstr ""
@@ -2828,7 +3303,7 @@
msgid "Right PowerRail"
msgstr ""
-#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:558
msgid "Rising Edge"
msgstr ""
@@ -2844,15 +3319,15 @@
msgid "Rounding up/down"
msgstr ""
-#: ../ProjectController.py:1828
+#: ../ProjectController.py:1911
msgid "Run"
msgstr ""
-#: ../ProjectController.py:1127
+#: ../ProjectController.py:1175
msgid "Runtime IO extensions C code generation failed !\n"
msgstr ""
-#: ../ProjectController.py:1136
+#: ../ProjectController.py:1186
msgid "Runtime library extensions C code generation failed !\n"
msgstr ""
@@ -2864,11 +3339,11 @@
msgid "SDO Server"
msgstr ""
-#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
+#: ../dialogs/PouDialog.py:128 ../controls/ProjectPropertiesPanel.py:161
msgid "SFC"
msgstr ""
-#: ../PLCGenerator.py:1433
+#: ../PLCGenerator.py:1482
#, python-brace-format
msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
msgstr ""
@@ -2879,7 +3354,7 @@
msgstr ""
#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
-#: ../dialogs/PouDialog.py:44
+#: ../dialogs/PouDialog.py:128
msgid "ST"
msgstr ""
@@ -2891,7 +3366,7 @@
msgid "SVG files (*.svg)|*.svg|All files|*.*"
msgstr ""
-#: ../features.py:36
+#: ../features.py:25
msgid "SVGUI"
msgstr ""
@@ -2908,37 +3383,47 @@
msgid "Save as"
msgstr ""
-#: ../ProjectController.py:530
+#: ../etherlab/EtherCATManagementEditor.py:941
+#: ../etherlab/EtherCATManagementEditor.py:1289
+msgid "Save as..."
+msgstr ""
+
+#: ../ProjectController.py:546
msgid "Save path is the same as path of a project! \n"
msgstr ""
+#: ../etherlab/EthercatMaster.py:455 ../etherlab/EthercatMaster.py:764
+#: ../etherlab/EthercatMaster.py:765
+msgid "Scan Network"
+msgstr ""
+
#: ../dialogs/SearchInProjectDialog.py:73
msgid "Scope"
msgstr ""
-#: ../IDEFrame.py:644
+#: ../IDEFrame.py:650
msgid "Search"
msgstr ""
-#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:387 ../IDEFrame.py:431
msgid "Search in Project"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:60
msgid "Seconds:"
msgstr ""
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:393
msgid "Select All"
msgstr ""
#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305
-#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315
-#: ../controls/VariablePanel.py:378
+#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:314
+#: ../controls/VariablePanel.py:377
msgid "Select a variable class:"
msgstr ""
-#: ../ProjectController.py:1293
+#: ../ProjectController.py:1354
msgid "Select an editor:"
msgstr ""
@@ -2946,11 +3431,11 @@
msgid "Select an instance"
msgstr ""
-#: ../IDEFrame.py:628
+#: ../IDEFrame.py:634
msgid "Select an object"
msgstr ""
-#: ../ProjectController.py:537
+#: ../ProjectController.py:555
msgid "Selected directory already contains another project. Overwrite? \n"
msgstr ""
@@ -2966,6 +3451,14 @@
msgid "Selection Divergence"
msgstr ""
+#: ../runtime/NevowServer.py:182
+msgid "Send"
+msgstr ""
+
+#: ../runtime/NevowServer.py:181
+msgid "Send a message to the log"
+msgstr ""
+
#: ../dialogs/DiscoveryDialog.py:135
msgid "Service Discovery"
msgstr ""
@@ -2974,7 +3467,7 @@
msgid "Services available:"
msgstr ""
-#: ../dialogs/LDElementDialog.py:79
+#: ../dialogs/LDElementDialog.py:79 ../runtime/WampClient.py:434
msgid "Set"
msgstr ""
@@ -2986,7 +3479,7 @@
msgid "Shift right"
msgstr ""
-#: ../ProjectController.py:1863
+#: ../ProjectController.py:1946
msgid "Show IEC code generated by PLCGenerator"
msgstr ""
@@ -2998,7 +3491,7 @@
msgid "Show Master generated by config_utils"
msgstr ""
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1945
msgid "Show code"
msgstr ""
@@ -3018,6 +3511,14 @@
msgid "Single"
msgstr ""
+#: ../etherlab/EtherCATManagementEditor.py:361
+msgid "Slave SDO Monitoring"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:135
+msgid "Slave entries"
+msgstr ""
+
#: ../targets/toolchain_makefile.py:130
msgid "Source didn't change, no build.\n"
msgstr ""
@@ -3035,44 +3536,56 @@
msgid "Standard function blocks"
msgstr ""
-#: ../ProjectController.py:1829 ../Beremiz_service.py:271
+#: ../etherlab/ConfigEditor.py:68
+msgid "Standardized Device Profile"
+msgstr ""
+
+#: ../etherlab/EtherCATManagementEditor.py:37
+msgid "Start Address"
+msgstr ""
+
+#: ../ProjectController.py:1912 ../Beremiz_service.py:284
msgid "Start PLC"
msgstr ""
-#: ../ProjectController.py:1074
+#: ../ProjectController.py:1121
#, python-format
msgid "Start build in %s\n"
msgstr ""
-#: ../ProjectController.py:1397
+#: ../runtime/PlcStatus.py:12
msgid "Started"
msgstr ""
-#: ../ProjectController.py:1633
+#: ../ProjectController.py:1714
msgid "Starting PLC\n"
msgstr ""
-#: ../BeremizIDE.py:393
+#: ../etherlab/ConfigEditor.py:674
+msgid "Startup service variables assignments:"
+msgstr ""
+
+#: ../BeremizIDE.py:389
msgid "Status ToolBar"
msgstr ""
-#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2426
msgid "Step"
msgstr ""
-#: ../ProjectController.py:1835
+#: ../ProjectController.py:1918
msgid "Stop"
msgstr ""
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:285
msgid "Stop PLC"
msgstr ""
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1919
msgid "Stop Running PLC"
msgstr ""
-#: ../ProjectController.py:1398
+#: ../runtime/PlcStatus.py:13
msgid "Stopped"
msgstr ""
@@ -3080,6 +3593,14 @@
msgid "Structure"
msgstr ""
+#: ../etherlab/ConfigEditor.py:48
+msgid "SubIndex"
+msgstr ""
+
+#: ../etherlab/ConfigEditor.py:465
+msgid "Subindex"
+msgstr ""
+
#: ../editors/DataTypeEditor.py:60
msgid "Subrange"
msgstr ""
@@ -3088,11 +3609,11 @@
msgid "Subtraction"
msgstr ""
-#: ../ProjectController.py:1113
+#: ../ProjectController.py:1160
msgid "Successfully built.\n"
msgstr ""
-#: ../IDEFrame.py:449
+#: ../IDEFrame.py:451
msgid "Switch perspective"
msgstr ""
@@ -3108,19 +3629,19 @@
msgid "Tangent"
msgstr ""
-#: ../editors/ResourceEditor.py:97
+#: ../editors/ResourceEditor.py:94
msgid "Task"
msgstr ""
-#: ../editors/ResourceEditor.py:248
+#: ../editors/ResourceEditor.py:246
msgid "Tasks:"
msgstr ""
-#: ../controls/VariablePanel.py:91
+#: ../controls/VariablePanel.py:88
msgid "Temp"
msgstr ""
-#: ../version.py:35
+#: ../version.py:37
msgid ""
"The best place to ask questions about Beremiz/PLCOpenEditor\n"
"is project's mailing list: beremiz-devel@lists.sourceforge.net\n"
@@ -3132,27 +3653,38 @@
"https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
msgstr ""
-#: ../editors/FileManagementPanel.py:186
+#: ../etherlab/EthercatMaster.py:454
+msgid ""
+"The current network configuration will be deleted.\n"
+"Do you want to continue?"
+msgstr ""
+
+#: ../editors/FileManagementPanel.py:185
#, python-format
msgid ""
"The file '%s' already exist.\n"
"Do you want to replace it?"
msgstr ""
+#: ../etherlab/EtherCATManagementEditor.py:928
+#: ../etherlab/EtherCATManagementEditor.py:1320
+msgid "The file does not exist!"
+msgstr ""
+
#: ../editors/LDViewer.py:893
msgid "The group of block must be coherent!"
msgstr ""
-#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
+#: ../BeremizIDE.py:569 ../IDEFrame.py:1059
msgid "There are changes, do you want to save?"
msgstr ""
-#: ../IDEFrame.py:1691 ../IDEFrame.py:1710
+#: ../IDEFrame.py:1708 ../IDEFrame.py:1727
#, python-format
msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
msgstr ""
-#: ../IDEFrame.py:1133
+#: ../IDEFrame.py:1146
msgid ""
"There was a problem printing.\n"
"Perhaps your current printer is not set correctly?"
@@ -3162,7 +3694,7 @@
msgid "This option isn't available yet!"
msgstr ""
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:546
#, python-format
msgid "Tick: %d"
msgstr ""
@@ -3200,53 +3732,57 @@
msgid "Time-of-day subtraction"
msgstr ""
+#: ../IDEFrame.py:432
+msgid "Toggle fullscreen mode"
+msgstr ""
+
#: ../dialogs/ForceVariableDialog.py:188
msgid "Toggle value"
msgstr ""
-#: ../editors/Viewer.py:584
+#: ../editors/Viewer.py:587
msgid "Top"
msgstr ""
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1931
msgid "Transfer"
msgstr ""
-#: ../ProjectController.py:1849
+#: ../ProjectController.py:1932
msgid "Transfer PLC"
msgstr ""
-#: ../ProjectController.py:1802
+#: ../ProjectController.py:1884
msgid "Transfer completed successfully.\n"
msgstr ""
-#: ../ProjectController.py:1805
+#: ../ProjectController.py:1887
msgid "Transfer failed\n"
msgstr ""
-#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2428 ../editors/Viewer.py:2455
msgid "Transition"
msgstr ""
-#: ../PLCGenerator.py:1564
+#: ../PLCGenerator.py:1613
#, python-format
msgid "Transition \"%s\" body must contain an output variable or coil referring to its name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:91
+#: ../dialogs/PouTransitionDialog.py:90
msgid "Transition Name"
msgstr ""
-#: ../dialogs/PouTransitionDialog.py:60
+#: ../dialogs/PouTransitionDialog.py:59
msgid "Transition Name:"
msgstr ""
-#: ../PLCGenerator.py:1657
+#: ../PLCGenerator.py:1706
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
msgstr ""
-#: ../PLCGenerator.py:1646
+#: ../PLCGenerator.py:1695
#, python-brace-format
msgid "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU"
msgstr ""
@@ -3268,17 +3804,17 @@
msgid "Triggering"
msgstr ""
-#: ../Beremiz_service.py:490
+#: ../Beremiz_service.py:503
msgid "Twisted unavailable."
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
-#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
-#: ../controls/VariablePanel.py:61
+#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:48
+#: ../editors/ResourceEditor.py:94 ../editors/DataTypeEditor.py:55
+#: ../editors/CodeFileEditor.py:752 ../controls/VariablePanel.py:61
msgid "Type"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:54
+#: ../dialogs/BrowseLocationsDialog.py:51
msgid "Type and derivated"
msgstr ""
@@ -3295,16 +3831,25 @@
msgid "Type infos:"
msgstr ""
-#: ../dialogs/BrowseLocationsDialog.py:55
+#: ../etherlab/EthercatCFileGenerator.py:76
+#, python-format
+msgid "Type of location \"%s\" not yet supported!"
+msgstr ""
+
+#: ../dialogs/BrowseLocationsDialog.py:52
msgid "Type strict"
msgstr ""
#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59
-#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111
+#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:110
#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61
msgid "Type:"
msgstr ""
+#: ../runtime/WampClient.py:129
+msgid "TypeError register option: {}"
+msgstr ""
+
#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
msgid "URI host:"
msgstr ""
@@ -3327,7 +3872,17 @@
msgid "Unable to get Xenomai's %s \n"
msgstr ""
-#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
+#: ../bacnet/bacnet.py:430
+#, python-format
+msgid "Unable to load file \"%s\"!"
+msgstr ""
+
+#: ../bacnet/bacnet.py:420
+#, python-format
+msgid "Unable to save to file \"%s\"!"
+msgstr ""
+
+#: ../PLCGenerator.py:1023 ../PLCGenerator.py:1301
#, python-brace-format
msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
msgstr ""
@@ -3337,20 +3892,25 @@
msgid "Undefined pou type \"%s\""
msgstr ""
-#: ../IDEFrame.py:365 ../IDEFrame.py:423
+#: ../IDEFrame.py:368 ../IDEFrame.py:424
msgid "Undo"
msgstr ""
-#: ../ProjectController.py:442
+#: ../ProjectController.py:457
msgid "Unknown"
msgstr ""
+#: ../etherlab/EthercatCFileGenerator.py:470
+#, python-brace-format
+msgid "Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}"
+msgstr ""
+
#: ../editors/Viewer.py:437
#, python-format
msgid "Unknown variable \"%s\" for this POU!"
msgstr ""
-#: ../ProjectController.py:439 ../ProjectController.py:440
+#: ../ProjectController.py:454 ../ProjectController.py:455
msgid "Unnamed"
msgstr ""
@@ -3359,12 +3919,20 @@
msgid "Unnamed%d"
msgstr ""
-#: ../controls/VariablePanel.py:308
+#: ../controls/VariablePanel.py:307
#, python-format
msgid "Unrecognized data size \"%s\""
msgstr ""
-#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
+#: ../etherlab/EtherCATManagementEditor.py:2080
+msgid "Update"
+msgstr ""
+
+#: ../runtime/WampClient.py:380
+msgid "Upload:"
+msgstr ""
+
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:852
msgid "User Data Types"
msgstr ""
@@ -3376,7 +3944,7 @@
msgid "User-defined POUs"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:42
+#: ../dialogs/ActionBlockDialog.py:42 ../etherlab/ConfigEditor.py:465
msgid "Value"
msgstr ""
@@ -3384,24 +3952,29 @@
msgid "Values:"
msgstr ""
-#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
-#: ../editors/Viewer.py:2456
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:625
+#: ../editors/Viewer.py:2458
msgid "Variable"
msgstr ""
#: ../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
+#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:354
msgid "Variable Drop"
msgstr ""
-#: ../dialogs/FBDVariableDialog.py:68
+#: ../etherlab/ConfigEditor.py:70
+#, python-format
+msgid "Variable Index: #x%4.4X"
+msgstr ""
+
+#: ../dialogs/FBDVariableDialog.py:58
msgid "Variable Properties"
msgstr ""
#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316
-#: ../controls/VariablePanel.py:379
+#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:315
+#: ../controls/VariablePanel.py:378
msgid "Variable class"
msgstr ""
@@ -3409,24 +3982,28 @@
msgid "Variable don't belong to this POU!"
msgstr ""
+#: ../etherlab/ConfigEditor.py:280
+msgid "Variable entries:"
+msgstr ""
+
#: ../dialogs/LDElementDialog.py:92
msgid "Variable:"
msgstr ""
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:87
msgid "Variables"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:166
+#: ../controls/ProjectPropertiesPanel.py:169
msgid "Vertical:"
msgstr ""
-#: ../runtime/WampClient.py:113
+#: ../runtime/WampClient.py:170
#, python-format
msgid "WAMP Client connection failed (%s) .. retrying .."
msgstr ""
-#: ../runtime/WampClient.py:117
+#: ../runtime/WampClient.py:179
#, python-format
msgid "WAMP Client connection lost (%s) .. retrying .."
msgstr ""
@@ -3435,49 +4012,66 @@
msgid "WAMP ID:"
msgstr ""
-#: ../runtime/WampClient.py:172
+#: ../runtime/WampClient.py:413
+msgid "WAMP Server URL"
+msgstr ""
+
+#: ../runtime/WampClient.py:276
+msgid "WAMP authentication has no secret configured"
+msgstr ""
+
+#: ../runtime/WampClient.py:304
+msgid "WAMP client can not connect to :"
+msgstr ""
+
+#: ../runtime/WampClient.py:301
msgid "WAMP client connecting to :"
msgstr ""
-#: ../runtime/WampClient.py:148
-msgid "WAMP client connection not established!"
-msgstr ""
-
-#: ../Beremiz_service.py:625
+#: ../Beremiz_service.py:628
msgid "WAMP client startup failed. "
msgstr ""
-#: ../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
+#: ../runtime/WampClient.py:206
+msgid "WAMP configuration error : missing '{}' parameter."
+msgstr ""
+
+#: ../runtime/WampClient.py:192
+msgid "WAMP configuration error:"
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:100
#, python-format
msgid "WAMP connecting to URL : %s\n"
msgstr ""
-#: ../connectors/WAMP/__init__.py:140
+#: ../connectors/WAMP/__init__.py:141
msgid "WAMP connection timeout"
msgstr ""
-#: ../connectors/WAMP/__init__.py:158
+#: ../connectors/WAMP/__init__.py:159
#, python-format
msgid "WAMP connection to '%s' failed.\n"
msgstr ""
-#: ../Beremiz_service.py:595
+#: ../runtime/WampClient.py:280
+msgid "WAMP deactivated in configuration"
+msgstr ""
+
+#: ../Beremiz_service.py:605
msgid "WAMP import failed :"
msgstr ""
-#: ../runtime/WampClient.py:126
-msgid "WAMP load error: "
-msgstr ""
-
-#: ../runtime/WampClient.py:108
+#: ../runtime/WampClient.py:241
+msgid "WAMP secret empty"
+msgstr ""
+
+#: ../runtime/WampClient.py:139
+#, python-format
+msgid "WAMP session joined (%s) by:"
+msgstr ""
+
+#: ../runtime/WampClient.py:146
msgid "WAMP session left"
msgstr ""
@@ -3485,15 +4079,24 @@
msgid "WXGLADE GUI"
msgstr ""
-#: ../runtime/WampClient.py:137
-msgid "Wamp secret load error:"
-msgstr ""
-
-#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
+#: ../runtime/WampClient.py:432
+msgid "Wamp Settings"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:172 ../editors/LDViewer.py:902
msgid "Warning"
msgstr ""
-#: ../ProjectController.py:726
+#: ../etherlab/EthercatCFileGenerator.py:405
+#: ../etherlab/EthercatCFileGenerator.py:571
+msgid "Warning: "
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:166
+msgid "Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n"
+msgstr ""
+
+#: ../ProjectController.py:756
msgid "Warnings in ST/IL/SFC code generator :\n"
msgstr ""
@@ -3501,7 +4104,7 @@
msgid "Whole Project"
msgstr ""
-#: ../controls/ProjectPropertiesPanel.py:134
+#: ../controls/ProjectPropertiesPanel.py:137
msgid "Width:"
msgstr ""
@@ -3509,27 +4112,63 @@
msgid "Wrap search"
msgstr ""
+#: ../etherlab/ConfigEditor.py:345
+msgid "Write to (nodeid, index, subindex)"
+msgstr ""
+
#: ../dialogs/AboutDialog.py:126
msgid "Written by"
msgstr ""
-#: ../features.py:35
+#: ../etherlab/EthercatCFileGenerator.py:409
+#: ../etherlab/EthercatCFileGenerator.py:499
+#, python-format
+msgid "Wrong direction for location \"%s\"!"
+msgstr ""
+
+#: ../etherlab/EthercatCFileGenerator.py:400
+#: ../etherlab/EthercatCFileGenerator.py:487
+#, python-format
+msgid "Wrong type for location \"%s\"!"
+msgstr ""
+
+#: ../features.py:24
msgid "WxGlade GUI"
msgstr ""
+#: ../etherlab/ConfigEditor.py:1236
+msgid "XML files (*.xml)|*.xml|All files|*.*"
+msgstr ""
+
+#: ../etherlab/EtherCATManagementEditor.py:652
+msgid "You can input only hex, dec value"
+msgstr ""
+
+#: ../etherlab/EtherCATManagementEditor.py:1999
+msgid "You can't modify it. This register is read-only or it's not connected."
+msgstr ""
+
+#: ../etherlab/EtherCATManagementEditor.py:648
+msgid "You cannot SDO download this state"
+msgstr ""
+
#: ../svgui/svgui.py:150
msgid ""
"You don't have write permissions.\n"
"Open Inkscape anyway ?"
msgstr ""
-#: ../wxglade_hmi/wxglade_hmi.py:160
+#: ../wxglade_hmi/wxglade_hmi.py:175
msgid ""
"You don't have write permissions.\n"
"Open wxGlade anyway ?"
msgstr ""
-#: ../ProjectController.py:390
+#: ../etherlab/EtherCATManagementEditor.py:2002
+msgid "You entered wrong value. You can enter dec or hex value only."
+msgstr ""
+
+#: ../ProjectController.py:403
msgid ""
"You must have permission to work on the project\n"
"Work on a project copy ?"
@@ -3551,11 +4190,21 @@
msgid "You must type a value!"
msgstr ""
-#: ../IDEFrame.py:440
+#: ../IDEFrame.py:442
msgid "Zoom"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:158
+#: ../etherlab/EtherCATManagementEditor.py:911
+#: ../etherlab/EtherCATManagementEditor.py:1307
+msgid "bin files (*.bin)|*.bin"
+msgstr ""
+
+#: ../etherlab/EtherCATManagementEditor.py:942
+#: ../etherlab/EtherCATManagementEditor.py:1290
+msgid "bin files (*.bin)|*.bin|All files|*.*"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:159
msgid "days"
msgstr ""
@@ -3569,35 +4218,39 @@
msgid "exited with status {a1} (pid {a2})\n"
msgstr ""
-#: ../dialogs/PouDialog.py:36
+#: ../dialogs/PouDialog.py:110
msgid "function"
msgstr ""
-#: ../dialogs/PouDialog.py:36
+#: ../dialogs/PouDialog.py:110
msgid "functionBlock"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:158
+#: ../dialogs/DurationEditorDialog.py:159
msgid "hours"
msgstr ""
-#: ../ProjectController.py:753
+#: ../ProjectController.py:784
msgid "matiec installation is not found\n"
msgstr ""
+#: ../dialogs/DurationEditorDialog.py:162
+msgid "microseconds"
+msgstr ""
+
+#: ../dialogs/DurationEditorDialog.py:161
+msgid "milliseconds"
+msgstr ""
+
#: ../dialogs/DurationEditorDialog.py:160
-msgid "milliseconds"
-msgstr ""
-
-#: ../dialogs/DurationEditorDialog.py:159
msgid "minutes"
msgstr ""
-#: ../dialogs/PouDialog.py:36
+#: ../dialogs/PouDialog.py:110
msgid "program"
msgstr ""
-#: ../dialogs/DurationEditorDialog.py:159
+#: ../dialogs/DurationEditorDialog.py:160
msgid "seconds"
msgstr ""
@@ -3613,6 +4266,10 @@
msgid "string right of"
msgstr ""
+#: ../etherlab/EtherCATManagementEditor.py:323
+msgid "update"
+msgstr ""
+
#: ../Beremiz.py:167
msgid "update info unavailable."
msgstr ""
@@ -3667,6 +4324,33 @@
msgid "CAN_Driver"
msgstr ""
+msgid "BACnetServerNode"
+msgstr ""
+
+msgid "Network_Interface"
+msgstr ""
+
+msgid "UDP_Port_Number"
+msgstr ""
+
+msgid "BACnet_Communication_Control_Password"
+msgstr ""
+
+msgid "BACnet_Device_ID"
+msgstr ""
+
+msgid "BACnet_Device_Name"
+msgstr ""
+
+msgid "BACnet_Device_Location"
+msgstr ""
+
+msgid "BACnet_Device_Description"
+msgstr ""
+
+msgid "BACnet_Device_Application_Software_Version"
+msgstr ""
+
msgid "Generic"
msgstr ""
@@ -3763,6 +4447,24 @@
msgid "MaxRemoteTCPclients"
msgstr ""
+msgid "CIA402SlaveParams"
+msgstr ""
+
+msgid "Enable%s"
+msgstr ""
+
+msgid "ProcessVariables"
+msgstr ""
+
+msgid "variable"
+msgstr ""
+
+msgid "ReadFrom"
+msgstr ""
+
+msgid "WriteTo"
+msgstr ""
+
msgid "BaseParams"
msgstr ""
@@ -3793,9 +4495,6 @@
msgid "variables"
msgstr ""
-msgid "variable"
-msgstr ""
-
msgid "name"
msgstr ""
--- a/i18n/mki18n.py Thu Nov 22 23:39:54 2018 +0100
+++ b/i18n/mki18n.py Fri Nov 23 00:33:04 2018 +0100
@@ -97,9 +97,29 @@
# -----------------------------------------------------------------------------
+def getSupportedLanguageDict(appname):
+ """
+ Returns dictionary with languages already supported
+ by given application
+
+ param: appname:
+ name of application
+ """
+ languageDict = {}
+ ext = '.po'
+ files = [x for x in os.listdir('.')
+ if x.startswith(appname) and x.endswith(ext)]
+
+ langs = [x.split(appname + '_')[1].split(ext)[0] for x in files]
+ for lang in langs:
+ languageDict[lang] = lang
+
+ return languageDict
+
+
def getlanguageDict():
languageDict = {}
-
+ getSupportedLanguageDict('Beremiz')
if wx.VERSION >= (3, 0, 0):
_app = wx.App()
else:
@@ -205,7 +225,7 @@
verbosePrint(verbose, cmd)
os.system(cmd)
- languageDict = getlanguageDict()
+ languageDict = getSupportedLanguageDict(applicationName)
for langCode in languageDict.keys():
if langCode == 'en':
@@ -230,7 +250,7 @@
currentDir = os.getcwd()
os.chdir(applicationDirectoryPath)
- languageDict = getlanguageDict()
+ languageDict = getSupportedLanguageDict(applicationName)
for langCode in languageDict.keys():
if langCode == 'en':
@@ -284,7 +304,7 @@
currentDir = os.getcwd()
os.chdir(applicationDirectoryPath)
- languageDict = getlanguageDict()
+ languageDict = getSupportedLanguageDict(applicationName)
for langCode in languageDict.keys():
if (langCode == 'en') and (forceEnglish == 0):
@@ -466,7 +486,7 @@
exit_code = 1
try:
optionList, pargs = getopt.getopt(sys.argv[1:], validOptions, validLongOptions)
- except getopt.GetoptError, e:
+ except getopt.GetoptError as e:
printUsage(e[0])
sys.exit(1)
for (opt, val) in optionList:
@@ -492,7 +512,7 @@
try:
makePO(appDirPath, option['domain'], option['verbose'])
exit_code = 0
- except IOError, e:
+ except IOError as e:
printUsage(e[1] + '\n You must write a file app.fil that contains the list of all files to parse.')
if option['mo']:
makeMO(appDirPath, option['moTarget'], option['domain'], option['verbose'], option['forceEnglish'])
Binary file locale/bn_BD/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/de_DE/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/es_ES/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/fr_FR/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/hr/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/hu_HU/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/it_IT/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/ko_KR/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/nl_NL/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/pl/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/pt/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/pt_BR/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/pt_PT/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/ro_RO/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/ru_RU/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/sl_SI/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/tr_TR/LC_MESSAGES/Beremiz.mo has changed
Binary file locale/zh_CN/LC_MESSAGES/Beremiz.mo has changed
--- a/plcopen/plcopen.py Thu Nov 22 23:39:54 2018 +0100
+++ b/plcopen/plcopen.py Fri Nov 23 00:33:04 2018 +0100
@@ -298,7 +298,7 @@
return tree, error
- except Exception, e:
+ except Exception as e:
return None, e.message
--- a/py_ext/PythonFileCTNMixin.py Thu Nov 22 23:39:54 2018 +0100
+++ b/py_ext/PythonFileCTNMixin.py Fri Nov 23 00:33:04 2018 +0100
@@ -73,7 +73,7 @@
os.remove(filepath)
self.CreateCodeFileBuffer(False)
self.OnCTNSave()
- except Exception, exc:
+ except Exception as exc:
error = unicode(exc)
if error is not None:
--- a/runtime/PLCObject.py Thu Nov 22 23:39:54 2018 +0100
+++ b/runtime/PLCObject.py Fri Nov 23 00:33:04 2018 +0100
@@ -34,6 +34,7 @@
from runtime.typemapping import TypeTranslator
from runtime.loglevels import LogLevelsDefault, LogLevelsCount
from runtime.Stunnel import getPSKID
+from runtime import PlcStatus
from runtime import MainWorker
if os.name in ("nt", "ce"):
@@ -75,7 +76,7 @@
self.statuschange = statuschange
self.evaluator = evaluator
self.pyruntimevars = pyruntimevars
- self.PLCStatus = "Empty"
+ self.PLCStatus = PlcStatus.Empty
self.PLClibraryHandle = None
self.PLClibraryLock = Lock()
# Creates fake C funcs proxies
@@ -396,17 +397,17 @@
else:
res = str(result)
self.python_runtime_vars["FBID"] = None
- except Exception, e:
+ except Exception as e:
res = "#EXCEPTION : "+str(e)
self.LogMessage(1, ('PyEval@0x%x(Code="%s") Exception "%s"') % (FBID, cmd, str(e)))
@RunInMain
def StartPLC(self):
- if self.CurrentPLCFilename is not None and self.PLCStatus == "Stopped":
+ if self.CurrentPLCFilename is not None and self.PLCStatus == PlcStatus.Stopped:
c_argv = ctypes.c_char_p * len(self.argv)
res = self._startPLC(len(self.argv), c_argv(*self.argv))
if res == 0:
- self.PLCStatus = "Started"
+ self.PLCStatus = PlcStatus.Started
self.StatusChange()
self.PythonRuntimeCall("start")
self.StartSem = Semaphore(0)
@@ -416,16 +417,16 @@
self.LogMessage("PLC started")
else:
self.LogMessage(0, _("Problem starting PLC : error %d" % res))
- self.PLCStatus = "Broken"
+ self.PLCStatus = PlcStatus.Broken
self.StatusChange()
@RunInMain
def StopPLC(self):
- if self.PLCStatus == "Started":
+ if self.PLCStatus == PlcStatus.Started:
self.LogMessage("PLC stopped")
self._stopPLC()
self.PythonThread.join()
- self.PLCStatus = "Stopped"
+ self.PLCStatus = PlcStatus.Stopped
self.StatusChange()
self.PythonRuntimeCall("stop")
if self.TraceThread is not None:
@@ -444,7 +445,7 @@
@RunInMain
def NewPLC(self, md5sum, data, extrafiles):
- if self.PLCStatus in ["Stopped", "Empty", "Broken"]:
+ if self.PLCStatus in [PlcStatus.Stopped, PlcStatus.Empty, PlcStatus.Broken]:
NewFileName = md5sum + lib_ext
extra_files_log = os.path.join(self.workingdir, "extra_files.txt")
@@ -460,7 +461,7 @@
self.UnLoadPLC()
self.LogMessage("NewPLC (%s)" % md5sum)
- self.PLCStatus = "Empty"
+ self.PLCStatus = PlcStatus.Empty
try:
if replace_PLC_shared_object:
@@ -491,20 +492,20 @@
# Store new PLC filename
self.CurrentPLCFilename = NewFileName
except Exception:
- self.PLCStatus = "Broken"
+ self.PLCStatus = PlcStatus.Broken
self.StatusChange()
PLCprint(traceback.format_exc())
return False
if not replace_PLC_shared_object:
- self.PLCStatus = "Stopped"
+ self.PLCStatus = PlcStatus.Stopped
elif self.LoadPLC():
- self.PLCStatus = "Stopped"
+ self.PLCStatus = PlcStatus.Stopped
else:
- self.PLCStatus = "Broken"
+ self.PLCStatus = PlcStatus.Broken
self.StatusChange()
- return self.PLCStatus == "Stopped"
+ return self.PLCStatus == PlcStatus.Stopped
return False
def MatchMD5(self, MD5):
@@ -539,7 +540,7 @@
def _TracesSwap(self):
self.LastSwapTrace = time()
- if self.TraceThread is None and self.PLCStatus == "Started":
+ if self.TraceThread is None and self.PLCStatus == PlcStatus.Started:
self.TraceThread = Thread(target=self.TraceThreadProc)
self.TraceThread.start()
self.TraceLock.acquire()
@@ -557,7 +558,7 @@
Return a list of traces, corresponding to the list of required idx
"""
self._resumeDebug() # Re-enable debugger
- while self.PLCStatus == "Started":
+ while self.PLCStatus == PlcStatus.Started:
tick = ctypes.c_uint32()
size = ctypes.c_uint32()
buff = ctypes.c_void_p()
@@ -600,7 +601,7 @@
def RemoteExec(self, script, *kwargs):
try:
- exec script in kwargs
+ exec(script, kwargs)
except Exception:
_e_type, e_value, e_traceback = sys.exc_info()
line_no = traceback.tb_lineno(get_last_traceback(e_traceback))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/runtime/PlcStatus.py Fri Nov 23 00:33:04 2018 +0100
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+# See COPYING.Runtime file for copyrights details.
+
+
+def _(x):
+ """No translation"""
+ return x
+
+
+Broken = _("Broken")
+Started = _("Started")
+Stopped = _("Stopped")
+Disconnected = _("Disconnected")
+Empty = _("Empty")
--- a/runtime/WampClient.py Thu Nov 22 23:39:54 2018 +0100
+++ b/runtime/WampClient.py Fri Nov 23 00:33:04 2018 +0100
@@ -160,7 +160,7 @@
if protocolOptions:
self.setProtocolOptions(**protocolOptions)
_transportFactory = self
- except Exception, e:
+ except Exception as e:
print(_("Custom protocol options failed :"), e)
_transportFactory = None
--- a/runtime/Worker.py Thu Nov 22 23:39:54 2018 +0100
+++ b/runtime/Worker.py Fri Nov 23 00:33:04 2018 +0100
@@ -103,7 +103,10 @@
if _job.success:
return _job.result
else:
- raise _job.exc_info[0], _job.exc_info[1], _job.exc_info[2]
+ exc_type = _job.exc_info[0]
+ exc_value = _job.exc_info[1]
+ exc_traceback = _job.exc_info[2]
+ six.reraise(exc_type, exc_value, exc_traceback)
def quit(self):
"""
--- a/svgui/pyjs/build.py Thu Nov 22 23:39:54 2018 +0100
+++ b/svgui/pyjs/build.py Fri Nov 23 00:33:04 2018 +0100
@@ -99,7 +99,7 @@
copytree_exists(srcname, dstname, symlinks)
else:
shutil.copy2(srcname, dstname)
- except (IOError, os.error), why:
+ except (IOError, os.error) as why:
errors.append((srcname, dstname, why))
if errors:
print(errors)
@@ -184,7 +184,7 @@
try:
print("Creating output directory")
os.mkdir(output)
- except StandardError, e:
+ except StandardError as e:
print("Exception creating output directory %s: %s" % (output, e), file=sys.stderr)
# public dir
--- a/svgui/pyjs/lib/pyjslib.py Thu Nov 22 23:39:54 2018 +0100
+++ b/svgui/pyjs/lib/pyjslib.py Fri Nov 23 00:33:04 2018 +0100
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# pylint: disable=too-many-function-args,undefined-variable,no-absolute-import
+# pylint: disable=too-many-function-args,undefined-variable,no-absolute-import,assign-to-new-keyword
# iteration from Bob Ippolito's Iteration in JavaScript
--- a/svgui/pyjs/pyjs.py Thu Nov 22 23:39:54 2018 +0100
+++ b/svgui/pyjs/pyjs.py Fri Nov 23 00:33:04 2018 +0100
@@ -1331,8 +1331,8 @@
%(lhs)s %(op)s %(iterator_name)s.next();
%(assign_tuple)s
""" % loc_dict)
- for node in node.body.nodes:
- self._stmt(node, current_klass)
+ for n in node.body.nodes:
+ self._stmt(n, current_klass)
self.printo("""
}
} catch (e) {
--- a/tests/BACnet/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/BACnet/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -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="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2018-07-28T02:24:08"/>
- <contentHeader name="BACnet" modificationDateTime="2018-07-29T01:54:59">
+ <contentHeader name="BACnet" modificationDateTime="2018-09-26T14:00:21">
<coordinateInfo>
<fbd>
<scaling x="0" y="0"/>
@@ -73,14 +73,14 @@
</interface>
<body>
<FBD>
- <inVariable localId="1" executionOrderId="0" height="30" width="105" negated="false">
+ <inVariable localId="1" executionOrderId="0" height="30" width="114" negated="false">
<position x="299" y="521"/>
<connectionPointOut>
- <relPosition x="105" y="15"/>
+ <relPosition x="114" y="15"/>
</connectionPointOut>
<expression>EnergyCounter</expression>
</inVariable>
- <outVariable localId="2" executionOrderId="0" height="30" width="105" negated="false">
+ <outVariable localId="2" executionOrderId="0" height="30" width="114" negated="false">
<position x="654" y="521"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
@@ -137,30 +137,30 @@
<xhtml:p><![CDATA[Always consume some energy]]></xhtml:p>
</content>
</comment>
- <block localId="6" typeName="Simulator" instanceName="TempSimulation" executionOrderId="0" height="115" width="134">
- <position x="188" y="661"/>
+ <block localId="6" typeName="Simulator" instanceName="TempSimulation" executionOrderId="0" height="128" width="143">
+ <position x="188" y="648"/>
<inputVariables>
<variable formalParameter="MinVal">
<connectionPointIn>
- <relPosition x="0" y="35"/>
+ <relPosition x="0" y="38"/>
<connection refLocalId="8">
- <position x="188" y="696"/>
- <position x="138" y="696"/>
+ <position x="188" y="686"/>
+ <position x="138" y="686"/>
</connection>
</connectionPointIn>
</variable>
<variable formalParameter="MaxVal">
<connectionPointIn>
- <relPosition x="0" y="66"/>
+ <relPosition x="0" y="74"/>
<connection refLocalId="9">
- <position x="188" y="727"/>
- <position x="138" y="727"/>
+ <position x="188" y="722"/>
+ <position x="138" y="722"/>
</connection>
</connectionPointIn>
</variable>
<variable formalParameter="PeriodSeconds">
<connectionPointIn>
- <relPosition x="0" y="97"/>
+ <relPosition x="0" y="110"/>
<connection refLocalId="10">
<position x="188" y="758"/>
<position x="138" y="758"/>
@@ -172,31 +172,31 @@
<outputVariables>
<variable formalParameter="Out">
<connectionPointOut>
- <relPosition x="134" y="35"/>
+ <relPosition x="143" y="38"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
- <outVariable localId="7" executionOrderId="0" height="30" width="92" negated="false">
- <position x="421" y="681"/>
+ <outVariable localId="7" executionOrderId="0" height="30" width="98" negated="false">
+ <position x="421" y="671"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="6" formalParameter="Out">
- <position x="421" y="696"/>
- <position x="322" y="696"/>
+ <position x="421" y="686"/>
+ <position x="331" y="686"/>
</connection>
</connectionPointIn>
<expression>Temperature</expression>
</outVariable>
<inVariable localId="8" executionOrderId="0" height="30" width="105" negated="false">
- <position x="33" y="681"/>
+ <position x="33" y="671"/>
<connectionPointOut>
<relPosition x="105" y="15"/>
</connectionPointOut>
<expression>18.0</expression>
</inVariable>
<inVariable localId="9" executionOrderId="0" height="30" width="105" negated="false">
- <position x="33" y="712"/>
+ <position x="33" y="707"/>
<connectionPointOut>
<relPosition x="105" y="15"/>
</connectionPointOut>
@@ -209,33 +209,33 @@
</connectionPointOut>
<expression>120</expression>
</inVariable>
- <block localId="11" typeName="Simulator" instanceName="HumiditySimulation" executionOrderId="0" height="115" width="134">
+ <block localId="11" typeName="Simulator" instanceName="HumiditySimulation" executionOrderId="0" height="137" width="143">
<position x="185" y="803"/>
<inputVariables>
<variable formalParameter="MinVal">
<connectionPointIn>
- <relPosition x="0" y="35"/>
+ <relPosition x="0" y="39"/>
<connection refLocalId="13">
- <position x="185" y="838"/>
- <position x="135" y="838"/>
+ <position x="185" y="842"/>
+ <position x="135" y="842"/>
</connection>
</connectionPointIn>
</variable>
<variable formalParameter="MaxVal">
<connectionPointIn>
- <relPosition x="0" y="66"/>
+ <relPosition x="0" y="78"/>
<connection refLocalId="14">
- <position x="185" y="869"/>
- <position x="135" y="869"/>
+ <position x="185" y="881"/>
+ <position x="135" y="881"/>
</connection>
</connectionPointIn>
</variable>
<variable formalParameter="PeriodSeconds">
<connectionPointIn>
- <relPosition x="0" y="97"/>
+ <relPosition x="0" y="117"/>
<connection refLocalId="15">
- <position x="185" y="900"/>
- <position x="135" y="900"/>
+ <position x="185" y="920"/>
+ <position x="135" y="920"/>
</connection>
</connectionPointIn>
</variable>
@@ -244,38 +244,38 @@
<outputVariables>
<variable formalParameter="Out">
<connectionPointOut>
- <relPosition x="134" y="35"/>
+ <relPosition x="143" y="39"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
- <outVariable localId="12" executionOrderId="0" height="30" width="92" negated="false">
- <position x="418" y="823"/>
+ <outVariable localId="12" executionOrderId="0" height="30" width="111" negated="false">
+ <position x="418" y="827"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="11" formalParameter="Out">
- <position x="418" y="838"/>
- <position x="319" y="838"/>
+ <position x="418" y="842"/>
+ <position x="328" y="842"/>
</connection>
</connectionPointIn>
<expression>Humidity</expression>
</outVariable>
<inVariable localId="13" executionOrderId="0" height="30" width="105" negated="false">
- <position x="30" y="823"/>
+ <position x="30" y="827"/>
<connectionPointOut>
<relPosition x="105" y="15"/>
</connectionPointOut>
<expression>55.0</expression>
</inVariable>
<inVariable localId="14" executionOrderId="0" height="30" width="105" negated="false">
- <position x="30" y="854"/>
+ <position x="30" y="866"/>
<connectionPointOut>
<relPosition x="105" y="15"/>
</connectionPointOut>
<expression>78.0</expression>
</inVariable>
<inVariable localId="15" executionOrderId="0" height="30" width="105" negated="false">
- <position x="30" y="885"/>
+ <position x="30" y="905"/>
<connectionPointOut>
<relPosition x="105" y="15"/>
</connectionPointOut>
@@ -314,10 +314,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="18" executionOrderId="0" height="30" width="92" negated="false">
+ <inVariable localId="18" executionOrderId="0" height="30" width="98" negated="false">
<position x="40" y="1118"/>
<connectionPointOut>
- <relPosition x="92" y="15"/>
+ <relPosition x="98" y="15"/>
</connectionPointOut>
<expression>Temperature</expression>
</inVariable>
@@ -356,10 +356,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="20" executionOrderId="0" height="30" width="104" negated="false">
+ <inVariable localId="20" executionOrderId="0" height="30" width="122" negated="false">
<position x="41" y="1059"/>
<connectionPointOut>
- <relPosition x="104" y="15"/>
+ <relPosition x="122" y="15"/>
</connectionPointOut>
<expression>ControlDisable</expression>
</inVariable>
@@ -374,10 +374,10 @@
</connectionPointIn>
<expression>Cooler</expression>
</outVariable>
- <inVariable localId="22" executionOrderId="0" height="30" width="146" negated="false">
+ <inVariable localId="22" executionOrderId="0" height="30" width="162" negated="false">
<position x="39" y="1154"/>
<connectionPointOut>
- <relPosition x="146" y="15"/>
+ <relPosition x="162" y="15"/>
</connectionPointOut>
<expression>TemperatureSetPoint</expression>
</inVariable>
@@ -414,10 +414,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="23" executionOrderId="0" height="30" width="92" negated="false">
+ <inVariable localId="23" executionOrderId="0" height="30" width="98" negated="false">
<position x="37" y="1293"/>
<connectionPointOut>
- <relPosition x="92" y="15"/>
+ <relPosition x="98" y="15"/>
</connectionPointOut>
<expression>Temperature</expression>
</inVariable>
@@ -456,10 +456,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="25" executionOrderId="0" height="30" width="104" negated="false">
+ <inVariable localId="25" executionOrderId="0" height="30" width="122" negated="false">
<position x="38" y="1234"/>
<connectionPointOut>
- <relPosition x="104" y="15"/>
+ <relPosition x="122" y="15"/>
</connectionPointOut>
<expression>ControlDisable</expression>
</inVariable>
@@ -474,10 +474,10 @@
</connectionPointIn>
<expression>Heater</expression>
</outVariable>
- <inVariable localId="27" executionOrderId="0" height="30" width="146" negated="false">
+ <inVariable localId="27" executionOrderId="0" height="30" width="162" negated="false">
<position x="36" y="1329"/>
<connectionPointOut>
- <relPosition x="146" y="15"/>
+ <relPosition x="162" y="15"/>
</connectionPointOut>
<expression>TemperatureSetPoint</expression>
</inVariable>
--- a/tests/canopen_master/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/canopen_master/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -1,15 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://www.plcopen.org/xml/tc6.xsd"
- xmlns:xhtml="http://www.w3.org/1999/xhtml"
- xsi:schemaLocation="http://www.plcopen.org/xml/tc6.xsd">
- <fileHeader companyName="beremiz"
- productName="beremiz"
- productVersion="1"
- creationDateTime="2008-06-24T18:44:00"/>
- <contentHeader name="canopen_master"
- modificationDateTime="2009-10-07T18:45:11"
- language="en-US">
+<?xml version='1.0' encoding='utf-8'?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
+ <fileHeader companyName="beremiz" productName="beremiz" productVersion="1" creationDateTime="2008-06-24T18:44:00"/>
+ <contentHeader name="canopen_master" modificationDateTime="2018-09-26T13:31:52" language="en-US">
<coordinateInfo>
<fbd>
<scaling x="0" y="0"/>
@@ -42,14 +34,12 @@
</interface>
<body>
<FBD>
- <outVariable localId="1" height="29" width="80">
- <position x="362" y="140"/>
+ <outVariable localId="1" height="29" width="80" executionOrderId="0" negated="false">
+ <position x="362" y="139"/>
<connectionPointIn>
<relPosition x="0" y="14"/>
<connection refLocalId="4" formalParameter="OUT">
- <position x="362" y="154"/>
- <position x="330" y="154"/>
- <position x="330" y="153"/>
+ <position x="362" y="153"/>
<position x="299" y="153"/>
</connection>
</connectionPointIn>
--- a/tests/canopen_slave/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/canopen_slave/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -1,15 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://www.plcopen.org/xml/tc6.xsd"
- xmlns:xhtml="http://www.w3.org/1999/xhtml"
- xsi:schemaLocation="http://www.plcopen.org/xml/tc6.xsd">
- <fileHeader companyName="beremiz"
- productName="beremiz"
- productVersion="1"
- creationDateTime="2008-06-24T18:44:00"/>
- <contentHeader name="canopen_slave"
- modificationDateTime="2008-10-24T09:32:01"
- language="en-US">
+<?xml version='1.0' encoding='utf-8'?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
+ <fileHeader companyName="beremiz" productName="beremiz" productVersion="1" creationDateTime="2008-06-24T18:44:00"/>
+ <contentHeader name="canopen_slave" modificationDateTime="2018-09-26T13:32:23" language="en-US">
<coordinateInfo>
<fbd>
<scaling x="0" y="0"/>
@@ -42,14 +34,12 @@
</interface>
<body>
<FBD>
- <outVariable localId="1" height="29" width="80">
- <position x="362" y="140"/>
+ <outVariable localId="1" height="29" width="80" executionOrderId="0" negated="false">
+ <position x="362" y="139"/>
<connectionPointIn>
<relPosition x="0" y="14"/>
<connection refLocalId="4" formalParameter="OUT">
- <position x="362" y="154"/>
- <position x="330" y="154"/>
- <position x="330" y="153"/>
+ <position x="362" y="153"/>
<position x="299" y="153"/>
</connection>
</connectionPointIn>
@@ -113,8 +103,8 @@
<configurations>
<configuration name="conf">
<resource name="res">
- <task name="tache" interval="00:00:00.010000" priority="0">
- <pouInstance name="toto" type="test_main"/>
+ <task name="tache" interval="T#10ms" priority="0">
+ <pouInstance name="toto" typeName="test_main"/>
</task>
</resource>
</configuration>
--- a/tests/first_steps/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/first_steps/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -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="2018-08-24T13:11:30">
+ <contentHeader name="First Steps" modificationDateTime="2018-09-26T12:52:51">
<coordinateInfo>
<fbd>
<scaling x="0" y="0"/>
@@ -163,21 +163,21 @@
</outputVariables>
</block>
<inVariable localId="2" executionOrderId="0" height="30" width="79" negated="false">
- <position x="35" y="81"/>
+ <position x="35" y="78"/>
<connectionPointOut>
<relPosition x="79" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
<block localId="4" typeName="CounterFBD" instanceName="CounterFBD0" executionOrderId="0" height="54" width="121">
- <position x="211" y="145"/>
+ <position x="211" y="146"/>
<inputVariables>
<variable formalParameter="Reset">
<connectionPointIn>
<relPosition x="0" y="37"/>
<connection refLocalId="13">
- <position x="211" y="182"/>
- <position x="115" y="182"/>
+ <position x="211" y="183"/>
+ <position x="115" y="183"/>
</connection>
</connectionPointIn>
</variable>
@@ -191,7 +191,7 @@
</variable>
</outputVariables>
</block>
- <comment localId="6" height="344" width="434">
+ <comment localId="6" height="365" width="569">
<position x="620" y="130"/>
<content>
<xhtml:p><![CDATA[In this example function block with the same functionality
@@ -257,35 +257,35 @@
</outputVariables>
</block>
<inVariable localId="10" executionOrderId="0" height="30" width="67" negated="false">
- <position x="34" y="351"/>
+ <position x="34" y="348"/>
<connectionPointOut>
<relPosition x="67" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
<inVariable localId="12" executionOrderId="0" height="30" width="67" negated="false">
- <position x="36" y="261"/>
+ <position x="36" y="258"/>
<connectionPointOut>
<relPosition x="67" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
<inVariable localId="13" executionOrderId="0" height="30" width="79" negated="false">
- <position x="36" y="170"/>
+ <position x="36" y="168"/>
<connectionPointOut>
<relPosition x="79" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
<block localId="14" typeName="CounterLD" instanceName="CounterLD0" executionOrderId="0" height="62" width="124">
- <position x="210" y="411"/>
+ <position x="210" y="412"/>
<inputVariables>
<variable formalParameter="Reset">
<connectionPointIn>
<relPosition x="0" y="41"/>
<connection refLocalId="16">
- <position x="210" y="452"/>
- <position x="100" y="452"/>
+ <position x="210" y="453"/>
+ <position x="100" y="453"/>
</connection>
</connectionPointIn>
</variable>
@@ -300,13 +300,13 @@
</outputVariables>
</block>
<inVariable localId="16" executionOrderId="0" height="30" width="64" negated="false">
- <position x="36" y="440"/>
+ <position x="36" y="438"/>
<connectionPointOut>
<relPosition x="64" y="15"/>
</connectionPointOut>
<expression>Reset</expression>
</inVariable>
- <block localId="17" typeName="AverageVal" executionOrderId="0" height="470" width="90">
+ <block localId="17" typeName="AverageVal" executionOrderId="0" height="470" width="100">
<position x="514" y="28"/>
<inputVariables>
<variable formalParameter="Cnt1">
@@ -323,9 +323,7 @@
<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"/>
+ <position x="473" y="183"/>
</connection>
</connectionPointIn>
</variable>
@@ -352,9 +350,7 @@
<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"/>
+ <position x="469" y="453"/>
</connection>
</connectionPointIn>
</variable>
@@ -363,18 +359,18 @@
<outputVariables>
<variable formalParameter="OUT">
<connectionPointOut>
- <relPosition x="90" y="65"/>
+ <relPosition x="100" y="65"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
- <outVariable localId="18" executionOrderId="0" height="30" width="50" negated="false">
+ <outVariable localId="18" executionOrderId="0" height="30" width="55" 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"/>
+ <position x="614" y="93"/>
</connection>
</connectionPointIn>
<expression>AVCnt</expression>
@@ -394,12 +390,12 @@
<expression>Cnt1</expression>
</inOutVariable>
<inOutVariable localId="5" executionOrderId="0" height="30" width="103" negatedOut="false" negatedIn="false">
- <position x="370" y="167"/>
+ <position x="370" y="168"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="4" formalParameter="OUT">
- <position x="370" y="182"/>
- <position x="332" y="182"/>
+ <position x="370" y="183"/>
+ <position x="332" y="183"/>
</connection>
</connectionPointIn>
<connectionPointOut>
@@ -436,12 +432,12 @@
<expression>Cnt4</expression>
</inOutVariable>
<inOutVariable localId="15" executionOrderId="0" height="30" width="88" negatedOut="false" negatedIn="false">
- <position x="381" y="437"/>
+ <position x="381" y="438"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="14" formalParameter="Out">
- <position x="381" y="452"/>
- <position x="334" y="452"/>
+ <position x="381" y="453"/>
+ <position x="334" y="453"/>
</connection>
</connectionPointIn>
<connectionPointOut>
@@ -546,23 +542,23 @@
</connectionPointIn>
<expression>OUT</expression>
</outVariable>
- <inOutVariable localId="3" executionOrderId="0" height="30" width="32" negatedOut="false" negatedIn="false">
+ <inOutVariable localId="3" executionOrderId="0" height="30" width="37" negatedOut="false" negatedIn="false">
<position x="557" y="137"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="7" formalParameter="OUT">
<position x="557" y="152"/>
- <position x="525" y="152"/>
- <position x="525" y="130"/>
- <position x="515" y="130"/>
- </connection>
- </connectionPointIn>
- <connectionPointOut>
- <relPosition x="32" y="15"/>
+ <position x="527" y="152"/>
+ <position x="527" y="130"/>
+ <position x="517" y="130"/>
+ </connection>
+ </connectionPointIn>
+ <connectionPointOut>
+ <relPosition x="37" y="15"/>
</connectionPointOut>
<expression>Cnt</expression>
</inOutVariable>
- <block localId="4" typeName="ADD" executionOrderId="0" height="80" width="67">
+ <block localId="4" typeName="ADD" executionOrderId="0" height="80" width="69">
<position x="328" y="115"/>
<inputVariables>
<variable formalParameter="IN1">
@@ -570,9 +566,7 @@
<relPosition x="0" y="35"/>
<connection refLocalId="6">
<position x="328" y="150"/>
- <position x="301" y="150"/>
- <position x="301" y="153"/>
- <position x="275" y="153"/>
+ <position x="275" y="150"/>
</connection>
</connectionPointIn>
</variable>
@@ -583,9 +577,9 @@
<position x="328" y="180"/>
<position x="317" y="180"/>
<position x="317" y="213"/>
- <position x="599" y="213"/>
- <position x="599" y="152"/>
- <position x="589" y="152"/>
+ <position x="604" y="213"/>
+ <position x="604" y="152"/>
+ <position x="594" y="152"/>
</connection>
</connectionPointIn>
</variable>
@@ -594,26 +588,26 @@
<outputVariables>
<variable formalParameter="OUT">
<connectionPointOut>
- <relPosition x="67" y="35"/>
+ <relPosition x="69" y="35"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
- <inVariable localId="5" executionOrderId="0" height="30" width="158" negated="false">
+ <inVariable localId="5" executionOrderId="0" height="30" width="163" negated="false">
<position x="222" y="256"/>
<connectionPointOut>
- <relPosition x="158" y="15"/>
+ <relPosition x="163" y="15"/>
</connectionPointOut>
<expression>ResetCounterValue</expression>
</inVariable>
<inVariable localId="6" executionOrderId="0" height="30" width="21" negated="false">
- <position x="254" y="138"/>
+ <position x="254" y="135"/>
<connectionPointOut>
<relPosition x="21" y="15"/>
</connectionPointOut>
<expression>1</expression>
</inVariable>
- <block localId="7" typeName="SEL" executionOrderId="0" height="80" width="67">
+ <block localId="7" typeName="SEL" executionOrderId="0" height="80" width="69">
<position x="448" y="100"/>
<inputVariables>
<variable formalParameter="G">
@@ -632,7 +626,7 @@
<relPosition x="0" y="50"/>
<connection refLocalId="4" formalParameter="OUT">
<position x="448" y="150"/>
- <position x="395" y="150"/>
+ <position x="397" y="150"/>
</connection>
</connectionPointIn>
</variable>
@@ -643,7 +637,7 @@
<position x="448" y="170"/>
<position x="414" y="170"/>
<position x="414" y="271"/>
- <position x="380" y="271"/>
+ <position x="385" y="271"/>
</connection>
</connectionPointIn>
</variable>
@@ -652,7 +646,7 @@
<outputVariables>
<variable formalParameter="OUT">
<connectionPointOut>
- <relPosition x="67" y="30"/>
+ <relPosition x="69" y="30"/>
</connectionPointOut>
</variable>
</outputVariables>
@@ -756,29 +750,29 @@
</inline>
</condition>
</transition>
- <step localId="5" name="ResetCounter" initialStep="false" height="30" width="104">
- <position x="449" y="190"/>
- <connectionPointIn>
- <relPosition x="52" y="0"/>
+ <step localId="5" name="ResetCounter" initialStep="false" height="30" width="134">
+ <position x="434" y="190"/>
+ <connectionPointIn>
+ <relPosition x="67" y="0"/>
<connection refLocalId="3">
<position x="501" y="190"/>
<position x="501" y="134"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
- <relPosition x="52" y="30"/>
+ <relPosition x="67" y="30"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
- <relPosition x="104" y="15"/>
+ <relPosition x="134" y="15"/>
</connectionPointOutAction>
</step>
- <actionBlock localId="6" height="63" width="222">
- <position x="600" y="187"/>
+ <actionBlock localId="6" height="63" width="254">
+ <position x="641" y="190"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="5">
- <position x="600" y="202"/>
- <position x="553" y="202"/>
+ <position x="641" y="205"/>
+ <position x="568" y="205"/>
</connection>
</connectionPointIn>
<action localId="0">
@@ -814,13 +808,13 @@
<relPosition x="85" y="15"/>
</connectionPointOutAction>
</step>
- <actionBlock localId="8" height="52" width="148" executionOrderId="0">
- <position x="135" y="188"/>
+ <actionBlock localId="8" height="52" width="164" executionOrderId="0">
+ <position x="154" y="191"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="7">
- <position x="135" y="203"/>
- <position x="113" y="203"/>
+ <position x="154" y="206"/>
+ <position x="113" y="206"/>
</connection>
</connectionPointIn>
<action localId="0">
@@ -896,7 +890,7 @@
<relPosition x="10" y="0"/>
<connection refLocalId="5">
<position x="501" y="248"/>
- <position x="501" y="214"/>
+ <position x="501" y="220"/>
</connection>
</connectionPointIn>
<connectionPointOut>
@@ -1000,29 +994,27 @@
<body>
<LD>
<outVariable localId="2" executionOrderId="0" height="30" width="34" negated="false">
- <position x="527" y="90"/>
+ <position x="527" y="87"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="3">
- <position x="527" y="105"/>
- <position x="441" y="105"/>
+ <position x="527" y="102"/>
+ <position x="443" y="102"/>
</connection>
</connectionPointIn>
<expression>Out</expression>
</outVariable>
- <inOutVariable localId="3" executionOrderId="0" height="30" width="32" negatedOut="false" negatedIn="false">
- <position x="409" y="90"/>
+ <inOutVariable localId="3" executionOrderId="0" height="30" width="34" negatedOut="false" negatedIn="false">
+ <position x="409" y="87"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="7" formalParameter="OUT">
- <position x="409" y="105"/>
- <position x="388" y="105"/>
- <position x="388" y="102"/>
+ <position x="409" y="102"/>
<position x="367" y="102"/>
</connection>
</connectionPointIn>
<connectionPointOut>
- <relPosition x="32" y="15"/>
+ <relPosition x="34" y="15"/>
</connectionPointOut>
<expression>Cnt</expression>
</inOutVariable>
@@ -1034,9 +1026,7 @@
<relPosition x="0" y="35"/>
<connection refLocalId="6">
<position x="180" y="122"/>
- <position x="153" y="122"/>
- <position x="153" y="125"/>
- <position x="127" y="125"/>
+ <position x="127" y="122"/>
</connection>
</connectionPointIn>
</variable>
@@ -1047,9 +1037,9 @@
<position x="180" y="152"/>
<position x="169" y="152"/>
<position x="169" y="185"/>
- <position x="451" y="185"/>
- <position x="451" y="105"/>
- <position x="441" y="105"/>
+ <position x="453" y="185"/>
+ <position x="453" y="102"/>
+ <position x="443" y="102"/>
</connection>
</connectionPointIn>
</variable>
@@ -1071,7 +1061,7 @@
<expression>ResetCounterValue</expression>
</inVariable>
<inVariable localId="6" executionOrderId="0" height="30" width="21" negated="false">
- <position x="106" y="110"/>
+ <position x="106" y="107"/>
<connectionPointOut>
<relPosition x="21" y="15"/>
</connectionPointOut>
--- a/tests/logging/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/logging/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="Unknown" productName="Generic PLC" productVersion="1" creationDateTime="2013-01-29T14:01:00" contentDescription="This example shows logging functionality in Beremiz. Here are shown two ways of logging: - from IEC PLC program; - from python extension. "/>
- <contentHeader name="Logging example" modificationDateTime="2018-08-24T13:12:45">
+ <contentHeader name="Logging example" modificationDateTime="2018-09-26T13:10:14">
<coordinateInfo>
<fbd>
<scaling x="0" y="0"/>
@@ -52,10 +52,10 @@
</interface>
<body>
<FBD>
- <inVariable localId="2" height="30" width="170" executionOrderId="0" negated="false">
- <position x="507" y="365"/>
- <connectionPointOut>
- <relPosition x="170" y="15"/>
+ <inVariable localId="2" height="30" width="218" executionOrderId="0" negated="false">
+ <position x="459" y="365"/>
+ <connectionPointOut>
+ <relPosition x="218" y="15"/>
</connectionPointOut>
<expression>'IEC side logging: beat #'</expression>
</inVariable>
@@ -81,13 +81,13 @@
</variable>
</outputVariables>
</block>
- <inOutVariable localId="4" height="30" width="51" executionOrderId="0" negatedOut="false" negatedIn="false">
- <position x="66" y="304"/>
+ <inOutVariable localId="4" height="30" width="60" executionOrderId="0" negatedOut="false" negatedIn="false">
+ <position x="57" y="302"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="3" formalParameter="OUT">
- <position x="66" y="319"/>
- <position x="37" y="319"/>
+ <position x="57" y="317"/>
+ <position x="37" y="317"/>
<position x="37" y="390"/>
<position x="314" y="390"/>
<position x="314" y="317"/>
@@ -95,7 +95,7 @@
</connection>
</connectionPointIn>
<connectionPointOut>
- <relPosition x="51" y="15"/>
+ <relPosition x="60" y="15"/>
</connectionPointOut>
<expression>beat</expression>
</inOutVariable>
@@ -111,7 +111,7 @@
<position x="452" y="442"/>
<position x="455" y="442"/>
<position x="455" y="442"/>
- <position x="445" y="442"/>
+ <position x="439" y="442"/>
</connection>
</connectionPointIn>
</variable>
@@ -120,11 +120,7 @@
<relPosition x="0" y="78"/>
<connection refLocalId="6">
<position x="463" y="481"/>
- <position x="453" y="481"/>
- <position x="453" y="482"/>
- <position x="454" y="482"/>
- <position x="454" y="483"/>
- <position x="444" y="483"/>
+ <position x="438" y="481"/>
</connection>
</connectionPointIn>
</variable>
@@ -139,12 +135,12 @@
</outputVariables>
</block>
<inOutVariable localId="6" height="30" width="103" executionOrderId="0" negatedOut="false" negatedIn="false">
- <position x="341" y="468"/>
+ <position x="335" y="466"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="5" formalParameter="OUT">
- <position x="341" y="483"/>
- <position x="320" y="483"/>
+ <position x="335" y="481"/>
+ <position x="320" y="481"/>
<position x="320" y="518"/>
<position x="544" y="518"/>
<position x="544" y="442"/>
@@ -164,6 +160,8 @@
<relPosition x="0" y="51"/>
<connection refLocalId="2">
<position x="727" y="380"/>
+ <position x="717" y="380"/>
+ <position x="717" y="380"/>
<position x="677" y="380"/>
</connection>
</connectionPointIn>
@@ -210,13 +208,13 @@
</outputVariables>
</block>
<block localId="10" width="106" height="40" typeName="BOOL_TO_INT" executionOrderId="0">
- <position x="339" y="412"/>
+ <position x="333" y="412"/>
<inputVariables>
<variable formalParameter="IN" edge="rising">
<connectionPointIn>
<relPosition x="0" y="30"/>
<connection refLocalId="3" formalParameter="OUT">
- <position x="339" y="442"/>
+ <position x="333" y="442"/>
<position x="314" y="442"/>
<position x="314" y="317"/>
<position x="300" y="317"/>
@@ -259,9 +257,7 @@
<relPosition x="0" y="177"/>
<connection refLocalId="12">
<position x="907" y="443"/>
- <position x="893" y="443"/>
- <position x="893" y="445"/>
- <position x="879" y="445"/>
+ <position x="880" y="443"/>
</connection>
</connectionPointIn>
</variable>
@@ -270,7 +266,7 @@
<outputVariables/>
</block>
<inVariable localId="12" height="30" width="79" executionOrderId="0" negated="false">
- <position x="800" y="430"/>
+ <position x="801" y="428"/>
<connectionPointOut>
<relPosition x="79" y="15"/>
</connectionPointOut>
@@ -284,9 +280,7 @@
<relPosition x="0" y="39"/>
<connection refLocalId="4">
<position x="150" y="317"/>
- <position x="133" y="317"/>
- <position x="133" y="319"/>
- <position x="117" y="319"/>
+ <position x="117" y="317"/>
</connection>
</connectionPointIn>
</variable>
@@ -295,9 +289,7 @@
<relPosition x="0" y="78"/>
<connection refLocalId="1">
<position x="150" y="356"/>
- <position x="133" y="356"/>
- <position x="133" y="359"/>
- <position x="117" y="359"/>
+ <position x="117" y="356"/>
</connection>
</connectionPointIn>
</variable>
@@ -316,15 +308,15 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="1" executionOrderId="0" height="30" width="52" negated="false">
- <position x="65" y="344"/>
- <connectionPointOut>
- <relPosition x="52" y="15"/>
+ <inVariable localId="1" executionOrderId="0" height="30" width="61" negated="false">
+ <position x="56" y="341"/>
+ <connectionPointOut>
+ <relPosition x="61" y="15"/>
</connectionPointOut>
<expression>T#3s</expression>
</inVariable>
- <comment localId="15" height="238" width="675">
- <position x="27" y="16"/>
+ <comment localId="15" height="249" width="682">
+ <position x="19" y="8"/>
<content>
<xhtml:p><![CDATA[This example shows logging functionality in Beremiz.
Here are shown two ways of logging:
--- a/tests/python/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/python/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="" productName="Beremiz" productVersion="0.0" creationDateTime="2008-12-14T16:21:19" contentDescription="This example shows many features in Beremiz: 1. How to implement python extensions. 2. How to implement basic C extension. 3. How to use C code in IEC POUs. 4. How to call C functions from python code. 5. How to avoid race conditions between IEC, C and python code. 6. How to convert betweet different IEC types. "/>
- <contentHeader name="Beremiz Python Support Tests" modificationDateTime="2018-08-24T13:17:44">
+ <contentHeader name="Beremiz Python Support Tests" modificationDateTime="2018-09-26T13:15:28">
<coordinateInfo>
<pageSize x="1024" y="1024"/>
<fbd>
@@ -245,13 +245,13 @@
<expression>'time.sleep(1)'</expression>
</inVariable>
<block localId="5" width="125" height="80" typeName="python_eval" instanceName="py1" executionOrderId="0">
- <position x="650" y="400"/>
+ <position x="686" y="400"/>
<inputVariables>
<variable formalParameter="TRIG">
<connectionPointIn>
<relPosition x="0" y="35"/>
<connection refLocalId="7" formalParameter="OUT">
- <position x="650" y="435"/>
+ <position x="686" y="435"/>
<position x="285" y="435"/>
<position x="285" y="480"/>
<position x="250" y="480"/>
@@ -262,7 +262,7 @@
<connectionPointIn>
<relPosition x="0" y="65"/>
<connection refLocalId="4">
- <position x="650" y="465"/>
+ <position x="686" y="465"/>
<position x="455" y="465"/>
</connection>
</connectionPointIn>
@@ -323,13 +323,13 @@
<expression>pytest_var2</expression>
</inOutVariable>
<block localId="8" width="125" height="80" typeName="python_eval" instanceName="Block1" executionOrderId="0">
- <position x="650" y="545"/>
+ <position x="686" y="545"/>
<inputVariables>
<variable formalParameter="TRIG">
<connectionPointIn>
<relPosition x="0" y="35"/>
<connection refLocalId="7" formalParameter="OUT">
- <position x="650" y="580"/>
+ <position x="686" y="580"/>
<position x="285" y="580"/>
<position x="285" y="480"/>
<position x="250" y="480"/>
@@ -340,8 +340,8 @@
<connectionPointIn>
<relPosition x="0" y="65"/>
<connection refLocalId="9">
- <position x="650" y="610"/>
- <position x="585" y="610"/>
+ <position x="686" y="610"/>
+ <position x="665" y="610"/>
</connection>
</connectionPointIn>
</variable>
@@ -360,10 +360,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="9" height="30" width="290" executionOrderId="0" negated="false">
+ <inVariable localId="9" height="30" width="370" executionOrderId="0" negated="false">
<position x="295" y="595"/>
<connectionPointOut>
- <relPosition x="290" y="15"/>
+ <relPosition x="370" y="15"/>
</connectionPointOut>
<expression>'sys.stdout.write("FBID :"+str(FBID)+"\n")'</expression>
</inVariable>
@@ -375,13 +375,13 @@
<expression>'PLCBinary.Simple_C_Call(5678)'</expression>
</inVariable>
<block localId="12" width="125" height="80" typeName="python_eval" instanceName="Block2" executionOrderId="0">
- <position x="650" y="687"/>
+ <position x="686" y="687"/>
<inputVariables>
<variable formalParameter="TRIG">
<connectionPointIn>
<relPosition x="0" y="33"/>
<connection refLocalId="7" formalParameter="OUT">
- <position x="650" y="720"/>
+ <position x="686" y="720"/>
<position x="285" y="720"/>
<position x="285" y="480"/>
<position x="250" y="480"/>
@@ -392,7 +392,7 @@
<connectionPointIn>
<relPosition x="0" y="63"/>
<connection refLocalId="11">
- <position x="650" y="750"/>
+ <position x="686" y="750"/>
<position x="585" y="750"/>
</connection>
</connectionPointIn>
@@ -420,13 +420,13 @@
<expression>'MyPythonFunc(42)'</expression>
</inVariable>
<block localId="15" width="125" height="80" typeName="python_eval" instanceName="Block3" executionOrderId="0">
- <position x="650" y="837"/>
+ <position x="686" y="837"/>
<inputVariables>
<variable formalParameter="TRIG">
<connectionPointIn>
<relPosition x="0" y="33"/>
<connection refLocalId="7" formalParameter="OUT">
- <position x="650" y="870"/>
+ <position x="686" y="870"/>
<position x="285" y="870"/>
<position x="285" y="480"/>
<position x="250" y="480"/>
@@ -437,7 +437,7 @@
<connectionPointIn>
<relPosition x="0" y="63"/>
<connection refLocalId="14">
- <position x="650" y="900"/>
+ <position x="686" y="900"/>
<position x="580" y="900"/>
</connection>
</connectionPointIn>
@@ -464,16 +464,16 @@
</content>
</comment>
<block localId="17" width="80" height="120" typeName="MUX" executionOrderId="0">
- <position x="1065" y="790"/>
+ <position x="1101" y="790"/>
<inputVariables>
<variable formalParameter="K">
<connectionPointIn>
<relPosition x="0" y="30"/>
<connection refLocalId="18">
- <position x="1065" y="820"/>
- <position x="1040" y="820"/>
- <position x="1040" y="810"/>
- <position x="1022" y="810"/>
+ <position x="1101" y="820"/>
+ <position x="1076" y="820"/>
+ <position x="1076" y="810"/>
+ <position x="1060" y="810"/>
</connection>
</connectionPointIn>
</variable>
@@ -481,10 +481,10 @@
<connectionPointIn>
<relPosition x="0" y="50"/>
<connection refLocalId="5" formalParameter="RESULT">
- <position x="1065" y="840"/>
- <position x="905" y="840"/>
- <position x="905" y="465"/>
- <position x="775" y="465"/>
+ <position x="1101" y="840"/>
+ <position x="941" y="840"/>
+ <position x="941" y="465"/>
+ <position x="811" y="465"/>
</connection>
</connectionPointIn>
</variable>
@@ -492,10 +492,10 @@
<connectionPointIn>
<relPosition x="0" y="70"/>
<connection refLocalId="8" formalParameter="RESULT">
- <position x="1065" y="860"/>
- <position x="890" y="860"/>
- <position x="890" y="610"/>
- <position x="775" y="610"/>
+ <position x="1101" y="860"/>
+ <position x="926" y="860"/>
+ <position x="926" y="610"/>
+ <position x="811" y="610"/>
</connection>
</connectionPointIn>
</variable>
@@ -503,10 +503,10 @@
<connectionPointIn>
<relPosition x="0" y="90"/>
<connection refLocalId="12" formalParameter="RESULT">
- <position x="1065" y="880"/>
- <position x="875" y="880"/>
- <position x="875" y="750"/>
- <position x="775" y="750"/>
+ <position x="1101" y="880"/>
+ <position x="911" y="880"/>
+ <position x="911" y="750"/>
+ <position x="811" y="750"/>
</connection>
</connectionPointIn>
</variable>
@@ -514,8 +514,8 @@
<connectionPointIn>
<relPosition x="0" y="110"/>
<connection refLocalId="15" formalParameter="RESULT">
- <position x="1065" y="900"/>
- <position x="775" y="900"/>
+ <position x="1101" y="900"/>
+ <position x="811" y="900"/>
</connection>
</connectionPointIn>
</variable>
@@ -530,27 +530,27 @@
</outputVariables>
</block>
<outVariable localId="19" height="35" width="125" executionOrderId="0" negated="false">
- <position x="1235" y="805"/>
+ <position x="1271" y="805"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="17" formalParameter="OUT">
- <position x="1235" y="820"/>
- <position x="1145" y="820"/>
+ <position x="1271" y="820"/>
+ <position x="1181" y="820"/>
</connection>
</connectionPointIn>
<expression>pytest_var1</expression>
</outVariable>
<block localId="21" width="80" height="120" typeName="MUX" executionOrderId="0">
- <position x="1070" y="385"/>
+ <position x="1106" y="385"/>
<inputVariables>
<variable formalParameter="K">
<connectionPointIn>
<relPosition x="0" y="30"/>
<connection refLocalId="22">
- <position x="1070" y="415"/>
- <position x="1040" y="415"/>
- <position x="1040" y="405"/>
- <position x="1017" y="405"/>
+ <position x="1106" y="415"/>
+ <position x="1076" y="415"/>
+ <position x="1076" y="405"/>
+ <position x="1055" y="405"/>
</connection>
</connectionPointIn>
</variable>
@@ -558,8 +558,8 @@
<connectionPointIn>
<relPosition x="0" y="50"/>
<connection refLocalId="5" formalParameter="ACK">
- <position x="1070" y="435"/>
- <position x="775" y="435"/>
+ <position x="1106" y="435"/>
+ <position x="811" y="435"/>
</connection>
</connectionPointIn>
</variable>
@@ -567,10 +567,10 @@
<connectionPointIn>
<relPosition x="0" y="70"/>
<connection refLocalId="8" formalParameter="ACK">
- <position x="1070" y="455"/>
- <position x="805" y="455"/>
- <position x="805" y="580"/>
- <position x="775" y="580"/>
+ <position x="1106" y="455"/>
+ <position x="841" y="455"/>
+ <position x="841" y="580"/>
+ <position x="811" y="580"/>
</connection>
</connectionPointIn>
</variable>
@@ -578,10 +578,10 @@
<connectionPointIn>
<relPosition x="0" y="90"/>
<connection refLocalId="12" formalParameter="ACK">
- <position x="1070" y="475"/>
- <position x="820" y="475"/>
- <position x="820" y="720"/>
- <position x="775" y="720"/>
+ <position x="1106" y="475"/>
+ <position x="856" y="475"/>
+ <position x="856" y="720"/>
+ <position x="811" y="720"/>
</connection>
</connectionPointIn>
</variable>
@@ -589,10 +589,10 @@
<connectionPointIn>
<relPosition x="0" y="110"/>
<connection refLocalId="15" formalParameter="ACK">
- <position x="1070" y="495"/>
- <position x="835" y="495"/>
- <position x="835" y="870"/>
- <position x="775" y="870"/>
+ <position x="1106" y="495"/>
+ <position x="871" y="495"/>
+ <position x="871" y="870"/>
+ <position x="811" y="870"/>
</connection>
</connectionPointIn>
</variable>
@@ -606,20 +606,20 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="22" height="30" width="72" executionOrderId="0" negated="false">
- <position x="945" y="390"/>
- <connectionPointOut>
- <relPosition x="72" y="15"/>
+ <inVariable localId="22" height="30" width="74" executionOrderId="0" negated="false">
+ <position x="981" y="390"/>
+ <connectionPointOut>
+ <relPosition x="74" y="15"/>
</connectionPointOut>
<expression>mux1_sel</expression>
</inVariable>
<outVariable localId="23" height="35" width="125" executionOrderId="0" negated="false">
- <position x="1235" y="400"/>
+ <position x="1271" y="400"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="21" formalParameter="OUT">
- <position x="1235" y="415"/>
- <position x="1150" y="415"/>
+ <position x="1271" y="415"/>
+ <position x="1186" y="415"/>
</connection>
</connectionPointIn>
<expression>pytest_var3</expression>
@@ -771,10 +771,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="36" height="30" width="65" executionOrderId="0" negated="false">
+ <inVariable localId="36" height="30" width="66" executionOrderId="0" negated="false">
<position x="60" y="1774"/>
<connectionPointOut>
- <relPosition x="65" y="16"/>
+ <relPosition x="66" y="16"/>
</connectionPointOut>
<expression>Test_DT</expression>
</inVariable>
@@ -824,7 +824,7 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="40" height="30" width="80" executionOrderId="0" negated="false">
+ <outVariable localId="40" height="30" width="82" executionOrderId="0" negated="false">
<position x="580" y="1849"/>
<connectionPointIn>
<relPosition x="0" y="16"/>
@@ -835,7 +835,7 @@
</connectionPointIn>
<expression>Test_Date</expression>
</outVariable>
- <outVariable localId="42" height="30" width="90" executionOrderId="0" negated="false">
+ <outVariable localId="42" height="30" width="98" executionOrderId="0" negated="false">
<position x="465" y="1944"/>
<connectionPointIn>
<relPosition x="0" y="16"/>
@@ -846,7 +846,7 @@
</connectionPointIn>
<expression>Test_String</expression>
</outVariable>
- <outVariable localId="43" height="30" width="80" executionOrderId="0" negated="false">
+ <outVariable localId="43" height="30" width="82" executionOrderId="0" negated="false">
<position x="465" y="2014"/>
<connectionPointIn>
<relPosition x="0" y="16"/>
@@ -879,10 +879,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="45" height="30" width="55" executionOrderId="0" negated="false">
+ <inVariable localId="45" height="30" width="58" executionOrderId="0" negated="false">
<position x="60" y="2014"/>
<connectionPointOut>
- <relPosition x="55" y="16"/>
+ <relPosition x="58" y="16"/>
</connectionPointOut>
<expression>'True'</expression>
</inVariable>
@@ -908,10 +908,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="50" height="30" width="105" executionOrderId="0" negated="false">
+ <inVariable localId="50" height="30" width="106" executionOrderId="0" negated="false">
<position x="75" y="2275"/>
<connectionPointOut>
- <relPosition x="105" y="15"/>
+ <relPosition x="106" y="15"/>
</connectionPointOut>
<expression>Global_RS.Q1</expression>
</inVariable>
@@ -964,7 +964,7 @@
</connectionPointIn>
<expression>Global_RS.S</expression>
</outVariable>
- <outVariable localId="20" height="30" width="105" executionOrderId="0" negated="false">
+ <outVariable localId="20" height="30" width="106" executionOrderId="0" negated="false">
<position x="385" y="2390"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
@@ -975,10 +975,10 @@
</connectionPointIn>
<expression>Global_RS.R1</expression>
</outVariable>
- <inVariable localId="24" height="30" width="105" executionOrderId="0" negated="false">
+ <inVariable localId="24" height="30" width="106" executionOrderId="0" negated="false">
<position x="75" y="2390"/>
<connectionPointOut>
- <relPosition x="105" y="15"/>
+ <relPosition x="106" y="15"/>
</connectionPointOut>
<expression>Global_RS.Q1</expression>
</inVariable>
@@ -1098,14 +1098,14 @@
</connectionPointIn>
<expression>TUTU</expression>
</outVariable>
- <inVariable localId="58" height="30" width="145" executionOrderId="0" negated="false">
+ <inVariable localId="58" height="30" width="146" executionOrderId="0" negated="false">
<position x="60" y="1944"/>
<connectionPointOut>
- <relPosition x="145" y="16"/>
+ <relPosition x="146" y="16"/>
</connectionPointOut>
<expression>Second_Python_Var</expression>
</inVariable>
- <outVariable localId="47" height="30" width="125" executionOrderId="0" negated="false">
+ <outVariable localId="47" height="30" width="130" executionOrderId="0" negated="false">
<position x="200" y="1385"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
@@ -1123,7 +1123,7 @@
</connectionPointOut>
<expression>23</expression>
</inVariable>
- <block localId="61" typeName="function0" executionOrderId="0" height="45" width="110">
+ <block localId="61" typeName="function0" executionOrderId="0" height="45" width="111">
<position x="760" y="1170"/>
<inputVariables>
<variable formalParameter="LocalVar0">
@@ -1131,7 +1131,7 @@
<relPosition x="0" y="30"/>
<connection refLocalId="62">
<position x="760" y="1200"/>
- <position x="720" y="1200"/>
+ <position x="723" y="1200"/>
</connection>
</connectionPointIn>
</variable>
@@ -1140,25 +1140,25 @@
<outputVariables>
<variable formalParameter="OUT">
<connectionPointOut>
- <relPosition x="110" y="30"/>
- </connectionPointOut>
- </variable>
- </outputVariables>
- </block>
- <inVariable localId="62" executionOrderId="0" height="30" width="55" negated="false">
+ <relPosition x="111" y="30"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="62" executionOrderId="0" height="30" width="58" negated="false">
<position x="665" y="1185"/>
<connectionPointOut>
- <relPosition x="55" y="15"/>
+ <relPosition x="58" y="15"/>
</connectionPointOut>
<expression>fefvsd</expression>
</inVariable>
- <outVariable localId="63" executionOrderId="0" height="30" width="55" negated="false">
+ <outVariable localId="63" executionOrderId="0" height="30" width="58" negated="false">
<position x="905" y="1185"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="61" formalParameter="OUT">
<position x="905" y="1200"/>
- <position x="870" y="1200"/>
+ <position x="871" y="1200"/>
</connection>
</connectionPointIn>
<expression>fefvsd</expression>
@@ -1169,10 +1169,10 @@
<xhtml:p><![CDATA[Shows global variables access from resource configuration (res_pytest) and from project's configuration.]]></xhtml:p>
</content>
</comment>
- <inVariable localId="18" height="30" width="72" executionOrderId="0" negated="false">
- <position x="950" y="795"/>
- <connectionPointOut>
- <relPosition x="72" y="15"/>
+ <inVariable localId="18" height="30" width="74" executionOrderId="0" negated="false">
+ <position x="986" y="795"/>
+ <connectionPointOut>
+ <relPosition x="74" y="15"/>
</connectionPointOut>
<expression>mux2_sel</expression>
</inVariable>
--- a/tests/svgui/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/svgui/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="beremiz" productName="Beremiz" productVersion="0.0" creationDateTime="2008-12-14T16:21:19"/>
- <contentHeader name="Beremiz SVGUI Test" modificationDateTime="2018-08-24T13:19:27">
+ <contentHeader name="Beremiz SVGUI Test" modificationDateTime="2018-09-26T13:18:53">
<coordinateInfo>
<pageSize x="1024" y="1024"/>
<fbd>
@@ -46,14 +46,14 @@
<body>
<FBD>
<block localId="32" width="80" height="110" typeName="ADD" executionOrderId="0">
- <position x="649" y="241"/>
+ <position x="649" y="285"/>
<inputVariables>
<variable formalParameter="EN">
<connectionPointIn>
<relPosition x="0" y="35"/>
<connection refLocalId="5">
- <position x="649" y="276"/>
- <position x="594" y="276"/>
+ <position x="649" y="320"/>
+ <position x="594" y="320"/>
</connection>
</connectionPointIn>
</variable>
@@ -61,8 +61,8 @@
<connectionPointIn>
<relPosition x="0" y="65"/>
<connection refLocalId="100" formalParameter="OUT">
- <position x="649" y="306"/>
- <position x="474" y="306"/>
+ <position x="649" y="350"/>
+ <position x="474" y="350"/>
</connection>
</connectionPointIn>
</variable>
@@ -70,12 +70,12 @@
<connectionPointIn>
<relPosition x="0" y="95"/>
<connection refLocalId="33">
- <position x="649" y="336"/>
- <position x="629" y="336"/>
- <position x="629" y="374"/>
- <position x="854" y="374"/>
- <position x="854" y="306"/>
- <position x="839" y="306"/>
+ <position x="649" y="380"/>
+ <position x="629" y="380"/>
+ <position x="629" y="418"/>
+ <position x="854" y="418"/>
+ <position x="854" y="350"/>
+ <position x="839" y="350"/>
</connection>
</connectionPointIn>
</variable>
@@ -95,12 +95,12 @@
</outputVariables>
</block>
<inOutVariable localId="33" height="35" width="85" executionOrderId="0" negatedOut="false" negatedIn="false">
- <position x="754" y="289"/>
+ <position x="754" y="333"/>
<connectionPointIn>
<relPosition x="0" y="17"/>
<connection refLocalId="32" formalParameter="OUT">
- <position x="754" y="306"/>
- <position x="729" y="306"/>
+ <position x="754" y="350"/>
+ <position x="729" y="350"/>
</connection>
</connectionPointIn>
<connectionPointOut>
@@ -109,56 +109,56 @@
<expression>counter</expression>
</inOutVariable>
<inVariable localId="39" height="35" width="89" executionOrderId="0" negated="false">
- <position x="55" y="289"/>
+ <position x="55" y="333"/>
<connectionPointOut>
<relPosition x="89" y="17"/>
</connectionPointOut>
<expression>BOOL#1</expression>
</inVariable>
<inVariable localId="41" height="30" width="120" executionOrderId="0" negated="false">
- <position x="21" y="575"/>
+ <position x="21" y="619"/>
<connectionPointOut>
<relPosition x="120" y="15"/>
</connectionPointOut>
<expression>'stop_back'</expression>
</inVariable>
<inVariable localId="42" height="30" width="120" executionOrderId="0" negated="false">
- <position x="21" y="617"/>
+ <position x="21" y="661"/>
<connectionPointOut>
<relPosition x="120" y="15"/>
</connectionPointOut>
<expression>'stop_sele'</expression>
</inVariable>
- <inVariable localId="46" height="30" width="121" executionOrderId="0" negated="false">
- <position x="694" y="755"/>
- <connectionPointOut>
- <relPosition x="121" y="15"/>
+ <inVariable localId="46" height="30" width="122" executionOrderId="0" negated="false">
+ <position x="694" y="799"/>
+ <connectionPointOut>
+ <relPosition x="122" y="15"/>
</connectionPointOut>
<expression>'text_counter'</expression>
</inVariable>
<inVariable localId="51" height="30" width="119" executionOrderId="0" negated="false">
- <position x="692" y="568"/>
+ <position x="692" y="612"/>
<connectionPointOut>
<relPosition x="119" y="15"/>
</connectionPointOut>
<expression>'led_stop'</expression>
</inVariable>
<inVariable localId="52" height="30" width="120" executionOrderId="0" negated="false">
- <position x="691" y="604"/>
+ <position x="691" y="648"/>
<connectionPointOut>
<relPosition x="120" y="15"/>
</connectionPointOut>
<expression>'led_start'</expression>
</inVariable>
<block localId="83" width="145" height="60" typeName="INT_TO_STRING" executionOrderId="0">
- <position x="537" y="812"/>
+ <position x="537" y="856"/>
<inputVariables>
<variable formalParameter="IN">
<connectionPointIn>
<relPosition x="0" y="40"/>
<connection refLocalId="4">
- <position x="537" y="852"/>
- <position x="504" y="852"/>
+ <position x="537" y="896"/>
+ <position x="504" y="896"/>
</connection>
</connectionPointIn>
</variable>
@@ -173,14 +173,14 @@
</outputVariables>
</block>
<block localId="92" width="187" height="230" typeName="Button" instanceName="Start_Stop" executionOrderId="0">
- <position x="201" y="549"/>
+ <position x="201" y="593"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="41"/>
<connection refLocalId="41">
- <position x="201" y="590"/>
- <position x="141" y="590"/>
+ <position x="201" y="634"/>
+ <position x="141" y="634"/>
</connection>
</connectionPointIn>
</variable>
@@ -188,8 +188,8 @@
<connectionPointIn>
<relPosition x="0" y="83"/>
<connection refLocalId="42">
- <position x="201" y="632"/>
- <position x="141" y="632"/>
+ <position x="201" y="676"/>
+ <position x="141" y="676"/>
</connection>
</connectionPointIn>
</variable>
@@ -197,8 +197,8 @@
<connectionPointIn>
<relPosition x="0" y="125"/>
<connection refLocalId="93">
- <position x="201" y="674"/>
- <position x="141" y="674"/>
+ <position x="201" y="718"/>
+ <position x="141" y="718"/>
</connection>
</connectionPointIn>
</variable>
@@ -223,21 +223,21 @@
</outputVariables>
</block>
<inVariable localId="93" height="30" width="120" executionOrderId="0" negated="false">
- <position x="21" y="659"/>
+ <position x="21" y="703"/>
<connectionPointOut>
<relPosition x="120" y="15"/>
</connectionPointOut>
<expression>BOOL#1</expression>
</inVariable>
<block localId="94" width="100" height="145" typeName="TextCtrl" instanceName="Counter_TextCtrl" executionOrderId="0">
- <position x="876" y="730"/>
+ <position x="876" y="774"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="40"/>
<connection refLocalId="46">
- <position x="876" y="770"/>
- <position x="815" y="770"/>
+ <position x="876" y="814"/>
+ <position x="816" y="814"/>
</connection>
</connectionPointIn>
</variable>
@@ -245,8 +245,8 @@
<connectionPointIn>
<relPosition x="0" y="81"/>
<connection refLocalId="3">
- <position x="876" y="811"/>
- <position x="815" y="811"/>
+ <position x="876" y="855"/>
+ <position x="815" y="855"/>
</connection>
</connectionPointIn>
</variable>
@@ -254,8 +254,8 @@
<connectionPointIn>
<relPosition x="0" y="122"/>
<connection refLocalId="83" formalParameter="OUT">
- <position x="876" y="852"/>
- <position x="682" y="852"/>
+ <position x="876" y="896"/>
+ <position x="682" y="896"/>
</connection>
</connectionPointIn>
</variable>
@@ -264,21 +264,21 @@
<outputVariables/>
</block>
<inVariable localId="1" height="30" width="88" executionOrderId="0" negated="false">
- <position x="59" y="228"/>
+ <position x="59" y="272"/>
<connectionPointOut>
<relPosition x="88" y="15"/>
</connectionPointOut>
<expression>BOOL#1</expression>
</inVariable>
<block localId="95" width="100" height="130" typeName="Led" instanceName="State_LedCtrl" executionOrderId="0">
- <position x="876" y="545"/>
+ <position x="876" y="589"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="38"/>
<connection refLocalId="51">
- <position x="876" y="583"/>
- <position x="811" y="583"/>
+ <position x="876" y="627"/>
+ <position x="811" y="627"/>
</connection>
</connectionPointIn>
</variable>
@@ -286,8 +286,8 @@
<connectionPointIn>
<relPosition x="0" y="74"/>
<connection refLocalId="52">
- <position x="876" y="619"/>
- <position x="811" y="619"/>
+ <position x="876" y="663"/>
+ <position x="811" y="663"/>
</connection>
</connectionPointIn>
</variable>
@@ -295,8 +295,8 @@
<connectionPointIn>
<relPosition x="0" y="110"/>
<connection refLocalId="2">
- <position x="876" y="655"/>
- <position x="811" y="655"/>
+ <position x="876" y="699"/>
+ <position x="811" y="699"/>
</connection>
</connectionPointIn>
</variable>
@@ -305,18 +305,18 @@
<outputVariables/>
</block>
<block localId="96" width="80" height="65" typeName="AND" executionOrderId="0">
- <position x="200" y="190"/>
+ <position x="200" y="234"/>
<inputVariables>
<variable formalParameter="IN1" negated="true">
<connectionPointIn>
<relPosition x="0" y="31"/>
<connection refLocalId="96" formalParameter="OUT">
- <position x="200" y="221"/>
- <position x="175" y="221"/>
- <position x="175" y="175"/>
- <position x="305" y="175"/>
- <position x="305" y="221"/>
- <position x="280" y="221"/>
+ <position x="200" y="265"/>
+ <position x="175" y="265"/>
+ <position x="175" y="219"/>
+ <position x="305" y="219"/>
+ <position x="305" y="265"/>
+ <position x="280" y="265"/>
</connection>
</connectionPointIn>
</variable>
@@ -324,8 +324,8 @@
<connectionPointIn>
<relPosition x="0" y="53"/>
<connection refLocalId="1">
- <position x="200" y="243"/>
- <position x="147" y="243"/>
+ <position x="200" y="287"/>
+ <position x="147" y="287"/>
</connection>
</connectionPointIn>
</variable>
@@ -340,53 +340,53 @@
</outputVariables>
</block>
<connector name="CLOCK" localId="97" height="30" width="90">
- <position x="345" y="206"/>
+ <position x="345" y="250"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="96" formalParameter="OUT">
- <position x="345" y="221"/>
- <position x="280" y="221"/>
+ <position x="345" y="265"/>
+ <position x="280" y="265"/>
</connection>
</connectionPointIn>
</connector>
<connector name="COUNT" localId="98" height="30" width="90">
- <position x="461" y="575"/>
+ <position x="461" y="619"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="92" formalParameter="state_out">
- <position x="461" y="590"/>
- <position x="388" y="590"/>
+ <position x="461" y="634"/>
+ <position x="388" y="634"/>
</connection>
</connectionPointIn>
</connector>
<continuation name="COUNT" localId="2" height="30" width="120">
- <position x="691" y="640"/>
+ <position x="691" y="684"/>
<connectionPointOut>
<relPosition x="120" y="15"/>
</connectionPointOut>
</continuation>
<inVariable localId="4" height="35" width="85" executionOrderId="0" negated="false">
- <position x="419" y="835"/>
+ <position x="419" y="879"/>
<connectionPointOut>
<relPosition x="85" y="17"/>
</connectionPointOut>
<expression>counter</expression>
</inVariable>
<continuation name="COUNT" localId="5" height="30" width="90">
- <position x="504" y="261"/>
+ <position x="504" y="305"/>
<connectionPointOut>
<relPosition x="90" y="15"/>
</connectionPointOut>
</continuation>
<block localId="99" width="80" height="110" typeName="AND" executionOrderId="0">
- <position x="199" y="264"/>
+ <position x="199" y="308"/>
<inputVariables>
<variable formalParameter="IN1">
<connectionPointIn>
<relPosition x="0" y="42"/>
<connection refLocalId="39">
- <position x="199" y="306"/>
- <position x="144" y="306"/>
+ <position x="199" y="350"/>
+ <position x="144" y="350"/>
</connection>
</connectionPointIn>
</variable>
@@ -394,8 +394,8 @@
<connectionPointIn>
<relPosition x="0" y="87"/>
<connection refLocalId="6">
- <position x="199" y="351"/>
- <position x="144" y="351"/>
+ <position x="199" y="395"/>
+ <position x="144" y="395"/>
</connection>
</connectionPointIn>
</variable>
@@ -410,20 +410,20 @@
</outputVariables>
</block>
<continuation name="CLOCK" localId="6" height="30" width="90">
- <position x="54" y="336"/>
+ <position x="54" y="380"/>
<connectionPointOut>
<relPosition x="90" y="15"/>
</connectionPointOut>
</continuation>
<block localId="100" width="125" height="45" typeName="BOOL_TO_INT" executionOrderId="0">
- <position x="349" y="274"/>
+ <position x="349" y="318"/>
<inputVariables>
<variable formalParameter="IN">
<connectionPointIn>
<relPosition x="0" y="32"/>
<connection refLocalId="99" formalParameter="OUT">
- <position x="349" y="306"/>
- <position x="279" y="306"/>
+ <position x="349" y="350"/>
+ <position x="279" y="350"/>
</connection>
</connectionPointIn>
</variable>
@@ -438,13 +438,13 @@
</outputVariables>
</block>
<continuation name="CLOCK" localId="3" height="30" width="122">
- <position x="693" y="796"/>
+ <position x="693" y="840"/>
<connectionPointOut>
<relPosition x="122" y="15"/>
</connectionPointOut>
</continuation>
- <comment localId="101" height="164" width="977">
- <position x="27" y="8"/>
+ <comment localId="101" height="197" width="1001">
+ <position x="11" y="12"/>
<content>
<xhtml:p><![CDATA[This example shows how IEC program in PLC can interact with web interface.
@@ -459,7 +459,7 @@
</content>
</comment>
<comment localId="102" height="126" width="641">
- <position x="17" y="397"/>
+ <position x="17" y="441"/>
<content>
<xhtml:p><![CDATA[In this example basic elements like 'Button', 'Led' and 'Text' are used.
Back_id and sele_id inputs of these blocks are IDs of graphic primitives in SVG file.
--- a/tests/tools/check_source.sh Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/tools/check_source.sh Fri Nov 23 00:33:04 2018 +0100
@@ -52,6 +52,47 @@
echo ""
}
+
+python3_compile_checks()
+{
+ echo "Syntax checking using python3 ..."
+ python3 --version
+
+ # remove compiled Python files
+ find . -name '*.pyc' -exec rm -f {} \;
+
+ for i in $py_files; do
+ # echo $i
+ python3 -m py_compile $i
+ if [ $? -ne 0 ]; then
+ echo "Syntax error in $i"
+ set_exit_error
+ fi
+ done
+
+ # remove compiled Python files
+ find . -name '*.pyc' -exec rm -f {} \;
+
+ echo "DONE"
+ echo ""
+}
+
+localization_checks()
+{
+ echo "Check correct localization formats"
+ xgettext --version
+
+ for i in $py_files; do
+ xgettext -s --language=Python --package-name Beremiz --output=/tmp/m.pot $i 2>&1 | grep 'warning'
+ if [ $? -eq 0 ]; then
+ echo "Syntax error in $i"
+ set_exit_error
+ fi
+ done
+ echo "DONE"
+ echo ""
+}
+
# pep8 was renamed to pycodestyle
# detect existed version
pep8_detect()
@@ -116,6 +157,7 @@
user_select=$user_select,E228 # E228 missing whitespace around modulo operator
user_select=$user_select,W293 # W293 blank line contains whitespace
user_select=$user_select,E302 # E302 expected 2 blank lines, found 1
+ user_select=$user_select,E301 # E301 expected 2 blank lines, found 1
user_select=$user_select,E261 # E261 at least two spaces before inline comment
user_select=$user_select,E271 # E271 multiple spaces after keyword
user_select=$user_select,E231 # E231 missing whitespace after ','
@@ -225,6 +267,10 @@
disable=$disable,R0201 # (no-self-use) Method could be a function
disable=$disable,W0221 # (arguments-differ) Arguments number differs from overridden 'X' method
disable=$disable,C0201 # (consider-iterating-dictionary) Consider iterating the dictionary directly instead of calling .keys()
+ disable=$disable,W0201 # (attribute-defined-outside-init) Attribute 'X' defined outside __init__
+ disable=$disable,I1101 # (c-extension-no-member) Module 'lxml.etree' has not 'X' member,
+ # but source is unavailable. Consider adding this module to extension-pkg-whitelist
+ # if you want to perform analysis based on run-time introspection of living objects.
# It'd be nice to fix warnings below some day
disable=$disable,C0111 # missing-docstring
@@ -244,8 +290,11 @@
disable=$disable,R0916 # (too-many-boolean-expressions) Too many boolean expressions in if statement (6/5)
disable=$disable,R0101 # (too-many-nested-blocks) Too many nested blocks (7/5)
disable=$disable,R0801 # (duplicate-code) Similar lines in N files
-
-
+ disable=$disable,W0401 # (wildcard-import) Wildcard import
+ disable=$disable,W0614 # (unused-wildcard-import), ] Unused import X from wildcard import
+ disable=$disable,W0212 # (protected-access) Access to a protected member X of a Y class
+ disable=$disable,E1101 # (no-member) Instance of 'X' has no 'Y' member
+
enable=
enable=$enable,E1601 # print statement used
enable=$enable,C0325 # (superfluous-parens) Unnecessary parens after keyword
@@ -260,11 +309,9 @@
enable=$enable,W0101 # (unreachable) Unreachable code
enable=$enable,E0102 # (function-redefined) method already defined
enable=$enable,W0602 # (global-variable-not-assigned) Using global for 'X' but no assignment is done
- enable=$enable,W0612 # (unused-variable) Unused variable 'X'
enable=$enable,W0611 # (unused-import) Unused import X
enable=$enable,C1001 # (old-style-class) Old-style class defined. Problem with PyJS
enable=$enable,W0102 # (dangerous-default-value) Dangerous default value {} as argument
- enable=$enable,W0403 # (relative-import) Relative import 'Y', should be 'X.Y'
enable=$enable,C0112 # (empty-docstring)
enable=$enable,W0631 # (undefined-loop-variable) Using possibly undefined loop variable 'X'
enable=$enable,W0104 # (pointless-statement) Statement seems to have no effect
@@ -281,15 +328,25 @@
enable=$enable,E0213 # (no-self-argument) Method should have "self" as first argument
enable=$enable,E0401 # (import-error) Unable to import 'X'
enable=$enable,E1121 # (too-many-function-args) Too many positional arguments for function call
- enable=$enable,E0602 # (undefined-variable) Undefined variable 'X'
enable=$enable,W0232 # (no-init) Class has no __init__ method
enable=$enable,W0233 # (non-parent-init-called) __init__ method from a non direct base class 'X' is called
enable=$enable,W0601 # (global-variable-undefined) Global variable 'X' undefined at the module level
+ enable=$enable,W0111 # (assign-to-new-keyword) Name async will become a keyword in Python 3.7
enable=$enable,W0623 # (redefine-in-handler) Redefining name 'X' from outer scope (line Y) in exception handler
+ enable=$enable,W0109 # (duplicate-key) Duplicate key 'X' in dictionary
+ enable=$enable,E1310 # (bad-str-strip-call) Suspicious argument in str.strip call
+ enable=$enable,E1300 # (bad-format-character) Unsupported format character '"' (0x22) at index 17
+ enable=$enable,E1304 # (missing-format-string-key) Missing key 'X_name' in format string dictionary
+ enable=$enable,R1701 # (consider-merging-isinstance) Consider merging these isinstance calls to isinstance(CTNLDFLAGS, (str, unicode))
+ enable=$enable,R1704 # (redefined-argument-from-local) Redefining argument with the local name 'Y'
enable=$enable,W0106 # (expression-not-assigned) Expression "X" is assigned to nothing
+ enable=$enable,E1136 # (unsubscriptable-object) Value 'X' is unsubscriptable
+ enable=$enable,E0602 # (undefined-variable) Undefined variable 'X'
+ enable=$enable,W1618 # (no-absolute-import) import missing `from __future__ import absolute_import`
+ enable=$enable,W0403 # (relative-import) Relative import 'Y', should be 'X.Y '
+ enable=$enable,W0612 # (unused-variable) Unused variable 'X'
enable=$enable,C0330 # (bad-continuation) Wrong hanging indentation before block
- enable=$enable,E1136 # (unsubscriptable-object) Value 'X' is unsubscriptable
- enable=$enable,W1618 # (no-absolute-import) import missing `from __future__ import absolute_import`
+ enable=$enable,R0123 # (literal-comparison) Comparison to literal
# enable=
options=
@@ -316,7 +373,7 @@
get_files_to_check()
{
- py_files=$(find . -name '*.py' -not -path '*/build/*' -not -path './etherlab/*')
+ py_files=$(find . -name '*.py' -not -path '*/build/*')
if [ -e .hg/skiphook ]; then
echo "Skipping checks in the hook ..."
exit 0
@@ -375,7 +432,9 @@
main()
{
get_files_to_check $@
+ python3_compile_checks
compile_checks
+ localization_checks
pep8_checks_default
# pep8_checks_selected
--- a/tests/tools/test_application.py Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/tools/test_application.py Fri Nov 23 00:33:04 2018 +0100
@@ -30,6 +30,7 @@
import unittest
import time
+import six
import pytest
import wx
import ddt
@@ -71,7 +72,10 @@
def CheckForErrors(self):
if self.exc_info is not None:
# reraise catched previously exception
- raise self.exc_info[0], self.exc_info[1], self.exc_info[2]
+ exc_type = self.exc_info[0]
+ exc_value = self.exc_info[1]
+ exc_traceback = self.exc_info[2]
+ six.reraise(exc_type, exc_value, exc_traceback)
def ProcessEvents(self):
for dummy in range(0, 30):
--- a/tests/traffic_lights/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/traffic_lights/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="Beremiz" productName="Unnamed" productVersion="1" creationDateTime="2012-09-04T16:16:33"/>
- <contentHeader name="traffic_lights" modificationDateTime="2018-08-24T13:21:35">
+ <contentHeader name="traffic_lights" modificationDateTime="2018-09-26T17:49:02">
<coordinateInfo>
<fbd>
<scaling x="0" y="0"/>
@@ -176,10 +176,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="4" height="30" width="72" negated="false">
- <position x="79" y="171"/>
+ <inVariable localId="4" height="37" width="76" negated="false">
+ <position x="75" y="166"/>
<connectionPointOut>
- <relPosition x="72" y="15"/>
+ <relPosition x="76" y="18"/>
</connectionPointOut>
<expression>T#500ms</expression>
</inVariable>
@@ -337,10 +337,10 @@
</connectionPointOut>
<variable>ORANGE_LIGHT</variable>
</contact>
- <inVariable localId="15" height="30" width="72" negated="false">
- <position x="90" y="322"/>
+ <inVariable localId="15" height="36" width="77" negated="false">
+ <position x="85" y="317"/>
<connectionPointOut>
- <relPosition x="72" y="15"/>
+ <relPosition x="77" y="18"/>
</connectionPointOut>
<expression>T#500ms</expression>
</inVariable>
@@ -352,15 +352,15 @@
<transition name="STOP">
<body>
<FBD>
- <block localId="42" width="59" height="40" typeName="NOT">
- <position x="230" y="40"/>
+ <block localId="42" width="59" height="53" typeName="NOT" executionOrderId="0">
+ <position x="237" y="31"/>
<inputVariables>
<variable formalParameter="IN">
<connectionPointIn>
- <relPosition x="0" y="30"/>
+ <relPosition x="0" y="36"/>
<connection refLocalId="43">
- <position x="230" y="70"/>
- <position x="202" y="70"/>
+ <position x="237" y="67"/>
+ <position x="202" y="67"/>
</connection>
</connectionPointIn>
</variable>
@@ -369,27 +369,25 @@
<outputVariables>
<variable formalParameter="OUT">
<connectionPointOut>
- <relPosition x="59" y="30"/>
+ <relPosition x="59" y="36"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
- <inVariable localId="43" height="30" width="156" executionOrderId="0" negated="false">
- <position x="46" y="57"/>
+ <inVariable localId="43" height="39" width="164" executionOrderId="0" negated="false">
+ <position x="38" y="48"/>
<connectionPointOut>
- <relPosition x="156" y="15"/>
+ <relPosition x="164" y="19"/>
</connectionPointOut>
<expression>SWITCH_BUTTON</expression>
</inVariable>
- <outVariable localId="44" height="30" width="46" executionOrderId="0" negated="false">
- <position x="351" y="57"/>
- <connectionPointIn>
- <relPosition x="0" y="15"/>
+ <outVariable localId="44" height="40" width="46" executionOrderId="0" negated="false">
+ <position x="351" y="47"/>
+ <connectionPointIn>
+ <relPosition x="0" y="20"/>
<connection refLocalId="42" formalParameter="OUT">
- <position x="351" y="72"/>
- <position x="320" y="72"/>
- <position x="320" y="70"/>
- <position x="289" y="70"/>
+ <position x="351" y="67"/>
+ <position x="296" y="67"/>
</connection>
</connectionPointIn>
<expression>STOP</expression>
@@ -400,32 +398,32 @@
</transitions>
<body>
<SFC>
- <step localId="1" height="37" width="78" name="Standstill" initialStep="true">
- <position x="530" y="31"/>
- <connectionPointIn>
- <relPosition x="39" y="0"/>
+ <step localId="1" height="37" width="121" name="Standstill" initialStep="true">
+ <position x="509" y="31"/>
+ <connectionPointIn>
+ <relPosition x="60" y="0"/>
<connection refLocalId="39">
<position x="569" y="31"/>
<position x="569" y="11"/>
- <position x="980" y="11"/>
- <position x="980" y="1151"/>
+ <position x="963" y="11"/>
+ <position x="963" y="1151"/>
<position x="776" y="1151"/>
<position x="776" y="1097"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
- <relPosition x="39" y="37"/>
+ <relPosition x="60" y="37"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
- <relPosition x="78" y="18"/>
+ <relPosition x="121" y="18"/>
</connectionPointOutAction>
</step>
<transition localId="2" height="2" width="20">
- <position x="559" y="225"/>
+ <position x="559" y="222"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="1">
- <position x="569" y="225"/>
+ <position x="569" y="222"/>
<position x="569" y="68"/>
</connection>
</connectionPointIn>
@@ -440,20 +438,20 @@
</inline>
</condition>
</transition>
- <step localId="3" height="30" width="69" name="ORANGE">
- <position x="535" y="252"/>
- <connectionPointIn>
- <relPosition x="34" y="0"/>
+ <step localId="3" height="30" width="118" name="ORANGE">
+ <position x="510" y="250"/>
+ <connectionPointIn>
+ <relPosition x="59" y="0"/>
<connection refLocalId="2">
- <position x="569" y="252"/>
- <position x="569" y="227"/>
+ <position x="569" y="250"/>
+ <position x="569" y="224"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
- <relPosition x="34" y="30"/>
+ <relPosition x="59" y="30"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
- <relPosition x="69" y="15"/>
+ <relPosition x="118" y="15"/>
</connectionPointOutAction>
</step>
<transition localId="6" height="2" width="20">
@@ -482,7 +480,7 @@
<relPosition x="0" y="15"/>
<connection refLocalId="1">
<position x="711" y="49"/>
- <position x="608" y="49"/>
+ <position x="630" y="49"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="P">
@@ -520,7 +518,7 @@
<relPosition x="0" y="15"/>
<connection refLocalId="3">
<position x="711" y="265"/>
- <position x="604" y="265"/>
+ <position x="628" y="265"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="R">
@@ -540,20 +538,20 @@
<reference name="STOP_CARS"/>
</action>
</actionBlock>
- <step localId="10" height="34" width="37" name="RED">
- <position x="551" y="411"/>
- <connectionPointIn>
- <relPosition x="18" y="0"/>
+ <step localId="10" height="34" width="92" name="RED">
+ <position x="523" y="411"/>
+ <connectionPointIn>
+ <relPosition x="46" y="0"/>
<connection refLocalId="6">
<position x="569" y="411"/>
<position x="569" y="378"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
- <relPosition x="18" y="34"/>
+ <relPosition x="46" y="34"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
- <relPosition x="37" y="17"/>
+ <relPosition x="92" y="17"/>
</connectionPointOutAction>
</step>
<actionBlock localId="11" width="235" height="103">
@@ -562,7 +560,7 @@
<relPosition x="0" y="15"/>
<connection refLocalId="10">
<position x="710" y="428"/>
- <position x="588" y="428"/>
+ <position x="615" y="428"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="R">
@@ -604,7 +602,7 @@
<relPosition x="154" y="0"/>
<connection refLocalId="3">
<position x="569" y="335"/>
- <position x="569" y="279"/>
+ <position x="569" y="280"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
@@ -657,11 +655,11 @@
</condition>
</transition>
<jumpStep localId="5" height="13" width="12" targetName="Standstill">
- <position x="404" y="569"/>
+ <position x="404" y="553"/>
<connectionPointIn>
<relPosition x="6" y="0"/>
<connection refLocalId="4">
- <position x="410" y="569"/>
+ <position x="410" y="553"/>
<position x="410" y="530"/>
</connection>
</connectionPointIn>
@@ -682,20 +680,20 @@
<relPosition x="159" y="1"/>
</connectionPointOut>
</selectionDivergence>
- <step localId="18" height="30" width="148" name="PEDESTRIAN_GREEN">
- <position x="495" y="575"/>
- <connectionPointIn>
- <relPosition x="74" y="0"/>
+ <step localId="18" height="32" width="177" name="PEDESTRIAN_GREEN">
+ <position x="481" y="572"/>
+ <connectionPointIn>
+ <relPosition x="88" y="0"/>
<connection refLocalId="12">
- <position x="569" y="575"/>
+ <position x="569" y="572"/>
<position x="569" y="535"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
- <relPosition x="74" y="30"/>
+ <relPosition x="88" y="32"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
- <relPosition x="148" y="15"/>
+ <relPosition x="177" y="16"/>
</connectionPointOutAction>
</step>
<actionBlock localId="19" width="247" height="110">
@@ -704,9 +702,7 @@
<relPosition x="0" y="15"/>
<connection refLocalId="18">
<position x="708" y="588"/>
- <position x="675" y="588"/>
- <position x="675" y="590"/>
- <position x="643" y="590"/>
+ <position x="658" y="588"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="S">
@@ -758,7 +754,9 @@
<relPosition x="159" y="0"/>
<connection refLocalId="18">
<position x="569" y="625"/>
- <position x="569" y="602"/>
+ <position x="569" y="615"/>
+ <position x="569" y="615"/>
+ <position x="569" y="604"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
@@ -789,11 +787,11 @@
</condition>
</transition>
<step localId="24" height="30" width="148" name="PEDESTRIAN_RED">
- <position x="495" y="750"/>
+ <position x="495" y="748"/>
<connectionPointIn>
<relPosition x="74" y="0"/>
<connection refLocalId="23">
- <position x="569" y="750"/>
+ <position x="569" y="748"/>
<position x="569" y="711"/>
</connection>
</connectionPointIn>
@@ -810,9 +808,7 @@
<relPosition x="0" y="15"/>
<connection refLocalId="24">
<position x="708" y="763"/>
- <position x="675" y="763"/>
- <position x="675" y="765"/>
- <position x="643" y="765"/>
+ <position x="643" y="763"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="S">
@@ -865,7 +861,7 @@
<relPosition x="159" y="0"/>
<connection refLocalId="24">
<position x="569" y="815"/>
- <position x="569" y="777"/>
+ <position x="569" y="778"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
@@ -895,20 +891,20 @@
</inline>
</condition>
</transition>
- <step localId="30" height="30" width="56" name="GREEN">
- <position x="541" y="933"/>
- <connectionPointIn>
- <relPosition x="28" y="0"/>
+ <step localId="30" height="33" width="92" name="GREEN">
+ <position x="523" y="930"/>
+ <connectionPointIn>
+ <relPosition x="46" y="0"/>
<connection refLocalId="29">
- <position x="569" y="933"/>
+ <position x="569" y="930"/>
<position x="569" y="881"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
- <relPosition x="28" y="30"/>
+ <relPosition x="46" y="33"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
- <relPosition x="56" y="15"/>
+ <relPosition x="92" y="16"/>
</connectionPointOutAction>
</step>
<actionBlock localId="31" width="227" height="110">
@@ -917,7 +913,7 @@
<relPosition x="0" y="15"/>
<connection refLocalId="30">
<position x="709" y="946"/>
- <position x="597" y="946"/>
+ <position x="615" y="946"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="S">
@@ -943,7 +939,7 @@
<position x="308" y="1091"/>
<position x="291" y="1091"/>
<position x="291" y="1065"/>
- <position x="274" y="1065"/>
+ <position x="275" y="1065"/>
</connection>
</connectionPointIn>
</variable>
@@ -971,17 +967,17 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="33" height="30" width="159" negated="false">
- <position x="24" y="1052"/>
- <connectionPointOut>
- <relPosition x="159" y="15"/>
+ <inVariable localId="33" height="36" width="168" negated="false">
+ <position x="15" y="1047"/>
+ <connectionPointOut>
+ <relPosition x="168" y="18"/>
</connectionPointOut>
<expression>PEDESTRIAN_BUTTON</expression>
</inVariable>
- <inVariable localId="34" height="30" width="43" negated="false">
- <position x="227" y="1115"/>
- <connectionPointOut>
- <relPosition x="43" y="15"/>
+ <inVariable localId="34" height="33" width="53" negated="false">
+ <position x="217" y="1112"/>
+ <connectionPointOut>
+ <relPosition x="53" y="16"/>
</connectionPointOut>
<expression>T#2s</expression>
</inVariable>
@@ -1052,7 +1048,7 @@
<relPosition x="0" y="0"/>
<connection refLocalId="30">
<position x="569" y="1059"/>
- <position x="569" y="960"/>
+ <position x="569" y="963"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
@@ -1100,9 +1096,7 @@
<relPosition x="0" y="30"/>
<connection refLocalId="33">
<position x="224" y="1065"/>
- <position x="203" y="1065"/>
- <position x="203" y="1067"/>
- <position x="183" y="1067"/>
+ <position x="183" y="1065"/>
</connection>
</connectionPointIn>
</variable>
@@ -1129,8 +1123,8 @@
</variable>
</outputVariables>
</block>
- <comment localId="45" height="907" width="645">
- <position x="1021" y="21"/>
+ <comment localId="45" height="767" width="753">
+ <position x="973" y="21"/>
<content>
<xhtml:p><![CDATA[*** Description of SFC action qualifiers ***
@@ -1211,8 +1205,7 @@
<comment localId="13" height="86" width="379">
<position x="9" y="28"/>
<content>
- <xhtml:p><![CDATA[
-Sequential function chart (SFC) is commonly used to describe state machines.]]></xhtml:p>
+ <xhtml:p><![CDATA[Sequential function chart (SFC) is commonly used to describe state machines.]]></xhtml:p>
</content>
</comment>
</SFC>
@@ -1266,14 +1259,14 @@
<body>
<FBD>
<block localId="1" width="350" height="836" typeName="traffic_light_sequence" instanceName="trafic_light_sequence0" executionOrderId="0">
- <position x="470" y="406"/>
+ <position x="494" y="462"/>
<inputVariables>
<variable formalParameter="SWITCH_BUTTON">
<connectionPointIn>
<relPosition x="0" y="101"/>
<connection refLocalId="2" formalParameter="state_out">
- <position x="470" y="507"/>
- <position x="333" y="507"/>
+ <position x="494" y="563"/>
+ <position x="349" y="563"/>
</connection>
</connectionPointIn>
</variable>
@@ -1281,10 +1274,10 @@
<connectionPointIn>
<relPosition x="0" y="264"/>
<connection refLocalId="3" formalParameter="state_out">
- <position x="470" y="670"/>
- <position x="402" y="670"/>
- <position x="402" y="721"/>
- <position x="335" y="721"/>
+ <position x="494" y="726"/>
+ <position x="402" y="726"/>
+ <position x="402" y="777"/>
+ <position x="351" y="777"/>
</connection>
</connectionPointIn>
</variable>
@@ -1318,15 +1311,15 @@
</variable>
</outputVariables>
</block>
- <block localId="2" width="143" height="183" typeName="Button" instanceName="SwitchButton" executionOrderId="0">
- <position x="190" y="471"/>
+ <block localId="2" width="159" height="183" typeName="Button" instanceName="SwitchButton" executionOrderId="0">
+ <position x="190" y="527"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="36"/>
<connection refLocalId="5">
- <position x="190" y="507"/>
- <position x="136" y="507"/>
+ <position x="190" y="563"/>
+ <position x="137" y="563"/>
</connection>
</connectionPointIn>
</variable>
@@ -1334,8 +1327,8 @@
<connectionPointIn>
<relPosition x="0" y="68"/>
<connection refLocalId="6">
- <position x="190" y="539"/>
- <position x="136" y="539"/>
+ <position x="190" y="595"/>
+ <position x="136" y="595"/>
</connection>
</connectionPointIn>
</variable>
@@ -1343,8 +1336,8 @@
<connectionPointIn>
<relPosition x="0" y="100"/>
<connection refLocalId="4">
- <position x="190" y="571"/>
- <position x="136" y="571"/>
+ <position x="190" y="627"/>
+ <position x="136" y="627"/>
</connection>
</connectionPointIn>
</variable>
@@ -1363,20 +1356,20 @@
<outputVariables>
<variable formalParameter="state_out">
<connectionPointOut>
- <relPosition x="143" y="36"/>
+ <relPosition x="159" y="36"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
- <block localId="3" width="143" height="198" typeName="Button" instanceName="PedestrianButton" executionOrderId="0">
- <position x="192" y="684"/>
+ <block localId="3" width="159" height="198" typeName="Button" instanceName="PedestrianButton" executionOrderId="0">
+ <position x="192" y="740"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="37"/>
<connection refLocalId="7">
- <position x="192" y="721"/>
- <position x="159" y="721"/>
+ <position x="192" y="777"/>
+ <position x="160" y="777"/>
</connection>
</connectionPointIn>
</variable>
@@ -1384,8 +1377,8 @@
<connectionPointIn>
<relPosition x="0" y="72"/>
<connection refLocalId="8">
- <position x="192" y="756"/>
- <position x="159" y="756"/>
+ <position x="192" y="812"/>
+ <position x="159" y="812"/>
</connection>
</connectionPointIn>
</variable>
@@ -1409,55 +1402,55 @@
<outputVariables>
<variable formalParameter="state_out">
<connectionPointOut>
- <relPosition x="143" y="37"/>
+ <relPosition x="159" y="37"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
<inVariable localId="4" height="30" width="18" executionOrderId="0" negated="false">
- <position x="118" y="558"/>
+ <position x="118" y="612"/>
<connectionPointOut>
<relPosition x="18" y="15"/>
</connectionPointOut>
<expression>1</expression>
</inVariable>
- <inVariable localId="5" height="30" width="105" executionOrderId="0" negated="false">
- <position x="31" y="494"/>
- <connectionPointOut>
- <relPosition x="105" y="15"/>
+ <inVariable localId="5" height="30" width="106" executionOrderId="0" negated="false">
+ <position x="31" y="548"/>
+ <connectionPointOut>
+ <relPosition x="106" y="15"/>
</connectionPointOut>
<expression>'SWITCH_OFF'</expression>
</inVariable>
<inVariable localId="6" height="30" width="105" executionOrderId="0" negated="false">
- <position x="31" y="526"/>
+ <position x="31" y="580"/>
<connectionPointOut>
<relPosition x="105" y="15"/>
</connectionPointOut>
<expression>'SWITCH_ON'</expression>
</inVariable>
- <inVariable localId="7" height="30" width="137" executionOrderId="0" negated="false">
- <position x="22" y="708"/>
- <connectionPointOut>
- <relPosition x="137" y="15"/>
+ <inVariable localId="7" height="30" width="138" executionOrderId="0" negated="false">
+ <position x="22" y="762"/>
+ <connectionPointOut>
+ <relPosition x="138" y="15"/>
</connectionPointOut>
<expression>'PEDESTRIAN_OFF'</expression>
</inVariable>
<inVariable localId="8" height="30" width="137" executionOrderId="0" negated="false">
- <position x="22" y="743"/>
+ <position x="22" y="797"/>
<connectionPointOut>
<relPosition x="137" y="15"/>
</connectionPointOut>
<expression>'PEDESTRIAN_ON'</expression>
</inVariable>
<block localId="9" width="115" height="133" typeName="Led" instanceName="RedLight" executionOrderId="0">
- <position x="1057" y="395"/>
+ <position x="1057" y="451"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="38"/>
<connection refLocalId="10">
- <position x="1057" y="433"/>
- <position x="1010" y="433"/>
+ <position x="1057" y="489"/>
+ <position x="1013" y="489"/>
</connection>
</connectionPointIn>
</variable>
@@ -1465,8 +1458,8 @@
<connectionPointIn>
<relPosition x="0" y="75"/>
<connection refLocalId="11">
- <position x="1057" y="470"/>
- <position x="1010" y="470"/>
+ <position x="1057" y="526"/>
+ <position x="1010" y="526"/>
</connection>
</connectionPointIn>
</variable>
@@ -1474,8 +1467,8 @@
<connectionPointIn>
<relPosition x="0" y="112"/>
<connection refLocalId="1" formalParameter="RED_LIGHT">
- <position x="1057" y="507"/>
- <position x="819" y="507"/>
+ <position x="1057" y="563"/>
+ <position x="844" y="563"/>
</connection>
</connectionPointIn>
</variable>
@@ -1483,29 +1476,29 @@
<inOutVariables/>
<outputVariables/>
</block>
- <inVariable localId="10" height="30" width="79" executionOrderId="0" negated="false">
- <position x="931" y="420"/>
- <connectionPointOut>
- <relPosition x="79" y="15"/>
+ <inVariable localId="10" height="30" width="82" executionOrderId="0" negated="false">
+ <position x="931" y="474"/>
+ <connectionPointOut>
+ <relPosition x="82" y="15"/>
</connectionPointOut>
<expression>'RED_OFF'</expression>
</inVariable>
<inVariable localId="11" height="30" width="79" executionOrderId="0" negated="false">
- <position x="931" y="457"/>
+ <position x="931" y="511"/>
<connectionPointOut>
<relPosition x="79" y="15"/>
</connectionPointOut>
<expression>'RED_ON'</expression>
</inVariable>
<block localId="12" width="115" height="133" typeName="Led" instanceName="OrangeLight" executionOrderId="0">
- <position x="1058" y="558"/>
+ <position x="1058" y="614"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="38"/>
<connection refLocalId="13">
- <position x="1058" y="596"/>
- <position x="1010" y="596"/>
+ <position x="1058" y="652"/>
+ <position x="1010" y="652"/>
</connection>
</connectionPointIn>
</variable>
@@ -1513,8 +1506,8 @@
<connectionPointIn>
<relPosition x="0" y="75"/>
<connection refLocalId="14">
- <position x="1058" y="633"/>
- <position x="1010" y="633"/>
+ <position x="1058" y="689"/>
+ <position x="1010" y="689"/>
</connection>
</connectionPointIn>
</variable>
@@ -1522,8 +1515,8 @@
<connectionPointIn>
<relPosition x="0" y="112"/>
<connection refLocalId="1" formalParameter="ORANGE_LIGHT">
- <position x="1058" y="670"/>
- <position x="819" y="670"/>
+ <position x="1058" y="726"/>
+ <position x="844" y="726"/>
</connection>
</connectionPointIn>
</variable>
@@ -1532,28 +1525,28 @@
<outputVariables/>
</block>
<inVariable localId="13" height="30" width="111" executionOrderId="0" negated="false">
- <position x="899" y="583"/>
+ <position x="899" y="637"/>
<connectionPointOut>
<relPosition x="111" y="15"/>
</connectionPointOut>
<expression>'ORANGE_OFF'</expression>
</inVariable>
<inVariable localId="14" height="30" width="106" executionOrderId="0" negated="false">
- <position x="904" y="620"/>
+ <position x="904" y="674"/>
<connectionPointOut>
<relPosition x="106" y="15"/>
</connectionPointOut>
<expression>'ORANGE_ON'</expression>
</inVariable>
<block localId="15" width="115" height="133" typeName="Led" instanceName="GreenLight" executionOrderId="0">
- <position x="1058" y="721"/>
+ <position x="1058" y="777"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="38"/>
<connection refLocalId="16">
- <position x="1058" y="759"/>
- <position x="1010" y="759"/>
+ <position x="1058" y="815"/>
+ <position x="1010" y="815"/>
</connection>
</connectionPointIn>
</variable>
@@ -1561,8 +1554,8 @@
<connectionPointIn>
<relPosition x="0" y="75"/>
<connection refLocalId="17">
- <position x="1058" y="796"/>
- <position x="1010" y="796"/>
+ <position x="1058" y="852"/>
+ <position x="1010" y="852"/>
</connection>
</connectionPointIn>
</variable>
@@ -1570,8 +1563,8 @@
<connectionPointIn>
<relPosition x="0" y="112"/>
<connection refLocalId="1" formalParameter="GREEN_LIGHT">
- <position x="1058" y="833"/>
- <position x="819" y="833"/>
+ <position x="1058" y="889"/>
+ <position x="844" y="889"/>
</connection>
</connectionPointIn>
</variable>
@@ -1580,28 +1573,28 @@
<outputVariables/>
</block>
<inVariable localId="16" height="30" width="111" executionOrderId="0" negated="false">
- <position x="899" y="746"/>
+ <position x="899" y="800"/>
<connectionPointOut>
<relPosition x="111" y="15"/>
</connectionPointOut>
<expression>'GREEN_OFF'</expression>
</inVariable>
<inVariable localId="17" height="30" width="106" executionOrderId="0" negated="false">
- <position x="904" y="783"/>
+ <position x="904" y="837"/>
<connectionPointOut>
<relPosition x="106" y="15"/>
</connectionPointOut>
<expression>'GREEN_ON'</expression>
</inVariable>
<block localId="18" width="115" height="133" typeName="Led" instanceName="PedestrianRedLight" executionOrderId="0">
- <position x="1059" y="884"/>
+ <position x="1059" y="940"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="38"/>
<connection refLocalId="19">
- <position x="1059" y="922"/>
- <position x="1020" y="922"/>
+ <position x="1059" y="978"/>
+ <position x="1020" y="978"/>
</connection>
</connectionPointIn>
</variable>
@@ -1609,8 +1602,8 @@
<connectionPointIn>
<relPosition x="0" y="75"/>
<connection refLocalId="20">
- <position x="1059" y="959"/>
- <position x="1020" y="959"/>
+ <position x="1059" y="1015"/>
+ <position x="1020" y="1015"/>
</connection>
</connectionPointIn>
</variable>
@@ -1618,8 +1611,8 @@
<connectionPointIn>
<relPosition x="0" y="112"/>
<connection refLocalId="1" formalParameter="PEDESTRIAN_RED_LIGHT">
- <position x="1059" y="996"/>
- <position x="819" y="996"/>
+ <position x="1059" y="1052"/>
+ <position x="844" y="1052"/>
</connection>
</connectionPointIn>
</variable>
@@ -1628,28 +1621,28 @@
<outputVariables/>
</block>
<inVariable localId="19" height="30" width="171" executionOrderId="0" negated="false">
- <position x="849" y="909"/>
+ <position x="849" y="963"/>
<connectionPointOut>
<relPosition x="171" y="15"/>
</connectionPointOut>
<expression>'PEDESTRIAN_RED_OFF'</expression>
</inVariable>
<inVariable localId="20" height="30" width="166" executionOrderId="0" negated="false">
- <position x="854" y="946"/>
+ <position x="854" y="1000"/>
<connectionPointOut>
<relPosition x="166" y="15"/>
</connectionPointOut>
<expression>'PEDESTRIAN_RED_ON'</expression>
</inVariable>
<block localId="21" width="115" height="133" typeName="Led" instanceName="PedestrianGreenLight" executionOrderId="0">
- <position x="1059" y="1047"/>
+ <position x="1059" y="1103"/>
<inputVariables>
<variable formalParameter="back_id">
<connectionPointIn>
<relPosition x="0" y="38"/>
<connection refLocalId="22">
- <position x="1059" y="1085"/>
- <position x="1035" y="1085"/>
+ <position x="1059" y="1141"/>
+ <position x="1035" y="1141"/>
</connection>
</connectionPointIn>
</variable>
@@ -1657,8 +1650,8 @@
<connectionPointIn>
<relPosition x="0" y="75"/>
<connection refLocalId="23">
- <position x="1059" y="1122"/>
- <position x="1035" y="1122"/>
+ <position x="1059" y="1178"/>
+ <position x="1035" y="1178"/>
</connection>
</connectionPointIn>
</variable>
@@ -1666,8 +1659,8 @@
<connectionPointIn>
<relPosition x="0" y="112"/>
<connection refLocalId="1" formalParameter="PEDESTRIAN_GREEN_LIGHT">
- <position x="1059" y="1159"/>
- <position x="819" y="1159"/>
+ <position x="1059" y="1215"/>
+ <position x="844" y="1215"/>
</connection>
</connectionPointIn>
</variable>
@@ -1676,14 +1669,14 @@
<outputVariables/>
</block>
<inVariable localId="22" height="30" width="190" executionOrderId="0" negated="false">
- <position x="845" y="1072"/>
+ <position x="845" y="1126"/>
<connectionPointOut>
<relPosition x="190" y="15"/>
</connectionPointOut>
<expression>'PEDESTRIAN_GREEN_OFF'</expression>
</inVariable>
<inVariable localId="23" height="30" width="185" executionOrderId="0" negated="false">
- <position x="850" y="1109"/>
+ <position x="850" y="1163"/>
<connectionPointOut>
<relPosition x="185" y="15"/>
</connectionPointOut>
@@ -1711,14 +1704,13 @@
]]></xhtml:p>
</content>
</comment>
- <comment localId="102" height="144" width="444">
- <position x="20" y="303"/>
+ <comment localId="102" height="134" width="734">
+ <position x="21" y="303"/>
<content>
<xhtml:p><![CDATA[In this example FB like 'Button', 'Led' and 'Text' are used.
-Back_id and sele_id inputs of these blocks are IDs of
-graphic primitives in SVG file.
-This is the way how elements in SVG are bound to elements
-in PLC program. You can find out or edit these IDs in Inkscape.]]></xhtml:p>
+Back_id and sele_id inputs of these blocks are IDs of graphic primitives in SVG file.
+This is the way how elements in SVG are bound to elements in PLC program.
+You can find out or edit these IDs in Inkscape.]]></xhtml:p>
</content>
</comment>
</FBD>
--- a/tests/wxHMI/plc.xml Thu Nov 22 23:39:54 2018 +0100
+++ b/tests/wxHMI/plc.xml Fri Nov 23 00:33:04 2018 +0100
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="Unknown" productName="Beremiz" productVersion="1" creationDateTime="2012-09-12T23:30:19"/>
- <contentHeader name="extended wxHMI example" modificationDateTime="2017-06-06T13:13:18">
+ <contentHeader name="extended wxHMI example" modificationDateTime="2018-09-26T14:07:02">
<coordinateInfo>
<pageSize x="1050" y="1485"/>
<fbd>
@@ -280,7 +280,7 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="298" executionOrderId="0" height="35" width="70" negated="false">
+ <outVariable localId="298" executionOrderId="0" height="35" width="74" negated="false">
<position x="435" y="800"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
@@ -288,7 +288,7 @@
<position x="435" y="815"/>
<position x="375" y="815"/>
<position x="375" y="815"/>
- <position x="400" y="815"/>
+ <position x="416" y="815"/>
</connection>
</connectionPointIn>
<expression>XaxisPos</expression>
@@ -300,10 +300,10 @@
</connectionPointOut>
<expression>power</expression>
</inVariable>
- <inVariable localId="299" executionOrderId="0" height="35" width="85" negated="false">
+ <inVariable localId="299" executionOrderId="0" height="35" width="90" negated="false">
<position x="25" y="890"/>
<connectionPointOut>
- <relPosition x="85" y="15"/>
+ <relPosition x="90" y="15"/>
</connectionPointOut>
<expression>XAxisMinus</expression>
</inVariable>
@@ -412,7 +412,7 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="6" executionOrderId="0" height="35" width="70" negated="false">
+ <outVariable localId="6" executionOrderId="0" height="35" width="74" negated="false">
<position x="955" y="795"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
@@ -423,10 +423,10 @@
</connectionPointIn>
<expression>YaxisPos</expression>
</outVariable>
- <inVariable localId="7" executionOrderId="0" height="35" width="85" negated="false">
+ <inVariable localId="7" executionOrderId="0" height="35" width="90" negated="false">
<position x="560" y="885"/>
<connectionPointOut>
- <relPosition x="85" y="15"/>
+ <relPosition x="90" y="15"/>
</connectionPointOut>
<expression>YAxisMinus</expression>
</inVariable>
@@ -535,7 +535,7 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="14" executionOrderId="0" height="35" width="70" negated="false">
+ <outVariable localId="14" executionOrderId="0" height="35" width="74" negated="false">
<position x="960" y="1035"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
@@ -604,7 +604,7 @@
</variable>
</outputVariables>
</block>
- <outVariable localId="18" executionOrderId="0" height="35" width="70" negated="false">
+ <outVariable localId="18" executionOrderId="0" height="35" width="74" negated="false">
<position x="435" y="1040"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
@@ -615,10 +615,10 @@
</connectionPointIn>
<expression>ZaxisPos</expression>
</outVariable>
- <inVariable localId="19" executionOrderId="0" height="35" width="85" negated="false">
+ <inVariable localId="19" executionOrderId="0" height="35" width="90" negated="false">
<position x="25" y="1130"/>
<connectionPointOut>
- <relPosition x="85" y="15"/>
+ <relPosition x="90" y="15"/>
</connectionPointOut>
<expression>ZAxisMinus</expression>
</inVariable>
@@ -706,10 +706,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="23" executionOrderId="0" height="35" width="85" negated="false">
+ <inVariable localId="23" executionOrderId="0" height="35" width="90" negated="false">
<position x="560" y="1125"/>
<connectionPointOut>
- <relPosition x="85" y="15"/>
+ <relPosition x="90" y="15"/>
</connectionPointOut>
<expression>TAxisMinus</expression>
</inVariable>
@@ -800,10 +800,10 @@
</variable>
</outputVariables>
</block>
- <inVariable localId="29" executionOrderId="0" height="30" width="95" negated="false">
+ <inVariable localId="29" executionOrderId="0" height="30" width="98" negated="false">
<position x="40" y="485"/>
<connectionPointOut>
- <relPosition x="95" y="15"/>
+ <relPosition x="98" y="15"/>
</connectionPointOut>
<expression>DrawTestBtn</expression>
</inVariable>
@@ -967,13 +967,13 @@
<body>
<FBD>
<block localId="220" typeName="python_poll" instanceName="python_poll0" executionOrderId="0" height="85" width="104">
- <position x="295" y="130"/>
+ <position x="338" y="130"/>
<inputVariables>
<variable formalParameter="TRIG">
<connectionPointIn>
<relPosition x="0" y="35"/>
<connection refLocalId="221">
- <position x="295" y="165"/>
+ <position x="338" y="165"/>
<position x="268" y="165"/>
</connection>
</connectionPointIn>
@@ -982,8 +982,8 @@
<connectionPointIn>
<relPosition x="0" y="70"/>
<connection refLocalId="222">
- <position x="295" y="200"/>
- <position x="271" y="200"/>
+ <position x="338" y="200"/>
+ <position x="296" y="200"/>
</connection>
</connectionPointIn>
</variable>
@@ -1009,10 +1009,10 @@
</connectionPointOut>
<expression>BOOL#TRUE</expression>
</inVariable>
- <inVariable localId="222" executionOrderId="0" height="30" width="161" negated="false">
+ <inVariable localId="222" executionOrderId="0" height="30" width="186" negated="false">
<position x="110" y="185"/>
<connectionPointOut>
- <relPosition x="161" y="15"/>
+ <relPosition x="186" y="15"/>
</connectionPointOut>
<expression>'wxglade_hmi.UpdPos()'</expression>
</inVariable>
@@ -1053,25 +1053,25 @@
</interface>
<body>
<FBD>
- <inVariable localId="127" executionOrderId="0" height="30" width="72" negated="false">
+ <inVariable localId="127" executionOrderId="0" height="30" width="82" negated="false">
<position x="60" y="180"/>
<connectionPointOut>
- <relPosition x="72" y="15"/>
+ <relPosition x="82" y="15"/>
</connectionPointOut>
<expression>InitValue</expression>
</inVariable>
- <outVariable localId="128" executionOrderId="0" height="30" width="145" negated="false">
+ <outVariable localId="128" executionOrderId="0" height="30" width="235" negated="false">
<position x="180" y="180"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="127">
<position x="180" y="195"/>
- <position x="132" y="195"/>
+ <position x="142" y="195"/>
</connection>
</connectionPointIn>
<expression>NotInitializedVariable</expression>
</outVariable>
- <comment localId="129" height="90" width="360">
+ <comment localId="129" height="90" width="395">
<position x="65" y="40"/>
<content>
<xhtml:p><![CDATA[This program called only once at start.
@@ -1079,18 +1079,18 @@
</content>
</comment>
<block localId="131" typeName="ADD" executionOrderId="0" height="95" width="70">
- <position x="135" y="340"/>
+ <position x="160" y="340"/>
<inputVariables>
<variable formalParameter="IN1">
<connectionPointIn>
<relPosition x="0" y="40"/>
<connection refLocalId="130">
- <position x="135" y="380"/>
+ <position x="160" y="380"/>
<position x="125" y="380"/>
<position x="125" y="325"/>
- <position x="350" y="325"/>
- <position x="350" y="380"/>
- <position x="335" y="380"/>
+ <position x="380" y="325"/>
+ <position x="380" y="380"/>
+ <position x="365" y="380"/>
</connection>
</connectionPointIn>
</variable>
@@ -1098,9 +1098,7 @@
<connectionPointIn>
<relPosition x="0" y="75"/>
<connection refLocalId="1">
- <position x="135" y="415"/>
- <position x="130" y="415"/>
- <position x="130" y="415"/>
+ <position x="160" y="415"/>
<position x="120" y="415"/>
</connection>
</connectionPointIn>
@@ -1122,21 +1120,21 @@
</connectionPointOut>
<expression>1</expression>
</inVariable>
- <inOutVariable localId="130" executionOrderId="0" height="35" width="60" negatedOut="false" negatedIn="false">
+ <inOutVariable localId="130" executionOrderId="0" height="35" width="90" negatedOut="false" negatedIn="false">
<position x="275" y="365"/>
<connectionPointIn>
<relPosition x="0" y="15"/>
<connection refLocalId="131" formalParameter="OUT">
<position x="275" y="380"/>
- <position x="205" y="380"/>
+ <position x="230" y="380"/>
</connection>
</connectionPointIn>
<connectionPointOut>
- <relPosition x="60" y="15"/>
+ <relPosition x="90" y="15"/>
</connectionPointOut>
<expression>counter</expression>
</inOutVariable>
- <comment localId="2" height="75" width="355">
+ <comment localId="2" height="75" width="390">
<position x="70" y="240"/>
<content>
<xhtml:p><![CDATA[Counts how many times the program is called.
@@ -1193,10 +1191,10 @@
<relPosition x="0" y="40"/>
<connection refLocalId="2" formalParameter="Q">
<position x="260" y="110"/>
- <position x="245" y="110"/>
- <position x="245" y="10"/>
- <position x="520" y="10"/>
- <position x="520" y="110"/>
+ <position x="225" y="110"/>
+ <position x="225" y="10"/>
+ <position x="550" y="10"/>
+ <position x="550" y="110"/>
<position x="510" y="110"/>
</connection>
</connectionPointIn>
@@ -1207,8 +1205,8 @@
<connection refLocalId="16" formalParameter="OUT">
<position x="260" y="150"/>
<position x="225" y="150"/>
- <position x="225" y="250"/>
- <position x="190" y="250"/>
+ <position x="225" y="255"/>
+ <position x="190" y="255"/>
</connection>
</connectionPointIn>
</variable>
@@ -1245,8 +1243,8 @@
<connection refLocalId="16" formalParameter="OUT">
<position x="460" y="150"/>
<position x="350" y="150"/>
- <position x="350" y="250"/>
- <position x="190" y="250"/>
+ <position x="350" y="255"/>
+ <position x="190" y="255"/>
</connection>
</connectionPointIn>
</variable>
@@ -1278,24 +1276,24 @@
</connectionPointIn>
<expression>Out</expression>
</outVariable>
- <block localId="16" typeName="DIV" executionOrderId="0" height="80" width="70">
+ <block localId="16" typeName="DIV" executionOrderId="0" height="95" width="70">
<position x="120" y="215"/>
<inputVariables>
<variable formalParameter="IN1">
<connectionPointIn>
- <relPosition x="0" y="35"/>
+ <relPosition x="0" y="40"/>
<connection refLocalId="1">
- <position x="120" y="250"/>
- <position x="75" y="250"/>
+ <position x="120" y="255"/>
+ <position x="78" y="255"/>
</connection>
</connectionPointIn>
</variable>
<variable formalParameter="IN2">
<connectionPointIn>
- <relPosition x="0" y="65"/>
+ <relPosition x="0" y="75"/>
<connection refLocalId="4">
- <position x="120" y="280"/>
- <position x="75" y="280"/>
+ <position x="120" y="290"/>
+ <position x="75" y="290"/>
</connection>
</connectionPointIn>
</variable>
@@ -1304,20 +1302,20 @@
<outputVariables>
<variable formalParameter="OUT">
<connectionPointOut>
- <relPosition x="70" y="35"/>
- </connectionPointOut>
- </variable>
- </outputVariables>
- </block>
- <inVariable localId="1" executionOrderId="0" height="30" width="55" negated="false">
- <position x="20" y="235"/>
- <connectionPointOut>
- <relPosition x="55" y="15"/>
+ <relPosition x="70" y="40"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="1" executionOrderId="0" height="30" width="58" negated="false">
+ <position x="20" y="240"/>
+ <connectionPointOut>
+ <relPosition x="58" y="15"/>
</connectionPointOut>
<expression>Period</expression>
</inVariable>
<inVariable localId="4" executionOrderId="0" height="30" width="55" negated="false">
- <position x="20" y="265"/>
+ <position x="20" y="275"/>
<connectionPointOut>
<relPosition x="55" y="15"/>
</connectionPointOut>
@@ -1450,7 +1448,7 @@
</connectionPointIn>
<expression>Out</expression>
</outVariable>
- <block localId="299" typeName="clock" instanceName="clock0" executionOrderId="0" height="70" width="85">
+ <block localId="299" typeName="clock" instanceName="clock0" executionOrderId="0" height="70" width="87">
<position x="165" y="270"/>
<inputVariables>
<variable formalParameter="Period">
@@ -1467,7 +1465,7 @@
<outputVariables>
<variable formalParameter="Out">
<connectionPointOut>
- <relPosition x="85" y="45"/>
+ <relPosition x="87" y="45"/>
</connectionPointOut>
</variable>
</outputVariables>
--- a/util/TranslationCatalogs.py Thu Nov 22 23:39:54 2018 +0100
+++ b/util/TranslationCatalogs.py Fri Nov 23 00:33:04 2018 +0100
@@ -55,7 +55,9 @@
global locale
if locale is None:
# Define locale for wx
+ wx.LogGui.EnableLogging(False)
locale = wx.Locale(wx.LANGUAGE_DEFAULT)
+ wx.LogGui.EnableLogging(True)
locale.AddCatalogLookupPathPrefix(locale_dir)
locale.AddCatalog(domain)
--- a/version.py Thu Nov 22 23:39:54 2018 +0100
+++ b/version.py Fri Nov 23 00:33:04 2018 +0100
@@ -79,8 +79,8 @@
info.Version = app_version
info.Copyright = ""
- info.Copyright += "(C) 2016-2017 Andrey Skvortsov\n"
- info.Copyright += "(C) 2008-2015 Eduard Tisserant\n"
+ info.Copyright += "(C) 2016-2018 Andrey Skvortsov\n"
+ info.Copyright += "(C) 2008-2018 Eduard Tisserant\n"
info.Copyright += "(C) 2008-2015 Laurent Bessard"
info.WebSite = ("http://beremiz.org", "beremiz.org")
@@ -126,20 +126,29 @@
"",
"Chinese",
- " Frank Guan <gpfrank@163.com>, 2017",
+ " Frank Guan <gpfrank@163.com>, 2018",
+ " Tango Wu <wuyangtang@live.com>, 2017",
+ " Yiwei Yan <523136664@qq.com>, 2018",
+ "",
+
+ "Dutch (Netherlands)",
+ " Jordy van der Heijden <jordyvanderheijden@gmail.com>, 2018",
"",
"French",
+ " Edouard Tisserant <edouard.tisserant@gmail.com>, 2018",
" Fabien Marteau <mail@fabienm.eu>, 2017",
" Laurent Bessard <laurent.bessard@gmail.com>, 2008",
"",
"German",
" Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017",
+ " Hendrik Knackstedt <h.knackstedt@stud.uni-hannover.de>, 2017 ",
" Mark Muzenhardt <mark.muzenhardt@gmail.com>, 2012",
"",
"Hungarian",
+ " Krisztián Veress <krive001@gmail.com>, 2018",
" Gábor Véninger <veninger.gabor@gmail.com>, 2017",
"",
@@ -149,28 +158,44 @@
"",
"Korean",
+ " Ikhwan Kim <duo821228@gmail.com>, 2018",
" Reinhard Lee <lij3105@gmail.com>, 2012",
"",
- "Portuguese (Portugal)",
+ "Portuguese",
" Pedro Coimbra <pcoimbra310@gmail.com>, 2017",
"",
"Portuguese (Brazil)",
+ " Rodrigo Rolle <ro_pita@hotmail.com>, 2018",
" Thiago Alves <thiagoralves@gmail.com>, 2017",
"",
+ "Romanian",
+ " Emil Saracutu <emil_saracutu@yahoo.com>, 2018",
+ "",
+
"Russian",
- " Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2017",
+ " Andrey Skvortsov <andrej.skvortzov@gmail.com>, 2018",
+ " Sergey Surkov <surkov.sv@summatechnology.ru>, 2018",
+ " zx_alexis <zxalexis@gmail.com>, 2017",
"",
"Slovenian",
- " Janez Pregelj <janezpregelj@gmail.com>, 2017",
+ " Janez Pregelj <janezpregelj@gmail.com>, 2018",
+ " Andraz Gregorcic <andraz.gregorcic@smarteh.si>, 2017",
"",
"Spanish",
+ " Carlos Guilarte <guilartec@gmail.com>, 2018",
+ " Yegor Yefremov <yegorslists@googlemail.com>, 2018",
+ " Jorge Rojas, 2018",
" Marcial González de Armas <mgacod@gmail.com>, 2017",
- " Carlos Guilarte <guilartec@gmail.com>, 2017",
+ " Nelson Mambre <nmambre@gmail.com>, 2017",
+ "",
+
+ "Turkish",
+ " Ibrahim Kilicarslan <ibrahimhalilkilicarslan@outlook.com>, 2018",
"",
)
--- a/xmlclass/xmlclass.py Thu Nov 22 23:39:54 2018 +0100
+++ b/xmlclass/xmlclass.py Fri Nov 23 00:33:04 2018 +0100
@@ -627,7 +627,6 @@
value = infos["elmt_type"]["initial"]()
if infos["type"] != ANY:
DefaultElementClass.__setattr__(value, "tag", element_name)
- value._init_()
return value
return [initial_value() for dummy in xrange(infos["minOccurs"])]
else: