beremiz

Make online debug optional

2019-01-06, Andrey Skvortsov
eba2bbb2dd9a
Make online debug optional

It could be useful for very small targets like Atmega (Arduino) and
for target bring-up there developer want to have running PLC program,
but has not implemented runtime communication yet.


TARGET_DEBUG_AND_RETAIN_DISABLE - completely disable debug and retain
functionality. Previously named TARGET_DEBUG_DISABLE.

TARGET_ONLINE_DEBUG_DISABLE - can be used to enable retain
functionality (no define TARGET_DEBUG_AND_RETAIN_DISABLE is used), but disable
online debug with corresponding RAM/FLASH overhead.

TARGET_LOGGING_DISABLE - disables logging functionality from runtime and PLC program

TARGET_EXT_SYNC_DISABLE - disables PLC program synchronization with
external events. For example, it could be used to synchronize several
PLCs that control motors for different axes.

By default all these options are off.

To test generate program for Generic target, put following files in
project files directory and run build.sh after generating PLC program.
This is very easy to integrate into makefile (Generic target).

[------------- build.sh --------------------------]
files=$(find $PWD/../build -iname '*.c' | grep -v POUS.c)
arm-none-eabi-gcc \
-DTARGET_DEBUG_AND_RETAIN_DISABLE \
-DTARGET_ONLINE_DEBUG_DISABLE \
-DTARGET_LOGGING_DISABLE \
-DTARGET_EXT_SYNC_DISABLE \
-flto -ffunction-sections -fdata-sections -I../../../../matiec/lib/C \
$files \
main.c \
-Wl,--Map=./program.map,--cref \
-nodefaultlibs --specs=nano.specs -Wl,--static -Wl,--gc-section -Wl,--start-group -lc -lm -lnosys -lgcc -Wl,--end-group
[------------------------------------------------]

[------------- main.c --------------------------]
#ifndef TARGET_DEBUG_AND_RETAIN_DISABLE
void Retain(void){}
void InValidateRetainBuffer(void){}
void ValidateRetainBuffer(void){}
#endif

extern void __run(void);
int main(void)
{
for(;;) {
__run();
// sleep common_ticktime__ ns
// add common_ticktime__ ns to __CURRENT_TIME
}
return 0;
}
[------------------------------------------------]
[![docs](https://readthedocs.org/projects/beremiz/badge/?version=latest)](https://beremiz.readthedocs.io)
# Beremiz #
Beremiz is an integrated development environment for machine automation. It is Free Software, conforming to IEC-61131 among other standards.
It relies on open standards to be independent of the targeted device, and let you turn any processor into a PLC. Beremiz includes tools to create HMI, and to connect your PLC programs to existing supervisions, databases, or fieldbuses.
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 ##
* Prerequisites
# 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
sudo apt-get install python-autobahn python-u-msgpack
* Prepare
mkdir ~/Beremiz
cd ~/Beremiz
* Get Source Code
cd ~/Beremiz
hg clone https://bitbucket.org/automforge/beremiz
hg clone https://bitbucket.org/automforge/matiec
* Build MatIEC compiler
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
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
* Build BACnet (optional)
Only needed for BACnet support.
cd ~/Beremiz
svn checkout https://svn.code.sf.net/p/bacnet/code/trunk/bacnet-stack/ BACnet
cd BACnet
make MAKE_DEFINE='-fPIC' all
* Launch Beremiz IDE
cd ~/Beremiz/beremiz
python Beremiz.py
## 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
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
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.
* [Official user manual](http://beremiz.readthedocs.io/) is built from sources in doc directory.
Documentation does not cover all aspects of Beremiz use yet.
Contribution are very welcome!
* [User manual](http://www.sm1820.ru/files/beremiz/beremiz_manual.pdf) from INEUM (Russian).
Be aware that it contains some information about functions available only in INEUM's fork of Beremiz.
* [User manual](http://www.beremiz.org/LpcManager_UserManual.pdf) from Smarteh (English).
Be aware that it contains some information about functions available only in Smarteh's fork of Beremiz.
* Outdated short [user manual](https://www.scribd.com/document/76101511/Manual-Beremiz#scribd) from LOLI Tech (English).
* See official [Beremiz website](http://www.beremiz.org/) for more information.
## Support and development ##
Main community support channel is [mailing list](https://sourceforge.net/p/beremiz/mailman/beremiz-devel/) (beremiz-devel@lists.sourceforge.net).
The list is moderated and requires subscription for posting to it.
To subscribe to the mailing list go [here](https://sourceforge.net/p/beremiz/mailman/beremiz-devel/).
Searchable archive using search engine of your choice is available [here](http://beremiz-devel.2374573.n4.nabble.com/).