Arduinoで実演
今すぐ始める簡単派生開発
株式会社 富士通コンピュータテクノロジーズ
伊澤 松太朗
目 次
当社のご紹介
モデル駆動開発とは
モデル駆動開発ツール BricRoboとは
BricRoboでLチカ派生開発
BricRoboの展開
会社概要
株式会社 富士通コンピュータテクノロジーズ
設立
1983年
事業所
川崎本社、豊橋事業所、長野事業所
事業内容
サーバ、ストレージ
モバイル端末、車載/FA機器、画像認識
ハードウェア、ネットワーク、検証ソリューション
従業員数 520名
組込みソフトウェア開発 280名
組込みハードウェア開発 50名
組込みプラットフォーム 45名
テストプログラム開発/検証評価 115名
280
50
45
115
組込みソフトウェア開発
組込みハードウェア開発
組込みプラットフォーム
TP開発/検証評価
その他
従来はドキュメント駆動開発
生産物
要件定義書
基本設計書
詳細設計書
参照
参照
コピペ
コピペ
ソースコード
モデル駆動開発はモデルが原本
マスター
モデル
変換
モデル駆動開発ツール
BricRoboとは
モデル駆動開発ツール BricRobo
CompositionType <<TopLevel>> S e n so r No de <<RunnableEntity>> + Initialize() :void <<BricRoboKeyElement>> S e n dT ask : T ask elapse = 1000 initTimer = 0 <<BricRoboKeyElement>> S e n se T ask : T ask elapse = 1 initTimer = 0 Λ <<RPortEv>> in l e d : Le d Λ <<RPortEv>> in ▲ <<PPortEv>> recv Λ <<RPortEv>> send u ar t : Uar t ▲ <<PPortEv>> recv Λ <<RPortEv>> send ▲ <<PPortEv>> count i n fr ar e dS e n so r : C e r am i c In fr ar e dS e n so r ▲ <<PPortEv>> count <<BricRoboKeyElem... Le dT ask : T ask elapse = 100 initTimer = 0 Λ <<RPortEv>> in ▲ <<PPortEv>> led par se r : Re c vPac ke t Par se r Λ <<RPortEv>> in ▲ <<PPortEv>> led Λ <<RPortEv>> count ▲ <<PPortEv>> packetOut Λ <<RPortEv>> temperature pac ke t Bu i l de r : S e n dPac ke t Bu i l de r Λ <<RPortEv>> count ▲ <<PPortEv>> packetOut Λ <<RPortEv>> temperature ▲ <<PPortEv>> temperature t e m pe r at u r e S e n so r : T e m pe r at u r e S e n so r ▲ <<PPortEv>> temperature <<BricRoboKeyElement>> SendTask :Task uart :Uart infraredSensor:CeramicInfraredSensor :TemperatureSensortemperatureSensor :SendPacketBuilderpacketBuilder Run() Run() Run() RunSend()
BricRobo
コードジェネレータ
ソース
コード
BricRobo
検索
FUJITSU Embedded System BricRobo
UMLと似たモデル図から
コード生成するツール
プラットフォームに依存しない
CPU
OS
BricRobo通信層
BricRobo RTE
タスク
コントローラー
部品
部品
タスク
タスク
部品
タスク
タイマー
BricRobo RTE
BricRoboの層を呼び出すタイマーがあれば、OSレスのマイコン上でも実行可能
LED2個のシステム開発から4個のシステムへ派生
Arduinoを使った派生開発
2個のLEDが交互に点滅
4個のLED点滅で、
2進数の0~15を表現
再利用可能なBricRobo部品を定義する
▲
<<PPort>> out
CompositionType
Hig hLowWa v e
- _lastState: uint8_t
<<ConfigParam>>
+ lastState: uint8_t
<<RunnableEntity>>
+ Run(): void
notes
HIGHまたはLOWを生成する部品
▲
<<PPort>> out
SenderReceiverInterface
IF ::Hig hLowIF
+ value: uint8_t
notes
HIGHまたはLOWを伝え
るインターフェース
Λ
<<RPort>> in
▲
<<PPort>> out
Hig hLowInv ert er
<<RunnableEntity>>
+ Run(): void
notes
HIGHとLOWを反転します
Λ
<<RPort>> in
▲
<<PPort>> out
SenderReceiverInterface
IF ::Hig hLowIF
+ value: uint8_t
notes
HIGHまたはLOWを伝え
るインターフェース
Λ
<<RPort>> in
Dig it a lOut
-
_pin: uint8_t
<<ConfigParam>>
+
pin: uint8_t
<<RunnableEntity>>
+
Run(): void
notes
指定したデジタルピンを出力モードに
し、値を出力します
Λ
<<RPort>> in
SenderReceiverInterface
IF ::Hig hLowIF
+ value: uint8_t
notes
HIGHまたはLOWを伝えるインター
フェース
パルス生成部品
デジタル信号出力部品
パルス反転部品
入出力データ型
部品を組み合わせて製品を作る
Lc ic a 2
▲
/out
WAVE :
Hig h LowWa v e
lastState = LOW
▲
/out
Λ
/in LE D1: Dig it a lOut
pin = 12
Λ
/in
Λ
/in
LE D2 : Dig it a lOu t
pin = 11
Λ
/in
Λ
/in
▲
/out
INV:
Hig h LowIn v e rt e r
Λ
/in
▲
/out
T IC K : T a s k
elapse = 100
initTimer = 0
Task部品は一定周期で各部品の関数を呼び出す
コード生成
「BricRobo一括コード生成」
ボタンをクリック
コード生成が始まり、
EAの出力ウィンドウに結果表示
コンパイルしてArduinoに
アップロード
部品の入れ替え
CompositionType
Lcica 4b it
notes
4ビットを表すLEDが、カウントアップしながら点滅します。
▲
/out
WAVE :Hig hLowWa v e
lastState = LOW
▲
/out
Λ /in
LE D1 :Dig it a lOut
pin = 12
Λ /in
Λ /in
LE D2 :Dig it a lOut
pin = 11
Λ /in
Λ /in
LE D3 :Dig it a lOut
pin = 10
Λ /in
Λ /in
LE D4 :Dig it a lOut
pin = 9
Λ /in
▲
/out
▲
/carry
Λ /in
BIT 0 :Ad d Hig hLow
init = 0
notes
最下位ビット
▲
/out
▲
/carry
Λ /in
▲
/out
▲
/carry
Λ /in
BIT 1 :Ad d Hig hLow
init = 0
/out
▲
▲
/carry
Λ /in
▲
/out
▲
/carry
Λ /in
BIT 2 :Ad d Hig hLow
init = 0
/out
▲
▲
/carry
Λ /in
▲
/out
▲
Λ /in
BIT 3 :Ad d Hig hLow
init = 0
notes
最上位ビット
▲
/out
▲
Λ /in
T IC K :T a s k
elapse = 200
initTimer = 0
notes
200ミリ秒周期で
駆動する。
LED2個追加
加算演算部品
Λ
<<RPort>> in
▲
<<PPort>> out
▲
<<PPort>> carry
Ad d Hig hLow
-
_bit: int
<<ConfigParam>>
+
init: int
<<RunnableEntity>>
+
Run(): void
notes
1bitを記憶して、入力した1bitと加算演算
を行う。結果を出力し、キャリー発生の有
無ビットも出力する。
Λ
<<RPort>> in
▲
<<PPort>> out
▲
<<PPort>> carry
SenderReceiverInterface
IF ::Hig hLowIF
+
value: uint8_t
notes
HIGHまたはLOWを伝え
るインターフェース
不要なパルス反転部品は
削除
部品の駆動順序を追加・修正
シーケンス図は分割する
機能毎のシーケンスにまとめる
CompositionType Lcica 4b it notes 4ビットを表すLEDが、カウントアップしながら点滅します。 ▲ /out WAVE :Hig hLowWa v elastState = LOW ▲ /out Λ /in LE D1 :Dig it a lOut pin = 12 Λ /in Λ /in LE D2 :Dig it a lOut pin = 11 Λ /in Λ /in LE D3 :Dig it a lOut pin = 10 Λ /in Λ /in LE D4 :Dig it a lOut pin = 9 Λ /in ▲ /out ▲ /carry Λ /inBIT 0 :Ad d Hig hLow
init = 0 notes 最下位ビット ▲ /out ▲ /carry Λ /in ▲ /out ▲ /carry Λ /inBIT 1 :Ad d Hig hLow
init = 0 /out▲ ▲ /carry Λ /in ▲ /out ▲ /carry Λ /inBIT 2 :Ad d Hig hLow
init = 0 /out▲ ▲ /carry Λ /in ▲ /out ▲ /carry Λ /inBIT 3 :Ad d Hig hLow
init = 0 notes 最上位ビット ▲ /out ▲ /carry Λ /in T IC K :T a s k elapse = 200 initTimer = 0 notes 200ミリ秒周期で 駆動する。
フィーチャー図連携
増大するバリエーション対応で苦労していませんか?
ツールにより
相互変換可能
個別製品向けモデル抽出ツール
CompositionType E T ROBO Λ /in NXT _LE F T _MOT OR:Mot orBricNXT 02 Λ /in Λ /in
NXT _RIG HT _MOT OR: Mot orBricNXT 02 Λ /in ▲ /out NXT _G Y RO: G y roSens orBricNXT ▲ /out ▲ /outMotorL ▲ /outMotorR Λ /inGyro Λ /inTachoL Λ /inTachoR
C ON: C ont roller ▲ /outMotorL ▲ /outMotorR Λ /inGyro Λ /inTachoL Λ /inTachoR ▲ /outTacho NXT _T AC HO_RIG HT : Mot orT a choBricNXT ▲ /outTacho
▲ /outTacho NXT _T AC HO_LE F T : Mot orT a choBricNXT ▲ /outTacho
CompositionType E T ROBO
Λ /in E V3_RIG HT _MOT OR:
Mot orBricE V3 Λ /in
Λ /in E V3_LE F T _MOT OR:
Mot orBricE V3 Λ /in ▲ /out E V3_G Y RO: G y roSens orBricE V3 ▲ /out ▲ /outMotorL ▲ /outMotorR Λ /inGyro Λ /inTachoL Λ /inTachoR
C ON: C ont roller ▲ /outMotorL ▲ /outMotorR Λ /inGyro Λ /inTachoL Λ /inTachoR ▲ /outTacho E V3_T AC HO_RIG HT : Mot orT a choBricE V3 ▲ /outTacho
▲ /outTacho E V3_T AC HO_LE F T : Mot orT a choBricE V3 ▲ /outTacho
フィーチャー図
バリエーション管理表
CompositionType E T ROBO Λ /in NXT _LE F T _MOT OR:Mot orBricNXT 02 Λ /in Λ /in
NXT _RIG HT _MOT OR: Mot orBricNXT 02 Λ /in Λ /in
E V3_RIG HT _MOT OR: Mot orBricE V3 Λ /in
Λ /in E V3_LE F T _MOT OR:
Mot orBricE V3 Λ /in ▲ /out NXT _G Y RO: G y roSens orBricNXT ▲ /out ▲ /out E V3_G Y RO: G y roSens orBricE V3 ▲ /out ▲ /outValue F ORWARD: C ons t Va lue ▲ /outValue ▲ /outValue T UIRN: C ons t Va lue ▲ /outValue ▲ /outMotorL ▲ /outMotorR Λ /inGyro Λ /inTachoL Λ /inTachoR
C ON: C ont roller ▲ /outMotorL ▲ /outMotorR Λ /inGyro Λ /inTachoL Λ /inTachoR ▲ /outTacho E V3_T AC HO_RIG HT : Mot orT a choBricE V3 ▲ /outTacho
▲ /outTacho E V3_T AC HO_LE F T : Mot orT a choBricE V3 ▲ /outTacho ▲ /outTacho NXT _T AC HO_RIG HT : Mot orT a choBricNXT ▲ /outTacho
▲ /outTacho NXT _T AC HO_LE F T : Mot orT a choBricNXT ▲ /outTacho