robview_interpreter
Robotino View2/3 のLinux 版は,RobView と言う名前になっています.
RobView はGUI プログラミング環境ですが,コマンドライン上から起動できるrobview_interpreter というプログラムもあります.
これは名前の通り,一つずつ解釈しながら進めるタイプです.
昔のBASIC ですね.
英語などの自然言語で言うところの「同時通訳」であり,C言語などは「翻訳」タイプです.
ちなみに,robview_interpreter は,引数としてrvw2のファイルを読み込むことができます.
View3 だと,標準ではrvwx ですが,これは圧縮しているため,interpreterで読み込めないようです.
また,引数のファイル名は絶対パスでないと動きません(robviewも同様).
相対パスでもNGです.
最初,起動方法がわからず,お手上げ状態になってしまいました(泣).
簡単に絶対パスで実行する方法として,pwd の併用をお勧めします.
robview `pwd`/hogehoge.rvw2
という感じで使えば,現在のディレクトリのファイルを呼び出せます.
ただし,この書き方ではtabキーのファイル名補完が効きませんので,ちょっと不便です.
次に,rvw2のプログラムに関してですが,main program のフローの部分の最後に「Terminate」を置いても,
プログラムの実行はコマンドラインに返ってきてくれません(泣).
内部的に終了するだけであって,interpreterは終わってくれません.
ただ,debugレベルで動かすと,Terminate への状態遷移をテキストで示してくれますので,それを見つけたらkill することで,適切に(?)終了できます.
というわけで,そのためのスクリプトが次です.
`pwd`を書かなくても,勝手に追加してくれますので,第1引数にrvw2ファイルを与えて下さい.tab補完が使えます.
あと,ノートパソコンなどからプログラムしていると,Robotino のIPアドレスがlocalhost ではなくなるので,それを修正する部分も用意しています.
ノートパソコンのIPアドレスを,sed の所に追加すれば,置換してくれます.
ついでに,ファイル等の読み込み・書き込み先のディレクトリ名の置換もあります.
/home/wataruと/home/robotino を/home/<ユーザ名> に置き換えてくれます.
自分のユーザ名に置き換えて使って下さい.
#!/bin/bash TARGETFILE=`pwd`/$1 DIRNAME=`dirname $TARGETFILE` echo "debug : DIRNAME = $DIRNAME" NEXTFILE=$DIRNAME/next.txt LOG=view3.log if [ "$2" == "" ]; then IP="\"127.0.1.1\""; else IP=\"$2\"; fi if [ -f $NEXTFILE ]; then rm -f $NEXTFILE; fi if [ -f $LOG ]; then grep -v 'Note: Execution state changed to "terminated"' $LOG > tmp.txt; cp tmp.txt $LOG; fi for EXT in rvw2 rvwx; do if [ ! "`echo $1|grep \".\"$EXT`" == "" ]; then EXTENTION="$EXT"; fi done case $EXTENTION in rvw2) VIEW3FILE=$DIRNAME/temp.$EXTENTION if [ -f $VIEW3FILE ]; then rm -f $VIEW3FILE; fi USERNAME=`users|awk '{ print $1 }'` cat $TARGETFILE | \ sed "s/home\/wataru/home\/$USERNAME/" | \ sed "s/home\/robotino/home\/$USERNAME/" | \ sed "s/\"127.0.1.1\"/$IP/" | \ sed "s/\"172.26.1.1\"/$IP/" | \ sed "s/\"172.26.111.10\"/$IP/" > \ $VIEW3FILE ;; rvwx) VIEW3FILE=$TARGETFILE ;; *) echo "unkown extention" esac # robview_interpreter -f $VIEW3FILE if [ "$3" == "" ]; then OPTION=""; else OPTION="--set $3 $4 $5 $6 $7 $8 $9"; fi echo "Robotino IP address = $IP " echo "robview_interpreter -f $VIEW3FILE $OPTION" | tee -a $LOG robview_interpreter -f $VIEW3FILE --global-variable-output-interval 1000 -l VERBOSE $OPTION | tee -a $LOG | grep -v Load & PID=`pidof robview_interpreter` while [ "`grep 'Note: Execution state changed to \"terminated\"' view3.log`" == "" ]; do sleep 1; done kill $PID if [ -f $NEXTFILE ]; then $0 `cat $NEXTFILE`*.rvw? fi
コメントを残す