製品企画プロジェクト特別演習

委託契約書2009情財第919号
~OSSを活用した組込みソフトウェア開発教育プログラムの開発と実証~
組込みソフトウェア実装特別演習
演習実施環境の構成
平成23年2月
公立大学法人 広島市立大学
1

基本アーキテクチャ
シミュレーション
プロセス監視
(OTPを利用)
OTPの
アプリケーション
として
動作させる
2

分散データベースMnesiaを利用

管理データ
外部環境系データ
 動作履歴
 計算に使う定数値


動作方法
Erlangシェルから直接コマンドを入力してデータ
を追加・変更できる
 プログラム内からでも可能

3

Erlang環境の整備

Erlang環境のインストール作業


シミュレータ教材(ver2.0)のインストール

インストールディレクトリに注意する




http://erlangworld.web.fc2.com/erlang/ins2win.html
(windowsの場合)
C:\Users\xxx へインストールしたと仮定する
ソースプログラムのコンパイル
分散データベースの初期化
開発用のエディタの準備




秀丸などのプレーンテキストエディタが必要
使い慣れたテキストエディタ
講義中に紹介されるテキストエディタや統合開発ツールなど
行番号表示、括弧チェック機能、キーワードに色が付くなど
4

最新版のErlangをダウンロード



Windows binary のところをダウンロード
ダウンロードファイルを実行して指示に従う
インストール完了後、インストールされた場所を確認する。


例) C:\Program Files\erl5.7.5.\bin
コマンドプロンプトから直接Erlangが実行できるようにパス
を設定


システム環境変数の「Path」に、追加する。
例) ; C:\Program Files\erl5.7.5.\bin
を追加する。はじめのセミコロンも必要。既存にかかれているパスは絶対
に削除しないこと。

コマンドプロンプトからErlangが実行できるか確認

erl と打って、Erlangが起動すればOK.
5

以下のURLからシミュレータ教材をダウン
ロード


http://scarlet.sos.info.hiroshima-cu.ac.jp/ipa/sim/
作業(任意)フォルダに保存して、解凍する。

解凍後、ファイルの内容を確認。
ファイル数:26 フォルダ数:2
 logフォルダ内にサンプルファイルが2つ
 scenarioフォルダ内にサンプルファイルが3つ


機能仕様書が同梱されています
6

実行環境に依存する部分を修正する

sim_sup.erl
-define(NODE1,
-define(NODE2,
'node1@localhost').
'node2@localhost').
-define(NODE1,
-define(NODE2,
'[email protected]').
'[email protected]').
7

シミュレータ教材(ソース一式)一式を任意のディ
レクトリにコピー


インストール先ディレクトリはどこでもよいが、コマンド
プロンプトから起動するので、「C:\Users\xxx」など
の場所にインストールするとよい
シミュレータのコンパイル


コマンドプロンプトを立ち上げ、教材インストール先に
cdコマンドで移動する。
ソースプログラムのコンパイル
makeと打つ
 コンパイル後は、xxxxx.beamファイルが出来る

8

分散データベース(Mnesia)の初期化

ノードを2つ立ち上げる(コマンドプロンプトから行う)
erl –name [email protected] –cookie abcdef
 erl –name [email protected] –cookie abcdef


どちらかのノードで、DB初期化コマンドを打つ
sim_sup:init_sim().
 打ち込むと他ノードも同じメッセージが表示される


データの確認

同じディレクトリ上に下記のディレクトリが作成されていること
を確認する


[email protected]
[email protected]
9

ノードを2つ立ち上げる(コマンドプロンプトから行う)



erl –name [email protected] –cookie abcdef
erl –name [email protected] –cookie abcdef
どちらかのノードで、起動コマンドを打つ

application:start(brakesim).
Mnesiaの開始が遅れて、失敗する場合もある
 その場合にはもう一度起動コマンドを打つ


コマンドでの終了の仕方

application:stop(brakesim).
10



コマンドプロンプトを2つ立ち上げる
シミュレータのディレクトリに移動
Erlangシェルの立ち上げ(2ノード)



アプリケーションの実行





dcs.erl
コンパイルまたはmake


application:start(brakesim).
テキストエディタ等でプログラムの修正


erl –name [email protected] –cookie yymmdd
erl –name [email protected] –cookie yymmdd
c (dcs).
make
「make」はコマンドプロンプト上。「c(dcs).」は、Erlangノード上。
再実行
以降繰り返し
11
event_loop() ->
receive
{state_inf,brake, Parameter} ->
Des = getParam(torque, Parameter),
if
Des >= 3 ->
NDes = 20,
io:format("NewTorque: ~p~n",[NDes]),
gen_server:cast({global,wheelFright},{update_ind,dcs,[opetype,brake,userope,speeddown,torque,NDes]}),
gen_server:cast({global,wheelFleft},{update_ind,dcs,[opetype,brake,userope,speeddown,torque,NDes]}),
gen_server:cast({global,wheelRright},{update_ind,dcs,[opetype,brake,userope,speeddown,torque,NDes]}),
gen_server:cast({global,wheelRleft},{update_ind,dcs,[opetype,brake,userope,speeddown,torque,NDes]}),
true;
true-> false
end,
io:format("OrgTorque: ~p~n",[Des]),
event_loop();
end.
ブレーキの踏みこみが一定以上の場合はフルブレーキにする例
12