Beremiz: Difference between revisions

From ArmadeusWiki
 
(21 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Under_Construction}}
== Introduction ==
== Introduction ==


Beremiz is free software toolkit for automation. It's conform with [http://en.wikipedia.org/wiki/IEC_61131 IEC61131] languages and can drive graphicaly your system.
Beremiz is a Free Software toolkit for automation. It conforms with [http://en.wikipedia.org/wiki/IEC_61131 IEC61131] languages and can graphically drive your system.


Beremiz is divided in two softwares:
Beremiz is divided in two software:


* '''Beremiz.py''': The Graphical toolkit that run on the Host to drive the target.
* '''Beremiz.py''': the graphical toolkit that run on the Host to drive the target,
* '''Beremiz_service.py''': The target runtime that execute the code compiled by Beremiz.py and sent by network to its.
* '''Beremiz_service.py''': the target runtime that execute the code compiled by Beremiz.py and sent to it through network.


Then there are two triky things to do to use beremiz on APF* platforms :
There are two tricky things to do to use Beremiz on APF* platforms :
 
* configure Beremiz.py to cross-compile binary for ARM,
* Configure Beremiz.py to cross-compile binary for ARM
* run Beremiz_service.py on APF.
* Run python program Beremiz_service.py on apf.


== Installation ==
== Installation ==
Line 19: Line 16:
=== Host ===
=== Host ===


To see how to install Beremiz on your host, please see the [http://www.beremiz.org/doc official website] (How to build with Linux).
Host part of Beremiz is installable through Armadeus Buildroot menuconfig :


=== Target ===
<pre class="host">
$ make menuconfig
</pre>
 
Then select:
<pre class="config">
Target packages  --->
    Development tools  --->
        [*] matiec
    ...
    Graphic libraries and applications (graphic/text)  --->
        [*] beremiz framework
</pre>
 
* Build/install it:
<pre class="host">
$ make
</pre>


==== APF28 ====
* Then to launch it:
<pre class="host">
$ python buildroot/output/host/opt/beremiz/Beremiz.py
</pre>


Python 2.7 and Pyro are required to run Beremiz_service.py.
=== Target ===
Python 2.7 and Pyro are required to run Beremiz_service.py:


===== install python 2.7 =====
run
<pre class="host">
<pre class="host">
make menuconfig
$ make menuconfig
</pre>
</pre>
On up to date armadeus trunk view, then select :
 
<pre class="config">
<pre class="config">
Package Selection for the target --->
Target packages --->
    ...
     Interpreter languages and scripting  --->
     Interpreter languages and scripting  --->
        ...
         [*] python
         [*] python
            python module format to install (.py sources only) --->
        external python modules --->
                          (X) .py sources only
            ...
        core python modules  --->
            [*] python-pyro
                    [*] bzip2 module
                    [*] bsddb module     
                    [*] codecscjk module 
                    [*] curses module     
                    [*] pyexpat           
                    [*] readline         
                    [*] ssl               
                    [*] unicodedata module
                    [*] sqlite module     
                    [*] zlib module       
                    [*] hashlib module   
</pre>
</pre>
then make :
* then:
<pre class="host">
<pre class="host">
$ make
$ make
</pre>
</pre>


===== Install Pyro3.14 =====
===== Install Beremiz_service.py =====
The tricky method is:
 
* download Pyro3.14 tarball [https://pypi.python.org/packages/source/P/Pyro/Pyro-3.14.tar.gz#md5=2101230425e6c76f5aa2e9d5167cbd3b here] and decompress it in your [[nfs]] directory.
<pre class="host">
<pre class="host">
cd /local/export
$ make menuconfig
wget https://pypi.python.org/packages/source/P/Pyro/Pyro-3.14.tar.gz#md5=2101230425e6c76f5aa2e9d5167cbd3b
tar -zxvf Pyro-3.14.tar.gz
</pre>
</pre>


* Then once on your target (APF28) with python 2.7 installed go to your nfs directory and install it :
<pre class="config">
<pre class="apf">
Target packages  --->
cd /mnt/nfs/Pyro3.14
    ...
python setup.py install
    Graphic libraries and applications (graphic/text)  --->
</pre>
        ...
 
        [*] Beremiz runtime
===== Install Beremiz_service.py =====
 
The tricky method is nearly the same than Pyro.
 
* copy your beremiz directory under your nfs directory.
* launch it with python on your target:
<pre class="apf">
# cd /mnt/nfs
# python Beremiz_service.py
Wx unavailable !
Twisted unavailable !
Pyro port : 3000
Pyro object's uri : PYRO://127.0.1.1:3000/7f00010102d100069fec101918092f7c
Current working directory : /mnt/nfs/beremiz
</pre>
</pre>


Line 93: Line 83:


* When Beremiz.py is launched on your Host, create or open a project then save it.
* When Beremiz.py is launched on your Host, create or open a project then save it.
* With your favorite editor edit the file beremiz.xml then change the URI line:
* in project "Config" tab set the correct "URI_location":
 
URI_location: PYRO://192.168.0.33:3000
<source lang="xml">
<BeremizRoot URI_location="PYRO://192.168.0.33:3000">
</source>


Replace 192.168.0.33 by the IP of your APF28.
Replace 192.168.0.33 by the IP of your APF28.


* Re-open your project then clic on «connect» icon.
* then clic on «connect» icon.
* You can compile your project and try to send it...
* You can compile your project and try to send it...
* ... but you will have this error :
<pre class="apf">
PLCobject : OFF LOG :NewPLC (d8ad51386680f2337309dc55eddb4383)
python: '/mnt/nfs/beremiz/d8ad51386680f2337309dc55eddb4383.so' is not an ELF executable for ARM
PLCobject : Traceback (most recent call last):
  File "/mnt/nfs/beremiz/runtime/PLCObject.py", line 135, in LoadPLC
    self._PLClibraryHandle = dlopen(self._GetLibFileName())
OSError: File not found
</pre>
* Because the defaut compliler for Beremiz.py is not for arm ...
* To configure your compiler, go to project configuration (double clic on head of hierarchy) and adding the path of your compiled armgcc :
* To configure your compiler, go to project configuration (double clic on head of hierarchy) and adding the path of your compiled armgcc :
  YOUR_ARMADEUS_PATH/buildroot/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabi-gcc
  YOUR_ARMADEUS_PATH/buildroot/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabi-gcc
for linker and compiler.
for linker and compiler.


* You can then compile and transfert the program to target...
* You can then compile and transfer the program to the APF...
* ... but there still an error :
<pre class="apf">
PLCobject : OFF LOG :NewPLC (d8ad51386680f2337309dc55eddb4383)
python: '/mnt/nfs/beremiz/d8ad51386680f2337309dc55eddb4383.so' is not an ELF executable for ARM
PLCobject : Traceback (most recent call last):
  File "/mnt/nfs/beremiz/runtime/PLCObject.py", line 135, in LoadPLC
    self._PLClibraryHandle = dlopen(self._GetLibFileName())
OSError: File not found
</pre>
 
* This can be tricky fixed by changing code in beremiz beremiz/targets/Linux/plc_Linux_main.c :
<source lang="C">
/*
long AtomicCompareExchange(long* atomicvar,long compared, long exchange)
{
    return __sync_val_compare_and_swap(atomicvar, compared, exchange);
}
long long AtomicCompareExchange64(long long* atomicvar, long long compared, long long exchange)
{
    return __sync_val_compare_and_swap(atomicvar, compared, exchange);
}
*/
//XXX
long AtomicCompareExchange(long* atomicvar,long compared, long exchange)
{
    long res;
 
    res=*atomicvar;
    if(*atomicvar == compared){
        *atomicvar = exchange;
    }
 
    return res;
}
//XXX
long long AtomicCompareExchange64(long long* atomicvar, long long compared, long long exchange)
{
    long long res;
 
    res=*atomicvar;
    if(*atomicvar == compared){
        *atomicvar = exchange;
    }
 
    return res;
}
</source>


== Links ==
== Links ==
* [http://www.beremiz.org/ Home page of project].


* [http://www.beremiz.org/ Home page of project].
[[Category:Automation]]

Latest revision as of 16:11, 31 July 2014

Introduction

Beremiz is a Free Software toolkit for automation. It conforms with IEC61131 languages and can graphically drive your system.

Beremiz is divided in two software:

  • Beremiz.py: the graphical toolkit that run on the Host to drive the target,
  • Beremiz_service.py: the target runtime that execute the code compiled by Beremiz.py and sent to it through network.

There are two tricky things to do to use Beremiz on APF* platforms :

  • configure Beremiz.py to cross-compile binary for ARM,
  • run Beremiz_service.py on APF.

Installation

Host

Host part of Beremiz is installable through Armadeus Buildroot menuconfig :

$ make menuconfig

Then select:

Target packages  --->
    Development tools  --->
        [*] matiec 
    ...
    Graphic libraries and applications (graphic/text)  --->
        [*] beremiz framework
  • Build/install it:
$ make
  • Then to launch it:
$ python buildroot/output/host/opt/beremiz/Beremiz.py 

Target

Python 2.7 and Pyro are required to run Beremiz_service.py:

$ make menuconfig
Target packages  --->
    ...
    Interpreter languages and scripting  --->
        ...
        [*] python
        external python modules  --->
            ...
            [*] python-pyro
  • then:
$ make
Install Beremiz_service.py
$ make menuconfig
Target packages  --->
    ...
    Graphic libraries and applications (graphic/text)  --->
        ...
        [*] Beremiz runtime

Simple usage

Target connection

  • When Beremiz.py is launched on your Host, create or open a project then save it.
  • in project "Config" tab set the correct "URI_location":
URI_location: PYRO://192.168.0.33:3000

Replace 192.168.0.33 by the IP of your APF28.

  • then clic on «connect» icon.
  • You can compile your project and try to send it...
  • To configure your compiler, go to project configuration (double clic on head of hierarchy) and adding the path of your compiled armgcc :
YOUR_ARMADEUS_PATH/buildroot/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabi-gcc

for linker and compiler.

  • You can then compile and transfer the program to the APF...

Links