# HG changeset patch # User Edouard Tisserant # Date 1533728779 -7200 # Node ID 53f3eb5c47f7141dffce80febac99fcce6297c3f # Parent 62eba810212e72b42715fda655ba3b53c376f021# Parent c9915bc620cd10f8c88037b1428f1d3f8506bd73 merged Andrey's default diff -r 62eba810212e -r 53f3eb5c47f7 BeremizIDE.py --- a/BeremizIDE.py Wed Aug 08 13:27:44 2018 +0200 +++ b/BeremizIDE.py Wed Aug 08 13:46:19 2018 +0200 @@ -739,6 +739,7 @@ def RefreshStatusToolBar(self): StatusToolBar = self.Panes["StatusToolBar"] StatusToolBar.ClearTools() + StatusToolBar.SetMinSize(StatusToolBar.GetToolBitmapSize()) if self.CTR is not None: diff -r 62eba810212e -r 53f3eb5c47f7 IDEFrame.py --- a/IDEFrame.py Wed Aug 08 13:27:44 2018 +0200 +++ b/IDEFrame.py Wed Aug 08 13:46:19 2018 +0200 @@ -2164,9 +2164,9 @@ self.Bind(wx.EVT_MENU, getattr(self, method), id=id) self.CurrentEditorToolBar.append(id) EditorToolBar.Realize() - self.AUIManager.GetPane("EditorToolBar").BestSize(EditorToolBar.GetBestSize()) self.AUIManager.GetPane("EditorToolBar").Show() self.AUIManager.Update() + self.AUIManager.GetPane("EditorToolBar").BestSize(EditorToolBar.GetBestSize()) elif menu is None: self.ResetEditorToolBar() self.CurrentMenu = menu diff -r 62eba810212e -r 53f3eb5c47f7 PLCGenerator.py --- a/PLCGenerator.py Wed Aug 08 13:27:44 2018 +0200 +++ b/PLCGenerator.py Wed Aug 08 13:46:19 2018 +0200 @@ -900,6 +900,42 @@ for connection in related: self.ConnectionTypes[connection] = var_type + def GetUsedEno(self, body, connections): + """ + Function checks whether value on given connection + comes from block, that has used EN input and + returns variable name for ENO output. + + This is needed to avoid value propagation from blocks + with false signal on EN input. + + :param body: + body of the block for that program is currently generated + :param connections: + connection, that's source is checked for EN/ENO usage + :return: + if EN/ENO are not used, then None is returned + Otherwise BOOL variable corresponding to ENO + output is returned. + """ + + if len(connections) != 1: + return None + ref_local_id = connections[0].getrefLocalId() + blk = body.getcontentInstance(ref_local_id) + if blk is None: + return None + + for invar in blk.inputVariables.getvariable(): + if invar.getformalParameter() == "EN": + if len(invar.getconnectionPointIn().getconnections()) > 0: + if blk.getinstanceName() is None: + var_name = "%s%d_ENO" % (blk.gettypeName(), blk.getlocalId()) + else: + var_name = "%s.ENO" % blk.getinstanceName() + return var_name + return None + def ComputeProgram(self, pou): body = pou.getbody() if isinstance(body, ListType): @@ -958,11 +994,21 @@ if connections is not None: expression = self.ComputeExpression(body, connections) if expression is not None: + eno_var = self.GetUsedEno(body, connections) + if eno_var is not None: + self.Program += [(self.CurrentIndent + "IF %s" % eno_var, ())] + self.Program += [(" THEN\n ", ())] + self.IndentRight() + self.Program += [(self.CurrentIndent, ()), (instance.getexpression(), (self.TagName, "io_variable", instance.getlocalId(), "expression")), (" := ", ())] self.Program += expression self.Program += [(";\n", ())] + + if eno_var is not None: + self.IndentLeft() + self.Program += [(self.CurrentIndent + "END_IF;\n", ())] elif isinstance(instance, BlockClass): block_type = instance.gettypeName() self.ParentGenerator.GeneratePouProgram(block_type) diff -r 62eba810212e -r 53f3eb5c47f7 README.md --- a/README.md Wed Aug 08 13:27:44 2018 +0200 +++ b/README.md Wed Aug 08 13:46:19 2018 +0200 @@ -8,89 +8,94 @@ With Beremiz, you conform to standards, avoid vendor lock, and contribute to the better future of Automation. +Beremiz consists of two components: + +* Integrated Development Environment (IDE), [Beremiz.py](https://bitbucket.org/automforge/beremiz/src/tip/Beremiz.py?at=default). It's running on user's computer and is used to write/compile/debug PLC programs and control PLC runtime. +* Reference runtime implementation in python, [Beremiz_service.py](https://bitbucket.org/automforge/beremiz/src/tip/Beremiz_service.py?at=default). It's running on target platform, communicates with I/O and executes PLC program. + See official [Beremiz website](http://www.beremiz.org/) for more information. -### Build on Linux ### +## Build on Linux ## * Prerequisites -``` -#!sh -* # Ubuntu/Debian : -sudo apt-get install build-essential bison flex autoconf -sudo apt-get install python-wxgtk3.0 pyro mercurial -sudo apt-get install python-nevow python-matplotlib python-lxml python-zeroconf python-cycler -``` + # Ubuntu/Debian : + sudo apt-get install build-essential bison flex autoconf + sudo apt-get install python-wxgtk3.0 pyro mercurial + sudo apt-get install python-nevow python-matplotlib python-lxml python-zeroconf python-cycler + * Prepare -``` -#!sh -mkdir ~/Beremiz -cd ~/Beremiz -``` + + mkdir ~/Beremiz + cd ~/Beremiz * Get Source Code -``` -#!sh -cd ~/Beremiz -hg clone https://bitbucket.org/skvorl/beremiz -hg clone https://bitbucket.org/mjsousa/matiec -``` + cd ~/Beremiz + hg clone https://bitbucket.org/skvorl/beremiz + hg clone https://bitbucket.org/mjsousa/matiec * Build MatIEC compiler -``` -#!sh -cd ~/Beremiz/matiec -autoreconf -i -./configure -make -``` -* Build CanFestival (optional) -Only needed for CANopen support. Please read CanFestival manual to choose CAN interface other than 'virtual'. + cd ~/Beremiz/matiec + autoreconf -i + ./configure + make -``` -#!sh -cd ~/Beremiz -hg clone http://dev.automforge.net/CanFestival-3 +* Build CanFestival (optional) + Only needed for CANopen support. Please read CanFestival manual to choose CAN interface other than 'virtual'. -cd ~/Beremiz/CanFestival-3 -./configure --can=virtual -make -``` + cd ~/Beremiz + hg clone http://dev.automforge.net/CanFestival-3 + cd ~/Beremiz/CanFestival-3 + ./configure --can=virtual + make + +* Build Modbus library (optional) + Only needed for Modbus support. + + cd ~/Beremiz + hg clone https://bitbucket.org/mjsousa/modbus Modbus + cd ~/Beremiz/Modbus + make * Launch Beremiz IDE -``` -#!sh -cd ~/Beremiz/beremiz -python Beremiz.py -``` + cd ~/Beremiz/beremiz + python Beremiz.py -### Run standalone Beremiz service ### +## Run standalone Beremiz runtime ## + +Runtime implementation can be different on different platforms. +For example, PLC used Cortex-M most likely would have C-based runtime. Beremiz project contains reference implementation in python, that can be easily run on GNU/Linux, Windows and Mac OS X. +This section will describe how to run it. + +If project's URL is 'LOCAL://', then IDE launches temprorary instance of Beremiz python runtime (Beremiz_service.py) localy as user tries to connect to PLC. This allows to debug programs localy without PLC. + +If you want to run Beremiz_service.py as standalone service, then follow these instructions: * Start standalone Beremiz service -``` -#!sh -cd ~/Beremiz -mkdir beremiz_workdir -cd ~/beremiz -python Beremiz_service.py -p 61194 -i localhost -x 0 -a 1 ~/Beremiz/beremiz_workdir -``` + cd ~/Beremiz + mkdir beremiz_workdir + cd ~/beremiz + python Beremiz_service.py -p 61194 -i localhost -x 0 -a 1 ~/Beremiz/beremiz_workdir * Launch Beremiz IDE -``` -#!sh -cd ~/Beremiz/beremiz -python Beremiz.py -``` -* Open/Create PLC project in Beremiz IDE. -* -Enter target location URI in project's settings (project->Config->BeremizRoot/URI_location) pointed to your running Beremiz service (For example, PYRO://127.0.0.1:61194). -Save project and connect to running Beremiz service. -### Documentation ### + cd ~/Beremiz/beremiz + python Beremiz.py + +* Open/Create PLC project in Beremiz IDE. + Enter target location URI in project's settings (project->Config->BeremizRoot/URI_location) pointed to your running Beremiz service (For example, PYRO://127.0.0.1:61194). + Save project and connect to running Beremiz service. + +## Examples ## + +Almost for all functionality exists example in ['tests'](https://bitbucket.org/automforge/beremiz/src/tip/tests/?at=default) directory. +Most of examples are shown on [Beremiz youtube channel](https://www.youtube.com/channel/UCcE4KYI0p1f6CmSwtzyg-ZA). + +## Documentation ## * See [Beremiz youtube channel](https://www.youtube.com/channel/UCcE4KYI0p1f6CmSwtzyg-ZA) to get quick information how to use Beremiz IDE. @@ -108,7 +113,7 @@ * See official [Beremiz website](http://www.beremiz.org/) for more information. -### Support and development ### +## Support and development ## Main community support channel is [mailing list](https://sourceforge.net/p/beremiz/mailman/beremiz-devel/) (beremiz-devel@lists.sourceforge.net). diff -r 62eba810212e -r 53f3eb5c47f7 controls/DebugVariablePanel/DebugVariablePanel.py --- a/controls/DebugVariablePanel/DebugVariablePanel.py Wed Aug 08 13:27:44 2018 +0200 +++ b/controls/DebugVariablePanel/DebugVariablePanel.py Wed Aug 08 13:46:19 2018 +0200 @@ -35,8 +35,6 @@ import matplotlib matplotlib.use('WX') # noqa import matplotlib.pyplot -from matplotlib.backends.backend_wxagg import _convert_agg_to_wx_bitmap - from editors.DebugViewer import DebugViewer from util.BitmapLibrary import GetBitmap @@ -525,24 +523,6 @@ def RefreshView(self): self.RefreshCanvasPosition() - width, height = self.GraphicsWindow.GetVirtualSize() - bitmap = wx.EmptyBitmap(width, height) - dc = wx.BufferedDC(wx.ClientDC(self.GraphicsWindow), bitmap) - dc.Clear() - dc.BeginDrawing() - if self.DraggingAxesPanel is not None: - destBBox = self.DraggingAxesBoundingBox - srcBBox = self.DraggingAxesPanel.GetAxesBoundingBox() - - srcBmp = _convert_agg_to_wx_bitmap(self.DraggingAxesPanel.get_renderer(), None) - srcDC = wx.MemoryDC() - srcDC.SelectObject(srcBmp) - - dc.Blit(destBBox.x, destBBox.y, - int(destBBox.width), int(destBBox.height), - srcDC, srcBBox.x, srcBBox.y) - dc.EndDrawing() - if not self.Fixed or self.Force: self.Force = False refresh_graphics = True diff -r 62eba810212e -r 53f3eb5c47f7 tests/BACnet/bacnet_0@bacnet/bacnet_slave --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/BACnet/bacnet_0@bacnet/bacnet_slave Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,202 @@ +(dp0 +S'BV_Obj' +p1 +(lp2 +sS'AV_Obj' +p3 +(lp4 +(dp5 +S'loc' +p6 +S'MD0_2' +p7 +sS'Description' +p8 +S'' +p9 +sS'Unit ID' +p10 +I19 +sS'Object Identifier' +p11 +I0 +sS'Ctype' +p12 +S'float' +p13 +sS'BACnetObjTypeID' +p14 +I2 +sS'Settable' +p15 +S'Y' +p16 +sS'Engineering Units' +p17 +V(Energy) kilowatt-hours (19) +p18 +sS'Object Name' +p19 +VEnergyCounter +p20 +sasS'AO_Obj' +p21 +(lp22 +(dp23 +g6 +S'QD0_1' +p24 +sg8 +V +p25 +sS'Unit ID' +p26 +I62 +sS'Object Identifier' +p27 +V0 +p28 +sg12 +g13 +sg14 +I1 +sg15 +g16 +sS'Object Name' +p29 +VTemperatureSetPoint +p30 +sS'Engineering Units' +p31 +V(Temperature) degrees-celsius (62) +p32 +sasS'MSI_Obj' +p33 +(lp34 +sS'BO_Obj' +p35 +(lp36 +(dp37 +g6 +S'QX0_4' +p38 +sg8 +g9 +sS'Object Identifier' +p39 +I2 +sg12 +S'uint8_t' +p40 +sg14 +I4 +sg15 +g16 +sS'Object Name' +p41 +VBlockClimateControl +p42 +sasS'MSO_Obj' +p43 +(lp44 +sS'EDEfile_parm' +p45 +(dp46 +S'next_EDE_file_version' +p47 +I1 +ssS'BI_Obj' +p48 +(lp49 +(dp50 +g6 +S'IX0_3' +p51 +sg8 +g9 +sS'Object Identifier' +p52 +I0 +sg12 +g40 +sg14 +I3 +sg15 +S'N' +p53 +sS'Object Name' +p54 +VHeater +p55 +sa(dp56 +g6 +g51 +sg8 +g9 +sg52 +I1 +sg12 +g40 +sg14 +I3 +sg15 +g53 +sg54 +VCooler +p57 +sasS'AI_Obj' +p58 +(lp59 +(dp60 +g6 +S'ID0_0' +p61 +sg8 +VCurrent termperature in Beremiz lab +p62 +sS'Unit ID' +p63 +I62 +sS'Object Identifier' +p64 +I0 +sg12 +g13 +sg14 +I0 +sg15 +g53 +sS'Engineering Units' +p65 +V(Temperature) degrees-celsius (62) +p66 +sS'Object Name' +p67 +VTemperature +p68 +sa(dp69 +g6 +g61 +sg8 +VCurrent humidity in Beremiz lab +p70 +sg63 +I29 +sg64 +I1 +sg12 +g13 +sg14 +I0 +sg15 +g53 +sg67 +VHumidity +p71 +sg65 +V(Humidity) percent-relative-humidity (29) +p72 +sasS'MSV_Obj' +p73 +(lp74 +s. \ No newline at end of file diff -r 62eba810212e -r 53f3eb5c47f7 tests/BACnet/bacnet_0@bacnet/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/BACnet/bacnet_0@bacnet/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/BACnet/bacnet_0@bacnet/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/BACnet/bacnet_0@bacnet/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/BACnet/beremiz.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/BACnet/beremiz.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,4 @@ + + + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/BACnet/plc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/BACnet/plc.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,601 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EnergyCounter + + + + + + + + + + + EnergyCounter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.00131 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Temperature + + + + + + + 18.0 + + + + + + + 30.0 + + + + + + + 120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Humidity + + + + + + + 55.0 + + + + + + + 78.0 + + + + + + + 58 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Temperature + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ControlDisable + + + + + + + + + + + Cooler + + + + + + + TemperatureSetPoint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Temperature + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ControlDisable + + + + + + + + + + + Heater + + + + + + + TemperatureSetPoint + + + + + + + + + + + + + + + + + + "beremiz" + "BACnet" + +If library is installed elsewhere, then place corresponding paths +in CFLAGS/LDFLAGS in project settings. + +For GNU/Linux to install BACnet library in parent directory run following commands: +$ svn checkout https://svn.code.sf.net/p/bacnet/code/trunk/bacnet-stack/ BACnet +$ cd BACnet +$ make + +After that BACnet extension is ready to be used in Beremiz projects. +BACnet stack implementation contains a lot of test tools. They could be useful during +debugging and BACnet investigation. See "BACnet/bin/readme.txt" for more information about them.]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/beremiz.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/beremiz.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,6 @@ + + + + + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_0@ModbusRequest/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_0@ModbusRequest/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_0@ModbusRequest/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_0@ModbusRequest/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_1@ModbusRequest/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_1@ModbusRequest/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_1@ModbusRequest/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/ModbusRequest_1@ModbusRequest/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPclient_0@ModbusTCPclient/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/HoldingRegs@MemoryArea/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/HoldingRegs@MemoryArea/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/HoldingRegs@MemoryArea/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/HoldingRegs@MemoryArea/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/InputRegs@MemoryArea/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/InputRegs@MemoryArea/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/InputRegs@MemoryArea/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/InputRegs@MemoryArea/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/ModbusTCPserver_0@ModbusTCPserver/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/baseconfnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/modbus_0@modbus/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/modbus_0@modbus/confnode.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,2 @@ + + diff -r 62eba810212e -r 53f3eb5c47f7 tests/modbus/plc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/modbus/plc.xml Wed Aug 08 13:46:19 2018 +0200 @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "beremiz" + "Modbus" + +If Modbus library is installed elsewhere, then place corresponding paths +in CFLAGS/LDFLAGS in project settings. + +For GNU/Linux to install Modbus library in parent directory run following commands: +$ hg clone https://bitbucket.org/mjsousa/modbus Modbus +$ cd Modbus +$ make + +After that Modbus extension is ready to be used in Beremiz projects.]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + T#1s + + + + + + + 32767 + + + + + + + + + + + + + + Counter + + + + + + + + + + + MasterWriteToReg0 + + + + + + + MasterReadFromReg1 + + + + + + + + + + + CounterReadBack + + + + + + + + + + + + + SlaveHoldReg0 + + + + + + + + + + + SlaveInputReg0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +