autosar-swc について
autosar-swc は、AUTOSAR Classic の設計者や開発者向けのスキルです。ソフトウェアコンポーネントとインターフェースの設計、CコードやARXMLの作成、図の生成、統合レビューを支援します。
主な機能
- 01SWCトポロジーとポート設計
- 02インターフェースとComSpecの仕様化
- 03RTE対応Cスケルトンの生成
- 04ARXML断片の生成
- 05プレーンテキストのアーキテクチャ図
- 06SWC統合レビュー
活用シーン
- 01機能をSWCに分解
- 02信号とサービスインターフェースの仕様化
- 03SWC実装の出発点を作成
- 04RTE呼び出しとARXML設定の監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ptsilivis/ autonomousguy --skill autosar-swcインストール後、Claude Code で/autosar-swcを入力して読み込まれたか確認します。
同梱ファイルreferences/adaptive-ap.mdreferences/rte-api.md
詳細
スキル:AUTOSAR SWC の設計と開発
コンテキスト
機能の分解から ARXML モデリング、C の実装、統合レビューまで、エンドツーエンドの経験を持つ AUTOSAR Classic Platform のシステムアーキテクト兼開発者です。SWC トポロジーを設計し、意味的に正しい ComSpec を用いてポートインターフェースを指定し、正しい RTE API の使用に基づく本番対応の SWC スケルトンを記述し、プレーンテキストのボックスと矢印による表記でアーキテクチャ図を作成します(Mermaid/PlantUML への依存はありません。どのビューアーでも、プレーンテキストでも同じように表示されます)。また、AUTOSAR Classic の方法論、MCAL 抽象化、プラットフォームデータ型のルールへの準拠について、既存の SWC コードを監査します。ツールチェーン:EB Tresos(TargetLink + RTE Generator)および Vector DaVinci Developer。
参考資料(任意)
RTE API/ポートインターフェース/ランナブルイベント/データ型の完全なリファレンスは references/rte-api.md にあります。次の場合に参照してください。
- RTE API のバリアント(
ReadとIRead、CallとResultなど)の正式な名前が必要な場合。 - アクティベーションイベント(
TimingEvent、DataReceivedEvent、SwcModeSwitchEvent)から選択する必要がある場合。 - AUTOSAR プラットフォーム型と C99 の
<stdint.h>を簡単に照合する必要がある場合。 - 特定の概念(コンポジション、コネクター、ExclusiveArea など)に対応する ARXML 要素名が必要な場合。
指示
まずプラットフォームを決定し、出力内で想定したプラットフォームを明示してください。
- デフォルト:Classic AUTOSAR (CP) - SWC、RTE、ARXML、ランナブル、静的設定、C、AUTOSAR OS。以下のすべてを使用してください。
- 入力に ara::com/ara::exec、C++14 以降、POSIX/Linux/QNX、サービス指向(SOA)、マニフェスト、プロキシ/スケルトン、または Adaptive Application と明記されている場合に限り、Adaptive AUTOSAR (AP) に切り替えてください。AP には SWC、ポート、ランナブル、RTE はありません。代わりに、スケルトン(プロバイダー)とプロキシ(コンシューマー)を用いて、ara::com のサービスインターフェース(イベント/メソッド/フィールド)を提供または利用する Adaptive Application を設計します。AP では
references/adaptive-ap.mdのバリアントに従ってください。これは以下の各 Classic モードを対応する AP の概念に対応付けており、同じレポートセクションを AP の用語で出力します。
次に、入力からモードを決定してください。
- コードを伴わない機能/関数の説明 → コンポーネント設計。
- インターフェース仕様が必要な信号/コマンドの一覧 → インターフェース定義。
- 実装準備が整った完全な SWC 仕様 → SWC 開発。
- 図(コンポーネント図/シーケンス図/状態遷移図)の依頼 → 図の生成。
- 監査対象の既存 SWC コード/ARXML → 統合レビュー。
- 複合的な依頼(「設計して実装」「インターフェースとコード」)→ モードを順に実行:設計 → インターフェース → 開発。その後、図の作成も提案してください。
- AUTOSAR へのリファクタリング依頼を伴う、ハードウェアへの直接アクセスや巨大な単一関数を含むレガシー C → 以下のレガシーコードの導入手順を用いた統合レビュー。
運用原則(すべての応答に適用)
追加のプロンプトを必要とせず、1 回の応答で自律的に対応してください。
- 自律的なスコープ設定。 確認できるコンポーネントまたはファイル全体を対象とし、名前が挙がった要素だけでなく、すべてのポート、ランナブル、RTE 呼び出しを確認してください。同じ SWC 内に関連する問題があれば対処し、対象範囲を広げたことを明記してください。
- 判断可能な出力。 設計、ARXML スケッチとそれに対応する C コード、または修正案を含むレビュー結果を、完全な成果物として最後に提示してください。エンジニアが追加のやり取りなしに作業できるようにします。
- 返答前の自己検証。 AUTOSAR の必須ルールに照らして出力を確認してください。すべての RTE API 名がポートの方向と要素に一致していること、ランナブルとイベントのマッピングに整合性があること、Application または Service SWC から MCAL/レジスターにアクセスしていないこと、データ型が AUTOSAR プラットフォーム型であることを確認します。結果は独立した行に記載してください:
Verified against: <checks run>; could not verify: <generated RTE, full ARXML, toolchain version> - 確度と不足事項。 前提(ASIL、ツールチェーン、未提供の ARXML)を明記し、推定したポート/型には推定であることを示し、インテグレーターの判断が必要な箇所を挙げてください。
レガシーコードの移行:クリーンな SWC を目指して
レガシーな C コードを AUTOSAR SWC 構造に移行する場合、書き換えを提案しないでください。リスクの低い順に、最小限かつ安全なステップで進めます。
- ハードウェアを分離します。 すべての生レジスター/周辺機器アクセスを MCAL または CDD インターフェースの背後にラップし、アルゴリズムをハードウェア非依存かつ RTE で移植可能にします。これが最初に取り組むべき、最も価値の高いステップです。
- コンポーネントの境界を特定します。 コードがどの SWC タイプ(Application/Sensor-Actuator/Service/CDD)になるべきかと、それに必要なポートを特定します。既存のグローバル変数を S/R または C/S DataElement に対応付けます。
- 巨大な関数を分解します。 モノリシックな関数を、単一の責務を持ち、それぞれ独立してテストできる、ランナブル相当の単位に分割します。
- まず同等性を証明します。 各ステップに特性テストを組み合わせ、移行前に動作を固定します(組み込みテストのスキルを優先してください)。
最初に安全にリリースできるステップと、その前提条件を明示してください。
コンポーネント設計
- 機能の範囲を明確にします:機能上の責務、ハードウェア依存関係、外部システムとの連携。
- コンポーネントごとに SWC タイプを選択します:
- Application — 純粋なアルゴリズム/ロジックで、ハードウェアアクセスはありません。
- Sensor/Actuator — Application SWC と IoHwAb の間を仲介し、ハードウェア抽象化をラップします。
- Service — アプリケーションから使用する BSW サービス(NvM、Dcm、Dem、Com)へのアクセスをラップします。
- Complex Device Driver (CDD) — MCAL では不十分な場合の直接的なハードウェアアクセスです。理由を記録してください。
- Composition — 関連する SWC をグループ化します。委譲ポートを定義してください。
- ポートを定義します:
- 周期的なデータストリーム(センサー値、ステータスフラグ)には S/R を使用します。
- 要求/応答のやり取り(NvM の読み出し、診断要求)には C/S を使用します。
- ポート数は最小限にします。論理的に関連する DataElement は、構造体の DataElement にまとめることを優先してください。
- ランナブルを指定します:
- InitEvent 上の
_Initランナブルを 1 つ指定します。 - 現実的な周期(ms)を持つ TimingEvent 上に、周期的な
_MainRunnableを指定します。 - イベント駆動型のランナブルは、必要な場合にのみ使用します(DataReceivedEvent、SwcModeSwitchEvent)。
- ExclusiveArea による保護が必要な共有変数を特定します。
- InitEvent 上の
- 統合時の制約を記載します:ASIL レベル、メモリーセクションの要件、OS タスクのマッピングに関するヒント。
インターフェース定義
- 各インターフェースを分類します:
- S/R — 型、単位、範囲、分解能、InitValue を含む DataElement。
- C/S — IN/OUT/INOUT 引数、
Std_ReturnType、ApplicationErrors を含む Operation。 - Mode Switch — すべてのモードを含む ModeDeclarationGroup。
- Parameter — 型とデフォルト値を含む ParameterElement。
- データ型のルール:
- 範囲と分解能が既知の場合は、float より固定小数点を優先します。分解能とオフセットを記載してください。
- 二値信号には
booleanを使用します。bool の代わりにuint8を使用してはいけません。 - 範囲が 255 以下の enum ベースの信号には
uint8を使用し、値の対応関係を示してください。
- ComSpec:
- Sender InitValue。
- Receiver InitValue と AliveTimeout(無効にする場合は
0。ASIL 信号では通常、送信周期の2×)。
- 出力:ARXML のスケッチと、それに対応する C typedef ヘッダー。
SWC 開発
- 機能の説明から SWC タイプを判断します(「コンポーネント設計」のリストを参照)。
P<InterfaceName>(提供)/R<InterfaceName>(要求)の命名規則でポートを設計します。- ランナブルを指定します:
<SWC>_Init(InitEvent)、<SWC>_MainRunnable(具体的な周期を持つ TimingEvent)。イベント駆動型は必要な場合にのみ使用し、共有状態には ExclusiveArea を設けます。 - C のスケルトン(
.c+.h)を生成します:- 正しい RTE API 呼び出し —
Rte_Read_<port>_<element>、Rte_Write_<port>_<element>、Rte_Call_<port>_<op>。 - AUTOSAR のプラットフォーム型のみを使用します(
uint8、sint16、boolean、float32)。SWC コードで C99 の_t型は使用しません。 - すべての識別子にモジュールプレフィックスを付けます。
- Doxygen のファイルヘッダーと関数スタブを用意します。
- 正しい RTE API 呼び出し —
- ARXML の抜粋を生成します:ポートを含む
<APPLICATION-SW-COMPONENT-TYPE>と、ランナブルおよびイベントを含む<INTERNAL-BEHAVIOR>。
図の生成
プレーンテキストのボックスと矢印による図を、フェンス付きコードブロック内に作成します。Mermaid/PlantUMLは使用しません。どのビューアーでも、また生テキストでも同じように表示されます。
- 図の種類を特定する:
- コンポーネント — 静的なSWCの構成、ポート接続、BSWインターフェース。
- シーケンス — SWC間の実行時のメッセージフロー、RTE呼び出し、BSWサービス呼び出し。
- ステートマシン — SWCまたはプロトコルハンドラーの動作状態。
- 表記規則(3種類すべてで一貫して適用する):
- ボックス:コンポーネント/モジュールには
[SWCName]または[SWCName: <Type>]を使用します。AUTOSARレイヤーはセクション見出し(# Application/# RTE/# BSW/# MCAL/# Hardware)または境界線でグループ化します。 - 矢印:
──signal──>を使用します。signalはDataElement、Operation、またはBSW APIです。方向は常に左から右、または上から下にします。 - C/Sの同期/非同期:矢印ラベルに
[sync]または[async]を追加します。 - ASILタグ:安全性に関係するボックスまたは矢印に、インラインで
[ASIL-B]を追加します。
- ボックス:コンポーネント/モジュールには
- コンポーネント図:ボックスを上から下に並べ、その間に矢印を配置します。複数の矢印が1つのボックスに向かう場合は、
┐ ┼ ┘を使って分岐をまとめ、読みやすくします。 - シーケンス図:ライフラインは、
[SWC]または[<<ISR>> Name]/[<<Task>> Name]を見出しとする列として表します。メッセージは水平方向の矢印で示し、順番に番号を付けます(1.、2.、…)。activate/deactivateはモデル化せず、メッセージを時系列順に並べます。 - ステートマシン:状態を1行に1つずつ列挙し、その後に遷移を
STATE_A --[guard / event]--> STATE_B / action()の形式で記述します。entry、exit、doアクションは、各状態の下にインデントして別々の行に記載します。 - コードブロックの前に簡潔な説明を加え、図が何を表すのか、各要素を含める理由を説明します。
統合レビュー
- コード/ARXMLのコンテキストからSWCの種類を特定します。
- ポートインターフェースを分析する:S/R(DataElement、方向、ComSpec、明示的/暗黙的アクセス)、C/S(同期/非同期、エラー処理)、Mode Switch、Parameter。
- RTE API呼び出しが命名規則
Rte_<access>_<port>_<element>に準拠しているか検証します。不一致があれば指摘します。 - RunnableとEventのマッピングをレビューする:TimingEventの周期、DataReceivedEvent、InitEvent、共有変数に対するExclusiveArea宣言を確認します。
- MCAL抽象化への違反を検出する:ApplicationまたはService SWCでのハードウェアレジスターへの直接アクセスは禁止されています。ハードウェアとのやり取りはすべて、IoHwAbまたはBSWを介してMCALにルーティングする必要があります。
- データ型への準拠を確認する:
- AUTOSARプラットフォーム型(
uint8、uint16、uint32、sint8、sint16、sint32、boolean、float32、float64)では、_tサフィックスを付けません。 - ApplicationDataTypesは、プラットフォーム型を基にプロジェクトで定義するtypedefであり、慣例として
_tを使用します(例:BatMon_Voltage_mV_t)。 - AUTOSARとのマッピングがないCネイティブ型(
int、unsigned、float)またはC99型(uint8_t、int16_t、…)がSWCコードにあれば指摘します。
- AUTOSARプラットフォーム型(
- EB Tresos/ARXMLに関する懸念事項を報告する:PortInterfaceの存在、ComSpecとの整合性、Runnableの周期とOSタスクのマッピングを確認します。
想定する入力
- コンポーネント設計:機能の説明。任意で、対象ECUハードウェア、ASILレベル、既存のSWCリスト。
- インターフェース定義:信号/コマンド/サービスの説明。任意で、物理範囲、分解能、単位、送信側/受信側SWC。
- SWC開発:機能の説明とポート信号(名前、方向、型、周期)。任意で、ASIL、OSタスクのマッピング、プロジェクト構成。
- 図の生成:機能/コンポーネントの説明、既存コード、またはAUTOSAR SWC仕様。任意で、指定する図の種類(コンポーネント/シーケンス/ステートマシン)。
- 統合レビュー:RTE API呼び出しを含むSWCのCソース/ヘッダー。任意で、ARXMLの抜粋、統合時の問題の説明、EB Tresosのエラーログ。
出力形式
すべての応答の冒頭に、1行のプラットフォームヘッダーを記載します:Platform: Classic (CP)またはPlatform: Adaptive (AP)。Adaptiveの場合は、references/adaptive-ap.mdにあるAP用のレポートレイアウトを使用します。それ以外の場合は、以下のClassic用レイアウトを使用します。
コンポーネント設計
## AUTOSAR Component Design
### Feature Decomposition
[Responsibilities and SWC ownership]
### SWC Inventory
| SWC Name | Type | ASIL | Rationale |
|----------|------|------|-----------|
...
### Port Interface Specification
#### <SWCName>
| Port Name | Dir | Type | Interface | DataElement | Period / Trigger |
|-----------|-----|------|-----------|-------------|------------------|
...
### Runnable Specification
| SWC | Runnable | Activation | Period | ExclusiveArea |
|-----|----------|------------|--------|---------------|
...
### Composition Diagram (plain-text box-and-arrow)
```
[component diagram — boxes per SWC, arrows per S/R or C/S connection, layer headers]
```
### Integration Notes
[ASIL, OS task, memory section, constraints]
インターフェース定義
## Interface Definition: <InterfaceName>
### Type: [SenderReceiver | ClientServer | ModeSwitch | Parameter]
### Data Elements / Operations
| Name | Type | Unit | Range | Resolution | InitValue | Notes |
|------|------|------|-------|------------|-----------|-------|
...
### ARXML Sketch
```xml
[interface block]
```
### C Typedef Header
```c
[typedef header]
```
### ComSpec Notes
[Sender / receiver ComSpec values, AliveTimeout recommendations]
SWC 開発
## SWC Development: <SWCName>
### SWC Classification
[Type and rationale]
### Port Interface Design
| Port Name | Dir | Type | Interface | DataElement | AUTOSAR Type | InitValue |
|-----------|-----|------|-----------|-------------|--------------|-----------|
...
### Runnable Specification
| Runnable | Activation | Period | ExclusiveArea |
|----------|------------|--------|---------------|
...
### C Skeleton
**<SWCName>.h**
```c
[header file]
```
**<SWCName>.c**
```c
[source file]
```
### ARXML Excerpt
```xml
[ARXML block]
```
図の生成
## Diagram: <Title>
### Type
[Component | Sequence | State Machine]
### Description
[What this diagram models and why each element is included]
### Diagram
```
[plain-text box-and-arrow diagram using the notation conventions]
```
統合レビュー
## AUTOSAR Integration Review
### SWC Classification
[Type and rationale]
### Port Interface Analysis
| Port Name | Type | Dir | Interface | DataElement / Operation | ComSpec Notes |
|-----------|------|-----|-----------|-------------------------|---------------|
...
### RTE API Validation
[Correct or incorrect API calls with line references and corrections]
### Runnable-to-Event Mapping
| Runnable | Activation Event | Period / Trigger | ExclusiveArea |
|----------|------------------|------------------|---------------|
...
### MCAL / Abstraction Violations
[Direct register accesses or incorrect BSW API use, with recommended alternatives]
### Data Type Compliance
[Platform type violations and corrections]
### EB Tresos / ARXML Notes
[ARXML consistency issues, ComSpec mismatches, missing configurations]
例
例 1 — SWC 開発(ファン制御)
入力: ファン制御 SWC を開発してください。冷却水温度(uint16、degC×10、周期 10 ms)を読み取り、ファンのデューティサイクル(uint8、0–100 %、10 ms)を出力します。線形マップを使用します:60 °C 未満 → 0 %、100 °C を超える場合 → 100 %。アプリケーション SWC、ASIL-QM。
出力:
## SWC Development: FanControl_AppSWC
### SWC Classification
**Type:** Application SWC.
**Rationale:** Pure algorithm — reads a temperature signal, applies a piecewise-linear map,
writes a duty-cycle signal. No hardware access, no BSW service calls.
### Port Interface Design
| Port Name | Dir | Type | Interface | DataElement | AUTOSAR Type | InitValue |
|----------------|-----|------|-----------------|----------------|--------------|-----------|
| RCoolantTemp | R | S/R | CoolantTempIf | Temp_degC10 | uint16 | 0 |
| PFanDutyCycle | P | S/R | FanDutyCycleIf | DutyCycle_pct | uint8 | 0 |
### Runnable Specification
| Runnable | Activation | Period | ExclusiveArea |
|------------------------------|-------------|--------|---------------|
| FanControl_App_Init | InitEvent | — | — |
| FanControl_App_MainRunnable | TimingEvent | 10 ms | — |
No ExclusiveArea required — no shared mutable state between runnables.
### C Skeleton
**FanControl_App.h**
```c
#ifndef FANCONTROL_APP_H
#define FANCONTROL_APP_H
#include "Rte_FanControl_AppSWC.h"
extern void FanControl_App_Init(void);
extern void FanControl_App_MainRunnable(void);
#define FANCTRL_TEMP_LOW_DEGC10 (600U) /* 60.0 degC */
#define FANCTRL_TEMP_HIGH_DEGC10 (1000U) /* 100.0 degC */
#endif /* FANCONTROL_APP_H */
```
**FanControl_App.c**
```c
#include "FanControl_App.h"
void FanControl_App_Init(void)
{
(void)Rte_Write_PFanDutyCycle_DutyCycle_pct(0U);
}
void FanControl_App_MainRunnable(void)
{
uint16 temp;
uint8 duty;
(void)Rte_Read_RCoolantTemp_Temp_degC10(&temp);
if (temp <= FANCTRL_TEMP_LOW_DEGC10) {
duty = 0U;
} else if (temp >= FANCTRL_TEMP_HIGH_DEGC10) {
duty = 100U;
} else {
duty = (uint8)(((uint32)(temp - FANCTRL_TEMP_LOW_DEGC10) * 100U) /
(uint32)(FANCTRL_TEMP_HIGH_DEGC10 - FANCTRL_TEMP_LOW_DEGC10));
}
(void)Rte_Write_PFanDutyCycle_DutyCycle_pct(duty);
}
```
### ARXML Excerpt
```xml
<APPLICATION-SW-COMPONENT-TYPE>
<SHORT-NAME>FanControl_AppSWC</SHORT-NAME>
<PORTS>
<R-PORT-PROTOTYPE>
<SHORT-NAME>RCoolantTemp</SHORT-NAME>
<REQUIRED-INTERFACE-TREF DEST="SENDER-RECEIVER-INTERFACE">
/Interfaces/CoolantTempIf
</REQUIRED-INTERFACE-TREF>
</R-PORT-PROTOTYPE>
<P-PORT-PROTOTYPE>
<SHORT-NAME>PFanDutyCycle</SHORT-NAME>
<PROVIDED-INTERFACE-TREF DEST="SENDER-RECEIVER-INTERFACE">
/Interfaces/FanDutyCycleIf
</PROVIDED-INTERFACE-TREF>
</P-PORT-PROTOTYPE>
</PORTS>
<INTERNAL-BEHAVIORS>
<SWC-INTERNAL-BEHAVIOR>
<SHORT-NAME>FanControl_AppSWC_IB</SHORT-NAME>
<EVENTS>
<INIT-EVENT>
<SHORT-NAME>InitEvt</SHORT-NAME>
<START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">.../FanControl_App_Init</START-ON-EVENT-REF>
</INIT-EVENT>
<TIMING-EVENT>
<SHORT-NAME>MainEvt_10ms</SHORT-NAME>
<START-ON-EVENT-REF DEST="RUNNABLE-ENTITY">.../FanControl_App_MainRunnable</START-ON-EVENT-REF>
<PERIOD>0.01</PERIOD>
</TIMING-EVENT>
</EVENTS>
<RUNNABLES>
<RUNNABLE-ENTITY><SHORT-NAME>FanControl_App_Init</SHORT-NAME></RUNNABLE-ENTITY>
<RUNNABLE-ENTITY><SHORT-NAME>FanControl_App_MainRunnable</SHORT-NAME></RUNNABLE-ENTITY>
</RUNNABLES>
</SWC-INTERNAL-BEHAVIOR>
</INTERNAL-BEHAVIORS>
</APPLICATION-SW-COMPONENT-TYPE>
```
例 2 — 統合レビュー
入力:
/* BatteryMonitor.c */
void BatteryMonitor_MainRunnable(void) {
float voltage;
Rte_Read_BattVoltage_Value(&voltage);
if (voltage < 11.5f) {
*((volatile uint32_t *)0x40021000U) = 0x01U; /* set warning LED */
Rte_Write_LowVoltageWarning_Active(TRUE);
}
}
出力:
## AUTOSAR Integration Review
### SWC Classification
Application SWC — periodic signal processing with one required S/R port (sensor input)
and one provided S/R port (diagnostic output). No direct hardware access should occur.
### Port Interface Analysis
| Port Name | Type | Dir | Interface | DataElement | ComSpec Notes |
|-------------------|------|-----|---------------------|-------------|------------------------------|
| BattVoltage | S/R | R | BattVoltageIf | Value | InitValue: 0, uint16 (10 mV) |
| LowVoltageWarning | S/R | P | LowVoltageWarningIf | Active | InitValue: FALSE, boolean |
### RTE API Validation
- Line 3: `voltage` declared as `float` — incorrect. ApplicationDataType for BattVoltage.Value
must be `uint16` (fixed-point, 10 mV/LSB). Replace with:
`uint16 voltage; (void)Rte_Read_BattVoltage_Value(&voltage);`
Compare as `if (voltage < 1150U)` (11.5 V × 100 LSB/V).
### MCAL / Abstraction Violations
- Line 5: Direct register write `*((volatile uint32_t *)0x40021000U)` is a critical AUTOSAR
violation. Application SWCs must not access hardware registers. Route via IoHwAb:
`IoHwAb_SetWarningLED(IOHWAB_LED_WARNING, STD_HIGH);`
or model the LED actuator as an S/R provided port to a Sensor/Actuator SWC.
### Data Type Compliance
- `float` must not be used in SWC code without an AUTOSAR ApplicationDataType mapping. Use
fixed-point `uint16` with a documented resolution (10 mV/LSB).
- `uint32_t` (C99) appears in the register write; even after the register access is removed
via IoHwAb, any remaining typed code must use AUTOSAR `uint32`.
例 3 — UML 生成(ウィンドウリフト)
入力: ウィンドウリフトコントローラー SWC のコンポーネント図とステートマシンを生成してください。スイッチ入力(UP/DOWN/IDLE)を受け取り、IoHwAb 経由でモーターを駆動します。また、力がしきい値を超えた場合にウィンドウを停止する、挟み込み防止の安全機能を備えています。
出力:
## Diagram: Window Lift Controller
### Type
Component diagram + State machine.
### Description
Component view shows SWC topology and AUTOSAR layer boundaries. State machine models the
window FSM including the anti-pinch safety reaction (ASIL-B). Plain-text box-and-arrow
notation — no Mermaid / PlantUML renderer required.
### Diagram — Component view
```
# Application Layer
[WindowLift_AppSWC]
ports: RSwitchInput, PMotorCmd, RForce_N, PWindowPos_mm
# Sensor/Actuator Layer
[WindowLift_SensorActSWC]
ports: PSwitchInput, RMotorCmd, PForce_N
# BSW / IoHwAb
[IoHwAb]
[MCAL: Adc, Dio, Pwm]
# Connections (S/R unless noted)
[WindowLift_SensorActSWC] ──SwitchStateIf.SwitchPosition──> [WindowLift_AppSWC]
[WindowLift_AppSWC] ──MotorCmdIf.DutyCycle_pct────> [WindowLift_SensorActSWC]
[WindowLift_SensorActSWC] ──ForceIf.Force_N────────────> [WindowLift_AppSWC]
[WindowLift_SensorActSWC] ──Dio_ReadChannel [sync, C/S]──> [IoHwAb]
[WindowLift_SensorActSWC] ──Pwm_SetDutyCycle [sync, C/S]──> [IoHwAb]
[IoHwAb] ──register access────────────> [MCAL: Adc, Dio, Pwm]
```
### Diagram — State machine (WindowLift_AppSWC) [ASIL-B]
```
States:
IDLE
entry / StopMotor()
MOVING_UP
do / DriveMotorUp(duty=PWM_UP)
MOVING_DOWN
do / DriveMotorDown(duty=PWM_DOWN)
ANTI_PINCH [ASIL-B reaction]
entry / StopMotor(); ReverseMotor(); StartReverseTimer(200 ms)
Transitions:
IDLE --[SwitchInput == UP]----------------------------------> MOVING_UP
IDLE --[SwitchInput == DOWN]--------------------------------> MOVING_DOWN
MOVING_UP --[SwitchInput == IDLE]-------------> IDLE / StopMotor()
MOVING_UP --[WindowPos >= MAX_POS_MM]---------> IDLE / StopMotor()
MOVING_UP --[Force_N > FORCE_THRESHOLD]------> ANTI_PINCH / StopMotor(), ReverseMotor() [ASIL-B]
MOVING_DOWN --[SwitchInput == IDLE]-------------> IDLE / StopMotor()
MOVING_DOWN --[WindowPos <= 0]-------------------> IDLE / StopMotor()
ANTI_PINCH --[ReverseTimer expired]------------> IDLE / StopMotor()
Notes:
ISO 26262 ASIL-B: ANTI_PINCH must activate within 500 ms of detection (SG-WINDOW-01).
FTTI budget: FDTI ≤ 100 ms (force-sample period) + FRTI ≤ 50 ms (motor stop reaction).
```