3. SWAD 설계
Table of contents
- 3.1 Software Component 구성
- 3.2 SWAD 생성
- 3.3 Software Component Type 생성
- 3.4 PortInterface 종류 결정
- 3.5 ‘SenderReceiver’ PortInterface 설계
- 3.6 ‘ClientServer’ PortInterface설계
- 3.7 Port Interface Communication설계
- 3.8 Software Component Internal Behavior 설계
- 3.9 SWAD Diagram 5종 생성
이 가이드는 A-SPICE에서 SWE.2 (Software Architectural Design)에 해당하는 과정입니다. SWUC 설계에서 이어집니다.
3.1 Software Component 구성
- Main Sensor : 500ms 주기로 전면 충돌 데이터를 제어기에 송신함.
- Safing Sensor : 500ms 주기로 전면 충돌 데이터를 제어기에 송신함. MainSensor에 대한 Redundancy(이중화) 설계.
- CrashDetector : 250ms마다 센서값을 읽고 충돌 여부를 판단한 후 충격량에 따라 에어백 전개를 요청함.
- DriverAirbag : 요청 받은 전개 강도에 따라 에어백을 구동함.
3.2 SWAD 생성
- SWUC Project Root에서 ‘Create/Open SW Architecture Design’을 선택한다.
- 본 가이드에서는 Multi(System with Subsystems) 및 AUTOSAR v4.4.0 스펙을 반영한 모델이다.
Subsystem SWAD는 각각의 Subsystem마다 생성이 가능하다.
System SWAD를 먼저 생성하고 SWUC로 돌아와 Subsystem SWAD를 생성 해야한다.
System SWAD는 전체 시스템이고, Subsystem은 모듈이자 사용자가 설계할 모델이다.
‘Deploy Driver Airbag’ ArPackage에서 Subsystem의 CompositionSwComponentType이 잘 생성되었는지 확인한다.
SwCompositionSwComponent: 여러 SoftwareComponent(SW-C)들을 하나의 논리적인 그룹으로 묶은 컴포넌트로, 내부에 다른 컴포넌트즐을 포함하고 그 컴포넌트들 간의 연결 구조와 포트 매핑을 정의한다.
3.3 Software Component Type 생성
SwComponent(SW-C): AUTOSAR에서 기능을 수행하는 가장 기본적인 단위로, AUTOSAR 소프트웨어 아키텍처는 SoftwareComponent 단위로 나누어 설계되며, 이 컴포넌트들은 서로 인터페이스를 통해 통신하고 조합된다.
생성된 SWAD_VOPC_DeployDriverAirbag에 DAB CompositionSwComponentType을 배치한다.
- Subsystem Composition SW-C Type을 구성하는 SW-C Prototype과 이를 생성하기 위한 SW-C Type은 다음과 같다.
- (현 가이드에서는 SensorActuatorSwComponentTypes와 ApplicationSwComponentTypes를 생성)
SW –C 종류 SW –C Type SW – C Prototype Responsibility / Role Sensor Actuator SW-C MainSensor mainSensor Electrical Value(Current)를 HW Main Sensor의 Physical Value(Crash Impact)로 변환하여 전달하는 SW-C Sensor Actuator SW-C SafingSensor safingSensor Electrical Value(Current)를 HW Safing Sensor의 Physical Value(Crash Impact)로 변환하여 전달하는 SW-C Application SW-C CrashDetector crashDetector DriverValue(present, weight와 Physical Value(Crash Impact)로 에어백 전개 여부를 판단하고 에어백 전개를 요청하는 SW-C Sensor Actuator SW-C DriverAirbag driverAirbag 의도된 에어백 전개 강도(Physical Value)를 HW DriverAirbag에 공급되는 Electrical Value(Current)로 변환하여 전달하는 SW-C SensorActuatorSw-C: 센서 또는 액추에이터와의 연동을 위한 컴포넌트(데이터 입출력)
ApplicationSw-C: 시스템에서 실제 기능적 로직을 수행하는 핵심 소프트웨어 컴포넌트(제어 계산) - DAB ArPackage에서 Context Menu에서 Add ‘SensorActuatorSwComponentType’을 선택하고, SW-C 정보를 입력한다.
- Component생성시, <<mandatory>> + Component명으로 SW-C의 ArPackage생성된다.
생성된 SW-C ArPackage와 SW-C Type 그리고 SW-C Protoype을 확인한다.
동일한 방식으로 위 표의 SW-C들을 생성하고 Prototype을 정의한다.
3.4 PortInterface 종류 결정
설계하고자 하는 시스템의 컴포넌트 간 상호 작용 특성에 맞는 인터페이스를 선정한다. 현 가이드에서는 2개의 PortInterface로 설계한다.
인터페이스 종류 P Port(Provide) R Port(Require) 통신 특성 Sender Receiver Interface Sender Port Receiver Port Synchronized Client Server Interface Server Port Client Port Asynchronized
3.5 ‘SenderReceiver’ PortInterface 설계
- MainSensor와 CrashDetector간의 SenderReceiver Interface를 정의한다.
- MainSesor의 ArPackage에서 ‘PortInterfaces’ ArPackage에 SenderReceiver Interface를 추가한다.
Provider의 SW-C에서 Interface를 추가한다.
Sender Receiver Interface Data Element Autosar Data Type MainSensorData crashImpact uint8(AUTOSAR Data Type) MainSensorData Interface의 Features를 열어 Dataelement를 정의한다. Data: crashImpact / DataType: uint8(AUTOSAR DATA Type)
MainSensor Sw-C Port Interface 설계를 참고 하여 SafingSensor의 PortInterface를 설계한다.
Sender Receiver Interface Data Element Autosar Data Type SafingSensorData crashImpact uint8(AUTOSAR DataType)
3.6 ‘ClientServer’ PortInterface설계
다음은 DriverAirbag과 CrashDetector간의 ClientServerCommunication을 위한 ClientServerInterface를 정의한다.
Client Server Interface Operation Argument Autosar Data Type Direction DriverAirbagControl inflateAirbag rate uint8(AUTOSAR DataType In DriverAirbag ArPackage에서 ClientServerInterface를 추가하고 위 표와 같이 Interface의 이름을 IDriverAirbagControl로 정의한다.
Operation이름을 위 표와 같이 inflateAirbag으로 정의한다.
Operation ‘inflateAirbag’을 클릭해 Argument를 생성한다. 이때, 위 표를 참고하여 이름은 ‘rate’, Direction은 ‘In’, Type은 ‘uint8(AUTOSARDataType)’로 생성한다.
3.7 Port Interface Communication설계
- SWAD Diagram자동생성을 위한 Communication 설계는 상황에 따른 2가지 방법이 있다.
3.7.1 SWUC → SWAD로의 Foward설계일 경우
- SWUC에서 SubsystemUseCase를 생성했을 경우 UseCase의 VOPC에 SW-C의 PortInterfaceCommunication을 설계한다.
- SubsystemUseCase의 VOPC의 설계를 할 경우에는 이후 Process인 Diagram자동생성시, VOPC에 설계된 정보를 읽어 Diagram5종을 자동 생성한다.
VOPC에 Composition Diagrams를 배치하고 내부에 MainSensor SwComponentPrototypes (Provider)를 배치한다.
- 우측 Toolbar에서 dataSenderPort를 MainSensorPrototype에 배치하고, Type Prototype을 정의한다.
정의 후, Naming을 보면 P_또는 R_이 붙어있는 것을 볼 수 있는데 이것으로 Provider와 Receiver를 구분한다.
동일한 방법으로 CrashDetector SwComponentPrototypes(Receiver)를 배치하고 dataReceiverPort를 배치해 TypePrototype을 정의한다.
우측 Toolbar의 AssemblySwConnector를 이용해 SenderReceiverPort를 연결해준다.
MainSensor ↔ CrashDetector간의 Communication 설계를 참고하여 SafingSensor와 CrashDetector간의 Communication을 정의한다.
- 추가로 DriverAirbag SwPrototype을 배치해 DriverAirbag과 CrashDetector간의 Communication을 정의한다.
이때, DriverAirbag(Provider)과 CrashDetector(Receiver)의 Communication은 ServerPort와ClientPort를 이용해 정의한다.
3.7.2 SWAD에서 Forward설계를 시작했을 경우
- SWAD에서 Forward 설계를 시작했을 경우에는 각 Component의 Software Components Diagrams 내부에 Component의 PortInterface를 배치 해야 한다.
MainSensor의 Software Components Diagram에 MainSensorComponent를 배치하고 dataSenderPort를 배치해준다.
- MainSensorPortInteface에서 설계한 IMainSensorData를 배치한다.
이때는 AssemblySwConnector로 연결할 필요 없으며, Type PortPrototype만 정의한다.
- 위와 같이 Provider인 SafingSensor와 DriverAirbag의 각 Software Components Diagrams에서 SenderReceiverPort와 ClientServerPort를 설계한다.
SafingSensor
DriverAirbag
마지막으로 Receiver인 CrashDetector를 설계한다. CrashDetector는 DataReceiverPort2개, ClientPort1개를 배치한다.
3.8 Software Component Internal Behavior 설계
Timing Event 정보
SW-C Type Timing Event Period MainSensor 500ms 0.5s
MainSensor의 ContextMenu에서 Design Swc InternalBehavior를 클릭한다.
아래와 같이 PortInterface Communication을 정의한 Elemet들이 포함된 InternalBehavior가 생성된 것을 볼 수 있다.
- 위 표와 같이 MainSensor의 TimingEvent의 Period는 0.5s고 이름은 500ms다. 이 말은 즉, 충돌 데이터를 500ms마다 전송한다.
IB_MainSensor의 CotextMenu에서 Create Timing Event를 클릭해 위 표대로 Event를 생성해준다.
아래와 같이 처음 Internal Behavior를 정의 했을때는,REdefaultMainSensor가 생성되었고 TimingEvent를 정의하면 REtMainSensor_500ms가 생성된 것을 확인할 수 있다.
REdefaultMainSensor내부 Element들을 REtMainSensor_500ms에 붙여 넣기로 이동 시킨 후, REdefaultMainSensor을 통째로 삭제한다.
동일한 방법으로 SafingSensor와 CrashDetector의 InternalBehavior를 생성하고 TimingEvent를 정의한다.
SW-C Type Timing Event Period SafingSensor 500ms 0.5s CrashDetector 250ms 0.25s 마지막으로, DriverAirbag에 대한 Internal Behavior를 생성한다. DriverAirbag은 Timing Event를 생성하지 않는다.
3.9 SWAD Diagram 5종 생성
Internal Behavior Diagrams (UseCaseRealizations) : Runnable Entity의 RTE 함수 호출 관계
Sequence Diagrams : RTE 함수 호출 시 동작 순서도
Software Components Diagrams (VOPC) : Component 간 Communication 정보
Software Components Diagrams (Subsystem) : Subsystem 내부 Component의 상관관계
Software Components Diagrams (Components) : Component의 포트 및 외부 연결 관계
Subsystem Context Menu(DAB_SWAD)에서 Perform SAD Diagram Reverse Engineering을 클릭해, Diagram5종을 생성한다.
생성 시, UseCaseRealizations ArPackages를 보면 각 Component설계시 TimingEvent를 설계한 Component에 한해서 폴더가 생성된 것을 볼 수 있으며, 그 폴더 내부에 Diagram 3종이 생성된 것을 확인할 수 있다.
- 각각의 Diagram은 설계한 InternalBehavior를 기반으로 생성되었으며 각 Component와 Interface간의 Communication과 Component와 Component간의 Communication을 담고 있다.
- CrashDetector_REtCrashDetector_250ms
Internal Behavior Diagrams
Sequence Diagrams
Software Components Diagrams
- CrashDetector_REtCrashDetector_250ms
- Subsystem에 설계한 Components들에 대한 Diagrms도 생성되었다.
Software Components Diagrams
또한 각 Component들 내부에 Component와 Interface간의 Diagrams도 생성되었다.
MainSensor
SafingSensor
DriverAirbag
CrashDetector