TECSをサポートする構造設計ツール ZIPC Toy!

Similar documents
目次 2 1. 目的 捉える課題 2. コンポーネントシステムについて TECS (TOPPERS Embedded Component System) 他言語との比較 3. コンポーネントシステムの適用 TOPPERS/SSPカーネルへの適用開発工程における有効性ソフトウェア構造の俯瞰における有効

PowerPoint Presentation

SWEST 17 mruby の現状と事例紹介 九州工業大学情報工学部田中和明 RubyAssociation 軽量 Ruby フォーラム

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

f2-system-requirement-system-composer-mw

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

組込みシステムにおける UMLモデルカタログの実践研究

PowerPoint プレゼンテーション

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

PowerPoint Presentation

Microsoft PowerPoint - CproNt02.ppt [互換モード]

AUTOSAR OS仕様とTOPPERS/ATK2の使い方

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

RCX vs. NXT 機能 CPU メモリサイズ ( バイト ) 1 デバイス I/O 表示 サウンド 通信 コンパイラ オープンソース開発環境 RCX H8 (8bit, 16MHz) 32K ( 含むファームウェア ) センサ 3ch モータ 3ch 液晶 8bit PCM 赤外線 GCC f

Microsoft PowerPoint - 01_Vengineer.ppt

TOPPERS基礎ロボコンセミナー

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

【注意事項】RXファミリ 組み込み用TCP/IP M3S-T4-Tiny

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

SysMLに関する操作方法について

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

Caché SQL ゲートウェイの使用法

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

プレポスト【問題】

Microsoft PowerPoint - 09.pptx

PowerPoint Presentation

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

Microsoft PowerPoint RT講習会(送付用)_ [互換モード]

ホンダにおける RT ミドルウェア開発と標準化活動 株式会社本田技術研究所基礎技術研究センター関谷眞

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

press-1005.OHP

スライド 1

第 3 回 TERAS 成果報告会 TERAS V3 紹介と今後の展開 Tool Environment for Reliable and Accountable Software 一般社団法人 TERAS 理事開発委員長渡辺政彦 2014 年 3 月 12 日

Java講座

UML は次のように表記を拡張して 利用しやすくすることができる ステレオタイプ クラス図などで モデル要素の意味を拡張するもの ギルメット << >> によるラベル表記と アイコン表記がある <<actor>> <<interface>> ステレオタイプ一覧 UML 表記の拡張 ATM 利用者 ス

Microsoft Word - tutorial3-dbreverse.docx

DPC-0401

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

Java演習(4) -- 変数と型 --

3/7 マイグレーション開発方針 顧客名 0 作成者 根岸正 < プログラム移行方針 > システム名称 A-VX システムマイグレーション作成日 2015/09/01 < COBOL 資産のプログラム移行 > COBOLソース ( メインとCOPYLIB) を入力としてSCC 言語変換ツールにてVB

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

インテル(R) Visual Fortran コンパイラ 10.0

エンジニアリング・サービスから見たMBD導入の成功・失敗

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門がじぇるね IoT 部門作品のタイトル : TOPPERS_ASP3 カーネルと astah*-uml による状態マシン図でのソフト設計と動作検証の試み作成者 : 塩出武 ( しおでたけ

PHP プログラムからの利用 (i5_connect) <html> <head><title> シンプルな PHP</title></head> <body> DBCS 漢字 / 半角かなをパラメータで i5 に渡す場合には i5 への接続時にこの記述が必要 <?php $conn = i5_co


EV3_APIの解説.pptx

PowerPoint Presentation

株式会社アルウィン C 言語コーディング規約 ver.0.1

エンティティ : インタフェースを定義 entity HLFDD is port (, : in std_logic ;, : out std_logic ) ; end HLFDD ; アーキテクチャ : エンティティの実現 architecture RH1 of HLFDD is <= xor

Microsoft PowerPoint - 集積回路工学_ ppt[読み取り専用]

第3部:プログラミング実習


内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

JACi400のご紹介~RPGとHTMLで簡単Web化~

2008年度 設計手法標準化アンケート 集計結果

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

アクティビティ図・シーケンス図からのコード生成 機能ガイド

RX210 グループ MTU2 を用いた相補 PWM モードの波形出力 要旨 本サンプルコードでは MTU2 を用いて相補 PWM モードの波形を出力する方法について説 明します 対象デバイス RX210 1 / 41

Java言語 第1回

Transcription:

ET2009 TOPPERS セッション C-9 TECS をサポートするコンポーネント設計ツール ZIPC Toy! と活用法 キャッツ株式会社ソフトウェア事業部今井良和 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 1

目次 TECSについて コンポーネント記述言語 CDL ツールチェーン ZIPC Toy! : コンポーネント設計 ZIPC : コンポーネントの振る舞い設計 実演 : LEGO Mindstorms NXT 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 2

TECS について : 概要 TECS : Toppers Embedded Component System 組込み向けにインタフェースを具体化したコンポーネントシステム 目的 ソフトウェアをコンポーネント構造にすることで見通しを向上 コンポーネント記述を標準化して部品の再利用, 部品流通を促進 特徴 コンポーネントの静的な生成と結合 ソフトウェアの構造をコンポーネント記述言語 (CDL) で表現 C 言語の曖昧さを排除したインタフェース定義 データ構造定義 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 3

TECS について : ソースベースの部品化の課題 従来 : ソースの部品化 Controller.c Task(Driver) { uint8_t level = SonarSensor_get(); uint8_t output = 0; if (level > 100) { Driver_set(10, 0); // 前進 else { Driver_set(10, 10); // 右回転 TerminateTask(); SonarSensor.c uint8_t SonarSensor_get(void) { return sensor_abc(port_ls); Driver.c void Driver_set(uint8_t speed, uint8_t turn) { nxt_motor_set_speed( PORT_MTR, speed+turn, 0); nxt_motor_set_speed( PORT_MTL, speed(-turn,0); 製品 A ソナーセンサー ( 障害物検知 ) モーター 2 個 ( 右 / 左車輪 ) 障害物があれば右回転なければ前進 他の製品にソースを活かしたいが 製品 B 光センサー ( 障害物検知 ) モーター 2 個 ( 右 / 左車輪 ) 障害物があれば右回転なければ前進 製品 C ソナーセンサー ( 障害物検知 ) モーター 2 個 ( 後輪, ステアリング ) 障害物があれば右回転なければ前進 製品 D ソナーセンサー ( 障害物検知 ) 光センサー ( ライン検知 ) モーター 2 個 ( 右 左回転 ) 障害物があれば後退ライン上なら左回転ライン上でなければ右回転 Controller.c を変更 LightSensor.c を追加 Driver.c を変更 Controller.c を変更 LightSensor.c を追加 Driver.c を変更 再利用できないソースコードが多い 写真 : http://lejos-osek.sourceforge.net/jp 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 4

TECS について : コンポーネントシステムの利点 TECS にすると 製品 A 製品 D tinwheeldriver tcontroller Controller cdriver edriver sdrive cdetector edetector sdetect tinwheeldriver Driver tsonardetector Detector tlinetracer Controller cdriver sdrive cobstdetector sdetect edriver edetector Driver tsonardetector Detector 製品 B tinwheeldriver clinedetector sdetect edetector tlightdetector Detector tcontroller Controller cdriver edriver sdrive cdetector edetector Driver tlightdetector 部品 \ 製品製品 A 製品 B 製品 C 製品 D sdetect Detector tcontroller 製品 C tcontroller Controller cdriver EDriver SDrive tsteerdriver Driver tlinetracer tinwheeldriver tsteerdriver cdetector edetector tsonardetector tsonardetector sdetect Detector tlightdetector 再利用性が向上 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 5

設計TECS について : 開発の流れと開発者の役割 2 1 1 3 実装CDL 1 アーキテクチャ設計者 どのような部品が必要とされるか どのように振る舞うべきか どのようなインターフェースかを設計する 2 コンポーネント開発者 コンポーネントの振る舞いを実装 3 アプリケーション開発者 コンポーネントを配置 インタフェースを接続 パラメータを入力 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 6

コンポーネント記述言語 CDL: 構成要素 TECS CDL は主に 3 つの記述から構成 シグニチャ記述 コンポーネントのインターフェース関数を定義する セルタイプ記述 コンポーネントが持つ受け口 呼び口を定義する 組み上げ記述 コンポーネント間の呼び出し関係を定義してシステムを組み上げる CDL によって コンポーネントのインタフェースを明確に定義ソースコードは組み上げ ( 他のコンポーネント ) に依存しない コンポーネントの再利用性が向上ソースをソフト部品として流通できる import_c( "tecs.h" ); typedef int32_t ER; シグニチャの定義 signature ssimple { ER func1( [in]int32_t inval ); ER func2( [out,string]char_t *str ); celltype tserver { entry ssimple eent; celltype tclient { call ssimple ccall; cell tserver Server { cell tclient Client { ccall = Server.eEnt; セルタイプの定義 組み上げ記述 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 7

コンポーネント記述言語 CDL: 定義 TECS で使用するコンポーネント記述言語 (TECS Component Description Language) TECS CDL の用語セルセルタイプシグニチャ呼び口, 受け口セル属性セル変数 コンポーネント図 セルタイプ 名 受け口 名 呼び口 名 tclient Client セル 名 ccall eent ssimple シグネチャ 名 func1() func2() 言語で表現 TECS CDL tserver Server 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 8

コンポーネント記述言語 CDL: 図との対応 CDL import_c( "tecs.h" ); コンポーネント図 セルタイプ 名 受け口 名 呼び口 名 tclient ccall eent Client ssimple シグネチャ 名 セル 名 func1() func2() tserver Server typedef int32_t ER; シグネチャの定義 signature ssimple { ER func1( [in]int32_t inval ); ER func2( [out,string]char_t *str ); celltype tserver { entry ssimple eent; attr { const uint16_t port val { int8_t clients; celltype tclient { call ssimple ccall; attr { const uint16_t port cell tserver Server { port = 1000; cell tclient Client { ccall = Server.eEnt; port = 21000; セルタイプの定義 セル属性セル変数 組み上げ記述 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 9

ツールチェーン アーキテクチャ設計 ( コンポーネント設計 ) 組み上げ記述 CDL ZIPC Toy! Technology of youth 振る舞い設計実装 ( 自動コード生成 ) 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 10

ZIPC Toy! : コンポーネント設計 構造設計 / コンポーネント設計 GUI で TECS コンポーネントモデルを作成プロパティ入力 実装コードの開発環境を作成 CDL からソースコードのひな形を作成 (TECSGEN) コンパイル ビルド環境を作成 (Eclipse CDT) 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 11

ZIPC Toy! : コンポーネント設計 TECS gen で C 言語の開発環境を作成 コンポーネント図を作成 モデル全体を把握 セル, シグネチャのパラメータを入力 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 12

ZIPC : 振る舞い設計 ZIPC : 状態遷移表をベースとした組み込み向け CASE ツール 状態遷移表によるモレヌケのない設計 シミュレーション機能 C ソースコードの自動生成 状態 事象 ( イベント ) アクション 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 13

ZIPC Toy! + ZIPC TECS コンポーネント図 tgyrosensor egyro cgyro tdriver cmotorl emotor tmotor GyroSensor cgyrocb egyrocb Driver emotorlcb cmotorcb MotorL tcontroller cdriver edriver cmotorr emotor tmotor Controller emotorrcb cmotorcb MotorR 振る舞い ( シーケンス図 ) edriver cgyro Driver cmotorl cmotorr cgyro_init() egyrocb_init_fin() cmotorl_init() emotorrcb_init_fin() cmotorr_init() emotorrcb_init_fin() edriver_drive(speed, turn) cgyro_get() cmotorl_set_speed(speed_l) cmotorl_set_speed(speed_r) 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 14

ZIPC Toy! + ZIPC : (1) STM スケルトン作成 cgyro cgyrocb tdriver cmotorl emotorlcb edriver cmotorr emotorrcb signature sgyrosensor { void init(void); signature sgyrosensorcb { void init_fin([in]int_32_t offset); signature smotor { void init(void); int32_t get_position(); void set_speed(int8_t pwm); Signature smotorcb { void init_fin(void); signature sdriver { void drive([in]float32_t speed, [in]float32_t turn); [singleton,active]celltype tdriver { call sgyrosensor cgyro; entry sgyrosensorcb egyrocb; call smotor cmotorl; entry smotorcb emotorlcb; call smotor cmotorr; entry smotorcb emotorrcb; entry sdriver edriver; var { float32_t speed; float32_t turn; int32_t gyro_offset; int8_t state; 受け口の関数 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 15

ZIPC Toy! + ZIPC : (2) アクションの記述 cgyro_init() cgyro_get() 呼び口の関数 cmotorl_init() cmotorl_get_position() cmotorl_set_speed(int8_t pwm) cmotorr_init() cmotorr_get_position(); cmotorr_set_speed(int8_t pwm) VAR_speed VAR_turn VAR_gyro_offset VAR_state セル変数 コンポーネントのインタフェースに沿った実装が簡単に状態遷移表によるヌケモレのない設計 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 16

ZIPC Toy! + ZIPC : セルタイプコードの生成 tdriver.c void TaskMain( void ) { switch( ZComTsk_m1State[ZComTsk_M1] ) { case ZComTsk_M1S0: ZComTsk_m1e0s0(); break; case ZComTsk_M1S4: ZComTsk_m1e0s4(); break; default: break; STM 設計書 ジェネレータ void egyro_init_fin( uint32_t offset ) { switch( ZComTsk_m1State[ZComTsk_M1] ) { case ZComTsk_M1S1: ZComTsk_m1e1s1( offset ); break; default: break; static void ZComTsk_m1e0s4( void ) { int8_t pwm_l, pwm_r; calc(var_speed, VAR_turn, cgyro_get(), VAR_gyro_offset, cmotorl_get_position(), cmotorr_get_position(), cbattery_get(), &pwm_l, &pwm_r); cmotorl_set_speed(pwm_l); cmotorr_set_speed(pwm_r);... 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 17

例 : LEGO Mindstorms NXT 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 18

ZIPC Toy! : 今後の拡張 CDL のインポート ZIPC Toy! Technology of youth 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 19

ZIPC Toy! : 今後の拡張 既存の C コードのコンポーネント化 #include ecrobot.h #include nxtlogo.h const int8_t MOTOR_L_PORT = PORT_B; const int8_t MOTOR_R_PORT = PORT_C; const int8_t GYRO_PORT = PORT_S1; float32_t forward; float32_t turn; int32_t gyro_offset; void drive(float32_t forward, float32_t turn) { int8_t pwm_l, pwm_r; balance_control( forward, turn, nxt_gyro_get(gyro_port), gyro_offset, nxt_motor_get_position(motor_l_port), nxt_motor_get_position(motor_r_port), ecrobot_get_battery_voltage(), &pwm_l, &pwm_r ); 自動抽出 関数定義 void drive(float32_t forward, float32_t turn); void init(); 関数参照 void balance_control(float32_t, float32_t, ); int32_t nxt_gyro_get(int8_t), int32_t nxt_motor_get_position(int8_t); int32_t ecrobot_get_battery_voltage(void); void nxt_motor_set_speed(int8_t, int8_t*, int8_t) void balance_init(void); void nxt_motor_set_position(int8_t,int32_t); ユーザが選択 シグネチャ受け口呼び口 nxt_motor_set_speed(motor_l_port, pwm_l, 0); nxt_motor_set_speed(motor_r_port, pwm_r, 0); void init(void) { balance_init(); nxt_motor_set_position(motor_l_port, 0); nxt_motor_set_position(motor_r_port, 0); gyro_offset=0; 定数定義 float32_t forward; float32_t turn; int32_t gyro_offset; 変数定義 const int8_t MOTOR_L_PORT; const int8_t MOTOR_R_PORT; const int8_t GYRO_PORT; 属性変数 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 20

ZIPC Toy! : 今後の拡張 デバッグ ブレークポイントの設定 変数の参照 実行トレース GDB 2009/11/9 CATS co., ltd., TOPPERS プロジェクト 21