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