Difference between revisions of "Beremiz"

From ArmadeusWiki
Jump to: navigation, search
(Host)
(Host)
Line 21: Line 21:
 
Host part of beremiz is included under armadeus :
 
Host part of beremiz is included under armadeus :
  
 +
<pre class="host">
 +
make menuconfig
 +
</pre>
 +
 +
Then select :
 +
<pre class="config">
 +
Package Selection for the target  --->
 +
    Development tools  --->
 +
        [*] matiec
 +
    ...
 +
    Graphic libraries and applications (graphic/text)  --->
 +
        [*] beremiz framework
 +
</pre>
 +
 +
Then :
 +
<pre class="host">
 +
make
 +
</pre>
 +
 +
To launch beremiz type :
 +
<pre class="host">
 +
python buildroot/output/build/host-beremiz-358db9d64aa1/Beremiz.py
 +
</pre>
  
  

Revision as of 13:29, 2 August 2013

Page under construction... Construction.png Informations on this page are not guaranteed !!

Introduction

Beremiz is free software toolkit for automation. It's conform with IEC61131 languages and can drive graphicaly your system.

Beremiz is divided in two softwares:

  • 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 throught network to its.

Then there are two triky things to do to use beremiz on APF* platforms :

  • Configure Beremiz.py to cross-compile binary for ARM
  • Run python program Beremiz_service.py on apf.

Installation

Host

Host part of beremiz is included under armadeus :

make menuconfig

Then select :

Package Selection for the target  --->
    Development tools  --->
        [*] matiec 
    ...
    Graphic libraries and applications (graphic/text)  --->
        [*] beremiz framework 

Then :

make

To launch beremiz type :

python buildroot/output/build/host-beremiz-358db9d64aa1/Beremiz.py 


To see how to install Beremiz on your host, please see the official website (How to build with Linux).

Target

APF28

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

install python 2.7

run

make menuconfig

On up to date armadeus trunk view, then select :

Package Selection for the target  --->
    Interpreter languages and scripting  --->
        [*] python
            python module format to install (.py sources only)  --->
                          (X) .py sources only

then make :

$ make
Install Pyro3.14

Pyro 3.14 is included under armadeus distribution :

make menuconfig
Package Selection for the target  --->
    Interpreter languages and scripting  --->
        external python modules  --->
            [*] python-pyro
Install Beremiz_service.py

Beremiz_service is included in Armadeus distribution (trunk) :

Package Selection for the target  --->
    Graphic libraries and applications (graphic/text)  --->
        [*] Beremiz --->

Simple usage

Target connection

  • 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:
<BeremizRoot URI_location="PYRO://192.168.0.33:3000">

Replace 192.168.0.33 by the IP of your APF28.

  • Re-open your project then clic on «connect» icon.
  • You can compile your project and try to send it...
  • ... but you will have this error :
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
  • 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 :
YOUR_ARMADEUS_PATH/buildroot/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabi-gcc

for linker and compiler.

  • You can then compile and transfert the program to target...
  • ... but there still an error :
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
  • This can be fixed by changing code in beremiz beremiz/targets/Linux/plc_Linux_main.c :
/*
long long AtomicCompareExchange64(long long* atomicvar, long long compared, long long exchange)
{
    return __sync_val_compare_and_swap(atomicvar, compared, exchange);
}
*/
static pthread_mutex_t cs_mutex = PTHREAD_MUTEX_INITIALIZER;
long long AtomicCompareExchange64(long long* atomicvar, long long compared, long long exchange)
{
    long long res;

    pthread_mutex_lock(&cs_mutex);
    res=*atomicvar;
    if(*atomicvar == compared){
        *atomicvar = exchange;
    }
    pthread_mutex_unlock(&cs_mutex);
    return res;
}

Links