お問い合わせ
お問い合わせ

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670-0

Fax番: +49 711 80670-111

E-Mailアドレス:

Address for Deliveries:
Motorstr. 56
70499 Stuttgart
Germany

Vector Informatik GmbH

Borsteler Bogen 27

Hamburg

ドイツ

電話番: +49 40 2020130-0

Fax番: +49 40 2020130-20

E-Mailアドレス:

Vector Informatik GmbH

Frankfurter Str. 286

38122 Braunschweig

ドイツ

電話番: +49 531 121990

Fax番: +49 531 12199 20

E-Mailアドレス:

Vector Consulting Services GmbH

Ingersheimer Str. 20

70499 Stuttgart

ドイツ

電話番: +49 711 80670 1520

Fax番: +49 711 80670 444

E-Mailアドレス:

Postal address:
Ingersheimer Str. 24

Vector Informatik GmbH

Philipp-Reis-Str. 1

76137 Karlsruhe

ドイツ

電話番: +49 721 91430 100

Fax番: +49 721 91430 101

E-Mailアドレス:

Vector Informatik GmbH

Otto-Hahn-Str. 20

85609 Aschheim

ドイツ

電話番: +49 89 94384220

Fax番: +49 711 80670-111

E-Mailアドレス:

Vector Informatik GmbH

Franz-Mayer-Str. 8

93053 Regensburg

ドイツ

電話番: +49 941 208650

Fax番: +49 941 20865 111

E-Mailアドレス:

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670 500

Fax番: +49 711 80670 555

E-Mailアドレス:

Technical Sales Embedded Software and AUTOSAR

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670 400

Fax番: +49 711 80670 425

E-Mailアドレス:

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670 200

Fax番: +49 711 80670-111

E-Mailアドレス:

Business hours: Monday to Friday from 8:30 am to 5:00 pm (CET/CEST).

Online: https://portal.vector.com

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670 5050

Fax番: +49 711 80670-111

E-Mailアドレス:

Vector Informatik GmbH

Ingersheimer Str. 24

70499 Stuttgart

ドイツ

電話番: +49 711 80670 5770

Fax番: +49 711 80670 333

E-Mailアドレス:

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670-5050

Fax番: +49 711 80670-111

E-Mailアドレス:

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670-0

Fax番: +49 711 80670-111

E-Mailアドレス:

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670 4618

Fax番: +49 711 80670 499

E-Mailアドレス:

Your contact:
Katja Hahmann
Manager Customer Projects for CANoe and automated Test Systems

Vector Informatik GmbH

Baierbrunner Str. 23

81379 Munich

ドイツ

電話番: +49 89 74 7377-0

Fax番: +49 89 74 7377-99

E-Mailアドレス:

Vector Austria GmbH

Millennium Tower, Etage 41
Handelskai 94-96

1200 Vienna

オーストリア

電話番: +43 1 90160 0

Fax番: +43 1 90160 35

E-Mailアドレス:

Vector Austria GmbH

Millennium Tower, Etage 41
Handelskai 94-96

1200 Vienna

オーストリア

電話番: +43 1 90160 55

Fax番: +43 1 90160 9955

E-Mailアドレス:

Vector Austria GmbH

Millennium Tower, Etage 41
Handelskai 94-96

1200 Vienna

オーストリア

電話番: +43 1 90160 40

Fax番: +43 1 90160 9940

E-Mailアドレス:

Vector Austria GmbH

Millennium Tower, Etage 41
Handelskai 94-96

1200 Vienna

オーストリア

電話番: +43 1 90160 0

Fax番: +43 1 90160 35

E-Mailアドレス:

Vector North America

39500 Orchard Hill Place
Suite 500

Novi, Michigan 48375

アメリカ合衆国

電話番: +1 248 449-9290

Fax番: +1 248 449-9704

E-Mailアドレス:

Operational sales automotive

Vector North America

39500 Orchard Hill Place
Suite 500

Novi, Michigan 48375

アメリカ合衆国

電話番: +1 248-449-9290, Option 3

Fax番: +1 248 449-9704

E-Mailアドレス:

Vector North America

39500 Orchard Hill Place
Suite 500

Novi, Michigan 48375

アメリカ合衆国

電話番: +1 248 449 9290 Option 1

Fax番: +1 248 449-9704

E-Mailアドレス:

Vector North America

39500 Orchard Hill Place
Suite 500

Novi, Michigan 48375

アメリカ合衆国

電話番: +1 248 449 9290 Option 2

Fax番: +1 248 449-9704

E-Mailアドレス:

Vector GB Ltd.

2480 Regents Court
The Crescent
Birmingham Business Park

West Midlands B37 7YE

イギリス

電話番: +44 121 788 7900

E-Mailアドレス:

VAT No.: GB 941 2528 36
Registered in England Number 06699692

Vector GB Ltd.

2480 Regents Court
The Crescent
Birmingham Business Park

West Midlands B37 7YE

イギリス

電話番: +44 121 788 7900

E-Mailアドレス:

Vector GB Ltd.

2480 Regents Court
The Crescent
Birmingham Business Park

West Midlands B37 7YE

イギリス

電話番: +44 121 788 7901

Fax番: --

E-Mailアドレス:

Vector GB Ltd.

2480 Regents Court
The Crescent
Birmingham Business Park

West Midlands B37 7YE

イギリス

電話番: +44 121 788 7900

Fax番: --

E-Mailアドレス:

ベクター・ジャパン株式会社

東京都品川区東品川2-3-12
シーフォートスクエア センタービル

〒140-0002

日本

電話番: +81 3 4586-1800

Fax番: +81 3 4586-1830

E-Mailアドレス:

ベクター・ジャパン株式会社

愛知県名古屋市中村区平池町4-60-12 グローバルゲート

〒453-6110

日本

電話番: +81 52 770 7170

Fax番: +81 52 770 7190

E-Mailアドレス:

ベクター・ジャパン株式会社

大阪府大阪市淀川区西中島 3-23-15 セントアーバンビル

〒532-0011

日本

電話番: +81 6 6829 6446

Fax番: --

E-Mailアドレス:

Vector Japan Co. Ltd.

東京都品川区東品川2-3-12 シーフォートスクエア センタービル

〒140-0002

日本

電話番: +81 3 4586 1800

Fax番: +81 3 4586 1830

E-Mailアドレス:

Vector Japan Co. Ltd.

愛知県名古屋市中村区平池町4-60-12 グローバルゲート

〒453-6110

日本

電話番: +81 52 770 7170

Fax番: +81 52 770 7190

E-Mailアドレス:

Vector Japan Co. Ltd.

Seafort Square Center Bldg.
2-3-12 Higashi-shinagawa, Shinagawa-ku

Tokyo 140-0002

日本

電話番: +81 3 4586 1800

Fax番: +81 3 4586 1830

E-Mailアドレス:

Vector Japan Co. Ltd.

東京都品川区東品川2-3-12 シーフォートスクエア センタービル

受付時間は下記をご参照ください。
・ 電話受付時間/10:00〜12:00 13:00〜17:30
月曜日〜金曜日 (祝日、年末年始、特定休業日を除く)
・E-mail、Fax受付時間/24時間随時
※夜間、休日にいただいたお問合せは翌営業日の対応となります。
※内容によってご回答までにお時間をいただく場合がございますことをご了承ください

Tokyo 140-0002

日本

電話番: +81 3 4586 1810

Fax番: +81 3 4586 1830

E-Mailアドレス:

Vector Japan Co. Ltd.

Seafort Square Center Bldg.
2-3-12 Higashi-shinagawa, Shinagawa-ku

Tokyo 140-0002

日本

電話番: +81 3 4586 1800

Fax番: +81 3 4586 1830

E-Mailアドレス:

Vector Japan Co.Ltd...

Seafort Square Center Bldg.
2-3-12 Higashi-shinagawa, Shinagawa-ku

Tokyo 140-0002

日本

電話番: +81 3 4586 1800

Fax番: +81 3 4586 1830

E-Mailアドレス:

Vector Automotive Technology (Shanghai) Co., Ltd.

Sunyoung Center
Room 2701-2703, No.398 Jiang Su Road
Changning District

Shanghai 200050

中国

電話番: +86 21 2283 4688

E-Mailアドレス:

Vector Automotive Technology (Shanghai) Co., Ltd.

801, 8th Floor, Indigo Plaza,
No.20 Jiuxianqiao Road,
Chaoyang District

Beijing 100016

中国

電話番: +86 10 8432 8600

E-Mailアドレス:

Vector Automotive Technology (Shanghai) Co., Ltd.

Sunyoung Center
Room 2701-2703, No.398 Jiang Su Road
Changning District

Shanghai 200050

中国

電話番: +86 21 2283 4688

E-Mailアドレス:

Vector Automotive Technology (Shanghai) Co., Ltd.

Sunyoung Center
Room 2701-2703, No.398 Jiang Su Road
Changning District

Shanghai 200050

中国

電話番: +86 21 2283 4688

E-Mailアドレス:

Vector Automotive Technology (Shanghai) Co., Ltd.

Sunyoung Center
Room 2701-2703, No.398 Jiang Su Road
Changning District

Shanghai 200050

中国

電話番: +86 21 2283 4688

E-Mailアドレス:

Vector Automotive Technology (Shanghai) Co., Ltd.

Sunyoung Center
Room 2701-2703, No.398 Jiang Su Road
Changning District

Shanghai 200050

中国

電話番: +86 21 2283 4688

E-Mailアドレス:

Vector Automotive Technology (Shanghai) Co., Ltd.

Room 1008, Galaxy Development Building, No. 18, Zhongxin 5th Road
Futian District

Shenzhen 518048

中国

電話番: +86 21 2283 4628

E-Mailアドレス:

Vector Korea IT Inc.

9F, Yongsan Prugio Summit Office-dong,
69, Hangang-daero, Yongsan-gu

Seoul 04378

韓国

電話番: +82 2 807 0600

Fax番: +82 2 807 0601

E-Mailアドレス:

Vector Korea IT Inc.

9F, Yongsan Prugio Summit Office-dong,
69, Hangang-daero, Yongsan-gu

Seoul 04378

韓国

電話番: +82 2 807 0600 Ext.1

Fax番: +82 2 807 0601

E-Mailアドレス:

Vector Korea IT Inc.

용산구 한강대로 69 용산 푸르지오 써밋 업무동 9층

서울 04378

韓国

電話番: +82 2 807 0600 Ext.4

Fax番: +82 2 807 0601

E-Mailアドレス:

Vector Korea IT Inc.

9F, Yongsan Prugio Summit Office-dong,
69, Hangang-daero, Yongsan-gu

Seoul 04378

韓国

電話番: +82 2 807 0600 Ext.2

Fax番: +82 2 807 0601

E-Mailアドレス:

Vector Korea IT Inc.

602, Yongsan Prugio Summit Office-dong

Seoul 04378

韓国

電話番: +82 2 807 0600 Ext.3

Fax番: +82 2 807 0601

E-Mailアドレス:

Vector Italia s.r.l.

Corso Sempione 68

20154 Milano

イタリア

電話番: +39 02678171 10

Fax番: +39 02678171 35

E-Mailアドレス:

Vector Italia s.r.l.

Corso Sempione 68

20154 Milano

イタリア

電話番: +39 02678171 70

Fax番: +39 02678171 35

E-Mailアドレス:

Business hours: Monday to Friday from 9:00 am to 6:00 pm (CET/CEST).

Online: https://portal.vector.com

Vector Italia s.r.l.

Corso Sempione 68

20154 Milano

イタリア

電話番: +39 02678171 10

Fax番: +39 02678171 35

E-Mailアドレス:

Vector Italia s.r.l.

Corso Sempione 68

20154 Milano

イタリア

電話番: +39 02678171 10

E-Mailアドレス:

Vector Informática Brasil Ltda.

Rua Verbo Divino 1488, 3º andar

4719-904 São Paulo - SP

ブラジル

電話番: +55 11 5180 2350

Fax番: +55 11 5181 7013

E-Mailアドレス:

Vector Informática Brasil Ltda.

Rua Verbo Divino 1488, 3º andar

4719-904 São Paulo - SP

ブラジル

電話番: +55 11 5180 2350

Fax番: +55 11 5181 7013

E-Mailアドレス:

Vector Informática Brasil Ltda.

Rua Verbo Divino 1488, 3º andar

4719-904 São Paulo - SP

ブラジル

電話番: +55 11 5180 2351

Fax番: +55 11 5181 7014

E-Mailアドレス:

Vector Informática Brasil Ltda.

Rua Verbo Divino 1488, 3º andar

4719-904 São Paulo - SP

ブラジル

電話番: +55 11 5180 2350

E-Mailアドレス:

Vector North America

1351 South County Trail, Suite 310

East Greenwich, RI 02818

アメリカ合衆国

電話番: +1 401 398 7185

E-Mailアドレス:

Development software testing
Operational sales non-automotive
 

Vector North America

1351 South County Trail, Suite 310

East Greenwich, RI 02818

アメリカ合衆国

電話番: +1 401 398 7185

E-Mailアドレス:

Vector North America

1351 South County Trail, Suite 310

East Greenwich, RI 02818

アメリカ合衆国

電話番: +1 401 398 7185

E-Mailアドレス:

Vector France S.A.S.

106 avenue Marx Dormoy

92120 Montrouge

フランス

電話番: +33 1 73 28 42 00

E-Mailアドレス:

Vector France S.A.S.

106 avenue Marx Dormoy

92120 Montrouge

フランス

電話番: +33 1 73 28 42 00

E-Mailアドレス:

Vector France S.A.S.

106 avenue Marx Dormoy

92120 Montrouge

フランス

電話番: +33 1 73 28 42 42

E-Mailアドレス:

Vector France S.A.S.

9 rue Matabiau

31000 Toulouse

フランス

電話番: +33 170 952 200

E-Mailアドレス:

Squoring Technologies SAS

9 Rue Matabiau

31000 Toulouse

フランス

電話番: +33 170 952 200

E-Mailアドレス:

Vector France S.A.S.

106 avenue Marx Dormoy

92120 Montrouge

フランス

電話番: +33 1 73 28 42 00

E-Mailアドレス:

Vector Informatik India Pvt. Ltd.

No 11-14, 5th & 6th floor, Tara Heights,
Old Mumbai Pune Road, Wakadewadi

Shivaji Nagar, Pune 411003

インド

電話番: +91 20 6634 6600

E-Mailアドレス:

Vector Informatik India Pvt. Ltd.

No 11-14, 5th & 6th floor, Tara Heights,
Old Mumbai Pune Road, Wakadewadi

Shivaji Nagar, Pune 411003

インド

電話番: +91 20 6634 6600

E-Mailアドレス:

Vector Informatik India Pvt. Ltd.

No 11-14, 5th & 6th floor, Tara Heights,
Old Mumbai Pune Road, Wakadewadi

Shivaji Nagar, Pune 411003

インド

電話番: +91 20 6634 6634

E-Mailアドレス:

Vector Informatik India Pvt. Ltd. – Bengaluru office

Kalyani Solitaire 2nd & 3rd Floor
No.165/2, Krishna Raju Layout
Doraisanipalya, Off Bannerghatta Road

Bengaluru 560076

インド

電話番: +91 80 6822 9600

E-Mailアドレス:

Vector Informatik India Pvt. Ltd.

No 11-14, 5th & 6th floor, Tara Heights,
Old Mumbai Pune Road, Wakadewadi

Shivaji Nagar, Pune 411003

インド

電話番: +91 20 6634 6600

E-Mailアドレス:

VecScan AB

Theres Svenssons Gata 9

417 55 Gothenburg

スウェーデン

電話番: +46 31 764 76 00

Fax番: +46 31 764 76 19

E-Mailアドレス:

VecScan AB

Theres Svenssons Gata 9

417 55 Gothenburg

スウェーデン

電話番: +46 31 764 76 00

Fax番: +46 31 764 76 19

E-Mailアドレス:

VecScan AB

Theres Svenssons Gata 9

417 55 Gothenburg

スウェーデン

電話番: +46 31 764 76 00

Fax番: +46 31 764 76 19

E-Mailアドレス:

VecScan AB

Theres Svenssons Gata 9

417 55 Gothenburg

スウェーデン

電話番: +46 31 764 76 00

Fax番: +46 31 764 76 19

E-Mailアドレス:

VecScan AB

Teknikringen 9

SE-583 30 Linköping

スウェーデン

電話番: +46 (0)13–560 18 14

Fax番: +46 31 764 76 19

E-Mailアドレス:

Vector North America

66 Bovet Road, Suite 300

San Mateo, CA 94402

アメリカ合衆国

E-Mailアドレス:

Vector North America

66 Bovet Road, Suite 300

San Mateo, CA 94402

アメリカ合衆国

E-Mailアドレス:

Vector North America

66 Bovet Road, Suite 300

San Mateo, CA 94402

アメリカ合衆国

E-Mailアドレス:

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670-0

E-Mailアドレス:

Address for Deliveries:
Motorstr. 56
70499 Stuttgart
Germany

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670 200

E-Mailアドレス:

Business hours: Monday to Friday from 8:30 am to 5:00 pm (CET/CEST).

Online: https://portal.vector.com

Vector Informatik GmbH

Visitor Address: Holderäckerstr. 36

70499 Stuttgart

ドイツ

電話番: +49 711 80670 500

E-Mailアドレス:

地図に表示
言語を選択してください

1. エリア

地域/国を選択してください:

Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
Your region/language settings differ from the requested site. Do you want to change to suggested region/language?
shoppingcart

CANoeおよびCANalyzerでのCAPLの使用

CAPLを使う際のヒントとコツ

CAPLはVector Informatik(ベクター本社)によって開発された、Cライクな手続き型プログラミング言語です。プログラムブロックの実行はイベントによって制御されます。CAPLプログラムは専用のブラウザーで開発およびコンパイルされます。これにより、システム変数をはじめ、データベースに含まれているあらゆるオブジェクト (メッセージ、シグナル、環境変数)へのアクセスが可能になります。また、CAPLはユーザーをサポートするために、多くの定義済み関数を備えています。

CAPLは、CANoeCANalyzerによってサポートされています。

まず、CAPLの基礎について解説します。主にCAPLを初めて学ぶ方を対象にしていますが、十分な知識があるユーザーの方もCAPLを構成する際に生かせるヒントを見つけていただけると思います。次に、CAPLの高度な機能について説明します。最後に、パフォーマンスとメモリのニーズや、データベースと連想配列を使用する際のヒントとコツを解説します。

 

CAPLは下記動画でも紹介しています。

 

はじめに

CAPLは初めてDOS版CANalyzerに導入されて以来、20年以上にわたり、単純な刺激入力から複雑なバスノードのシミュレーションまで幅広いタスクの実装に役立ってきました。(以下、「CANoe」をCANoeとCANalyzerの2製品の総称として使用します。)CAPLは常に、特定のタスクをできるだけシンプルに解決することを目標としてきました。代表的なタスクは、受信メッセージへの反応、シグナル値のチェックと設定、メッセージの送信です。プログラムはこれらの用途に特化したもので、かつ、付加的なオーバーヘッドはありません。

CANoeユーザーが通常行うプログラミング作業の多くは、短くて単純なものかもしれません。しかし、それほど単純には済まないタスクも数多く存在します。だからこそ、CAPLは長年にわたって拡張が加えられ、「可能な限りシンプルに」の原則に従って、複雑なタスクも解決できるプログラミング言語に進化してきています。

CAPL」は、Communication Access Programming Languageの略です。当初はCANだけでしたが、次第に拡張され、LIN、FlexRay、MOST、J1587、ARINC、CANopenなどのあらゆる車両バスシステムに対応するようになりました。

他の多くのプログラミング言語と同様、CAPLの構文規則はC言語に基づいています。CやC#言語、あるいは最近の多様なスクリプト言語の知識があれば、短期間でCAPLを使いこなせるようになります。ただし、CAPLプログラムにはCプログラムと一線を画す、独自の特徴がいくつかあります。

  • CAPLプログラムは、イベント駆動型です。つまり、CAPLプログラムは個々の関数の集まりであって、その関数の1つ1つが、メッセージの受信、シグナルの変化、タイマーの期限切れ、さらには「環境」の変化といった、解析対象のシステム内のイベントに反応します。たとえば、「EngineState」というメッセージに反応するには、「On message EngineState」を使用します (図1)。
  • CAPLプログラムは、解析対象のシステムのコンセプトに応じた固有のデータベースを使用します。このデータベース内でメッセージやシグナルの名前を定義し、その名前をプログラムコード内で直接使用できます。図1のメッセージの「EngineState」や、このメッセージ内のシグナルの「EngineSpeed」がこの名前に当たります。
  • CAPLプログラムには、ポインタ型は使用しません。そのため、Cプログラミングでしばしば発生しがちな潜在的なプログラミングエラーやプログラムクラッシュの原因を根本から排除することができます。しかし、エラーを招きやすいとはいえ、ポインタの概念が非常に優れていることは確かです。そのためCAPLにはポインタに代わる機能がいくつか用意されています。動的メモリの代用となる連想配列もその1つです。

CAPLとC言語に共通する重要な性質として忘れてはならないのが、CAPLは常にコンパイルされるという点です。つまり、CAPLは効率的に実行できる、柔軟性の高いマシンコードに変換されます。

YouTube掲載動画

CAPL Basics

3 Examples of CAPL programming in CANoe and CANalyzer (3分30秒)(言語:英語)

オンラインセミナー(録画)

Introduction to CAPL

... for CANoe and CANalyzer  (60分)(言語:英語)

単純なCAPLプログラム

Figure 1: A simple example of a CAPL program
図1:単純なCAPLプログラムの例

こちらの図で、単純なCAPLプログラムを紹介します。これはバスモニタリングツールとして基本的なタスクを行うプログラムの1つで、バス上のトラフィックを監視し、バス上で発生する2つのイベントを、ユーザーが監視/モニタリングできるように処理します。これは、CANoeプログラムの簡単な例で、「Easy.cfg」サンプルの「Display.can」です。まずは全体的な機能の概略を説明し、次に個々のセクションの詳細を説明していきます。

タスクの説明

  • ここでのタスクはCANネットワークを監視することです。このバスのノード、メッセージ、転送されるシグナルといった要素は、データベースに記述されています。
  • EngineState」メッセージを受信すると、それに含まれる「EngineSpeed」シグナルを取得し、パネルに表示させます。
  • LightState」メッセージを受信すると、それに含まれる「HeadLight」と「Flashlight」のシグナルを取得し、グラフィック表示用パネルに表示させます。

プログラムの説明

図1にある行番号はCAPLプログラムの一部ではなく、個々の行やセクションを参照しやすいよう挿入されたものです。また、図1では見た目をコンパクトにまとめるため、角かっこは改行せずに配置しています。

CAPLプログラムではグローバル変数とグローバル定数の定義が可能です。これは「variables」セクション (1行目から5行目)で行われます。このプログラムでは、ここに記載されている定数と変数がグローバルに定義されています。これらはプログラム内の任意の場所で使用できますが、同じCANoeアプリケーション内の別のプログラムでは使用できません。他のセクションではイベントに対する反応 (7行目から17行目)と補助(ユーザー定義)関数 (19行目から28行目)が定義されています。

7行目から9行目はメッセージイベントプロシージャの最小限の形を示しています。この関数はこのメッセージがバス上で送信されるたびに呼び出されます。CANの場合、これが呼び出される正確な時点はCANコントローラーでのTXまたはRXの割込みの時点、すなわちメッセージが正しく送信された直後になります。特定の関数を呼び出すトリガーとなるメッセージは、this構文で指定できます。

8行目では、受信されたメッセージ (this)から「EngineSpeed」シグナルの値が読み出され、変換 (/1000.0)後にシステム変数に割り当てられています。

11行目から17行目は「LightState」メッセージのためのメッセージイベントプロシージャを示していて、方向指示器に関する情報を伝送しています。その処理はEngineStateメッセージと似ていますが、次のような特徴があります。12行目では、先ほど転送されたメッセージ(this)の方向フラグ(.dir)がチェックされています。このプログラムでは受信したメッセージ (RX値)のみ考慮する必要があります。なぜなら、ノードから送信されたメッセージも、イベントプロシージャ (TX値)をもトリガーするためです。この場合、エラーメッセージが15行目に出力されます。

シグナルをインターフェイス (各種の状態がそれぞれのビットマップで表示されるパネル)上で表示させる処理はやや複雑であるため、その実装は独立した関数に任されています。13行目では、パラメーターとして求められる2つのメッセージシグナルを用いて、「SetLightDsp」が呼び出されています。

最後に、19行目から28行目では独立した関数を定義しており、転送されたシグナル値に応じて、Lightsのネームスペースにあるシステム変数「LightDisplay」にそれぞれの値を書き込んでいます。このサンプルコンフィギュレーションでは、この変数によってディスプレイパネルに適切なビットマップが表示されます。

実行モデル

CAPLとCあるいはC++との主な違いは、プログラム要素が呼び出されるタイミングとその方法にあります。たとえば、Cでは、処理シーケンスはすべて、最初のmain()関数から始まります。一方CAPLプログラムでは、それぞれが以下のようなイベントに反応する一連のプロシージャが含まれています。

  • システムによるトリガーこれらのイベントには、on preStarton starton preStopon stopMeasurementや時間制御およびキーボードイベントのon timeron keyなどの、実行する測定の初期化や後処理に役立つものが含まれています。
  • バス通信によるトリガー通信やエラー処理に関連したバスイベントに反応するイベントプロシージャにはさまざまなタイプのものがあり、それらはバスの種類に大きく依存します。これらのイベントには、CANのon messageon busOffや、FlexRayのon frFrameon frStartCycleなどがあります。
  • Value Objectによるトリガー:  これらのオブジェクトには、CANoe/CANalyzerでグローバルに使用できるシステム変数と環境変数のほか、バス通信をデータ解釈したシグナル値が含まれます。この解釈は専用のデータベースによって行われます。このコンセプトについては、以降のセクションで説明します。

 

イベントプロシージャはアトミック:CANoeのシミュレーションモデルはイベント指向です。イベントプロシージャでは、CANoeがすべてのアクションをモデルの観点から同時に、具体的にはトリガーイベントが発生したタイミングで実行します。PCで生じる実際の計算時間は無視されます。

シミュレーション時間とタイムスタンプ:ただし、PCによって生成された実際のイベント、たとえばoutput()によるバス出力などには、リアルタイムクロックのタイムスタンプが与えられます。これらのイベントのシーケンスと時間ポイントは、バスのプロトコル、ドライバー、ハードウェアの特性から影響を受けます。仮想バスでは、そのような影響を及ぼすパラメータの一部を排除できます。その場合、バスイベントは同時に開始され、たとえばCANであれば、output()から複数のメッセージを出力する際、確実にアービトレーションを実施して送信できます。

システム変数の更新:ユーザーはCAPLを使ってプログラムの外にある環境変数やシステム変数を変更することも可能です。CAPLはイベント処理と同じタイミングで値を変更しますが、その変更はそのイベント処理が完了するまでは変数に反映されません。イベント処理中に読取りアクセスを行うと、その変数に新しい値が設定されているように見えても、常に古い値が返されます。これにより、値の変化が、ある特定の時点での1回しか発生しえないというメリットがあります。

実行モデルは状況に依存:CANoeやCANalyzerでは、さまざまな方法でCAPLが使用されます。そのため、その実行モデルも必ずしも一様ではありません。CANoeシミュレーションの仮想ノードはバス上に並行して存在し、それらは互いに完全に独立しています。トリガーイベントは常にすべてのプログラムにて有効です。対照的に、測定設定のノードやCANalyzerのノードは順次処理、すなわち各ノードが次のノードへと出力を渡していく形で処理されます。各ノードはその出力を次のノードに渡します。処理を進めるためには、渡されたイベントを明確に次のノードに渡さなければなりません。on *およびon [*]のプロシージャは、その目的で用意されています。
 

その他、テストプロシージャが外部イベントを待機できるタイプのテスト用プログラムがあります。CAPLの場合、そのようなイベントにはシミュレーション時間を用いて処理を再開します。対照的に、通常のイベントプロシージャでは、ループ処理など待機状態が発生するとシミュレーションシステム全体が停止します。これはCAPLを使用する場合によくある、エラー原因の1つです。そのため、外部DLLのビジーウェイトやウェイトコマンドは使用しないようにしてください。

CAPLでの効率的なプログラミング

C言語のプリプロセッサは強力なツールである一方、使用を誤ってエラーを招く場合もあります。したがってCAPLでは、C言語でよく知られているプリプロセッサディレクティブの一部のみをC言語と同等のセマンティクスで提供します。

#include: include変数プロシージャなど、CAPLプログラムのセクションがすべて揃った、任意のファイルを読み込みます。Cとは対照的に、includeファイルのテキストは、単にCAPLファイルに挿入されるのではなく、セクションとして挿入されます。includeファイルのすべてのセクションが、親となるCAPLファイルにあたかも最初から含まれていたかのように、全体に適用されます。CAPLではセクションの順序にはまったく意味はありません。そのため、コンパイラは重複しているすべてのシンボルをエラーとして報告します。また、includeファイルと親ファイルのコードとデータは相互に使用することが可能です。先ほど重複シンボルは避けると述べましたが、これには1つ例外があります。on starton preStarton preStopon stopMeasurementは、includeファイルと親ファイルの両方に存在することもあるということです。これらの関数では、最初にincludeファイルのコード、次に親ファイルのコード、というように順次実行されます。つまり、includeファイルは「データタイプの宣言」、「変数の定義」、「(インライン) 関数ライブラリの提供」という3つのタスクの実行に使われることになります。

#pragmaライブラリ:CAPLプログラムは、適切なCAPL DLLインターフェイスさえ実装すれば、他言語で作成されたWindows DLLを使用することができます。これらのDLLは直接、#pragma library("capldll.dll")というディレクティブでリンクできます。

マクロ:CAPLには多数のマクロが事前に定義されており、ユーザーはそれらをコードや条件付きコンパイルで使用できます。コードで使用されるマクロは、コード内の任意の場所で制限なく使用できます。C言語とは対照的に、マクロは文字列定数、変数の識別子、関数名の中で自由に使用できます。マクロは常に%文字で始まり、%文字で終わります。また、基本的に汎用的なプログラムを記述するのに使用されます。

利用可能なコードマクロには、使用中のノード名、現在のチャネルインデックス、現在のネットワーク名、バスのタイプが含まれます。このコードは%FILE_NAME%を含むファイル、または、%BASE_FILE_NAME%を使用して現在コンパイルされているプログラムファイル名にアクセスできます。includeファイルの場合、後者コードは親ファイルを示します。

以下に簡単な例を2つ示します。

write("The node name is %NODE_NAME%");

putValue(envChannel%CHANNEL%Var1, %CHANNEL%);


コードセクションにおける条件付きコンパイルのため、事前定義されたマクロのセットがあります。それらは#if#else#elifまたは#endifです。これらを使えばプログラム内で、プログラムタイプの仮想ノード、測定ノード、テストプログラムをはじめ、使用されているCANoeのバージョンも識別できます。

次は#pragma messageを使用する例です。

#if (TOOL_MAJOR_VERSION < 8)

#pragma message(“This program needs at least CANoe V 8 “)

#endif


#pragma message: #pragma messageディレクティブを使用すれば、ユーザーはコンパイル処理中に独自のメッセージ、つまり、現在コンパイルされているCAPLプログラムのバージョン番号などのメッセージを出力することができます。このメッセージはコンパイラからのその他のメッセージ、警告、エラー、通常のメッセージなどと一緒に表示されます。

連想配列

CAPLはC言語とは異なり、参照データタイプとしてポインタオブジェクトをサポートしていないため、動的なメモリ管理は行っていません。このため、CAPLは非常に堅牢であり、メモリ不足でデバッグが困難なランタイム環境によく適しています。特に、CANoeの「CAPL-onBoard」機能はその恩恵を受けており、リアルタイム性を高めるために、特定のハードウェアバスインターフェイス上で直接プログラムを実行するようになっています。とはいえ、Windowsのランタイム環境ではメモリが不足することはめったにありません。そのため、このランタイム環境でのCAPLでは、プログラム起動時に格納するデータ量が不明でも、データを格納できる連想配列を用意しています。

連想配列は、他のプログラミング言語におけるマップや動的配列に相当するコンテナです。CAPLは内部的に、これらの配列に効率的なハッシュテーブルを使用します。そのため、どのようなメッセージや測定値が発生するか事前にわからない場合でも、これらの特殊な配列によってバスメッセージや測定値を保存することができます。

CAPLでは、連想配列は単純な配列として宣言されますが、通常のサイズエントリーの代わりにキータイプを持っています。

連想配列の例を2つ示します。

long lastTime [long];
char[30] translate[ char[] ];


変数lastTimeは、longキーとlong値をマッピングする配列です。一方、translate文字列キー(長さ制限なし)を30文字までの文字列値にマッピングします。次の例では、lastTimeを使用して、CANネットワーク上で発生した各メッセージIDのタイムスタンプを保存しています。

on message CAN1.*{
  lastTime [this.id]

    = this.time;
}


CAPLは、ユーザーの利便性を高めるために、ドット表記を用いた連想配列変数用に以下のメソッドを提供しています。

  • containsKeyは、特定のキーがすでに含まれているかを調べる
  • sizeは、含まれるキーの数を返す
  • clearは連想配列を完全に空にし、removeは連想配列からキーを1つ削除する。実際に、removeclearはメモリを解放する

最後に、for命令には連想配列用に特別な形式があります。この形式は、lastTimeに実際に含まれるすべてのキーに対して反復処理を行います。

for (long akey: lastTime)
  {[…]} …

データベースへのアクセス

本ページのはじめにセクションでは、CAPLにおけるバス固有データベースの主な使用方法を説明し、これによりメッセージとシグナルの名前を使用することができます。プログラミングの観点から言えば、シグナルへのアクセスが複雑な理由として、効率を上げるために通常はメッセージのデータペイロードの中にしっかりと詰め込まれているためです。したがって、一般にシグナルは任意のビット長を持ち、メッセージのデータペイロードの中に配置されます。また、インテルまたはモトローラのいずれかのフォーマットで保存することもできます。

CAPLユーザーは、シグナル名を利用したシンボルベースのアクセスによってこれらの細かな作業負荷を軽減できます。シグナル値の読み取りや設定の際、CAPLコンパイラは自動的に、ビットのマスキング、スワップ、ビットシフトを含むシグナルの精確なビットパターンを考慮します。

ユーザーの利便性向上のため、データベース内に、他のオブジェクトを定義する事によってCAPLプログラミング言語の特性が改善されています。たとえば、シグナル値のステータスにプレーンテキスト名を使用するために、シンボル値テーブルをシグナルに関連づけることができます。さらに、データベース作成者は、他の属性オブジェクトを定義し、プログラムコードで使用することもできます。

CAPLは、シンボルを使用してデータベースオブジェクトを直接利用することが可能です。プログラム実装の時点では、対象となるオブジェクト候補がわからない場合がありますが、CAPLユーザーは、ネットワークノードから伝送されるメッセージ名や識別子などのシンボリック名やプロパティに動的にアクセスすることができます。

以下は簡単な例です。

message * m;
int i, mx;
mx=elcount(aNet::aNode.Tx);
for (i = 0; i < mx; ++i)
{
  m.id=aNet::aNode.TX[i];
  write(DBLookup(m).Name);
}


これらのシンボリックアクセス手法を先に紹介した連想配列と併用することで、汎用的なプログラムを実装することができます。

パフォーマンス

CAPLプログラムの多くは、重要なリアルタイム性を満たす必要があります。CAPLでシミュレートされたノードの実行モデルは、CAPLプログラムが任意の速度で実行されるというモデルコンセプトにも準拠しています。この理想に近づけるために、CAPLプログラムはコンパイルされます。すなわち、特定の実行対象マイクロプロセッサの機械語にコンパイルされます。さらに、最適化されたコードを使用することで、シグナルへの複雑なアクセスを実現します。ユーザーのためのヒントをいくつか紹介します。

writeEx():write関数は、CANoeおよびCANalyzerの出力Windowに特定のテキストを出力するために使用されます。writeEx関数を使用すると、より大量のデータを出力することができます。

たとえば、トレースWindowやログファイルに直接書き込むことにも使用できます。writeExで生成されたテキスト出力は、あらゆる点でバスイベントと同様に扱われるため、優先度の高い処理や実バスイベントとのタイムスタンプ同期などが実現されています。

イベントプロシージャ:CAPLプログラムは、イベントに反応するプロシージャの組み合わせで構成されています。これらのイベントの中には非常に頻繁に発生するものがあるため、必要なイベントだけを処理するようにすることで、プログラムの性能は大幅に良くなります。たとえば、ユーザーが特定のシグナルを含むFlexRayスロットにのみ興味がある場合は、on frSlot signalnameで定義する方が、on frSlot *で定義するよりも効率的です。

シグナル変化:シグナルとシステム変数には2つのイベントプロシージャがあります。on signal_updateon sysvar_updateは、オブジェクトの値が全く変化していなくても、特定のデータオブジェクトへ書き込みアクセスが発生するたびに呼び出されます。これに対し、on signal_change (on signalと略す) とon sysvar_change (on sysvarと略す) は、シグナル変更が処理される場合に性能上の利点となります。これらのイベントプロシージャは、値の変化のみでトリガーがかかるよう最適化されています。

メモリに対する要求

C言語のような多くのブロック指向言語とは異なり、CAPLではローカルに定義された変数はデフォルトですべて静的です。つまり、それらはすべてプログラム開始時に作成され、これらの変数を格納するために使用されたメモリはプログラムの終了まで解放されません。結果として、多くのイベントプロシージャが同じ種類の大きな変数を定義し、それを実際に共有すると、CAPLは驚くほど大量のメモリを必要とすることがあります。

例:

testcase test789()
{
  char outBuffer[1024];
  [..]


CAPLプログラムには、このようなテストプロシージャが何千とあり、そのうちの1つだけが一度に実行できます。各イベントプロシージャで同じタイプの大きなローカル変数を複数定義するよりも、Variableセクションでグローバルに大きな変数を1つ定義した方がメモリ使用量はかなり少なくなります。

たとえば、イベントデータを各メッセージIDの下に格納するなど、非常に大きな配列を作成することも好ましくはありません。CANの拡張IDは29ビットであるため、5億個以上の値を想定することができます。大きな配列を定義することはメモリの無駄づかいになるため、このような場合は前述のように連想配列を使用する方がよくなります。連想配列では、実際に使用されるキーの分だけメモリが必要になりますが、使用されないキーの分のメモリは不要です。

あまり知られていない便利な機能

最後に、あまり知られていないCAPLの機能を簡単にご紹介します。

  • 構造体は、C言語のアプローチと同様に構造体を定義するために使用できます。構造体内でインテルとモトローラのフォーマットを変換することもできるコピー操作と共に、データ変換の柔軟な手法となっています。
  • CAPL関数を呼び出す際、値パラメータに加えて参照パラメータを渡すことができます。参照パラメータを使用すると、1つの関数から複数の結果を返せるようになります。参照パラメータは、CAPL-DLL内で使用することも可能です。
  • また、CAPLプログラムは誤った使い方をした場合にクラッシュしないように設計されています。一般的なポインタが存在しないことから、この堅牢性が言語構造により達成されます。
  • 一方、配列の制限、スタックの制限、必要な演算時間の自動的なランタイムチェックにより、安定性は向上します。コンパイラは、コマンドラインバージョンも利用可能です。このバージョンはスクリプト言語を使用したシーケンス自動化に非常に有用です。

その他のCAPLノウハウ

CAPLトレーニング
KnowledgeBase

お客様に最適なCANoeまたはCANaylzer用CAPLトレーニングをお探しの際は、弊社Webサイトをご覧ください。

vTESTstudioと組み合わせたCAPLトレーニングもご提供しています。弊社Webサイトではコース一覧をご案内しています。

ご不明な点がございましたら、弊社トレーニング部までお気軽にお問い合わせください。

さらに表示

関連ページ

CANoe
ECUとネットワーク全体を高いレベルで開発およびテストできます
CANalyzer
高度なレベルのECUおよびネットワークの解析