Installation guide: Process and Operator station on the Raspberry Pi

From Proview Wiki
Jump to: navigation, search
1) Install Ubuntu 12.10 desktop OS on the development (virtual) machine:
Host system is Microsoft Windows 7 Ultimate 64 bit, fully patched, 2 socket XeonE5620, 32GB RAM  ::VM environment is Oracle VM VirtualBox 4.2.6r82870 with Extension Pack hosted on above
Create virtual machine (VM): 4GB RAM, 30GB disk, bridged network adaptor, enable 3D accel, no floppy boot, bidir clipboard, shared folder to pwr docs, otherwise defaults
Boot the iso on the VM
English, install ubuntu
Download updates while installing
Install this third party software
Erase disk and install ubuntu
Chicago
English (us), english (us)
Hostname pwrDevel
Require login pw
Restart

2) Patch the install
sudo apt-get update
sudo apt-get dist-upgrade
restart (for new kernel)

3) Install virtualbox tools
sudo apt-get install linux-headers-generic dkms build-essential
From vbox menu pick: Devices | Install Guest Additions
Allow autorun prompt to procede, authenticate
Restart


4) Minimize annoyances

Get rid of advertising and the global menu
sudo apt-get remove unity-lens-shopping appmenu-gtk appmenu-gtk3 appmenu-qt
Launch firefox, disable 'global menu integration' extension
Logout, log back in
turn off spyware
launch "System Settings | Privacy"
pick "Search Results," pick "Include online search results: Off"
pick "Diagnostics", uncheck "Send error reports to Canonical", pick "Record Activity: OFF"
sudo add-apt-repository ppa:tualatrix/ppa
sudo add-apt-repository ppa:satyajit-happy/themes
sudo add-apt-repository ppa:indicator-multiload/stable-daily
sudo apt-get update
sudo apt-get install gnome-shell synaptic gconf-editor gnome-tweak-tool ubuntu-tweak nautilus-open-terminal


note: accept defaults for gdm


sudo apt-get install orion-gtk-theme indicator-multiload compizconfig-settings-manager
right click desktop pick "Change Desktop Background", select non-orange and non-purple background
from Dash, launch "System Load Indicator"
launch "System Settings | Ubuntu Tweak"
pick "Tweaks | Miscellaneous", pick "Overlay scrollbars: Normal"
pick "Tweaks | Theme", pick "Gtk theme: Orion", "Icon theme: gnome", "Window theme: Radiance"
pick "Tweaks | Desktop Icons", pick "Show Computer", "Show mounted volumes"
pick "Tweaks | Unity", adjust "Launcher icon size" to not waste so much screen space
pick "Tweaks | Window", pick "Window control button...: Right"
from Dash, launch "CompizConfig Settings Manager"
un-check "Snapping Windows"
delete unneeded icons from launcher: the "bag", the libre office stuff, the "U"s, the advertising
add "Terminal" to launcher
sudo apt-get install geany
add "Geany" to launcher


5) Install prerequisites for 'Proview build from source code'


install some packages (note: openssh-server is not really a prerequisite)
sudo apt-get install make flex libgtk2.0-dev libdb5.1-dev libdb5.1++-dev libasound2-dev doxygen libmysql++-dev xfonts-100dpi openssh-server
install java JDK
download tarball from http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
cd /usr/local
sudo tar -zxvf /home/<userID>/jdk-7u17-linux-x64.tar.gz
sudo chown -R root:root jdk1.7.0_17/
sudo -s
cd /etc/profile.d
touch proview.build.sh
vi proview.build.sh
insert the following lines:
export jdk=/usr/local/jdk1.7.0_17
export PATH=$PATH:$jdk/bin
save edited file, exit vi
exit (from sudo)


6) Install Proview development environment & debug runtime


wget -Opwr48_4.8.6-3.2_amd64.deb http://sourceforge.net/projects/proview/files/proview/proview_4.8.6-3/ubuntu_12.10/pwr48_4.8.6-3.2_amd64.deb/download
sudo dpkg -i pwr48_4.8.6-3.2_amd64.deb
sudo adduser pwrp sudo
logout
login as pwrp
fix annoyances
from launcher, pick "System Settings | Brightness and Lock"
pick "Lock: OFF"
exit
cd
sudo chown pwrp:pwrp Desktop
install antlr
wget http://www.antlr2.org/download/antlr-2.7.7.tar.gz
tar -zxvf antlr-2.7.7.tar.gz
geany ~/antlr-2.7.7/lib/cpp/antlr/CharScanner.hpp
add: #include <strings.h>
  1. include <stdio.h>
save changes and exit
cd ~/antlr-2.7.7
./configure
make
sudo make install
change max shared memory
sudo geany /etc/sysctl.conf
insert a line at the end:
kernel.shmmax=67108864
save changes, exit geany
sudo -s
echo 67108864 > /proc/sys/kernel/shmmax
exit



7)) Install Proview source
login as pwrp
cd
wget -Opwrsrc_4.8.6-3.2.tar.gz http://sourceforge.net/projects/proview/files/proview/proview_4.8.6-3/pwrsrc_4.8.6-3.2.tar.gz/download
tar -zxvf pwrsrc_4.8.6-3.2.tar.gz
8) Bake the raspberry pi
get the wheezy image 2013-02-09 via torrent
write to 8 GB Class 10 SD card
boot
using the Raspi-config tool:
expand_rootfs
configure_keyboard
English (US)
English (US)
The default for the keyboard layout
No compose key
Control-Alt-Backspace to terminal X server: No
change_pass
change_locale
en_US.UTF-8 UTF-8 only
default locale for system environment: none
change_timezone: US Central
ssh: Enable
boot_behavior: No
Finish
reboot
login as pi
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install tightvncserver
sudo apt-get install libgtk2.0-dev
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server
sudo adduser pwrp
use password = 'pwrp' (same as Proview distro default)
sudo adduser pwrp dialout
(this is for arduino access)
sudo visudo
insert following line under the "root ALL=(ALL) ALL" Line:
pwrp ALL=(ALL) ALL
save changes, exit
sudo nano /etc/security/limits.conf
insert the following:
  • - rtprio 99
save and exit
sudo nano /etc/pam.d/su
uncomment line:
session required pam_limits.so
save and exit
(note: this allows the pwr service start to set pwr tasks' realtime priorities)
(note2: also applies to the pwrp tightvncserver X session, since that is launched with su also)
sudo nano /etc/init.d/tightvncserver
insert the following into the new file:
  1. !/bin/sh
  2. /etc/init.d/tightvncserver
VNCUSER='pwrp'
case "$1" in
start)
su $VNCUSER -c '/usr/bin/tightvncserver :0 -geometry 1024x768 -depth 24'
echo "Starting TightVNC Server for $VNCUSER "
stop)
pkill Xtightvnc
echo "TightVNC Server stopped"
  • )
echo "Usage: /etc/init.d/tightvncserver {start|stop}"
exit 1
esac
exit 0
save changes, exit nano
sudo chmod 755 /etc/init.d/tightvncserver
sudo update-rc.d tightvncserver defaults
exit (i.e. logout)
login as pwrp
mkdir ~/proview
vncpasswd
enter and confirm
no view-only password
sudo nano /etc/hostname
change to desired node name (e.g. rpi3)
save and exit
cd
ssh-keygen -t rsa
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
choose a static IPv4 address
sudo nano /etc/hosts
update with hostname and ip
add any other nodes which will participate in the distributed control system
sudo nano /etc/network/interfaces
change eth0 to (substitute actual network values):
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
save changes and exit
sudo shutdown -r now
login to X desktop using vnc client (to verify X is working)
9) Configure ssh access from dev to rpi
logon to dev as pwrp
do this only once:
ssh-keygen -t rsa
sudo geany /etc/hosts
insert line for raspberry pi machine(s) and any other hosts in the distributed system
save and exit
scp /home/pwrp/.ssh/id_rsa.pub rpi3:/home/pwrp/.ssh/authorized_keys
10) Install cross platform dev tools on dev
logon to dev as pwrp
sudo apt-get install ia32-libs git
cd
mkdir rpitools
cd rpitools
sudo git clone git://github.com/raspberrypi/tools.git
create symbolic links to compilers and archiver as a workaround on rather long fully qualified names -
(Proview merge tool has a hardcoded alloc of 80 chars max for the FQ name of each of these tools):
sudo -s
ln -s /home/pwrp/rpitools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc /usr/bin/arm-gcc
ln -s /home/pwrp/rpitools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ /usr/bin/arm-g++
ln -s /home/pwrp/rpitools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-ar /usr/bin/arm-ar
exit
11) Get a copy of the rpi headers and libraries to compile and link against, respectively
logon to dev as pwrp
rsync -avz -e ssh pwrp@rpi3:/usr/include /home/pwrp/rpi
sudo rsync -avz -e ssh pwrp@rpi3:/usr/lib/arm-linux-gnueabihf /usr/lib
sudo rsync -avz -e ssh pwrp@rpi3:/lib/arm-linux-gnueabihf /lib
12) Setup the build environment
logon to dev as pwrp
cd
geany ~/.envarm
insert the following into this new file:
  1. .envarm:
  2. env for Proview development for raspberry pi
export pwre_cc=/usr/bin/arm-gcc
export pwre_cxx=/usr/bin/arm-g++
export pwre_ar=/usr/bin/arm-ar
export pwr_host_exe=/usr/pwr48/os_linux/hw_x86_64/exp/exe
export pwre_host_exe=/usr/pwr48/os_linux/hw_x86_64/exp/exe
export pwre_env_db=/home/pwrp/pwre_env_db
export pwre_bin=/home/pwrp/pwrsrc_4.8.6-3/src/tools/pwre/src/os_linux
export pwre_dir_symbols=$pwre_bin/dir_symbols.mk
export PATH=$PATH:/home/pwrp/rpitools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
source $pwre_bin/pwre_function
save and exit
geany ~/.bashrc
insert at end of file:
source ~/.envarm
save and exit
close all Terminal(s)
launch Terminal
cd
mkdir pwrrls_4.8.6-3
define a PWRE environment for the build:
pwre add v486_arm
--
-- Environment  : v486_arm
-- Module.........: rt
-- Source root....: /home/pwrp/pwrsrc_4.8.6-3/src
-- Import root....: /usr/pwr48/os_linux/hw_x86_64
-- Build root.....: /home/pwrp/pwrrls_4.8.6-3
-- Build type.....: dbg
-- OS.............: linux
-- Hardware.......: arm
-- Description....: X48arm
--
himBH
13) Fixup Proview config script
logon to dev as pwrp
cd /home/pwrp/pwrsrc_4.8.6-3/src/tools/pwre/src/os_linux
cp pwre_configure.sh pwre_configure.sh.org
cd
geany /home/pwrp/pwrsrc_4.8.6-3/src/tools/pwre/src/os_linux/pwre_configure.sh
insert after line 311:
pwre_config_check_lib gtk GTK gtk gtk 0 "/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so"
pwre_config_check_include gtk GTK 1 "/home/pwrp/rpi/include/gtk-2.0/gtk/gtk.h"
as a sanity check, the code block should look like:
if test $pwre_hw == "hw_arm"; then
pwre_config_check_lib gtk GTK gtk gtk 0 "/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so"
pwre_config_check_include gtk GTK 1 "/home/pwrp/rpi/include/gtk-2.0/gtk/gtk.h"
pwre_config_check_include jni JNI 1 $jdk/include/jni.h
pwre_config_check_include jni JNI 0 $jdk/include/linux/jni_md.h
save and exit
pwre init v486_arm
pwre configure
need to figure out some paths, will use the output from "pwre configure" to help,
this is a little tedious:
geany /home/pwrp/pwrrls_4.8.6-3/pwre_arm_linux.cnf
find line "export pwre_conf_libgtk="
note the embedded command, e.g. "pkg-config --libs gtk+-2.0", designate as "cmd1"
find line "export pwre_conf_incdirgtk="
note the embedded command, e.g. "pkg-config --cflags gtk+-2.0", designate as "cmd2". the commands will now be run on the rpi:
ssh rpi3
execute cmd1:
pkg-config --libs gtk+-2.0
save the output in a new temp file, e.g. in geany
execute cmd2:
pkg-config --cflags gtk+-2.0
save the output to the temp file
exit from ssh session
in the temp file, replace "usr/include" with "home/pwrp/rpi/include"
in geany, open /home/pwrp/pwrsrc_4.8.6-3/src/tools/pwre/src/os_linux/pwre_configure.sh
find line "export pwre_conf_libgtk="
hard-code the contents of that assign to the output of cmd1, e.g.:
echo "export pwre_conf_libgtk=\"-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0\"" >> $cfile
find line "export pwre_conf_incdirgtk="
hard-code the contents of that assign to the edited output of cmd2, e.g.:
echo "export pwre_conf_incdirgtk=\"-pthread -I/home/pwrp/rpi/include/gtk-2.0 -I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include -I/home/pwrp/rpi/include/atk-1.0 -I/home/pwrp/rpi/include/cairo -I/home/pwrp/rpi/include/gdk-pixbuf-2.0 -I/home/pwrp/rpi/include/pango-1.0 -I/home/pwrp/rpi/include/gio-unix-2.0/ -I/home/pwrp/rpi/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/home/pwrp/rpi/include/pixman-1 -I/home/pwrp/rpi/include/freetype2 -I/home/pwrp/rpi/include/libpng12 \"" >> $cfile
find line "echo "export pwre_conf_lib=\"-lpthread -lm -lrt -lcrypt\"" >> $cfile"
add X11 and db5.1 libraries, e.g.:
echo "export pwre_conf_lib=\"-lpthread -lm -lrt -lcrypt -lX11 -ldb-5.1\"" >> $cfile
find line "echo "export pwre_conf_libdir=\"$conf_libdir\"" >> $cfile"
hard-code the assignment to:
echo "export pwre_conf_libdir=\"-L/usr/lib/arm-linux-gnueabihf -Wl,-rpath=/usr/lib/arm-linux-gnueabihf -Wl,-rpath=/lib/arm-linux-gnueabihf\"" >> $cfile
find line "echo "export pwre_conf_incdir=\"$conf_incdir\"" >> $cfile"
hard-code the assignment to:
echo "export pwre_conf_incdir=\"-I /home/pwrp/rpi/include -I/usr/local/jdk1.7.0_17/include -I/usr/local/jdk1.7.0_17/include/linux\"" >> $cfile
save the edited file
cd
mkdir pwrCustom
save the edited file (again) as ~/pwrCustom/pwre_configure.sh.custom
exit geany
14) Fixup Proview source tree
fix service start script:
cp /home/pwrp/pwrsrc_4.8.6-3/src/tools/pkg/deb_armel/pwrrt/pwr ~/pwrCustom
geany ~/pwrCustom/pwr
for each of the functions: pwr_start, pwr_stop, pwr_reload, pwr_kill:
replace the "whoami" conditional test from "root" to "pwrp"
if using an arduino uno, add the following line within the create_wrapper function, after the umask command:
echo "stty -F /dev/ttyACM0 10:0:8be:0:3:1c:7f:15:1:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0" >> $wrapper
save and exit
fix code error:
geany /home/pwrp/pwrsrc_4.8.6-3/sev/lib/sev/src/sev_db.cpp
add open curly brace on line 52:
else if ( type == sev_eDbType_Sqlite) {
add close curly brace after line 58.
code block should now look like:
if ( type == sev_eDbType_Mysql) {
  1. if defined PWRE_CONF_MYSQL
return sev_dbms::open_database();
  1. else
printf( "** Release is not built with mysql\n");
return 0;
  1. endif
}
else if ( type == sev_eDbType_Sqlite) {
  1. if defined PWRE_CONF_SQLITE3
return sev_dbsqlite::open_database();
  1. else
printf( "** Release is not built with sqlite3\n");
return 0;
  1. endif
}
else
return 0;
}
end example code block
save the edited file as:
~/pwrCustom/sev_db.cpp
exit geany
edit the build package script, it will not create a *.deb file as-is:
geany ~/pwrsrc_4.8.6-3/src/tools/pkg/deb_armel/pwrrt/build.sh
"# Create directories" section, insert line:
mkdir -p $pkgroot/usr/pwrp/adm/db
uncomment lines which copy op to cnf
uncomment lines which copy user to cnf
add following lines to "# Copy user to cnf" section:
cp $pwre_broot/$pwre_target/exp/inc/pwr_arduino_uno.ino $pkgroot/usr/pwrrt/cnf/user
cp $pwre_sroot/tools/pkg/deb/adm/proview_icon.png $pkgroot/usr/pwrrt/cnf/user
cp /home/pwrp/pwrCustom/Proview.desktop $pkgroot/usr/pwrrt/cnf/user
after the "# Copy user to cnf" section, insert the following lines:
  1. Copy user security data
mkdir -p $pkgroot/usr/pwrp/adm/db
cp $pwre_sroot/tools/pkg/deb/adm/pwr_user2.dat $pkgroot/usr/pwrp/adm/db
comment out line "dpkg-buildpackage -aarmel -b"
add following lines:
packagename=pwrrt-$version.tar.gz
tar -czf ../$packagename *
save the edited file as:
~/pwrCustom/build.sh
exit geany
geany ~/pwrCustom/fixPwrSource.sh
insert the following lines into the new file:
  1. !/bin/bash
  2. fix some missing dependencies
cp /home/pwrp/pwrsrc_4.8.6-3/nmps/lib/nmps/src/nmps.h /home/pwrp/pwrsrc_4.8.6-3/src/exe/rt_sim/src/
cp /home/pwrp/pwrsrc_4.8.6-3/src/exe/rt_elog/src/rt_elog.h /home/pwrp/pwrsrc_4.8.6-3/xtt/lib/xtt/src/
cp /home/pwrp/pwrsrc_4.8.6-3/src/exe/rt_elog/src/rt_elog.h /home/pwrp/pwrsrc_4.8.6-3/xtt/lib/xtt/gtk/
cp /home/pwrp/pwrsrc_4.8.6-3/src/exe/rt_elog/src/rt_elog.h /home/pwrp/pwrsrc_4.8.6-3/src/exe/rt_elog_dump/src
cp /usr/include/db.h /home/pwrp/pwrsrc_4.8.6-3/src/exe/rt_elog_dump/src
cp /usr/include/db.h /home/pwrp/pwrsrc_4.8.6-3/xtt/lib/xtt/src
cp /usr/include/db.h /home/pwrp/pwrsrc_4.8.6-3/xtt/lib/xtt/gtk
mkdir /home/pwrp/pwrsrc_4.8.6-3/wb/lib/wb/src/antlr
cp /home/pwrp/antlr-2.7.7/lib/cpp/antlr/* /home/pwrp/pwrsrc_4.8.6-3/wb/lib/wb/src/antlr
  1. fix code error
cp ~/pwrCustom/sev_db.cpp /home/pwrp/pwrsrc_4.8.6-3/sev/lib/sev/src/sev_db.cpp
  1. copy build script which creates just a tarball, not a debian package, and includes some custom rpi/arduino specific stuff
cp ~/pwrCustom/build.sh /home/pwrp/pwrsrc_4.8.6-3/src/tools/pkg/deb_armel/pwrrt
  1. copy custom pwre_configure.sh
cp /home/pwrp/pwrCustom/pwre_configure.sh.custom /home/pwrp/pwrsrc_4.8.6-3/src/tools/pwre/src/os_linux/pwre_configure.sh
  1. copy custom pwr service control script
cp ~/pwrCustom/pwr /home/pwrp/pwrsrc_4.8.6-3/src/tools/pkg/deb_armel/pwrrt/
save and exit
chmod 755 ~/pwrCustom/fixPwrSource.sh
geany ~/pwrCustom/Proview.desktop
insert the following lines into the new file:
[Desktop Entry]
Name=Proview
Comment=SCADA Operator Station
Exec=/home/pwrp/.xtt_start
Icon=proview_icon
Terminal=false
Type=Application
MimeType=text/plain
Categories=GTK
save and exit
15) Final cleanup
logon to dev as pwrp
delete /home/pwrp/pwrsrc_4.8.6-3 (and all contents)
delete everything from /home/pwrp/pwrrls_4.8.6-3, leaving the folder
unpack the source (again):
cd
tar -zxvf pwrsrc_4.8.6-3.2.tar.gz
16) Build Proview for raspberry pi
logon to dev as pwrp
cd
pwre list
pwre init v486_arm
./pwrCustom/fixPwrSource.sh
pwre create_all_modules
pwre import rt
pwre import java
pwre import op
pwre configure
./pwrCustom/fixPwrSource.sh
pwre ebuild rt
pwre ebuild op
pwre build tools/pkg deb_armel
note: to enable pkg rebuild (when make says nothing to do):
touch /home/pwrp/pwrsrc_4.8.6-3/src/tools/pkg/deb_armel/pwrrt/control


17) Install Proview runtime and op station on Raspberry Pi
logon to dev as pwrp
geany ~/pwrCustom/installRpi.sh
insert the following lines into the new file:
  1. !/bin/bash
  2. install Proview package on Raspberry Pi
  3. unpack the tarball
cd /home/pwrp/proview
tar -zxvf pwrrt-.tar.gz
chown -R pwrp:pwrp /home/pwrp/proview
  1. configure target dirs, install the archive
install -d -o pwrp -g pwrp /usr/pwrrt
install -d -o pwrp -g pwrp /usr/pwrrt/cnf
install -d -o pwrp -g pwrp /usr/pwrrt/cnf/op
install -d -o pwrp -g pwrp /usr/pwrrt/cnf/user
install -d -o pwrp -g pwrp /usr/pwrrt/exe
install -d -o pwrp -g pwrp /usr/pwrrt/lib
install -d -o pwrp -g pwrp /usr/pwrrt/load
install -d -o pwrp -g pwrp /pwrp
install -d -o pwrp -g pwrp /pwrp/arm_linux
install -d -o pwrp -g pwrp /pwrp/arm_linux/exe
install -d -o pwrp -g pwrp /pwrp/arm_linux/lib
install -d -o pwrp -g pwrp /pwrp/arm_linux/lis
install -d -o pwrp -g pwrp /pwrp/arm_linux/obj
install -d -o pwrp -g pwrp /pwrp/common
install -d -o pwrp -g pwrp /pwrp/common/db
install -d -o pwrp -g pwrp /pwrp/common/inc
install -d -o pwrp -g pwrp /pwrp/common/load
install -d -o pwrp -g pwrp /pwrp/common/log
install -d -o pwrp -g pwrp /pwrp/common/loghist
install -d -o pwrp -g pwrp /pwrp/common/web
install -d /usr/pwrp
install -d -o pwrp -g pwrp /usr/pwrp/adm
install -d -o pwrp -g pwrp /usr/pwrp/adm/db
install -d /usr/share/doc/pwrrt
install -D /home/pwrp/proview/etc/* /etc
install -D /home/pwrp/proview/etc/init.d/* /etc/init.d
install -D -m 644 /home/pwrp/proview/usr/pwrrt/cnf/proview.cnf /etc
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrrt/* /usr/pwrrt
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrrt/cnf/* /usr/pwrrt/cnf
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrrt/exe/* /usr/pwrrt/exe
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrrt/lib/* /usr/pwrrt/lib
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrrt/load/* /usr/pwrrt/load
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrrt/cnf/op/.??* /usr/pwrrt/cnf/op
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrrt/cnf/user/.??* /usr/pwrrt/cnf/user
install -D -o pwrp -g pwrp /home/pwrp/proview/usr/pwrp/adm/db/* /usr/pwrp/adm/db
install -D -m 644 /home/pwrp/proview/usr/share/doc/pwrrt/* /usr/share/doc/pwrrt
install -D -m 644 /home/pwrp/proview/usr/share/man/man1/* /usr/share/man/man1
install -D -o pwrp -g pwrp -m 775 /home/pwrp/proview/usr/pwrrt/cnf/user/.??* /home/pwrp
install -D -o pwrp -g pwrp -m 775 /home/pwrp/proview/usr/pwrrt/cnf/user/* /home/pwrp
install -D -m 644 /home/pwrp/proview/usr/pwrrt/cnf/user/proview_icon.png /usr/share/pixmaps
install -D -o pwrp -g pwrp -m 644 /home/pwrp/proview/usr/pwrrt/cnf/user/Proview.desktop /home/pwrp/Desktop
if [ -f /home/pwrp/pwr_arduino_uno.ino ]
then
install -d -o pwrp -g pwrp /home/pwrp/sketchbook
install -d -o pwrp -g pwrp /home/pwrp/sketchbook/pwr_arduino_uno
mv /home/pwrp/pwr_arduino_uno.ino /home/pwrp/sketchbook/pwr_arduino_uno
chown pwrp:pwrp /home/pwrp/sketchbook/pwr_arduino_uno/pwr_arduino_uno.ino
fi
save and exit
scp /home/pwrp/pwrrls_4.8.6-3/os_linux/hw_arm/bld/pkg/pwrrt-.tar.gz pwrp@rpi3:~/proview
scp /home/pwrp/pwrCustom/installRpi.sh pwrp@rpi3:~/
ssh rpi3
cd
chmod 775 installRpi.sh
sudo ./installRpi.sh
sudo update-rc.d pwr defaults
exit (from ssh session)
18) create proof-of-concept Proview project
logon to dev as pwrp
one-time fix so plc prog will build:
mkdir /home/pwrp/pwrrls_4.8.6-3/os_linux/hw_x86_64
mkdir /home/pwrp/pwrrls_4.8.6-3/os_linux/hw_x86_64/exp
mkdir /home/pwrp/pwrrls_4.8.6-3/os_linux/hw_x86_64/exp/exe
cp ~/pwrsrc_4.8.6-3/src/exp/com/src/os_linux/pwrp_env.sh /home/pwrp/pwrrls_4.8.6-3/os_linux/hw_x86_64/exp/exe
end one time fix
on the desktop, double-click Proview V4.8
accept (and respect) the license terms
using "PwR Project List":
enter edit mode
add a BaseReg object, child to Bases
open the new object, set attributes:
ObjectName: BaseV48arm
Version  : X48arm
Path  : /home/pwrp/pwrrls_4.8.6-3
close the object
save changes
note: the new base define is reflected as a new line in /usr/pwrp/adm/db/pwr_projectlist.dat
the binding to the release build's path is via the "X48arm" token, which will be used below
add a $Hier object, sibling to Bases
set ObjectName attribute = "testProjects"
add a ProjectReg object, child of testProjects
open new object, set attributes:
ObjectName : piPOC
Description: Raspberry Pi Proof of Concept
Version  : X48arm
(note: Version attr binds the project to the BaseV48arm)
close the object
save changes
Confirm Actions: Yes
note: the new project is reflected as a new directory tree at /usr/local/pwrp/pipoc
leave edit mode
right-click piPOC, pick Open Project
using "Configure Directory Volume":
enter "Production QBUS id" = 5 (this is arbitrary, but better than using defaults, for troubleshooting)
click Next
click Next
click No
click Next
click Next
click Skip this node
click Next
click Yes
using "Configure Root Volume":
pick Operator Station
click Next
click Next
click Next
using "PwR VolPipoc, pwrp on pipoc":
from the drop-down menu, pick "File | Volume Attributes..."
change the "OperatingSystem" attribute to "CustomBuild"
close the object
save changes
close the window
using "PwR Directory, pwrp on pipoc":
enter edit mode
open pipoc object, set attributes:
NodeName  : rpi3 (i.e. the hostname of the target rpi)
OperatingSystem: CustomBuild
BootNode:  : rpi3
Address  : 192.168.0.1 (i.e. the IPv4 address of the rpi)
close the object
add a CustomBuild object as child to pipoc
open the new object, set attributes:
ObjectName  : build
cc  : /usr/bin/arm-gcc
cxx  : /usr/bin/arm-g++
ar  : /usr/bin/arm-ar
OperatingSystem: Linux on ARM
Platform  : arm_linux
Release  : X48arm
close the object
save changes
leave edit mode
right-click "VolPipoc", pick Open Volume
using "PwR VolPipoc, pwrp on pipoc":
enter edit mode
in the right pane, delete the Maintenance object
in the right pane, delete the OpDefault object
in the right pane, delete the WebHandler object
in the right pane, delete the WebBrowser object
add a XttGraph object as child to Op
set ObjectName to Display1
open Op object, set attributes:
UserName  : pwrp
FastAvail[0]  : Nodes-Pipoc-Op-Display1
close the object
in the center pane, add a $PlantHier object
set ObjectName to Bakery
add a $PlantHier, child to Bakery
set ObjectName to Signals
add two Iv objects as children of Signals
set ObjectName's to Iin and Iout, respectively
add a PlcPgm object as child of Bakery
set ObjectName to Plc
save changes
leave edit mode
right-click Bakery-Plc, pick Open Program
using "Bakery-Plc"
enter edit mode
add a GetIv object
add a StoIv object
connect the GetIv output to the StoIv input
from drop-down menu, pick "View | Palette | Plant". Using the right-pane
plant hierarchy:
Connect (bind) Signals-Iin to GetIv
Connect (bind) Signals-Iout to StoIv
save changes
leave edit mode
close the window
using "PwR VolPipoc, pwrp on pipoc":
right click Nodes-Op-Display1
pick "Open Ge..."
using "PwR Ge display1"
add two ValueInputMedium objects
record the coordinates for the area to display, i.e. the area which contains the two objects
from the drop-down menu, pick "File | Graph Attributes"
enter the x & y coordinates for this display area
close the object
double-click one of the ValueInputMedium objects, set attribute:
Value.Format  : %6d
close object
repeat for the other Input object
View "Plant Hierarchy", select Bakery-Signals-Iin
press Ctrl key, double-click on first ValInpMed object (binds signal to object)
repeat, bind Iout to other display object
pick "File | Save"
close the window
using "PwR VolPipoc, pwrp on pipoc":
from drop-down menu, pick "Functions | Build Node"
example output as shown in "Proview Development Console":
Setting base /usr/pwr48
Open pipoc
args: pipoc pwrp pwrp
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
Welcome to
pipoc V4.8 Raspberry Pi Proof of Concept
Revision history
2013-03-09 pwrp Project created
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
-- Processing line: 50
-- Building volume directory
-- Opening volume 'VolPipoc'
Berkeley DB 5.1.29: (October 25, 2011)
info get: 0
-- Build node pipoc
-- Plc window generated Bakery-Plc-W
/home/pwrp/pwrrls_4.8.6-3 is baseroot
Setting base /home/pwrp/pwrrls_4.8.6-3
-- Cross compilation ARM_LINUX
-- Plc window compiled for arm_linux optimized -O3 Bakery-Plc-W
/home/pwrp/pwrrls_4.8.6-3 is baseroot
Setting base /home/pwrp/pwrrls_4.8.6-3
-- Cross compilation ARM_LINUX
-- Plc plcpgm compiled for arm_linux optimized -O3 Bakery-Plc
-- Web startpage generated $pwrp_web/index.html
/home/pwrp/pwrrls_4.8.6-3 is baseroot
Setting base /home/pwrp/pwrrls_4.8.6-3
-- Cross compilation ARM_LINUX
-- Building archive for volume: 000_001_001_001
-- Archive built for volume: 000_001_001_001
-- Working with load file volume 'VolPipoc'...
-- Open file...
-- Successfully created load file for volume 'VolPipoc'
-- 26 objects with a total body size of 26392 bytes were written to new file.
-- Creating bootfile for node rpi3
-- Plc thread generated priority 22, scantime 0.10000 s, 1 plcpgm's
/home/pwrp/pwrrls_4.8.6-3 is baseroot
Setting base /home/pwrp/pwrrls_4.8.6-3
-- Cross compilation ARM_LINUX
-- Plc process compiled for arm_linux optimized -O3 Dummy
/home/pwrp/pwrrls_4.8.6-3 is baseroot
Setting base /home/pwrp/pwrrls_4.8.6-3
-- Cross compilation ARM_LINUX
-- Plc program linked for arm_linux node plc_rpi3_0005_plc
-- Build node pipoc
end example output
from drop-down menu, pick "Functions | Distribute"
using "Distributor":
select rpi3
from the drop-down menu, pick "Functions | Distribute"
example output in "Proview Development Console":
pwrp_pkg_rpi3_0001.tgz 100% 1705KB 1.7MB/s 00:00
-- No package installed
-- Installing package pwrp_pkg_rpi3_0001.tgz
-- Unpack package pwrp_pkg_rpi3_0001.tgz
-- Move files to target directories
sudo: no tty present and no askpass program specified
end example output
there will be some warnings in Workbench Messages re missing files, ignore these
exit from the Proview development environment (close all windows in reverse order of opening them)
19) run the test project
connect to rpi3 via vnc client
nano ~/.xtt_start
edit the rt_xtt invoke to launch the operator station:
$pwr_exe/rt_xtt Nodes-Pipoc-Op &
save changes and exit
sudo nano /etc/proview.cnf
edit the qcomBusId to 5
save changes and exit
sudo shutdown -r now
(so the pwr service will pick up the new bus ID)
connect to rpi3 via vnc client
start the op station:
double-click the Proview desktop icon
launch Display1
verify manually entering a value in Iin is copied to Iout
verify manually entering a value in Iout is overwritten by value in Iin
verify status is green
note: to reset runtime from an abend:
source pwr_stop.sh
---------------------------------------------------------------------------------------------------
OK, proof of concept works, let's have another pi do some I/O
after all, what good is a SCADA system without I/O?
---------------------------------------------------------------------------------------------------
20) Build another rpi (nobody can have just one!), hostname rpi2
install base OS (item 8 above)
config new pi for ssh (item 9 above)
install Proview (item 17 above)
sudo nano /etc/proview.cnf
edit the qcomBusId to 5
save changes and exit
21) configure rpi2 for arduino
login to rpi2 as pwrp
connect the arduino device
sudo apt-get install arduino
launch arduino
pick "Tools | Board | Arduino Uno"
pick "Tools | Serial Port | /dev/ttyACM0"
pick "File | Sketchbook | pwr_arduino_uno"
in sketch, verify debug assignment is 0
verify baudRate is 19200
upload sketch to the arduino
note: due to the bizarre handling of serial in Linux (i.e. raw, cooked, much interference by software layers, etc.),
the following config is needed prior to starting the pwr runtime:
stty -F /dev/sttyACM0 10:0:8be:0:3:1c:7f:15:1:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
this config is included in the "pwr" service start script as per edits in sections above.
(as a side note, if the Uno is connected to a virtual machine via VirtualBox, if you bind the Uno device from the (Windows) host
to the VM using USB and not COM, then things seem to work in Proview debug runtime. Again, the stty config needs to be run prior to runtime start.)
22) Update Proview project
logon to dev as pwrp
launch Proview
using "PwR Project List"
from the menu, pick "File | Open | GlobalVolumeList"
using "PwR Global Volume List"
enter edit mode
add a VolumeReg object as sibling of VolPipoc
open object, set attributes:
ObjectName  : VolPipoc2
Description  : 0.1.1.2 pipoc
VolumeId  : _V0.1.1.2
Project  : pipoc
close the object
save changes
leave edit mode
close the window
using "PwR Project List"
open PiPOC project
enter edit mode
add a RootVolumeConfig object as sibling of VolPipoc
open object, set attribute:
ObjectName  : VolPipoc2
close the object
add a NodeConfig object as sibling to pipoc
open object, set attributes:
ObjectName  : pipoc2
NodeName  : rpi2 (i.e. the hostname of the target rpi)
OperatingSystem: CustomBuild
BootNode:  : rpi2
Address  : 192.168.0.2 (i.e. the IPv4 address of the rpi)
close the object
add a CustomBuild as child to pipoc2
open object, set attributes:
ObjectName  : build
cc  : /usr/bin/arm-gcc
cxx  : /usr/bin/arm-g++
ar  : /usr/bin/arm-ar
OperatingSystem: Linux on ARM
Platform  : arm_linux
Release  : X48arm
close the object
open pipoc2's RootVolumeLoad object, set attribute:
ObjectName  : VolPipoc2
close the object
save changes
click Yes to "Do you want to create this Volume?"
leave edit mode
right click VolPipoc2, pick OpenVolume
using "Configure Root Volume"
pick "Operator Station"
click Next
click Next
click Next
using "PwR VolPipoc2, pwrp on pipoc"
enter edit mode
from the drop-down menu, pick "File | Volume Attributes..."
change the "OperatingSystem" attribute to "CustomBuild"
close the object
in the right pane, delete the Maintenance object
in the right pane, delete the OpDefault object
in the right pane, delete the WebHandler object
in the right pane, delete the WebBrowser object
add a XttGraph object as child to Op
set ObjectName to Display2
open Op object, set attributes:
UserName  : pwrp
AutoStart[0]  : Nodes-Pipoc2-Op-Display2
FastAvail[0]  : Nodes-Pipoc2-Op-Display2
close the object
add a Arduino_USB object as child of Pipoc2
open object, set attributes:
ObjectName  : Arduino
close object
add a Arduino_Uno object as child of Arduino
open object, set attributes:
ObjectName  : Uno1
Device  : /dev/ttyACM0
BaudRate  : 19200
close object
add a ChanAi object as child of Uno1
open object, set attributes:
ObjectName  : Ai0
Number  : 0
RawValRangeLow  : 0
RawValRangeHigh  : 1023
ChannelSigValRangeLow  : 0
ChannelSigValRangeHigh : 5
SensorSigValRangeLow  : 0
SensorSigValRangeHigh  : 5
ActValRangeLow  : 0
ActValRangeHigh  : 1023
close object
add a ChanDo object as child of Uno1
open object, set attributes:
ObjectName  : Do2
Number  : 2
close object
add a ChanDi object as child of Uno1
open object, set attributes:
ObjectName  : Di4
Number  : 4
close object
in the center pane, add a $PlantHier object
set ObjectName to Bakery2
add a $PlantHier object, child to Bakery2
set ObjectName to Signals
add an Ai object as child of Signals
open object, set attributes:
ObjectName  : Ai0
SigChanCon  : Nodes-Pipoc2-Arduino-Uno1-Ai0
close object
add a Di object as child of Signals
open object, set attributes:
ObjectName  : Di4
SigChanCon  : Nodes-Pipoc2-Arduino-Uno1-Di4
close object
add a Do object as child of Signals
open object, set attributes:
ObjectName  : Do2
SigChanCon  : Nodes-Pipoc2-Arduino-Uno1-Do2
close object
add a PlcPgm object as child of Bakery2
set ObjectName to Plc2
save changes
leave edit mode
right-click Bakery2-Plc, pick Open Program
using "Bakery2-Plc2"
enter edit mode
save changes (there are none - but we need the sub-window to exist)
leave edit mode
close the window
using "PwR VolPipoc, pwrp on pipoc":
right click Nodes-Op-Display2
pick "Open Ge..."
using "PwR Ge display2"
add one ValueInputMedium object
add two ValueMedium objects
note the coordinates for the area to display
from the drop-down menu, pick "File | Graph Attributes"
enter the x & y coordinates for display area noted above
close the object
double-click the ValueInputMedium object, set attribute:
Value.Format  : %6d
close object
repeat for the first ValueMedium object
repeat with %6.2f for other ValueMedium object
View Plant Hierarchy, select Bakery2-Signals-Do2
press Ctrl key, double-click on ValueInputMedium object
note: this connects the display object to the target plant signal
repeat, connect Di4 to ValMed, connect Ai0 to other ValMed
pick "File | Save"
close the window
using "PwR VolPipoc2, pwrp on pipoc":
from drop-down menu, pick "Functions | Build Node"
from drop-down menu, pick "Functions | Distribute"
using "Distributor":
select rpi2
from the drop-down menu, pick "Functions | Distribute"
exit from the Proview development environment (close all windows)
23) use the Arduino
connect to rpi2 via VNC X window
restart the runtime:
sudo service pwr restart
hint: if problems, then to get some diagnostics:
cd
source pwr_stop.sh
rt_ini -i &
ps -ef | grep rt
edit ~./.xtt_start to launch the operator station windows:
  1. !/bin/bash
source /etc/pwrp_profile
$pwr_exe/rt_xtt Nodes-Pipoc2-Op &
save changes and exit
double-click the Proview desktop icon
in Display2, the analog in value will vary slightly due to noise (unless you have connected a pot or some signal to it)
experiment with the Di and Do values
finish
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox