2. SWUC 설계
Table of contents
- 2.1 Solution Open
- 2.2 Default Structure 생성
- 2.3 Subsystem 생성
- 2.4 Boundary Box 생성
- 2.5 External Actor 생성 및 배치
- 2.6 Subsystem UseCase 생성 및 배치
- 2.7 SWUC Workflow작성
- 2.7.1 Sense Frontal Impact 작성
- 2.7.2 Every 500ms 작성
- 2.7.3 Every 250ms 작성
이 가이드는 A-SPICE에서 SWE.1 (Software Requirements Analysis)에 해당하는 과정입니다. Solution 생성에서 이어집니다.
2.1 Solution Open
Open할 Solution을 선택하고 Active model에서 ‘SW Use Case Model’을 선택해 ’Set Active Solution’을 클릭한다.
RapidAUTO Tray Menu에서 ‘Open Active Solution’을 클릭해 RapidAUTO를 실행한다.
Open한 SWUC Solution 화면이다.
2.2 Default Structure 생성
RapidAUTO 기능으로 마우스 휠 버튼을 눌러 ‘Create Default Strucure’를 생성한다.
Default Structure: SWUC의 기본 구조
Default Structure의 요소: 사용 사례 명(Use Case Name), 액터(Actor), 설명(Description) 등.SoftwareUseCaseModel: SWUC의 여러 요소들을 담고 있는 큰 집합이며, SoftwareUseCase의 기능으로 Subsystem, ExternalActor등을 생성하고 포함.
하위 항목에 Software Abstractions이 새로 생긴 것을 확인할 수 있다.
2.3 Subsystem 생성
SoftwareUseCaseModel에서 마우스 휠 버튼을 누르고 ‘Add Subsystem’을 클릭해서 Subsystem Name을 DAB로 생성한다.
Subsystem: SWUC를 기반으로 한 서브 시스템으로 UseCase와 ExternalActor와 같은 인자들의 상호작용을 작성할 수 있는 요소
Subsystem의 요소: 사용 사례(Use Case), 인터페이스(Interface)등SoftwareUseCaseModel 하위에 Subsystem_DAB가 생긴 것을 확인할 수 있다.
2.4 Boundary Box 생성
Subsystem Use Case Diagram을 열고, 우측 Toolbar에서 ‘Boundary Box’ 드래그하여 배치한다.
Boundary Box Name: ‘Subsystem_DriverAirbag’
Boundary Box(UML의 Subject): 시스템이나 프로세스에서 특정 활동이나 행동이 발생하는 핵심 요소로, Use Case가 적용되는 시스템의 범위나 특정 영역을 정의한다. Use Case가 실행되는 시스템이나 프로세스의 경계를 명확히 한다.
2.5 External Actor 생성 및 배치
시스템에서 서로 상호작용 하는 인자들을 생성한다.
SWUC에서 마우스 휠 버튼을 눌러 ‘Add External Actor’를 클릭하고 ‘MainSensor’로 생성한다.
External Actor: 시스템 외부에서 시스템과 상호 작용하는 요소로, 사용자(Human User), 장치(Device), 외부 시스템(External System), 이벤트(Event) 등을 나타낸다.
ExternalActor 종류 및 설명
MainSensor: DIO 드라이버를 통해 제어되며, MainSensor로부터 획득한 정면 충돌 정보는 dio_v_MainSensor를 통해 얻을 수 있다.
SafingSensor: DIO 드라이버를 통해 제어되며, SafingSensor로부터 획득한 정면 충돌 정보는 dio_v_SafingSensor를 통해 얻을 수 있다.
DriverAirbag: SPI 드라이버를 통해 제어되며, spi_f_DepoweredDeployment 또는 spi_f_FullPoweredDeployment 함수 호출을 통해 전개할 수 있다.
SensorDataAcquisitionPeriod: Sensor Data를 감지하는 주기를 나타낸다. (500ms 0.5초)
CrashDetectionPeriod: SensorData를 기반으로 충돌 여부를 판단하는 주기는 나타낸다. (250ms 0.25초)
앞서 생성한 5개의 ExternalActor를 Subsystem에 드래그하여 배치
2.6 Subsystem UseCase 생성 및 배치
UseCase 설계 없이 Architectural Design으로 넘어간다면 ‘SWAD 설계’부터 진행한다.
Add Subsystem Use Case를 클릭하고 ‘Deploy Driver Airbag’이름으로 ‘Subsystem Use Case’를 생성한다.
Subsystem Use Case: 전체 시스템이나 서브 시스템 내에서 특정 기능을 수행한다.
Deploy Driver Airbag: 운전자 에어백 전개생성한 UseCase(Deploy Driver Airbag)를 Subsystem 내부에 배치 한다.
우측 Toolbar에서 Association으로 Actor와 Use Case를 연결한다.
Association: 각 요소들의 상호작용을 연결 시켜주는 기능
2.7 SWUC Workflow작성
SWUC_Workflow_Deploy Driver Airbag Diagram창을 연다.
생성한 External Actor를 Subsystem에 다음과 같이 배치한다.
Subsystem Use Case를 다음과 같이 배치한다.
2.7.1 Sense Frontal Impact 작성
우측 Toolbar의 Partition Line을 배치하고 이름은 ‘SenseFrontalImpact(정면 충돌 감지)’로 설정한다.
우측 Toolbar의 Message를 드래그 하여 MainSensor → Deploy Driver Airbag방향으로 배치한다.
배치한 Message에 Ctrl+Shift를 눌러 대화창에서 Write “dio_v_MainSensor”를 입력한다.
Partition Line: Workflow Diagram의 분기를 나타낼 때 사용한다.
Message: 인자 사이의 상호작용 나타낼 때 사용한다.(데이터 흐름 등)MainSensor와 동일한 방식으로 SafingSensor → DeployDriverAirbag방향으로 Message를 배치한다. 이때, Message는 Write “dio_v_SafingSensor”로 설정한다.
우측 Toolbar의 ‘Interaction Operator’를 아래 그림과 같이 배치하고 Operation의 Type을 Parallel로 설정한다.
우측 Toolbar의 ‘Operand Separator’를 이용해 MainSensor → Deploy Driver Airbag Message와 SafingSensor → Deploy Driver Airbag Message를 분리한다.
Interaction Operator: Message를 동작 시키는 기능
Operand Separator: Operator를 나누어 각각의 동작이나 동시 동작이 가능하도록 한다.Parallel: Operator의 동시 진행 옵션으로 Operator가 동시에 진행 되도록한다.
2.7.2 Every 500ms 작성
Every 500ms 이름으로 Partition Line을 배치한다.
SensorDataAcquisitionPeriod → Deploy Driver Airbag으로 Start 라는 이름으로 Message 작성한다.
Deploy Driver Airbag → Deploy Driver Airbag으로 Read “dio_v_MainSensor” 작성한다.
Deploy Driver Airbag → Deploy Driver Airbag으로 Read “dio_v_SafingSensor” 작성한다.
MainSensor와 SafingSensor에서 Write한 dio 값을 Read 한다
2.7.3 Every 250ms 작성
Every 250ms 이름으로 PartitionLine을 추가한다.
CrashDetectionPeriod → Deploy Driver Airbag으로 ‘Start’ Message 작성한다.
Interaction Operator를 배치한다.
Operator 옵션은 alt(alternate)type으로 변경한다.
alternate: 2개의 동작을 번갈아 가면서 수행.
Operand Separator를 이용해 2칸으로 분리한다.
첫 번째 Operator의 Condition을 “dio_v_MainSensor” == “dio_v_SafingSensor” && “dio_v_MainSensor” > DepoweredThreshold로 변경 한다.
두 번째 Operator의 Condition을 “dio_v_MainSensor” == “dio_v_SafingSensor” && “dio_v_MainSensor” > FullPoweredThreshold로 변경한다.
첫 번째 Operator에 Deploy Driver Airbag → Driver Airbag 방향으로 spi_f_DepoweredDeployment Message를 설정한다.
두 번째 Operator에 Deploy Driver Airbag → Driver Airbag 방향으로 spi_f_FullPoweredDeployment Message를 설정한다.
첫 번째 Operator는 MainSensor와 SafingSensor의 dio 값이 같은지 확인하고 MainSensor의 dio가 최소 임계값보다 큰 지 확인 한 후, 두 조건이 참이면 spi_f_DepoweredDeployment
두 번째 Operator는 MainSensor와 SafingSensor의 dio 값이 같은지 확인하고 MainSensor의 dio가 최대 임계값보다 큰 지 확인 한 후, 두 조건이 참이면 spi_f_FullPoweredDeployment