< 이전 | 다음 >

학습 9: 상위 레벨 동작 지정 및 모델 시뮬레이션

이 학습에서는 상태 차트를 사용하여 제어 시스템 컴포넌트의 상위 레벨 동작을 지정하고 전체 모델을 시뮬레이션합니다.
초기 디자인에서는 상태 차트를 사용하여 ControlSystem의 동작을 지정했습니다. 이제 ControlSystem이 컴포넌트에 대해 지정되어 있으므로 각 컴포넌트 블록에 대한 상태 차트를 추가하여 해당 동작을 반영하고 ControlSystem 상태 차트를 수정하여 해당 협업 동작을 반영해야 합니다.

컴포넌트 블록에 대한 상태 차트 작성

센서에 대한 상태 차트를 추가하려면 다음을 수행합니다.

  1. 브라우저에서 센서 블록을 선택하고 새로 추가 > 다이어그램 > 상태 차트를 선택하십시오.
  2. 상태 도구 상태 도구를 사용하여 유휴읽기와 같은 두 가지 상태를 추가하십시오.
  3. 기본 상태 전이 도구 기본 상태 전이 도구를 사용하여 기본 상태 전이를 유휴 상태에 추가하십시오.
  4. 상태 전이 도구 상태 전이 도구를 사용하여 유휴 상태의 상태 전이를 읽기 상태에 추가하십시오. 상태 전이에 표시되는 플레이스홀더에서 evRead라는 이벤트를 추가하십시오.
  5. 읽기 상태의 상태 전이를 다시 유휴 상태에 추가하십시오.
evRead 이벤트 수신 시 센서 파트가 유휴 상태에서 읽기 상태로 상태를 전이합니다. 그런 다음 온도 값을 ControlSystem(cs라고 함)에서 해당 온도 속성으로 전송하고 유휴로 돌아갑니다. 센서 상태 차트는 다음 예제와 같이 표시되어야 합니다.
센서 상태 차트
주: 읽기 상태의 오른쪽 상단에 있는 기호 기호는 상태의 시작 조치 또는 종료 조치 필드에 텍스트가 있음을 나타냅니다. 기호를 클릭하면 상태 기호에 대한 반응 컴파트먼트에 텍스트가 표시되거나 숨겨집니다. 예제는 반응 컴파트먼트의 텍스트를 보여줍니다.

이 분석 레벨에서 수행하도록 명령이 지정될 때 작동 장치 파트가 관련 열의 양을 설정하거나 해제합니다. 열이 ControlSystem에 위임되고 SystemUnderControl에 플로우됩니다.

작동 장치에 대한 상태 차트를 추가하려면 다음을 수행합니다.
  1. 브라우저에서 작동 장치 블록을 선택하고 새로 추가 > 다이어그램 > 상태 차트를 선택하십시오.
  2. 상태 도구를 사용하여 idle, heating_onheating_off와 같은 세 가지 상태를 추가하십시오.
  3. 기본 상태 전이를 유휴 상태에 추가하십시오.
  4. 조건 커넥터 도구 조건 커넥터 도구를 사용하여 조건 커넥터를 다이어그램에 추가하십시오.
  5. 상태 전이를 유휴에서 조건에 추가하고, 조건에서 heating_on에 추가한 후 조건에서 heating_off에 추가하십시오.
  6. 상태 전이를 heating_on에서 유휴에 추가하고 heating_off에서 유휴에 추가하십시오.
  7. 유휴에서 조건으로의 상태 전이를 두 번 클릭하십시오. 기능 창에서 트리거를 tm(750)으로 설정하십시오. 확인을 클릭하십시오.
  8. 조건에서 heating_on으로의 상태 전이를 두 번 클릭하십시오. 기능 창에서 보호를 heat_data로 설정하고 조치에 대한 코드로 cs->setHeat(rating);를 입력하십시오. 확인을 클릭하십시오.
  9. 조건에서 heating_off로의 상태 전이를 두 번 클릭하십시오. 기능 창에서 보호를 else로 설정하고 조치에 대한 코드로 cs->setHeat(0.0);를 입력하십시오. 확인을 클릭하십시오.
작동 장치에 대해 완료된 상태 차트가 다음 예제와 같이 표시되어야 합니다.
작동 장치 상태 차트 - 완료됨
주: Rational® Rhapsody®에서 기능 창을 사용하여 상태 전이에 대한 트리거, 보호 및 조치를 지정할 때 상태 전이 구문의 요소인 대괄호 및 슬래시를 자동으로 추가합니다. 또는 다이어그램의 상태 전이 플레이스홀더에 텍스트를 직접 입력하는 경우 이러한 문자를 직접 입력해야 합니다.

제어기 상태 차트 작성

디자인 시 이 위치에서 컨트롤러가 오퍼레이션 모드에서 변경 사항에 대응하고, 대기 모드에서 가열기를 비활성화하고, 정상 모드에서 가열기를 활성화해야 합니다. 나중에 디자인에 따라 컨트롤러에 제어 알고리즘이 필요합니다.
  1. 브라우저에서 제어기 블록을 선택하고 추가 > 새 다이어그램 > 상태 차트를 선택하십시오.
  2. 상태 도구를 사용하여 controllingstandingby 다이어그램에 두 가지 상태를 추가하십시오.
  3. 제어 상태에 기본 상태 전이를 추가하십시오.
  4. 상태 전이를 제어에서 대기에 추가하고 evStandby라는 새 이벤트에 이벤트 플레이스홀더를 설정하십시오.
  5. 상태 전이를 대기에서 제어에 추가하고 evNormal이라는 새 이벤트를 설정하십시오.
  6. 제어 상태를 두 번 클릭하여 기능 창을 여십시오. 항목에 대한 조치에 setHeat_data(ENABLED); 텍스트 행을 추가하십시오.
  7. 확인을 클릭하십시오.
  8. 대기 상태를 두 번 클릭하십시오. 항목에 대한 조치에 setHeat_data(DISABLED); 텍스트 행을 추가하십시오.
  9. 확인을 클릭하십시오.
개정된 제어기 상태 차트는 다음 예제와 같이 표시되어야 합니다.
제어기 상태 차트 - 개정됨

ControlSystem 상태 차트 업데이트

이제 컴포넌트에서 제공된 동작을 반영하도록 ControlSystem의 초기 상태 차트에 지정된 동작을 변경해야 합니다. 특히, 센서 컴포넌트에서 온도 감지가 수행되므로 ControlSystem에서 센서에 온도 플로우를 위임해야 합니다. 마찬가지로, 이제 제어기가 작동 장치에서 ControlSystem에 다시 위임된 열 플로우를 생성하도록 명령을 지정해야 합니다. 또한 ControlSystem에서 제어기에서 모드 변경 이벤트를 위임해야 합니다.

  1. 다이어그램 그리기 영역을 지우려면 > 모두 지우기를 선택하십시오.
  2. 브라우저에서 ControlSystem의 상태 차트를 여십시오.
  3. 패널 요소 주위에 선택 범위를 그리고 다이어그램 프레임의 맨 아래에 있는 그룹으로 이동하여 설정 상태가 약 50%까지 연기되도록 허용하십시오.
  4. Alt 키를 누른 상태에서 설정 상태 기호의 길이를 아래쪽으로 약 50% 확장하고 너비를 오른쪽으로 약 50% 확장하십시오.
  5. And 라인 도구를 사용하여 설정 상태의 왼쪽 모서리를 클릭하여 "and" 라인을 앵커하고 설정 상태 전반에 수평으로 그려 두 번째 수직 컴파트먼트를 작성하십시오. 설정 상태의 오른쪽을 클릭하여 행을 완료하십시오. 대기 상태 바로 아래에 배치 되도록 And 행을 이동하십시오.
  6. 위쪽 컴파트먼트에 있는 공백을 두 번 클릭하여 컴파트먼트(상태)에 대한 기능 창을 여십시오. 세트 이름은 delegating_mode입니다. 확인을 클릭하십시오. 아래쪽 컴파트먼트에 대해 동일한 작업을 수행하여 이름을 delegating_temperature로 설정하십시오. 이름에 각 컴파트먼트에 대한 표시 옵션을 설정하십시오.
  7. 대기 상태를 오른쪽으로 이동하여 설정 상태의 오른쪽 모서리 근처에 배치하십시오.
  8. 두 evMode 상태 전이를 삭제하려면 상태 전이를 마우스 오른쪽 단추로 클릭하고 모델에서 삭제를 선택하십시오.
  9. 조치 보내기 도구 를 사용하여 정상 상태와 대기 상태 사이에 수직으로 공격이 지정된 두 보내기 조치를 추가하십시오. 보내기 조치를 정의하려면 다음 단계를 수행하십시오.
    1. 위쪽 보내기 조치를 두 번 클릭하여 기능 창을 여십시오. Target: itsController를 설정하고 Event: evStandby를 설정하십시오. 확인을 클릭하십시오.
    2. 상태 전이를 정상 상태에서 위쪽 보내기 조치에 추가하고 다른 상태 전이를 보내기 조치에서 대기 상태에 추가하십시오.
    3. 정상 상태가 아닌 상태 전이를 마우스 오른쪽 단추로 클릭하고 트리거 > evMode를 선택하십시오.
    4. 아래쪽 보내기 조치를 두 번 클릭하여 기능 창을 여십시오. Target: con을 설정하고 Event: evNormal을 설정하십시오. 확인을 클릭하십시오.
    5. 상태 전이를 대기 상태에서 아래쪽 보내기 조치로 그리고 다른 상태 전이를 보내기 조치에서 정상 상태로 그리십시오. 보내기 조치 기호의 방향에 대해서는 고려하지 마십시오. 상태 전이의 방향만 고려하면 됩니다.
    6. 대기 상태가 아닌 상태 전이를 마우스 오른쪽 단추로 클릭하고 트리거 > evMode를 선택하십시오.
  10. 상태를 delegating_temperature 컴파트먼트의 왼쪽에 추가하고 이름을 유휴로 지정하십시오.
  11. 보내기 조치를 컴파트먼트의 오른쪽에 추가하십시오. Target: sen을 설정하고 Event: evRead을 설정하십시오. 확인을 클릭하십시오.
  12. 상태 전이를 유휴 상태에서 보내기 조치에 연결하십시오. 상태 전이를 마우스 오른쪽 단추로 클릭하고 트리거 > chTemperature를 선택하십시오.
  13. 상태 전이를 보내기 조치에서 유휴 상태에 연결하십시오.

상태 차트는 다음 예제와 같이 표시되어야 합니다.

ControlSystem 상태 차트 - 완료됨

전체 모델 시뮬레이션

전체 모델 시뮬레이션에 대한 구성을 생성하고 빌드하려면 다음을 수행하십시오.

  1. 시뮬레이션 > 전체 빌드를 선택하십시오.
  2. 출력 창의 빌드 페이지에서 "빌드 완료" 메시지를 검토하십시오.
  3. 모델이 "실행 중"임을 나타내는 메시지와 함께 DOS 창이 표시됩니다.
  4. 유휴 이동 단추 유휴 이동 단추를 클릭하여 시뮬레이션을 시작하십시오. 사용자가 애니메이션된 상태 차트와 기타 아티팩트를 설정하여 실행을 관찰할 수 있도록 시뮬레이션이 자동으로 중지됩니다.
  5. 도구 > 시뮬레이션된 상태 차트를 선택하고 ControlSystem 상태 차트 Context[0]->cs 인스턴스를 선택하십시오. 상태 차트를 확장하여 인스트루먼트 패널 요소를 표시하십시오.
  6. 도구 > 시뮬레이션된 상태 차트를 선택하고 제어기 상태 차트 Context[0]->cs->con 인스턴스를 선택하십시오.
  7. 도구 > 시뮬레이션된 상태 차트를 선택하고 작동 장치 상태 차트 Context[0]->cs->act 인스턴스를 선택하십시오. 또한 도구 > 시뮬레이션된 상태 차트를 선택하고 센서 상태 차트 Context[0]->cs->sen 인스턴스를 선택할 수 있지만 시뮬레이션 오퍼레이션에 이 다이어그램이 필요하지 않습니다.
  8. 창을 바둑판식으로 지정하여 상태 차트를 정렬하십시오. 확대/축소 인수를 75%까지 줄이고 차트에 있는 정보를 대부분 읽을 수 있습니다.
  9. 시뮬레이션 제어 패널에서 이동 단추 이동 단추를 클릭하여 애니메이션을 재개하고 제어기 상태 차트에서 패널 단추(전원 및 모드)를 사용하여 컴포넌트 레벨에서 시스템 동작을 구동하십시오. ControlSystem을 켜려면 전원 단추를 두 번 클릭해야 합니다.
  10. 브라우저에서 컴포넌트의 인스턴스에 대한 기능 창을 열어 온도 및 열 속성 값을 확인할 수 있습니다. 예를 들어, 브라우저에서 SystemUnderControl 블록의 Context[0]->s 인스턴스를 찾습니다. 인스턴스를 두 번 클릭하고 다음 예제에 표시된 대로 기능 창을 고정하십시오.
    Context[0]->s 인스턴스에 대한 기능 창

학습 체크포인트

이 학습에서 학습한 내용은 다음과 같습니다.
  • 두 상태 차트에 상위 레벨 동작 정의
  • 상태 전이 추가
  • 클래스 컴파트먼트에서 텍스트 표시 및 숨기기
  • 이전에 작성된 상태 차트 수정
  • 전체 모델 시뮬레이션 실행
학습서의 최종 학습에 모델에 정의한 소프트웨어 엔지니어에게 스펙을 제공하기 위해 사용할 수 있는 기술이 나열되어 있습니다.
< 이전 | 다음 >

피드백